| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef WEBKIT_GLUE_PLUGINS_PEPPER_GRAPHICS_2D_H_ | 5 #ifndef WEBKIT_PLUGINS_PPAPI_PPB_GRAPHICS_2D_IMPL_H_ |
| 6 #define WEBKIT_GLUE_PLUGINS_PEPPER_GRAPHICS_2D_H_ | 6 #define WEBKIT_PLUGINS_PPAPI_PPB_GRAPHICS_2D_IMPL_H_ |
| 7 | 7 |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| 11 #include "ppapi/c/pp_completion_callback.h" | 11 #include "ppapi/c/pp_completion_callback.h" |
| 12 #include "ppapi/c/ppb_graphics_2d.h" | 12 #include "ppapi/c/ppb_graphics_2d.h" |
| 13 #include "third_party/WebKit/WebKit/chromium/public/WebCanvas.h" | 13 #include "third_party/WebKit/WebKit/chromium/public/WebCanvas.h" |
| 14 #include "webkit/glue/plugins/pepper_resource.h" | 14 #include "webkit/plugins/ppapi/resource.h" |
| 15 | 15 |
| 16 struct PPB_Graphics2D; | 16 struct PPB_Graphics2D; |
| 17 | 17 |
| 18 namespace gfx { | 18 namespace gfx { |
| 19 class Rect; | 19 class Rect; |
| 20 } | 20 } |
| 21 | 21 |
| 22 namespace pepper { | 22 namespace webkit { |
| 23 namespace ppapi { |
| 23 | 24 |
| 24 class ImageData; | 25 class PPB_ImageData_Impl; |
| 25 class PluginInstance; | 26 class PluginInstance; |
| 26 class PluginModule; | 27 class PluginModule; |
| 27 | 28 |
| 28 class Graphics2D : public Resource { | 29 class PPB_Graphics2D_Impl : public Resource { |
| 29 public: | 30 public: |
| 30 Graphics2D(PluginModule* module); | 31 PPB_Graphics2D_Impl(PluginModule* module); |
| 31 virtual ~Graphics2D(); | 32 virtual ~PPB_Graphics2D_Impl(); |
| 32 | 33 |
| 33 // Returns a pointer to the interface implementing PPB_ImageData that is | 34 // Returns a pointer to the interface implementing PPB_ImageData that is |
| 34 // exposed to the plugin. | 35 // exposed to the plugin. |
| 35 static const PPB_Graphics2D* GetInterface(); | 36 static const PPB_Graphics2D* GetInterface(); |
| 36 | 37 |
| 37 bool Init(int width, int height, bool is_always_opaque); | 38 bool Init(int width, int height, bool is_always_opaque); |
| 38 | 39 |
| 39 bool is_always_opaque() const { return is_always_opaque_; } | 40 bool is_always_opaque() const { return is_always_opaque_; } |
| 40 | 41 |
| 41 // Resource override. | 42 // Resource override. |
| 42 virtual Graphics2D* AsGraphics2D() { return this; } | 43 virtual PPB_Graphics2D_Impl* AsPPB_Graphics2D_Impl(); |
| 43 | 44 |
| 44 // PPB_Graphics2D functions. | 45 // PPB_Graphics2D functions. |
| 45 PP_Bool Describe(PP_Size* size, PP_Bool* is_always_opaque); | 46 PP_Bool Describe(PP_Size* size, PP_Bool* is_always_opaque); |
| 46 void PaintImageData(PP_Resource image_data, | 47 void PaintImageData(PP_Resource image_data, |
| 47 const PP_Point* top_left, | 48 const PP_Point* top_left, |
| 48 const PP_Rect* src_rect); | 49 const PP_Rect* src_rect); |
| 49 void Scroll(const PP_Rect* clip_rect, const PP_Point* amount); | 50 void Scroll(const PP_Rect* clip_rect, const PP_Point* amount); |
| 50 void ReplaceContents(PP_Resource image_data); | 51 void ReplaceContents(PP_Resource image_data); |
| 51 int32_t Flush(const PP_CompletionCallback& callback); | 52 int32_t Flush(const PP_CompletionCallback& callback); |
| 52 | 53 |
| 53 bool ReadImageData(PP_Resource image, const PP_Point* top_left); | 54 bool ReadImageData(PP_Resource image, const PP_Point* top_left); |
| 54 | 55 |
| 55 // Assciates this device with the given plugin instance. You can pass NULL to | 56 // Assciates this device with the given plugin instance. You can pass NULL to |
| 56 // clear the existing device. Returns true on success. In this case, a | 57 // clear the existing device. Returns true on success. In this case, a |
| 57 // repaint of the page will also be scheduled. Failure means that the device | 58 // repaint of the page will also be scheduled. Failure means that the device |
| 58 // is already bound to a different instance, and nothing will happen. | 59 // is already bound to a different instance, and nothing will happen. |
| 59 bool BindToInstance(PluginInstance* new_instance); | 60 bool BindToInstance(PluginInstance* new_instance); |
| 60 | 61 |
| 61 // Paints the current backing store to the web page. | 62 // Paints the current backing store to the web page. |
| 62 void Paint(WebKit::WebCanvas* canvas, | 63 void Paint(WebKit::WebCanvas* canvas, |
| 63 const gfx::Rect& plugin_rect, | 64 const gfx::Rect& plugin_rect, |
| 64 const gfx::Rect& paint_rect); | 65 const gfx::Rect& paint_rect); |
| 65 | 66 |
| 66 // Notifications that the view has rendered the page and that it has been | 67 // Notifications that the view has rendered the page and that it has been |
| 67 // flushed to the screen. These messages are used to send Flush callbacks to | 68 // flushed to the screen. These messages are used to send Flush callbacks to |
| 68 // the plugin. See | 69 // the plugin. See |
| 69 void ViewInitiatedPaint(); | 70 void ViewInitiatedPaint(); |
| 70 void ViewFlushedPaint(); | 71 void ViewFlushedPaint(); |
| 71 | 72 |
| 72 ImageData* image_data() { return image_data_.get(); } | 73 PPB_ImageData_Impl* image_data() { return image_data_.get(); } |
| 73 | 74 |
| 74 private: | 75 private: |
| 75 // Tracks a call to flush that requires a callback. | 76 // Tracks a call to flush that requires a callback. |
| 76 class FlushCallbackData { | 77 class FlushCallbackData { |
| 77 public: | 78 public: |
| 78 FlushCallbackData() { | 79 FlushCallbackData() { |
| 79 Clear(); | 80 Clear(); |
| 80 } | 81 } |
| 81 | 82 |
| 82 FlushCallbackData(const PP_CompletionCallback& callback) { | 83 FlushCallbackData(const PP_CompletionCallback& callback) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 99 | 100 |
| 100 private: | 101 private: |
| 101 PP_CompletionCallback callback_; | 102 PP_CompletionCallback callback_; |
| 102 }; | 103 }; |
| 103 | 104 |
| 104 // Called internally to execute the different queued commands. The | 105 // Called internally to execute the different queued commands. The |
| 105 // parameters to these functions will have already been validated. The last | 106 // parameters to these functions will have already been validated. The last |
| 106 // rect argument will be filled by each function with the area affected by | 107 // rect argument will be filled by each function with the area affected by |
| 107 // the update that requires invalidation. If there were no pixels changed, | 108 // the update that requires invalidation. If there were no pixels changed, |
| 108 // this rect can be untouched. | 109 // this rect can be untouched. |
| 109 void ExecutePaintImageData(ImageData* image, | 110 void ExecutePaintImageData(PPB_ImageData_Impl* image, |
| 110 int x, int y, | 111 int x, int y, |
| 111 const gfx::Rect& src_rect, | 112 const gfx::Rect& src_rect, |
| 112 gfx::Rect* invalidated_rect); | 113 gfx::Rect* invalidated_rect); |
| 113 void ExecuteScroll(const gfx::Rect& clip, int dx, int dy, | 114 void ExecuteScroll(const gfx::Rect& clip, int dx, int dy, |
| 114 gfx::Rect* invalidated_rect); | 115 gfx::Rect* invalidated_rect); |
| 115 void ExecuteReplaceContents(ImageData* image, | 116 void ExecuteReplaceContents(PPB_ImageData_Impl* image, |
| 116 gfx::Rect* invalidated_rect); | 117 gfx::Rect* invalidated_rect); |
| 117 | 118 |
| 118 // Schedules the offscreen callback to be fired at a future time. This | 119 // Schedules the offscreen callback to be fired at a future time. This |
| 119 // will add the given item to the offscreen_flush_callbacks_ vector. | 120 // will add the given item to the offscreen_flush_callbacks_ vector. |
| 120 void ScheduleOffscreenCallback(const FlushCallbackData& callback); | 121 void ScheduleOffscreenCallback(const FlushCallbackData& callback); |
| 121 | 122 |
| 122 // Function scheduled to execute by ScheduleOffscreenCallback that actually | 123 // Function scheduled to execute by ScheduleOffscreenCallback that actually |
| 123 // issues the offscreen callbacks. | 124 // issues the offscreen callbacks. |
| 124 void ExecuteOffscreenCallback(FlushCallbackData data); | 125 void ExecuteOffscreenCallback(FlushCallbackData data); |
| 125 | 126 |
| 126 // Returns true if there is any type of flush callback pending. | 127 // Returns true if there is any type of flush callback pending. |
| 127 bool HasPendingFlush() const; | 128 bool HasPendingFlush() const; |
| 128 | 129 |
| 129 scoped_refptr<ImageData> image_data_; | 130 scoped_refptr<PPB_ImageData_Impl> image_data_; |
| 130 | 131 |
| 131 // Non-owning pointer to the plugin instance this context is currently bound | 132 // Non-owning pointer to the plugin instance this context is currently bound |
| 132 // to, if any. If the context is currently unbound, this will be NULL. | 133 // to, if any. If the context is currently unbound, this will be NULL. |
| 133 PluginInstance* bound_instance_; | 134 PluginInstance* bound_instance_; |
| 134 | 135 |
| 135 // Keeps track of all drawing commands queued before a Flush call. | 136 // Keeps track of all drawing commands queued before a Flush call. |
| 136 struct QueuedOperation; | 137 struct QueuedOperation; |
| 137 typedef std::vector<QueuedOperation> OperationQueue; | 138 typedef std::vector<QueuedOperation> OperationQueue; |
| 138 OperationQueue queued_operations_; | 139 OperationQueue queued_operations_; |
| 139 | 140 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 165 | 166 |
| 166 // When doing offscreen flushes, we issue a task that issues the callback | 167 // When doing offscreen flushes, we issue a task that issues the callback |
| 167 // later. This is set when one of those tasks is pending so that we can | 168 // later. This is set when one of those tasks is pending so that we can |
| 168 // enforce the "only one pending flush at a time" constraint in the API. | 169 // enforce the "only one pending flush at a time" constraint in the API. |
| 169 bool offscreen_flush_pending_; | 170 bool offscreen_flush_pending_; |
| 170 | 171 |
| 171 // Set to true if the plugin declares that this device will always be opaque. | 172 // Set to true if the plugin declares that this device will always be opaque. |
| 172 // This allows us to do more optimized painting in some cases. | 173 // This allows us to do more optimized painting in some cases. |
| 173 bool is_always_opaque_; | 174 bool is_always_opaque_; |
| 174 | 175 |
| 175 DISALLOW_COPY_AND_ASSIGN(Graphics2D); | 176 DISALLOW_COPY_AND_ASSIGN(PPB_Graphics2D_Impl); |
| 176 }; | 177 }; |
| 177 | 178 |
| 178 } // namespace pepper | 179 } // namespace ppapi |
| 180 } // namespace webkit |
| 179 | 181 |
| 180 #endif // WEBKIT_GLUE_PLUGINS_PEPPER_GRAPHICS_2D_H_ | 182 #endif // WEBKIT_PLUGINS_PPAPI_PPB_GRAPHICS_2D_IMPL_H_ |
| OLD | NEW |