| // Copyright (c) 2010 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 PPAPI_CPP_IMAGE_DATA_H_ |
| #define PPAPI_CPP_IMAGE_DATA_H_ |
| |
| #include "ppapi/c/ppb_image_data.h" |
| #include "ppapi/cpp/point.h" |
| #include "ppapi/cpp/size.h" |
| #include "ppapi/cpp/resource.h" |
| |
| namespace pp { |
| |
| class Instance; |
| class Plugin; |
| |
| class ImageData : public Resource { |
| public: |
| // Creates an is_null() ImageData object. |
| ImageData(); |
| |
| // This magic constructor is used when we've gotten a PP_Resource as a return |
| // value that has already been addref'ed for us. |
| struct PassRef {}; |
| ImageData(PassRef, PP_Resource resource); |
| |
| ImageData(const ImageData& other); |
| |
| // Allocates a new ImageData in the browser with the given parameters. The |
| // resulting object will be is_null() if the allocation failed. |
| ImageData(Instance* instance, |
| PP_ImageDataFormat format, |
| const Size& size, |
| bool init_to_zero); |
| |
| ImageData& operator=(const ImageData& other); |
| |
| // Returns the browser's preferred format for images. Using this format |
| // guarantees no extra conversions will occur when painting. |
| static PP_ImageDataFormat GetNativeImageDataFormat(); |
| |
| PP_ImageDataFormat format() const { return desc_.format; } |
| |
| pp::Size size() const { return desc_.size; } |
| int32_t stride() const { return desc_.stride; } |
| |
| void* data() const { return data_; } |
| |
| // Helper function to retrieve the address of the given pixel for 32-bit |
| // pixel formats. |
| const uint32_t* GetAddr32(const Point& coord) const; |
| uint32_t* GetAddr32(const Point& coord); |
| |
| private: |
| void PassRefAndInitData(PP_Resource resource); |
| |
| PP_ImageDataDesc desc_; |
| void* data_; |
| }; |
| |
| } // namespace pp |
| |
| #endif // PPAPI_CPP_IMAGE_DATA_H_ |