| Index: src/core/SkPictureShader.h
|
| diff --git a/src/core/SkPictureShader.h b/src/core/SkPictureShader.h
|
| index ea74b56d73d857394f9c20b227d41368f1623fa0..d1be0591824e27e1f28962b665c7f33ba40995af 100644
|
| --- a/src/core/SkPictureShader.h
|
| +++ b/src/core/SkPictureShader.h
|
| @@ -24,13 +24,33 @@
|
| static SkPictureShader* Create(SkPicture*, TileMode, TileMode);
|
| virtual ~SkPictureShader();
|
|
|
| - virtual bool setContext(const SkBitmap&, const SkPaint&, const SkMatrix&) SK_OVERRIDE;
|
| - virtual void endContext() SK_OVERRIDE;
|
| - virtual uint32_t getFlags() SK_OVERRIDE;
|
| + virtual bool validContext(const SkBitmap&, const SkPaint&,
|
| + const SkMatrix&, SkMatrix* totalInverse = NULL) const SK_OVERRIDE;
|
| + virtual SkShader::Context* createContext(const SkBitmap& device, const SkPaint& paint,
|
| + const SkMatrix& matrix, void* storage) const
|
| + SK_OVERRIDE;
|
| + virtual size_t contextSize() const SK_OVERRIDE;
|
|
|
| - virtual ShadeProc asAShadeProc(void** ctx) SK_OVERRIDE;
|
| - virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
|
| - virtual void shadeSpan16(int x, int y, uint16_t dstC[], int count) SK_OVERRIDE;
|
| + class PictureShaderContext : public SkShader::Context {
|
| + public:
|
| + PictureShaderContext(const SkPictureShader& shader, const SkBitmap& device,
|
| + const SkPaint& paint, const SkMatrix& matrix,
|
| + SkShader* bitmapShader);
|
| + virtual ~PictureShaderContext();
|
| +
|
| + virtual uint32_t getFlags() const SK_OVERRIDE;
|
| +
|
| + virtual ShadeProc asAShadeProc(void** ctx) SK_OVERRIDE;
|
| + virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
|
| + virtual void shadeSpan16(int x, int y, uint16_t dstC[], int count) SK_OVERRIDE;
|
| +
|
| + private:
|
| + SkAutoTUnref<SkShader> fBitmapShader;
|
| + SkShader::Context* fBitmapShaderContext;
|
| + void* fBitmapShaderContextStorage;
|
| +
|
| + typedef SkShader::Context INHERITED;
|
| + };
|
|
|
| SK_TO_STRING_OVERRIDE()
|
| SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPictureShader)
|
| @@ -46,13 +66,18 @@
|
| private:
|
| SkPictureShader(SkPicture*, TileMode, TileMode);
|
|
|
| - bool buildBitmapShader(const SkMatrix&) const;
|
| + SkShader* validInternal(const SkBitmap& device, const SkPaint& paint,
|
| + const SkMatrix& matrix, SkMatrix* totalInverse) const;
|
| +
|
| + SkShader* refBitmapShader(const SkMatrix&) const;
|
|
|
| SkPicture* fPicture;
|
| TileMode fTmx, fTmy;
|
|
|
| - mutable SkAutoTUnref<SkShader> fCachedShader;
|
| + mutable SkMutex fCachedBitmapShaderMutex;
|
| + mutable SkAutoTUnref<SkShader> fCachedBitmapShader;
|
| mutable SkSize fCachedTileScale;
|
| + mutable SkMatrix fCachedLocalMatrix;
|
|
|
| typedef SkShader INHERITED;
|
| };
|
|
|