| Index: include/core/SkMallocPixelRef.h
|
| diff --git a/include/core/SkMallocPixelRef.h b/include/core/SkMallocPixelRef.h
|
| index 2241a513e7ea223ac8ddeac340bf8f73ee92d2ca..30e95dbccd326f5a6eea9fd09ecb0a327b119552 100644
|
| --- a/include/core/SkMallocPixelRef.h
|
| +++ b/include/core/SkMallocPixelRef.h
|
| @@ -17,32 +17,60 @@
|
| */
|
| class SkMallocPixelRef : public SkPixelRef {
|
| public:
|
| - /** Allocate the specified buffer for pixels. The memory is freed when the
|
| - last owner of this pixelref is gone. If addr is NULL, sk_malloc_throw()
|
| - is called to allocate it.
|
| + /**
|
| + * Return a new SkMallocPixelRef with the provided pixel storage, rowBytes,
|
| + * and optional colortable. The caller is responsible for managing the
|
| + * lifetime of the pixel storage buffer, as the pixelref will not try
|
| + * to delete the storage.
|
| + *
|
| + * This pixelref will ref() the specified colortable (if not NULL).
|
| + *
|
| + * Returns NULL on failure.
|
| */
|
| - SkMallocPixelRef(void* addr, size_t size, SkColorTable* ctable, bool ownPixels = true);
|
| - virtual ~SkMallocPixelRef();
|
| + static SkMallocPixelRef* NewDirect(const SkImageInfo&, void* addr,
|
| + size_t rowBytes, SkColorTable*);
|
| +
|
| + /**
|
| + * Return a new SkMallocPixelRef, automatically allocating storage for the
|
| + * pixels. If rowBytes are 0, an optimal value will be chosen automatically.
|
| + * If rowBytes is > 0, then it will be respected, or NULL will be returned
|
| + * if rowBytes is invalid for the specified info.
|
| + *
|
| + * This pixelref will ref() the specified colortable (if not NULL).
|
| + *
|
| + * Returns NULL on failure.
|
| + */
|
| + static SkMallocPixelRef* NewAllocate(const SkImageInfo& info,
|
| + size_t rowBytes, SkColorTable*);
|
|
|
| - //! Return the allocation size for the pixels
|
| - size_t getSize() const { return fSize; }
|
| void* getAddr() const { return fStorage; }
|
|
|
| SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMallocPixelRef)
|
|
|
| protected:
|
| - // overrides from SkPixelRef
|
| - virtual void* onLockPixels(SkColorTable**);
|
| - virtual void onUnlockPixels();
|
| + virtual bool onGetInfo(SkImageInfo*) SK_OVERRIDE;
|
| + virtual bool onNewLockPixels(LockRec*) SK_OVERRIDE;
|
| + virtual void onUnlockPixels() SK_OVERRIDE;
|
| + virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
|
|
|
| SkMallocPixelRef(SkFlattenableReadBuffer& buffer);
|
| - virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
|
| + SkMallocPixelRef(const SkImageInfo&, void* addr, size_t rb, SkColorTable*,
|
| + bool ownsPixels);
|
| + virtual ~SkMallocPixelRef();
|
|
|
| private:
|
| - void* fStorage;
|
| - size_t fSize;
|
| - SkColorTable* fCTable;
|
| - bool fOwnPixels;
|
| + void* fStorage;
|
| + SkColorTable* fCTable;
|
| + size_t fRB;
|
| + SkImageInfo fInfo;
|
| + const bool fOwnPixels;
|
| +
|
| + size_t computeMinSize() const {
|
| + if (fInfo.fHeight == 0) {
|
| + return 0;
|
| + }
|
| + return (fInfo.fHeight - 1) * fRB + fInfo.minRowBytes();
|
| + }
|
|
|
| typedef SkPixelRef INHERITED;
|
| };
|
|
|