aboutsummaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2017-04-03 14:41:44 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-04-03 19:29:38 +0000
commit6b3155c4be0476bc53541b0431c368a44e69f0a7 (patch)
tree2de5a87716b38a587c475731df815e5c8178e133 /include
parent2db3232c88cbaec5585f263111f334ca7272fe10 (diff)
Revert[4] "clean up (partially) colortable api""""
Fixes: - create temp api for android to pass nullptr - don't release and access sk_sp<SkData> at the same time in parameters This reverts commit b14131c1851eea6acbd34cc42a8f860daed36b21. Bug: skia: Change-Id: Ic0e4f62520ba9f35455499ed30d306ad19d998a8 Reviewed-on: https://skia-review.googlesource.com/11129 Commit-Queue: Mike Reed <reed@google.com> Reviewed-by: Matt Sarett <msarett@google.com>
Diffstat (limited to 'include')
-rw-r--r--include/core/SkBitmap.h19
-rw-r--r--include/core/SkColorTable.h6
-rw-r--r--include/core/SkMallocPixelRef.h83
3 files changed, 62 insertions, 46 deletions
diff --git a/include/core/SkBitmap.h b/include/core/SkBitmap.h
index fd25a23cdd..1a2daf0845 100644
--- a/include/core/SkBitmap.h
+++ b/include/core/SkBitmap.h
@@ -238,20 +238,29 @@ public:
bool setInfo(const SkImageInfo&, size_t rowBytes = 0);
+ enum AllocFlags {
+ kZeroPixels_AllocFlag = 1 << 0,
+ };
/**
* Allocate the bitmap's pixels to match the requested image info. If the Factory
* is non-null, call it to allcoate the pixelref. If the ImageInfo requires
- * a colortable, then ColorTable must be non-null, and will be ref'd.
+ * a colortable, then ColorTable must be non-null.
+ *
* On failure, the bitmap will be set to empty and return false.
*/
- bool SK_WARN_UNUSED_RESULT tryAllocPixels(const SkImageInfo&, SkPixelRefFactory*, SkColorTable*);
-
- void allocPixels(const SkImageInfo& info, SkPixelRefFactory* factory, SkColorTable* ctable) {
- if (!this->tryAllocPixels(info, factory, ctable)) {
+ bool SK_WARN_UNUSED_RESULT tryAllocPixels(const SkImageInfo& info, sk_sp<SkColorTable> ctable,
+ uint32_t flags = 0);
+ void allocPixels(const SkImageInfo& info, sk_sp<SkColorTable> ctable, uint32_t flags = 0) {
+ if (!this->tryAllocPixels(info, std::move(ctable), flags)) {
sk_throw();
}
}
+ // TEMPORARY -- remove after updating Android BitmapTests.cpp:35
+ void allocPixels(const SkImageInfo& info, std::nullptr_t, SkColorTable* ctable) {
+ this->allocPixels(info, sk_ref_sp(ctable));
+ }
+
/**
* Allocate the bitmap's pixels to match the requested image info and
* rowBytes. If the request cannot be met (e.g. the info is invalid or
diff --git a/include/core/SkColorTable.h b/include/core/SkColorTable.h
index 07dfd675b2..40919d3bac 100644
--- a/include/core/SkColorTable.h
+++ b/include/core/SkColorTable.h
@@ -24,10 +24,12 @@
*/
class SK_API SkColorTable : public SkRefCnt {
public:
+ static sk_sp<SkColorTable> Make(const SkPMColor colors[], int count);
+
/** Copy up to 256 colors into a new SkColorTable.
*/
SkColorTable(const SkPMColor colors[], int count);
- virtual ~SkColorTable();
+ ~SkColorTable() override;
/** Returns the number of colors in the table.
*/
@@ -52,7 +54,7 @@ public:
void writeToBuffer(SkWriteBuffer&) const;
// may return null
- static SkColorTable* Create(SkReadBuffer&);
+ static sk_sp<SkColorTable> Create(SkReadBuffer&);
private:
enum AllocatedWithMalloc {
diff --git a/include/core/SkMallocPixelRef.h b/include/core/SkMallocPixelRef.h
index bb07fa2dab..2e4c4e69eb 100644
--- a/include/core/SkMallocPixelRef.h
+++ b/include/core/SkMallocPixelRef.h
@@ -22,12 +22,10 @@ public:
* lifetime of the pixel storage buffer, as this pixelref will not try
* to delete it.
*
- * The pixelref will ref() the colortable (if not NULL).
- *
* Returns NULL on failure.
*/
- static SkMallocPixelRef* NewDirect(const SkImageInfo&, void* addr,
- size_t rowBytes, SkColorTable*);
+ static sk_sp<SkPixelRef> MakeDirect(const SkImageInfo&, void* addr,
+ size_t rowBytes, sk_sp<SkColorTable>);
/**
* Return a new SkMallocPixelRef, automatically allocating storage for the
@@ -39,22 +37,18 @@ public:
*
* Returns NULL on failure.
*/
- static SkMallocPixelRef* NewAllocate(const SkImageInfo& info,
- size_t rowBytes, SkColorTable*);
+ static sk_sp<SkPixelRef> MakeAllocate(const SkImageInfo&, size_t rowBytes, sk_sp<SkColorTable>);
/**
- * Identical to NewAllocate, except all pixel bytes are zeroed.
+ * Identical to MakeAllocate, except all pixel bytes are zeroed.
*/
- static SkMallocPixelRef* NewZeroed(const SkImageInfo& info,
- size_t rowBytes, SkColorTable*);
+ static sk_sp<SkPixelRef> MakeZeroed(const SkImageInfo&, size_t rowBytes, sk_sp<SkColorTable>);
/**
* Return a new SkMallocPixelRef with the provided pixel storage,
* rowBytes, and optional colortable. On destruction, ReleaseProc
* will be called.
*
- * This pixelref will ref() the specified colortable (if not NULL).
- *
* If ReleaseProc is NULL, the pixels will never be released. This
* can be useful if the pixels were stack allocated. However, such an
* SkMallocPixelRef must not live beyond its pixels (e.g. by copying
@@ -63,10 +57,10 @@ public:
* Returns NULL on failure.
*/
typedef void (*ReleaseProc)(void* addr, void* context);
- static SkMallocPixelRef* NewWithProc(const SkImageInfo& info,
- size_t rowBytes, SkColorTable*,
- void* addr, ReleaseProc proc,
- void* context);
+ static sk_sp<SkPixelRef> MakeWithProc(const SkImageInfo& info,
+ size_t rowBytes, sk_sp<SkColorTable>,
+ void* addr, ReleaseProc proc,
+ void* context);
/**
* Return a new SkMallocPixelRef that will use the provided
@@ -74,27 +68,38 @@ public:
* The SkData will be ref()ed and on destruction of the PielRef,
* the SkData will be unref()ed.
*
- * This pixelref will ref() the specified colortable (if not NULL).
- *
* Returns NULL on failure.
*/
+ static sk_sp<SkPixelRef> MakeWithData(const SkImageInfo& info,
+ size_t rowBytes,
+ sk_sp<SkColorTable>,
+ sk_sp<SkData> data);
+
+#ifdef SK_SUPPORT_LEGACY_PIXELREFFACTORY
+ static SkMallocPixelRef* NewDirect(const SkImageInfo& info, void* addr,
+ size_t rowBytes, SkColorTable* ctable) {
+ return (SkMallocPixelRef*)MakeDirect(info, addr, rowBytes, sk_ref_sp(ctable)).release();
+ }
+ static SkMallocPixelRef* NewAllocate(const SkImageInfo& info, size_t rb, SkColorTable* ct) {
+ return (SkMallocPixelRef*)MakeAllocate(info, rb, sk_ref_sp(ct)).release();
+ }
+ static SkMallocPixelRef* NewZeroed(const SkImageInfo& info, size_t rowBytes, SkColorTable* ct) {
+ return (SkMallocPixelRef*)MakeZeroed(info, rowBytes, sk_ref_sp(ct)).release();
+ }
+ static SkMallocPixelRef* NewWithProc(const SkImageInfo& info,
+ size_t rowBytes, SkColorTable* ctable,
+ void* addr, ReleaseProc proc,
+ void* ctx) {
+ return (SkMallocPixelRef*)MakeWithProc(info, rowBytes, sk_ref_sp(ctable), addr, proc, ctx).release();
+ }
static SkMallocPixelRef* NewWithData(const SkImageInfo& info,
size_t rowBytes,
SkColorTable* ctable,
SkData* data);
+#endif
void* getAddr() const { return fStorage; }
- class PRFactory : public SkPixelRefFactory {
- public:
- SkPixelRef* create(const SkImageInfo&, size_t rowBytes, SkColorTable*) override;
- };
-
- class ZeroedPRFactory : public SkPixelRefFactory {
- public:
- SkPixelRef* create(const SkImageInfo&, size_t rowBytes, SkColorTable*) override;
- };
-
protected:
// The ownPixels version of this constructor is deprecated.
SkMallocPixelRef(const SkImageInfo&, void* addr, size_t rb, SkColorTable*,
@@ -107,18 +112,18 @@ protected:
private:
// Uses alloc to implement NewAllocate or NewZeroed.
- static SkMallocPixelRef* NewUsing(void*(*alloc)(size_t),
- const SkImageInfo&,
- size_t rowBytes,
- SkColorTable*);
-
- void* fStorage;
- SkColorTable* fCTable;
- size_t fRB;
- ReleaseProc fReleaseProc;
- void* fReleaseProcContext;
-
- SkMallocPixelRef(const SkImageInfo&, void* addr, size_t rb, SkColorTable*,
+ static sk_sp<SkPixelRef> MakeUsing(void*(*alloc)(size_t),
+ const SkImageInfo&,
+ size_t rowBytes,
+ sk_sp<SkColorTable>);
+
+ void* fStorage;
+ sk_sp<SkColorTable> fCTable;
+ size_t fRB;
+ ReleaseProc fReleaseProc;
+ void* fReleaseProcContext;
+
+ SkMallocPixelRef(const SkImageInfo&, void* addr, size_t rb, sk_sp<SkColorTable>,
ReleaseProc proc, void* context);
typedef SkPixelRef INHERITED;