| Index: webkit/glue/plugins/pepper_image_data.h
|
| ===================================================================
|
| --- webkit/glue/plugins/pepper_image_data.h (revision 48097)
|
| +++ webkit/glue/plugins/pepper_image_data.h (working copy)
|
| @@ -5,13 +5,12 @@
|
| #ifndef WEBKIT_GLUE_PLUGINS_PEPPER_IMAGE_DATA_H_
|
| #define WEBKIT_GLUE_PLUGINS_PEPPER_IMAGE_DATA_H_
|
|
|
| +#include "base/basictypes.h"
|
| #include "base/scoped_ptr.h"
|
| #include "third_party/ppapi/c/ppb_image_data.h"
|
| #include "webkit/glue/plugins/pepper_plugin_delegate.h"
|
| #include "webkit/glue/plugins/pepper_resource.h"
|
|
|
| -typedef struct _ppb_ImageData PPB_ImageData;
|
| -
|
| namespace skia {
|
| class PlatformCanvas;
|
| }
|
| @@ -30,10 +29,16 @@
|
| int width() const { return width_; }
|
| int height() const { return height_; }
|
|
|
| - // Returns true if this image is valid and can be used. False means that the
|
| - // image is invalid and can't be used.
|
| - bool is_valid() const { return !!platform_image_.get(); }
|
| + // Returns the image format. Currently there is only one format so this
|
| + // always returns the same thing. But if you care about the formation, you
|
| + // should probably check this so when we support multiple formats, we can't
|
| + // forget to update your code.
|
| + PP_ImageDataFormat format() const { return PP_IMAGEDATAFORMAT_BGRA_PREMUL; }
|
|
|
| + // 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(); }
|
| +
|
| // Returns a pointer to the interface implementing PPB_ImageData that is
|
| // exposed to the plugin.
|
| static const PPB_ImageData* GetInterface();
|
| @@ -49,10 +54,10 @@
|
| void* Map();
|
| void Unmap();
|
|
|
| + // The mapped bitmap and canvas will be NULL if the image is not mapped.
|
| skia::PlatformCanvas* mapped_canvas() const { return mapped_canvas_.get(); }
|
| + const SkBitmap* GetMappedBitmap() const;
|
|
|
| - const SkBitmap& GetMappedBitmap() const;
|
| -
|
| // Swaps the guts of this image data with another.
|
| void Swap(ImageData* other);
|
|
|
| @@ -70,6 +75,44 @@
|
| DISALLOW_COPY_AND_ASSIGN(ImageData);
|
| };
|
|
|
| +// Manages mapping an image resource if necessary. Use this to ensure the
|
| +// image is mapped. The destructor will put the image back into the previous
|
| +// state. You must check is_valid() to make sure the image was successfully
|
| +// mapped before using it.
|
| +//
|
| +// Example:
|
| +// ImageDataAutoMapper mapper(image_data);
|
| +// if (!mapper.is_valid())
|
| +// return utter_failure;
|
| +// image_data->mapped_canvas()->blah(); // Guaranteed valid.
|
| +class ImageDataAutoMapper {
|
| + public:
|
| + ImageDataAutoMapper(ImageData* image_data) : image_data_(image_data) {
|
| + if (image_data_->is_mapped()) {
|
| + is_valid_ = true;
|
| + needs_unmap_ = false;
|
| + } else {
|
| + is_valid_ = needs_unmap_ = !!image_data_->Map();
|
| + }
|
| + }
|
| +
|
| + ~ImageDataAutoMapper() {
|
| + if (needs_unmap_)
|
| + image_data_->Unmap();
|
| + }
|
| +
|
| + // Check this to see if the image was successfully mapped. If this is false,
|
| + // the image could not be mapped and is unusable.
|
| + bool is_valid() const { return is_valid_; }
|
| +
|
| + private:
|
| + ImageData* image_data_;
|
| + bool is_valid_;
|
| + bool needs_unmap_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ImageDataAutoMapper);
|
| +};
|
| +
|
| } // namespace pepper
|
|
|
| #endif // WEBKIT_GLUE_PLUGINS_PEPPER_IMAGE_DATA_H_
|
|
|