Chromium Code Reviews| Index: webkit/plugins/ppapi/ppb_image_data_impl.h |
| diff --git a/webkit/plugins/ppapi/ppb_image_data_impl.h b/webkit/plugins/ppapi/ppb_image_data_impl.h |
| index 817b238fcca0b38ff0869b22e0c9a4bfc4c768e6..d84ce9384cb5b3dc1dd3b2b798506c336d4b00a4 100644 |
| --- a/webkit/plugins/ppapi/ppb_image_data_impl.h |
| +++ b/webkit/plugins/ppapi/ppb_image_data_impl.h |
| @@ -11,6 +11,7 @@ |
| #include "ppapi/shared_impl/ppb_image_data_shared.h" |
| #include "ppapi/shared_impl/resource.h" |
| #include "ppapi/thunk/ppb_image_data_api.h" |
| +#include "third_party/skia/include/core/SkCanvas.h" |
| #include "webkit/plugins/ppapi/plugin_delegate.h" |
| #include "webkit/plugins/webkit_plugins_export.h" |
| @@ -30,33 +31,42 @@ class PPB_ImageData_Impl : public ::ppapi::Resource, |
| // If you call this constructor, you must also call Init before use. Normally |
| // you should use the static Create function, but this constructor is needed |
| // for some internal uses of ImageData (like Graphics2D). |
| - WEBKIT_PLUGINS_EXPORT explicit PPB_ImageData_Impl(PP_Instance instance); |
| + enum ImageDataType { PLATFORM, NACL }; |
| + WEBKIT_PLUGINS_EXPORT PPB_ImageData_Impl(PP_Instance instance, |
| + ImageDataType type); |
| virtual ~PPB_ImageData_Impl(); |
| - static PP_Resource Create(PP_Instance pp_instance, |
| - PP_ImageDataFormat format, |
| - const PP_Size& size, |
| - PP_Bool init_to_zero); |
| - |
| WEBKIT_PLUGINS_EXPORT bool Init(PP_ImageDataFormat format, |
| int width, int height, |
| bool init_to_zero); |
| + // Create an ImageData backed by a PlatformCanvas. You must use this if you |
| + // intend the ImageData to be usable in platform-specific APIs (like font |
| + // rendering or rendering widgets like scrollbars). |
| + static PP_Resource CreatePlatform(PP_Instance pp_instance, |
| + PP_ImageDataFormat format, |
| + const PP_Size& size, |
| + PP_Bool init_to_zero); |
| + // Use this to create an ImageData for use with NaCl. This is backed by a |
|
brettw
2012/07/20 21:57:04
I'd probably put a blank line here.
|
| + // simple shared memory buffer. |
| + static PP_Resource CreateNaCl(PP_Instance pp_instance, |
| + PP_ImageDataFormat format, |
| + const PP_Size& size, |
| + PP_Bool init_to_zero); |
| + |
| int width() const { return width_; } |
| int height() const { return height_; } |
| // Returns the image format. |
| PP_ImageDataFormat format() const { return format_; } |
| + // Resource override. |
|
brettw
2012/07/20 21:57:04
I'm not sure why you moved this.
dmichael (off chromium)
2012/07/20 22:32:40
Just a casualty of lots of churn in the file. Move
|
| + virtual ::ppapi::thunk::PPB_ImageData_API* AsPPB_ImageData_API() OVERRIDE; |
| + |
| // Returns true if this image is mapped. False means that the image is either |
| // invalid or not mapped. See ImageDataAutoMapper below. |
| - bool is_mapped() const { return !!mapped_canvas_.get(); } |
| - |
| - PluginDelegate::PlatformImage2D* platform_image() const { |
| - return platform_image_.get(); |
| - } |
| - |
| - virtual ::ppapi::thunk::PPB_ImageData_API* AsPPB_ImageData_API() OVERRIDE; |
| + WEBKIT_PLUGINS_EXPORT bool IsMapped() const; |
|
brettw
2012/07/20 21:57:04
I'd probably just annotate this whole class as exp
dmichael (off chromium)
2012/07/20 22:32:40
Done.
|
| + PluginDelegate::PlatformImage2D* PlatformImage() const; |
| // PPB_ImageData_API implementation. |
| virtual PP_Bool Describe(PP_ImageDataDesc* desc) OVERRIDE; |
| @@ -64,12 +74,57 @@ class PPB_ImageData_Impl : public ::ppapi::Resource, |
| virtual void Unmap() OVERRIDE; |
| virtual int32_t GetSharedMemory(int* handle, uint32_t* byte_count) OVERRIDE; |
| virtual skia::PlatformCanvas* GetPlatformCanvas() OVERRIDE; |
| + virtual SkCanvas* GetCanvas() OVERRIDE; |
| const SkBitmap* GetMappedBitmap() const; |
| // Swaps the guts of this image data with another. |
| void Swap(PPB_ImageData_Impl* other); |
| + // We delegate most of our implementation to a class that either uses a |
|
brettw
2012/07/20 21:57:04
Since this is a typedef it should be first (before
|
| + // PlatformCanvas (for most trusted stuff) or bare shared memory (for use by |
| + // NaCl). This makes it cheap & easy to implement Swap. |
| + class Delegate { |
|
brettw
2012/07/20 21:57:04
I don't really feel like this is a "delegate" the
dmichael (off chromium)
2012/07/20 22:32:40
Yeah... I was thinking of it as "pImpl" pattern,
|
| + public: |
| + virtual ~Delegate() {}; |
| + virtual bool Init(PPB_ImageData_Impl* impl, PP_ImageDataFormat format, |
| + int width, int height, bool init_to_zero) = 0; |
| + virtual bool IsMapped() const = 0; |
| + virtual PluginDelegate::PlatformImage2D* PlatformImage() const = 0; |
| + virtual void* Map() = 0; |
| + virtual void Unmap() = 0; |
| + virtual int32_t GetSharedMemory(int* handle, uint32_t* byte_count) = 0; |
| + virtual skia::PlatformCanvas* GetPlatformCanvas() = 0; |
| + virtual SkCanvas* GetCanvas() = 0; |
| + virtual const SkBitmap* GetMappedBitmap() const = 0; |
| + }; |
| + |
| + private: |
| + PP_ImageDataFormat format_; |
| + int width_; |
| + int height_; |
| + scoped_ptr<Delegate> delegate_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(PPB_ImageData_Impl); |
| +}; |
| + |
| +class ImageDataPlatformDelegate : public PPB_ImageData_Impl::Delegate { |
| + public: |
| + ImageDataPlatformDelegate(); |
| + virtual ~ImageDataPlatformDelegate(); |
| + |
| + // PPB_ImageData_Impl::Delegate implementation. |
| + virtual bool Init(PPB_ImageData_Impl* impl, PP_ImageDataFormat format, |
| + int width, int height, bool init_to_zero) OVERRIDE; |
| + virtual bool IsMapped() const OVERRIDE; |
| + virtual PluginDelegate::PlatformImage2D* PlatformImage() const OVERRIDE; |
| + virtual void* Map() OVERRIDE; |
| + virtual void Unmap() OVERRIDE; |
| + virtual int32_t GetSharedMemory(int* handle, uint32_t* byte_count) OVERRIDE; |
| + virtual skia::PlatformCanvas* GetPlatformCanvas() OVERRIDE; |
| + virtual SkCanvas* GetCanvas() OVERRIDE; |
| + virtual const SkBitmap* GetMappedBitmap() const OVERRIDE; |
| + |
| private: |
| // This will be NULL before initialization, and if this PPB_ImageData_Impl is |
| // swapped with another. |
| @@ -78,11 +133,34 @@ class PPB_ImageData_Impl : public ::ppapi::Resource, |
| // When the device is mapped, this is the image. Null when umapped. |
| scoped_ptr<skia::PlatformCanvas> mapped_canvas_; |
| - PP_ImageDataFormat format_; |
| - int width_; |
| - int height_; |
| + DISALLOW_COPY_AND_ASSIGN(ImageDataPlatformDelegate); |
| +}; |
| - DISALLOW_COPY_AND_ASSIGN(PPB_ImageData_Impl); |
| +class ImageDataNaClDelegate : public PPB_ImageData_Impl::Delegate { |
| + public: |
| + ImageDataNaClDelegate(); |
| + virtual ~ImageDataNaClDelegate(); |
| + |
| + // PPB_ImageData_Impl::Delegate implementation. |
| + bool Init(PPB_ImageData_Impl* impl, PP_ImageDataFormat format, |
| + int width, int height, bool init_to_zero) OVERRIDE; |
| + virtual bool IsMapped() const OVERRIDE; |
| + PluginDelegate::PlatformImage2D* PlatformImage() const OVERRIDE; |
| + virtual void* Map() OVERRIDE; |
| + virtual void Unmap() OVERRIDE; |
| + virtual int32_t GetSharedMemory(int* handle, uint32_t* byte_count) OVERRIDE; |
| + virtual skia::PlatformCanvas* GetPlatformCanvas() OVERRIDE; |
| + virtual SkCanvas* GetCanvas() OVERRIDE; |
| + virtual const SkBitmap* GetMappedBitmap() const OVERRIDE; |
| + |
| + private: |
| + scoped_ptr<base::SharedMemory> shared_memory_; |
| + // skia_bitmap_ is backed by shared_memory_. |
| + SkBitmap skia_bitmap_; |
| + SkCanvas skia_canvas_; |
| + uint32 map_count_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(ImageDataNaClDelegate); |
| }; |
| // Manages mapping an image resource if necessary. Use this to ensure the |
| @@ -99,7 +177,7 @@ class ImageDataAutoMapper { |
| public: |
| explicit ImageDataAutoMapper(PPB_ImageData_Impl* image_data) |
| : image_data_(image_data) { |
| - if (image_data_->is_mapped()) { |
| + if (image_data_->IsMapped()) { |
| is_valid_ = true; |
| needs_unmap_ = false; |
| } else { |