0
Files
src/ppapi/cpp/instance.h
alokp@chromium.org 900b20d4a4 Added ppapi::Surface3D. This CL completes the new Pepper3D interface. The implementation is still incomplete but all gpu demos still work!
Review URL: http://codereview.chromium.org/6047008

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@70229 0039d316-1c4b-4281-b951-d872f2087c98
2010-12-28 18:02:10 +00:00

160 lines
4.4 KiB
C++

// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef PPAPI_CPP_INSTANCE_H_
#define PPAPI_CPP_INSTANCE_H_
/**
* @file
* Defines the API ...
*
* @addtogroup CPP
* @{
*/
#include <map>
#include <string>
#include "ppapi/c/pp_instance.h"
#include "ppapi/c/pp_resource.h"
#include "ppapi/c/pp_stdint.h"
struct PP_InputEvent;
/** The C++ interface to the Pepper API. */
namespace pp {
class Graphics2D;
class ImageData;
class Point;
class Rect;
class Rect;
class Resource;
class Surface3D_Dev;
class URLLoader;
class Var;
class Widget_Dev;
class Instance {
public:
explicit Instance(PP_Instance instance);
virtual ~Instance();
PP_Instance pp_instance() const { return pp_instance_; }
/**
* Initializes this plugin with the given arguments.
* @param argc The argument count
* @param argn The argument names
* @param argv The argument values
* @return True on success. Returning false causes the plugin
* instance to be deleted and no other functions to be called.
*/
virtual bool Init(uint32_t argc, const char* argn[], const char* argv[]);
// @{
/** @name PPP_Instance methods for the plugin to override: */
/** See PPP_Instance.DidChangeView. */
virtual void DidChangeView(const Rect& position, const Rect& clip);
/** See PPP_Instance.DidChangeFocus. */
virtual void DidChangeFocus(bool has_focus);
/** See PPP_Instance.HandleInputEvent. */
virtual bool HandleInputEvent(const PP_InputEvent& event);
/** See PPP_Instance.HandleDocumentLoad. */
virtual bool HandleDocumentLoad(const URLLoader& url_loader);
/** See PPP_Instance.GetInstanceObject. */
virtual Var GetInstanceObject();
/** See PPP_Instance.GetSelectedText. */
virtual Var GetSelectedText(bool html);
// @}
// @{
/** @name PPB_Instance methods for querying the browser: */
/** See PPB_Instance.GetWindowObject. */
Var GetWindowObject();
/** See PPB_Instance.GetOwnerElementObject. */
Var GetOwnerElementObject();
/** See PPB_Instance.BindGraphics. */
bool BindGraphics(const Graphics2D& graphics);
/** See PPB_Instance.BindGraphics. */
bool BindGraphics(const Surface3D_Dev& graphics);
/** See PPB_Instance.IsFullFrame. */
bool IsFullFrame();
/** See PPB_Instance.ExecuteScript. */
Var ExecuteScript(const Var& script, Var* exception = NULL);
// @}
/**
* Associates a plugin instance with an interface,
* creating an object... {PENDING: clarify!}
*
* Many optional interfaces are associated with a plugin instance. For
* example, the find in PPP_Find interface receives updates on a per-instance
* basis. This "per-instance" tracking allows such objects to associate
* themselves with an instance as "the" handler for that interface name.
*
* In the case of the find example, the find object registers with its
* associated instance in its constructor and unregisters in its destructor.
* Then whenever it gets updates with a PP_Instance parameter, it can
* map back to the find object corresponding to that given PP_Instance by
* calling GetPerInstanceObject.
*
* This lookup is done on a per-interface-name basis. This means you can
* only have one object of a given interface name associated with an
* instance.
*
* If you are adding a handler for an additional interface, be sure to
* register with the module (AddPluginInterface) for your interface name to
* get the C calls in the first place.
*
* @see RemovePerInstanceObject
* @see GetPerInstanceObject
*/
void AddPerInstanceObject(const std::string& interface_name, void* object);
/**
* {PENDING: summarize Remove method here}
*
* @see AddPerInstanceObject
*/
void RemovePerInstanceObject(const std::string& interface_name, void* object);
/**
* Look up an object previously associated with an instance. Returns NULL
* if the instance is invalid or there is no object for the given interface
* name on the instance.
*
* @see AddPerInstanceObject
*/
static void* GetPerInstanceObject(PP_Instance instance,
const std::string& interface_name);
private:
PP_Instance pp_instance_;
typedef std::map<std::string, void*> InterfaceNameToObjectMap;
InterfaceNameToObjectMap interface_name_to_objects_;
};
} // namespace pp
/**
* @}
* End addtogroup CPP
*/
#endif // PPAPI_CPP_INSTANCE_H_