Index: src/core/SkSpecialImage.h |
diff --git a/src/core/SkSpecialImage.h b/src/core/SkSpecialImage.h |
index 38225482fbd5f76d291c76a8609db29e0859f5d5..8dd4a92e1cc37a5adfd232f8d18cb26fd643cc63 100644 |
--- a/src/core/SkSpecialImage.h |
+++ b/src/core/SkSpecialImage.h |
@@ -8,8 +8,12 @@ |
#ifndef SkSpecialImage_DEFINED |
#define SkSpecialImage_DEFINED |
+#include "SkNextID.h" |
#include "SkRefCnt.h" |
+// remove this when internal_getProxy goes away (see skbug.com/4965) |
+#include "SkImageFilter.h" |
+ |
class GrTexture; |
class SkBitmap; |
class SkCanvas; |
@@ -18,6 +22,10 @@ struct SkImageInfo; |
class SkPaint; |
class SkSpecialSurface; |
+enum { |
+ kNeedNewImageUniqueID_SpecialImage = 0 |
+}; |
+ |
/** |
* This is a restricted form of SkImage solely intended for internal use. It |
* differs from SkImage in that: |
@@ -33,6 +41,9 @@ class SkSpecialImage : public SkRefCnt { |
public: |
int width() const { return fSubset.width(); } |
int height() const { return fSubset.height(); } |
+ uint32_t uniqueID() const { return fUniqueID; } |
+ virtual bool isOpaque() const { return false; } |
+ virtual size_t getSize() const = 0; |
/** |
* Draw this SpecialImage into the canvas. |
@@ -40,18 +51,34 @@ public: |
void draw(SkCanvas*, SkScalar x, SkScalar y, const SkPaint*) const; |
static SkSpecialImage* NewFromImage(const SkIRect& subset, const SkImage*); |
- static SkSpecialImage* NewFromRaster(const SkIRect& subset, const SkBitmap&); |
- static SkSpecialImage* NewFromGpu(const SkIRect& subset, GrTexture*); |
+ static SkSpecialImage* NewFromRaster(SkImageFilter::Proxy*, |
+ const SkIRect& subset, |
+ const SkBitmap&); |
+ static SkSpecialImage* NewFromGpu(SkImageFilter::Proxy*, |
+ const SkIRect& subset, |
+ uint32_t uniqueID, |
+ GrTexture*, |
+ SkAlphaType at = kPremul_SkAlphaType); |
/** |
* Create a new surface with a backend that is compatible with this image. |
*/ |
SkSpecialSurface* newSurface(const SkImageInfo&) const; |
+ // These three internal methods will go away (see skbug.com/4965) |
+ bool internal_getBM(SkBitmap* result); |
+ static SkSpecialImage* internal_fromBM(SkImageFilter::Proxy*, const SkBitmap&); |
+ SkImageFilter::Proxy* internal_getProxy(); |
+ |
protected: |
- SkSpecialImage(const SkIRect& subset) : fSubset(subset) { } |
+ SkSpecialImage(SkImageFilter::Proxy* proxy, const SkIRect& subset, uint32_t uniqueID) |
+ : fSubset(subset) |
+ , fUniqueID(kNeedNewImageUniqueID_SpecialImage == uniqueID ? SkNextID::ImageID() |
+ : uniqueID) |
+ , fProxy(proxy) { |
+ } |
- // The following 3 are for testing and shouldn't be used. |
+ // The following 3 are for testing and shouldn't be used. (see skbug.com/4965) |
friend class TestingSpecialImageAccess; |
friend class TestingSpecialSurfaceAccess; |
const SkIRect& subset() const { return fSubset; } |
@@ -74,8 +101,15 @@ protected: |
*/ |
GrTexture* peekTexture() const; |
+ // TODO: remove this ASAP (see skbug.com/4965) |
+ SkImageFilter::Proxy* proxy() const { return fProxy; } |
+ |
private: |
- const SkIRect fSubset; |
+ const SkIRect fSubset; |
+ const uint32_t fUniqueID; |
+ |
+ // TODO: remove this ASAP (see skbug.com/4965) |
+ SkImageFilter::Proxy* fProxy; |
typedef SkRefCnt INHERITED; |
}; |