| Index: webkit/glue/plugins/pepper_device_context_2d.h
|
| ===================================================================
|
| --- webkit/glue/plugins/pepper_device_context_2d.h (revision 49266)
|
| +++ webkit/glue/plugins/pepper_device_context_2d.h (working copy)
|
| @@ -21,6 +21,7 @@
|
| namespace pepper {
|
|
|
| class ImageData;
|
| +class PluginInstance;
|
| class PluginModule;
|
|
|
| class DeviceContext2D : public Resource {
|
| @@ -48,26 +49,91 @@
|
| void* callback_data);
|
| bool ReadImageData(PP_Resource image, int32_t x, int32_t y);
|
|
|
| + // Assciates this device with the given plugin instance. You can pass NULL to
|
| + // clear the existing device. Returns true on success. In this case, a
|
| + // repaint of the page will also be scheduled. Failure means that the device
|
| + // is already bound to a different instance, and nothing will happen.
|
| + bool BindToInstance(PluginInstance* new_instance);
|
| +
|
| + // Paints the current backing store to the web page.
|
| void Paint(WebKit::WebCanvas* canvas,
|
| const gfx::Rect& plugin_rect,
|
| const gfx::Rect& paint_rect);
|
|
|
| + // Notifications that the view has rendered the page and that it has been
|
| + // flushed to the screen. These messages are used to send Flush callbacks to
|
| + // the plugin. See
|
| + void ViewInitiatedPaint();
|
| + void ViewFlushedPaint();
|
| +
|
| private:
|
| + // Tracks a call to flush that requires a callback.
|
| + // See unpainted_flush_callbacks_ below.
|
| + class FlushCallbackData {
|
| + public:
|
| + FlushCallbackData(PPB_DeviceContext2D_FlushCallback c, void* d);
|
| +
|
| + void Execute(PP_Resource device_context);
|
| +
|
| + private:
|
| + PPB_DeviceContext2D_FlushCallback callback_;
|
| + void* callback_data_;
|
| + };
|
| + typedef std::vector<FlushCallbackData> FlushCallbackVector;
|
| +
|
| // Called internally to execute the different queued commands. The
|
| - // parameters to these functions will have already been validated.
|
| + // parameters to these functions will have already been validated. The last
|
| + // rect argument will be filled by each function with the area affected by
|
| + // the update that requires invalidation. If there were no pixels changed,
|
| + // this rect can be untouched.
|
| void ExecutePaintImageData(ImageData* image,
|
| int x, int y,
|
| - const gfx::Rect& src_rect);
|
| - void ExecuteScroll(const gfx::Rect& clip, int dx, int dy);
|
| - void ExecuteReplaceContents(ImageData* image);
|
| + const gfx::Rect& src_rect,
|
| + gfx::Rect* invalidated_rect);
|
| + void ExecuteScroll(const gfx::Rect& clip, int dx, int dy,
|
| + gfx::Rect* invalidated_rect);
|
| + void ExecuteReplaceContents(ImageData* image,
|
| + gfx::Rect* invalidated_rect);
|
|
|
| + // Schedules the offscreen callback to be fired at a future time. This
|
| + // will add the given item to the offscreen_flush_callbacks_ vector.
|
| + void ScheduleOffscreenCallback(const FlushCallbackData& callback);
|
| +
|
| + // Function scheduled to execute by ScheduleOffscreenCallback that actually
|
| + // issues the offscreen callbacks.
|
| + void ExecuteOffscreenCallback(FlushCallbackData data);
|
| +
|
| scoped_refptr<ImageData> image_data_;
|
|
|
| + // Non-owning pointer to the plugin instance this device context is currently
|
| + // bound to, if any. If the device context is currently unbound, this will
|
| + // be NULL.
|
| + PluginInstance* bound_instance_;
|
| +
|
| // Keeps track of all drawing commands queued before a Flush call.
|
| struct QueuedOperation;
|
| typedef std::vector<QueuedOperation> OperationQueue;
|
| OperationQueue queued_operations_;
|
|
|
| + // Indicates whether any changes have been flushed to the backing store.
|
| + // This is initially false and is set to true at the first Flush() call.
|
| + bool flushed_any_data_;
|
| +
|
| + // The plugin may be constantly giving us paint messages. "Unpainted" ones
|
| + // are paint requests which have never been painted. These could have been
|
| + // done while the RenderView was already waiting for an ACK from a previous
|
| + // paint, so won't generate a new one yet.
|
| + //
|
| + // "Painted" ones are those paints that have been painted by RenderView, but
|
| + // for which the ACK from the browser has not yet been received.
|
| + //
|
| + // When we get updates from a plugin with a callback, it is first added to
|
| + // the unpainted callbacks. When the renderer has initiated a paint, we'll
|
| + // move it to the painted callbacks list. When the renderer receives a flush,
|
| + // we'll execute the callback and remove it from the list.
|
| + FlushCallbackVector unpainted_flush_callbacks_;
|
| + FlushCallbackVector painted_flush_callbacks_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(DeviceContext2D);
|
| };
|
|
|
|
|