From 7aefe0321122d92393d30ddc44fb76e4744f34bf Mon Sep 17 00:00:00 2001 From: reed Date: Mon, 8 Jun 2015 10:22:22 -0700 Subject: Revert "Revert of move erase into SkPixmap (patchset #1 id:1 of https://codereview.chromium.org/1161033005/)" This reverts commit cca9b3ac908cf3e9a0c5774a5ffd118d8429e08a. BUG=skia: TBR= Review URL: https://codereview.chromium.org/1153473012 --- include/core/SkBitmap.h | 20 ++++++++++---------- include/core/SkPixmap.h | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 10 deletions(-) (limited to 'include') diff --git a/include/core/SkBitmap.h b/include/core/SkBitmap.h index c070203d04..b13b6f7451 100644 --- a/include/core/SkBitmap.h +++ b/include/core/SkBitmap.h @@ -473,10 +473,7 @@ public: * of the color is ignored (treated as opaque). If the colortype only supports * alpha (e.g. A1 or A8) then the color's r,g,b components are ignored. */ - void eraseColor(SkColor c) const { - this->eraseARGB(SkColorGetA(c), SkColorGetR(c), SkColorGetG(c), - SkColorGetB(c)); - } + void eraseColor(SkColor c) const; /** * Fill the entire bitmap with the specified color. @@ -484,7 +481,9 @@ public: * of the color is ignored (treated as opaque). If the colortype only supports * alpha (e.g. A1 or A8) then the color's r,g,b components are ignored. */ - void eraseARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b) const; + void eraseARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b) const { + this->eraseColor(SkColorSetARGB(a, r, g, b)); + } SK_ATTR_DEPRECATED("use eraseARGB or eraseColor") void eraseRGB(U8CPU r, U8CPU g, U8CPU b) const { @@ -497,7 +496,12 @@ public: * of the color is ignored (treated as opaque). If the colortype only supports * alpha (e.g. A1 or A8) then the color's r,g,b components are ignored. */ - void eraseArea(const SkIRect& area, SkColor c) const; + void erase(SkColor c, const SkIRect& area) const; + + // DEPRECATED + void eraseArea(const SkIRect& area, SkColor c) const { + this->erase(c, area); + } /** * Return the SkColor of the specified pixel. In most cases this will @@ -736,13 +740,9 @@ private: }; SkImageInfo fInfo; - uint32_t fRowBytes; - uint8_t fFlags; - void internalErase(const SkIRect&, U8CPU a, U8CPU r, U8CPU g, U8CPU b)const; - /* Unreference any pixelrefs or colortables */ void freePixels(); diff --git a/include/core/SkPixmap.h b/include/core/SkPixmap.h index 913d007c4d..05c7101735 100644 --- a/include/core/SkPixmap.h +++ b/include/core/SkPixmap.h @@ -8,6 +8,7 @@ #ifndef SkPixmap_DEFINED #define SkPixmap_DEFINED +#include "SkColor.h" #include "SkImageInfo.h" class SkColorTable; @@ -133,6 +134,14 @@ public: return this->readPixels(dst.info(), dst.writable_addr(), dst.rowBytes(), 0, 0); } + /** + * Returns true if pixels were written to (e.g. if colorType is kUnknown_SkColorType, this + * will return false). If subset does not intersect the bounds of this pixmap, returns false. + */ + bool erase(SkColor, const SkIRect& subset) const; + + bool erase(SkColor color) const { return this->erase(color, this->bounds()); } + private: const void* fPixels; SkColorTable* fCTable; @@ -165,8 +174,34 @@ public: */ void alloc(const SkImageInfo&); + // We wrap these so we can clear our internal storage + + void reset() { + this->freeStorage(); + this->INHERITED::reset(); + } + void reset(const SkImageInfo& info, const void* addr, size_t rb, SkColorTable* ctable = NULL) { + this->freeStorage(); + this->INHERITED::reset(info, addr, rb, ctable); + } + void reset(const SkImageInfo& info) { + this->freeStorage(); + this->INHERITED::reset(info); + } + bool SK_WARN_UNUSED_RESULT reset(const SkMask& mask) { + this->freeStorage(); + return this->INHERITED::reset(mask); + } + private: void* fStorage; + + void freeStorage() { + sk_free(fStorage); + fStorage = NULL; + } + + typedef SkPixmap INHERITED; }; ///////////////////////////////////////////////////////////////////////////////////////////// -- cgit v1.2.3