| Index: include/core/SkBitmap.h
|
| diff --git a/include/core/SkBitmap.h b/include/core/SkBitmap.h
|
| index 2b900bef341ddbc678714c758b8c7d81e9abec0c..fe0fc0f9c1b9483542394099f28442a61bdbf282 100644
|
| --- a/include/core/SkBitmap.h
|
| +++ b/include/core/SkBitmap.h
|
| @@ -347,18 +347,41 @@ public:
|
| */
|
| bool allocPixels(Allocator* allocator, SkColorTable* ctable);
|
|
|
| - /** Return the current pixelref object, if any
|
| - */
|
| + /**
|
| + * Return the current pixelref object or NULL if there is none. This does
|
| + * not affect the refcount of the pixelref.
|
| + */
|
| SkPixelRef* pixelRef() const { return fPixelRef; }
|
| - /** Return the offset into the pixelref, if any. Will return 0 if there is
|
| - no pixelref installed.
|
| - */
|
| - size_t pixelRefOffset() const { return fPixelRefOffset; }
|
| - /** Assign a pixelref and optional offset. Pixelrefs are reference counted,
|
| - so the existing one (if any) will be unref'd and the new one will be
|
| - ref'd.
|
| - */
|
| - SkPixelRef* setPixelRef(SkPixelRef* pr, size_t offset = 0);
|
| +
|
| + /**
|
| + * A bitmap can reference a subset of a pixelref's pixels. That means the
|
| + * bitmap's width/height can be <= the dimensions of the pixelref. The
|
| + * pixelref origin is the x,y location within the pixelref's pixels for
|
| + * the bitmap's top/left corner. To be valid the following must be true:
|
| + *
|
| + * origin_x + bitmap_width <= pixelref_width
|
| + * origin_y + bitmap_height <= pixelref_height
|
| + *
|
| + * pixelRefOrigin() returns this origin, or (0,0) if there is no pixelRef.
|
| + */
|
| + SkIPoint pixelRefOrigin() const { return fPixelRefOrigin; }
|
| +
|
| + /**
|
| + * Assign a pixelref and origin to the bitmap. Pixelrefs are reference,
|
| + * so the existing one (if any) will be unref'd and the new one will be
|
| + * ref'd. (x,y) specify the offset within the pixelref's pixels for the
|
| + * top/left corner of the bitmap. For a bitmap that encompases the entire
|
| + * pixels of the pixelref, these will be (0,0).
|
| + */
|
| + SkPixelRef* setPixelRef(SkPixelRef* pr, int dx, int dy);
|
| +
|
| + SkPixelRef* setPixelRef(SkPixelRef* pr, const SkIPoint& origin) {
|
| + return this->setPixelRef(pr, origin.fX, origin.fY);
|
| + }
|
| +
|
| + SkPixelRef* setPixelRef(SkPixelRef* pr) {
|
| + return this->setPixelRef(pr, 0, 0);
|
| + }
|
|
|
| /** Call this to ensure that the bitmap points to the current pixel address
|
| in the pixelref. Balance it with a call to unlockPixels(). These calls
|
| @@ -665,13 +688,14 @@ private:
|
| mutable MipMap* fMipMap;
|
|
|
| mutable SkPixelRef* fPixelRef;
|
| - mutable size_t fPixelRefOffset;
|
| mutable int fPixelLockCount;
|
| // either user-specified (in which case it is not treated as mutable)
|
| // or a cache of the returned value from fPixelRef->lockPixels()
|
| mutable void* fPixels;
|
| mutable SkColorTable* fColorTable; // only meaningful for kIndex8
|
|
|
| + SkIPoint fPixelRefOrigin;
|
| +
|
| enum Flags {
|
| kImageIsOpaque_Flag = 0x01,
|
| kImageIsVolatile_Flag = 0x02,
|
|
|