Index: webkit/plugins/ppapi/ppb_graphics_2d_impl.h |
diff --git a/webkit/plugins/ppapi/ppb_graphics_2d_impl.h b/webkit/plugins/ppapi/ppb_graphics_2d_impl.h |
deleted file mode 100644 |
index ba2a7dfb349a5680c1ebae81a994659ff7fe55b9..0000000000000000000000000000000000000000 |
--- a/webkit/plugins/ppapi/ppb_graphics_2d_impl.h |
+++ /dev/null |
@@ -1,222 +0,0 @@ |
-// Copyright (c) 2012 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 WEBKIT_PLUGINS_PPAPI_PPB_GRAPHICS_2D_IMPL_H_ |
-#define WEBKIT_PLUGINS_PPAPI_PPB_GRAPHICS_2D_IMPL_H_ |
- |
-#include <vector> |
- |
-#include "base/basictypes.h" |
-#include "base/memory/weak_ptr.h" |
-#include "ppapi/c/pp_completion_callback.h" |
-#include "ppapi/c/ppb_graphics_2d.h" |
-#include "ppapi/shared_impl/resource.h" |
-#include "ppapi/shared_impl/tracked_callback.h" |
-#include "ppapi/thunk/ppb_graphics_2d_api.h" |
-#include "third_party/WebKit/Source/Platform/chromium/public/WebCanvas.h" |
-#include "webkit/plugins/webkit_plugins_export.h" |
- |
-namespace gfx { |
-class Point; |
-class Rect; |
-} |
- |
-namespace content { |
-class PepperGraphics2DHost; |
-} |
- |
-namespace webkit { |
-namespace ppapi { |
- |
-class PPB_ImageData_Impl; |
-class PluginInstance; |
- |
-class WEBKIT_PLUGINS_EXPORT PPB_Graphics2D_Impl : |
- public ::ppapi::Resource, |
- public ::ppapi::thunk::PPB_Graphics2D_API { |
- public: |
- virtual ~PPB_Graphics2D_Impl(); |
- |
- static PP_Resource Create(PP_Instance instance, |
- const PP_Size& size, |
- PP_Bool is_always_opaque); |
- |
- bool is_always_opaque() const { return is_always_opaque_; } |
- |
- // Resource overrides. |
- virtual ::ppapi::thunk::PPB_Graphics2D_API* AsPPB_Graphics2D_API(); |
- virtual void LastPluginRefWasDeleted() OVERRIDE; |
- |
- // PPB_Graphics2D functions. |
- virtual PP_Bool Describe(PP_Size* size, PP_Bool* is_always_opaque) OVERRIDE; |
- virtual void PaintImageData(PP_Resource image_data, |
- const PP_Point* top_left, |
- const PP_Rect* src_rect) OVERRIDE; |
- virtual void Scroll(const PP_Rect* clip_rect, |
- const PP_Point* amount) OVERRIDE; |
- virtual void ReplaceContents(PP_Resource image_data) OVERRIDE; |
- virtual bool SetScale(float scale) OVERRIDE; |
- virtual float GetScale() OVERRIDE; |
- virtual int32_t Flush( |
- scoped_refptr< ::ppapi::TrackedCallback> callback, |
- PP_Resource* old_image_data) OVERRIDE; |
- |
- bool ReadImageData(PP_Resource image, const PP_Point* top_left); |
- |
- // 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 about the view's progress painting. See PluginInstance. |
- // These messages are used to send Flush callbacks to the plugin. |
- void ViewWillInitiatePaint(); |
- void ViewInitiatedPaint(); |
- void ViewFlushedPaint(); |
- |
- PPB_ImageData_Impl* image_data() { return image_data_.get(); } |
- PluginInstance* bound_instance() const { return bound_instance_; } |
- |
- // Scale |op_rect| to logical pixels, taking care to include partially- |
- // covered logical pixels (aka DIPs). Also scale optional |delta| to logical |
- // pixels as well for scrolling cases. Returns false for scrolling cases where |
- // scaling either |op_rect| or |delta| would require scrolling to fall back to |
- // invalidation due to rounding errors, true otherwise. |
- static bool ConvertToLogicalPixels(float scale, |
- gfx::Rect* op_rect, |
- gfx::Point* delta); |
- |
- private: |
- explicit PPB_Graphics2D_Impl(PP_Instance instance); |
- |
- bool Init(int width, int height, bool is_always_opaque); |
- |
- // Tracks a call to flush that requires a callback. |
- class FlushCallbackData { |
- public: |
- FlushCallbackData() { |
- Clear(); |
- } |
- |
- explicit FlushCallbackData( |
- scoped_refptr< ::ppapi::TrackedCallback> callback) { |
- Set(callback); |
- } |
- |
- bool is_null() const { |
- return !::ppapi::TrackedCallback::IsPending(callback_); |
- } |
- |
- void Set(scoped_refptr< ::ppapi::TrackedCallback> callback) { |
- callback_ = callback; |
- } |
- |
- void Clear() { |
- callback_ = NULL; |
- } |
- |
- void Execute(int32_t result) { |
- callback_->Run(result); |
- } |
- |
- void PostAbort() { |
- if (!is_null()) { |
- callback_->PostAbort(); |
- Clear(); |
- } |
- } |
- |
- private: |
- scoped_refptr< ::ppapi::TrackedCallback> callback_; |
- }; |
- |
- // Called internally to execute the different queued commands. The |
- // 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(PPB_ImageData_Impl* image, |
- int x, int y, |
- 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(PPB_ImageData_Impl* image, |
- gfx::Rect* invalidated_rect, |
- PP_Resource* old_image_data); |
- |
- // 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); |
- |
- // Returns true if there is any type of flush callback pending. |
- bool HasPendingFlush() const; |
- |
- scoped_refptr<PPB_ImageData_Impl> image_data_; |
- |
- // Non-owning pointer to the plugin instance this context is currently bound |
- // to, if any. If the 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_; |
- |
- // The plugin can give us one "Flush" at a time. This flush will either be in |
- // the "unpainted" state (in which case unpainted_flush_callback_ will be |
- // non-NULL) or painted, in which case painted_flush_callback_ will be |
- // non-NULL). There can also be an offscreen callback which is handled |
- // separately (see offscreen_callback_pending_). Only one of these three |
- // things may be set at a time to enforce the "only one pending flush at a |
- // time" constraint. |
- // |
- // "Unpainted" ones are flush 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 flushes 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 the paint, we move |
- // it to the painted callback. When the renderer receives a flush, we execute |
- // and clear the painted callback. This helps avoid the callback being called |
- // prematurely in response to flush notifications for a previous update. |
- FlushCallbackData unpainted_flush_callback_; |
- FlushCallbackData painted_flush_callback_; |
- |
- // When doing offscreen flushes, we issue a task that issues the callback |
- // later. This is set when one of those tasks is pending so that we can |
- // enforce the "only one pending flush at a time" constraint in the API. |
- bool offscreen_flush_pending_; |
- |
- // Set to true if the plugin declares that this device will always be opaque. |
- // This allows us to do more optimized painting in some cases. |
- bool is_always_opaque_; |
- |
- // Set to the scale between what the plugin considers to be one pixel and one |
- // DIP |
- float scale_; |
- |
- base::WeakPtrFactory<PPB_Graphics2D_Impl> weak_ptr_factory_; |
- |
- friend class content::PepperGraphics2DHost; |
- DISALLOW_COPY_AND_ASSIGN(PPB_Graphics2D_Impl); |
-}; |
- |
-} // namespace ppapi |
-} // namespace webkit |
- |
-#endif // WEBKIT_PLUGINS_PPAPI_PPB_GRAPHICS_2D_IMPL_H_ |