From 9c9005a347e9996f357bd79591bd34f74f8bbc66 Mon Sep 17 00:00:00 2001 From: "commit-bot@chromium.org" Date: Mon, 28 Apr 2014 14:55:39 +0000 Subject: Move SkShader::fLocalMatrix into SkShader constructor. As a first step towards removing SkShader::setLocalMatrix, which will make SkShader thread-safe, remove calls to setLocalMatrix that happen immediately after the shader is being created. Instead, pass the matrix into the constructor or factory method. BUG=skia:1976 R=scroggo@google.com, reed@google.com, skyostil@google.com, mtklein@google.com Author: dominikg@chromium.org Review URL: https://codereview.chromium.org/245963010 git-svn-id: http://skia.googlecode.com/svn/trunk@14401 2bbb7eff-a529-9590-31e7-b0007b416f81 --- src/animator/SkDrawGradient.cpp | 8 +++--- src/animator/SkDrawShader.cpp | 9 +++---- src/animator/SkPaintPart.h | 2 +- src/core/SkBitmapDevice.cpp | 4 +-- src/core/SkBitmapProcShader.cpp | 11 ++++---- src/core/SkBitmapProcShader.h | 5 ++-- src/core/SkComposeShader.cpp | 4 +-- src/core/SkDraw.cpp | 13 +++++---- src/core/SkPictureShader.cpp | 3 +-- src/core/SkShader.cpp | 21 ++++++++------- src/core/SkSmallAllocator.h | 10 +++++++ src/effects/SkTileImageFilter.cpp | 6 ++--- src/effects/gradients/SkGradientShader.cpp | 31 +++++++++++++--------- src/effects/gradients/SkGradientShaderPriv.h | 2 +- src/effects/gradients/SkLinearGradient.cpp | 5 ++-- src/effects/gradients/SkLinearGradient.h | 2 +- src/effects/gradients/SkRadialGradient.cpp | 4 +-- src/effects/gradients/SkRadialGradient.h | 3 ++- src/effects/gradients/SkSweepGradient.cpp | 4 +-- src/effects/gradients/SkSweepGradient.h | 3 ++- .../gradients/SkTwoPointConicalGradient.cpp | 5 ++-- src/effects/gradients/SkTwoPointConicalGradient.h | 3 ++- src/effects/gradients/SkTwoPointRadialGradient.cpp | 4 +-- src/effects/gradients/SkTwoPointRadialGradient.h | 2 +- src/gpu/SkGpuDevice.cpp | 3 +-- 25 files changed, 94 insertions(+), 73 deletions(-) (limited to 'src') diff --git a/src/animator/SkDrawGradient.cpp b/src/animator/SkDrawGradient.cpp index 1b158f23c1..c11559581b 100644 --- a/src/animator/SkDrawGradient.cpp +++ b/src/animator/SkDrawGradient.cpp @@ -175,9 +175,9 @@ SkShader* SkDrawLinearGradient::getShader() { if (addPrelude() == 0 || points.count() != 4) return NULL; SkShader* shader = SkGradientShader::CreateLinear((SkPoint*)points.begin(), - fColors.begin(), offsets.begin(), fColors.count(), (SkShader::TileMode) tileMode, fUnitMapper); + fColors.begin(), offsets.begin(), fColors.count(), (SkShader::TileMode) tileMode, + fUnitMapper, 0, getMatrix()); SkAutoTDelete autoDel(shader); - addPostlude(shader); (void)autoDel.detach(); return shader; } @@ -210,9 +210,9 @@ SkShader* SkDrawRadialGradient::getShader() { if (addPrelude() == 0) return NULL; SkShader* shader = SkGradientShader::CreateRadial(center, - radius, fColors.begin(), offsets.begin(), fColors.count(), (SkShader::TileMode) tileMode, fUnitMapper); + radius, fColors.begin(), offsets.begin(), fColors.count(), (SkShader::TileMode) tileMode, + fUnitMapper, 0, getMatrix()); SkAutoTDelete autoDel(shader); - addPostlude(shader); (void)autoDel.detach(); return shader; } diff --git a/src/animator/SkDrawShader.cpp b/src/animator/SkDrawShader.cpp index e3aa4da028..f9f379bf73 100644 --- a/src/animator/SkDrawShader.cpp +++ b/src/animator/SkDrawShader.cpp @@ -36,9 +36,8 @@ bool SkDrawShader::add() { return false; } -void SkDrawShader::addPostlude(SkShader* shader) { - if (matrix) - shader->setLocalMatrix(matrix->getMatrix()); +SkMatrix* SkDrawShader::getMatrix() { + return matrix ? &matrix->getMatrix() : NULL; } #if SK_USE_CONDENSED_INFO == 0 @@ -75,9 +74,9 @@ SkShader* SkDrawBitmapShader::getShader() { // draw-time from the paint SkShader* shader = SkShader::CreateBitmapShader(image->fBitmap, (SkShader::TileMode) tileMode, - (SkShader::TileMode) tileMode); + (SkShader::TileMode) tileMode, + getMatrix()); SkAutoTDelete autoDel(shader); - addPostlude(shader); (void)autoDel.detach(); return shader; } diff --git a/src/animator/SkPaintPart.h b/src/animator/SkPaintPart.h index a6154e5da6..6f33cb4c39 100644 --- a/src/animator/SkPaintPart.h +++ b/src/animator/SkPaintPart.h @@ -51,7 +51,7 @@ class SkDrawShader : public SkPaintPart { virtual SkShader* getShader(); protected: virtual bool add(); - void addPostlude(SkShader* shader); + SkMatrix* getMatrix(); // returns NULL if matrix is NULL SkDrawMatrix* matrix; int /*SkShader::TileMode*/ tileMode; }; diff --git a/src/core/SkBitmapDevice.cpp b/src/core/SkBitmapDevice.cpp index c2b633e1a6..311e72f576 100644 --- a/src/core/SkBitmapDevice.cpp +++ b/src/core/SkBitmapDevice.cpp @@ -381,11 +381,11 @@ void SkBitmapDevice::drawBitmapRect(const SkDraw& draw, const SkBitmap& bitmap, // construct a shader, so we can call drawRect with the dst SkShader* s = SkShader::CreateBitmapShader(*bitmapPtr, SkShader::kClamp_TileMode, - SkShader::kClamp_TileMode); + SkShader::kClamp_TileMode, + &matrix); if (NULL == s) { return; } - s->setLocalMatrix(matrix); SkPaint paintWithShader(paint); paintWithShader.setStyle(SkPaint::kFill_Style); diff --git a/src/core/SkBitmapProcShader.cpp b/src/core/SkBitmapProcShader.cpp index 5f5eb1866e..44bdc6d348 100644 --- a/src/core/SkBitmapProcShader.cpp +++ b/src/core/SkBitmapProcShader.cpp @@ -31,8 +31,9 @@ bool SkBitmapProcShader::CanDo(const SkBitmap& bm, TileMode tx, TileMode ty) { return false; } -SkBitmapProcShader::SkBitmapProcShader(const SkBitmap& src, - TileMode tmx, TileMode tmy) { +SkBitmapProcShader::SkBitmapProcShader(const SkBitmap& src, TileMode tmx, TileMode tmy, + const SkMatrix* localMatrix) + : INHERITED(localMatrix) { fRawBitmap = src; fTileModeX = (uint8_t)tmx; fTileModeY = (uint8_t)tmy; @@ -347,7 +348,7 @@ static bool bitmapIsTooBig(const SkBitmap& bm) { } SkShader* CreateBitmapShader(const SkBitmap& src, SkShader::TileMode tmx, - SkShader::TileMode tmy, SkTBlitterAllocator* allocator) { + SkShader::TileMode tmy, const SkMatrix* localMatrix, SkTBlitterAllocator* allocator) { SkShader* shader; SkColor color; if (src.isNull() || bitmapIsTooBig(src)) { @@ -365,9 +366,9 @@ SkShader* CreateBitmapShader(const SkBitmap& src, SkShader::TileMode tmx, } } else { if (NULL == allocator) { - shader = SkNEW_ARGS(SkBitmapProcShader, (src, tmx, tmy)); + shader = SkNEW_ARGS(SkBitmapProcShader, (src, tmx, tmy, localMatrix)); } else { - shader = allocator->createT(src, tmx, tmy); + shader = allocator->createT(src, tmx, tmy, localMatrix); } } return shader; diff --git a/src/core/SkBitmapProcShader.h b/src/core/SkBitmapProcShader.h index e0c78b8e45..78b46ce681 100644 --- a/src/core/SkBitmapProcShader.h +++ b/src/core/SkBitmapProcShader.h @@ -16,7 +16,8 @@ class SkBitmapProcShader : public SkShader { public: - SkBitmapProcShader(const SkBitmap& src, TileMode tx, TileMode ty); + SkBitmapProcShader(const SkBitmap& src, TileMode tx, TileMode ty, + const SkMatrix* localMatrix = NULL); // overrides from SkShader virtual bool isOpaque() const SK_OVERRIDE; @@ -91,6 +92,6 @@ typedef SkSmallAllocator<3, sizeof(SkBitmapProcShader) + // If alloc is non-NULL, it will be used to allocate the returned SkShader, and MUST outlive // the SkShader. SkShader* CreateBitmapShader(const SkBitmap& src, SkShader::TileMode, SkShader::TileMode, - SkTBlitterAllocator* alloc); + const SkMatrix* localMatrix, SkTBlitterAllocator* alloc); #endif diff --git a/src/core/SkComposeShader.cpp b/src/core/SkComposeShader.cpp index 77bc46f30a..2c27c9e7d1 100644 --- a/src/core/SkComposeShader.cpp +++ b/src/core/SkComposeShader.cpp @@ -30,11 +30,11 @@ SkComposeShader::SkComposeShader(SkReadBuffer& buffer) : INHERITED(buffer) { fShaderA = buffer.readShader(); if (NULL == fShaderA) { - fShaderA = SkNEW_ARGS(SkColorShader, (0)); + fShaderA = SkNEW_ARGS(SkColorShader, ((SkColor)0)); } fShaderB = buffer.readShader(); if (NULL == fShaderB) { - fShaderB = SkNEW_ARGS(SkColorShader, (0)); + fShaderB = SkNEW_ARGS(SkColorShader, ((SkColor)0)); } fMode = buffer.readXfermode(); } diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp index 6ddd0d274f..f9e06e5232 100644 --- a/src/core/SkDraw.cpp +++ b/src/core/SkDraw.cpp @@ -72,11 +72,12 @@ private: */ class SkAutoBitmapShaderInstall : SkNoncopyable { public: - SkAutoBitmapShaderInstall(const SkBitmap& src, const SkPaint& paint) + SkAutoBitmapShaderInstall(const SkBitmap& src, const SkPaint& paint, + const SkMatrix* localMatrix = NULL) : fPaint(paint) /* makes a copy of the paint */ { fPaint.setShader(CreateBitmapShader(src, SkShader::kClamp_TileMode, SkShader::kClamp_TileMode, - &fAllocator)); + localMatrix, &fAllocator)); // we deliberately left the shader with an owner-count of 2 SkASSERT(2 == fPaint.getShader()->getRefCnt()); } @@ -1374,18 +1375,16 @@ void SkDraw::drawSprite(const SkBitmap& bitmap, int x, int y, } } - SkAutoBitmapShaderInstall install(bitmap, paint); - const SkPaint& shaderPaint = install.paintWithShader(); - SkMatrix matrix; SkRect r; // get a scalar version of our rect r.set(bounds); - // tell the shader our offset + // create shader with offset matrix.setTranslate(r.fLeft, r.fTop); - shaderPaint.getShader()->setLocalMatrix(matrix); + SkAutoBitmapShaderInstall install(bitmap, paint, &matrix); + const SkPaint& shaderPaint = install.paintWithShader(); SkDraw draw(*this); matrix.reset(); diff --git a/src/core/SkPictureShader.cpp b/src/core/SkPictureShader.cpp index dc5c90b62e..466c5e1286 100644 --- a/src/core/SkPictureShader.cpp +++ b/src/core/SkPictureShader.cpp @@ -91,13 +91,12 @@ SkShader* SkPictureShader::refBitmapShader(const SkMatrix& matrix) const { canvas.scale(tileScale.width(), tileScale.height()); canvas.drawPicture(*fPicture); - fCachedBitmapShader.reset(CreateBitmapShader(bm, fTmx, fTmy)); fCachedTileScale = tileScale; fCachedLocalMatrix = this->getLocalMatrix(); SkMatrix shaderMatrix = this->getLocalMatrix(); shaderMatrix.preScale(1 / tileScale.width(), 1 / tileScale.height()); - fCachedBitmapShader->setLocalMatrix(shaderMatrix); + fCachedBitmapShader.reset(CreateBitmapShader(bm, fTmx, fTmy, &shaderMatrix)); } // Increment the ref counter inside the mutex to ensure the returned pointer is still valid. diff --git a/src/core/SkShader.cpp b/src/core/SkShader.cpp index b49dae8b5d..4ddd29150b 100644 --- a/src/core/SkShader.cpp +++ b/src/core/SkShader.cpp @@ -15,8 +15,12 @@ #include "SkShader.h" #include "SkWriteBuffer.h" -SkShader::SkShader() { - fLocalMatrix.reset(); +SkShader::SkShader(const SkMatrix* localMatrix) { + if (localMatrix) { + fLocalMatrix = *localMatrix; + } else { + fLocalMatrix.reset(); + } } SkShader::SkShader(SkReadBuffer& buffer) @@ -180,9 +184,9 @@ GrEffectRef* SkShader::asNewEffect(GrContext*, const SkPaint&) const { return NULL; } -SkShader* SkShader::CreateBitmapShader(const SkBitmap& src, - TileMode tmx, TileMode tmy) { - return ::CreateBitmapShader(src, tmx, tmy, NULL); +SkShader* SkShader::CreateBitmapShader(const SkBitmap& src, TileMode tmx, TileMode tmy, + const SkMatrix* localMatrix) { + return ::CreateBitmapShader(src, tmx, tmy, localMatrix, NULL); } SkShader* SkShader::CreatePictureShader(SkPicture* src, TileMode tmx, TileMode tmy) { @@ -252,11 +256,8 @@ SkColorShader::ColorShaderContext::ColorShaderContext(const SkColorShader& shade const SkMatrix& matrix) : INHERITED(shader, device, paint, matrix) { - SkColor color; - unsigned a; - - color = shader.fColor; - a = SkAlphaMul(SkColorGetA(color), SkAlpha255To256(paint.getAlpha())); + SkColor color = shader.fColor; + unsigned a = SkAlphaMul(SkColorGetA(color), SkAlpha255To256(paint.getAlpha())); unsigned r = SkColorGetR(color); unsigned g = SkColorGetG(color); diff --git a/src/core/SkSmallAllocator.h b/src/core/SkSmallAllocator.h index 8d4b53a707..018705f974 100644 --- a/src/core/SkSmallAllocator.h +++ b/src/core/SkSmallAllocator.h @@ -96,6 +96,16 @@ public: return static_cast(buf); } + template + T* createT(const A1& a1, const A2& a2, const A3& a3, const A4& a4) { + void* buf = this->reserveT(); + if (NULL == buf) { + return NULL; + } + SkNEW_PLACEMENT_ARGS(buf, T, (a1, a2, a3, a4)); + return static_cast(buf); + } + /* * Reserve a specified amount of space (must be enough space for one T). * The space will be in fStorage if there is room, or on the heap otherwise. diff --git a/src/effects/SkTileImageFilter.cpp b/src/effects/SkTileImageFilter.cpp index 5496f30032..f3bad76345 100644 --- a/src/effects/SkTileImageFilter.cpp +++ b/src/effects/SkTileImageFilter.cpp @@ -60,12 +60,12 @@ bool SkTileImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& src, SkPaint paint; paint.setXfermodeMode(SkXfermode::kSrc_Mode); - SkAutoTUnref shader(SkShader::CreateBitmapShader(subset, - SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode)); SkMatrix shaderMatrix; shaderMatrix.setTranslate(SkIntToScalar(srcOffset.fX), SkIntToScalar(srcOffset.fY)); - shader->setLocalMatrix(shaderMatrix); + SkAutoTUnref shader(SkShader::CreateBitmapShader(subset, + SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode, + &shaderMatrix)); paint.setShader(shader); canvas.translate(-dstRect.fLeft, -dstRect.fTop); canvas.drawRect(dstRect, paint); diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp index f4bde677dd..6d753a9508 100644 --- a/src/effects/gradients/SkGradientShader.cpp +++ b/src/effects/gradients/SkGradientShader.cpp @@ -12,7 +12,9 @@ #include "SkTwoPointConicalGradient.h" #include "SkSweepGradient.h" -SkGradientShaderBase::SkGradientShaderBase(const Descriptor& desc) { +SkGradientShaderBase::SkGradientShaderBase(const Descriptor& desc, const SkMatrix* localMatrix) + : INHERITED(localMatrix) +{ SkASSERT(desc.fCount > 1); fMapper = desc.fMapper; @@ -784,7 +786,8 @@ SkShader* SkGradientShader::CreateLinear(const SkPoint pts[2], const SkScalar pos[], int colorCount, SkShader::TileMode mode, SkUnitMapper* mapper, - uint32_t flags) { + uint32_t flags, + const SkMatrix* localMatrix) { if (NULL == pts || NULL == colors || colorCount < 1) { return NULL; } @@ -792,7 +795,7 @@ SkShader* SkGradientShader::CreateLinear(const SkPoint pts[2], SkGradientShaderBase::Descriptor desc; desc_init(&desc, colors, pos, colorCount, mode, mapper, flags); - return SkNEW_ARGS(SkLinearGradient, (pts, desc)); + return SkNEW_ARGS(SkLinearGradient, (pts, desc, localMatrix)); } SkShader* SkGradientShader::CreateRadial(const SkPoint& center, SkScalar radius, @@ -800,7 +803,8 @@ SkShader* SkGradientShader::CreateRadial(const SkPoint& center, SkScalar radius, const SkScalar pos[], int colorCount, SkShader::TileMode mode, SkUnitMapper* mapper, - uint32_t flags) { + uint32_t flags, + const SkMatrix* localMatrix) { if (radius <= 0 || NULL == colors || colorCount < 1) { return NULL; } @@ -808,7 +812,7 @@ SkShader* SkGradientShader::CreateRadial(const SkPoint& center, SkScalar radius, SkGradientShaderBase::Descriptor desc; desc_init(&desc, colors, pos, colorCount, mode, mapper, flags); - return SkNEW_ARGS(SkRadialGradient, (center, radius, desc)); + return SkNEW_ARGS(SkRadialGradient, (center, radius, desc, localMatrix)); } SkShader* SkGradientShader::CreateTwoPointRadial(const SkPoint& start, @@ -820,7 +824,8 @@ SkShader* SkGradientShader::CreateTwoPointRadial(const SkPoint& start, int colorCount, SkShader::TileMode mode, SkUnitMapper* mapper, - uint32_t flags) { + uint32_t flags, + const SkMatrix* localMatrix) { if (startRadius < 0 || endRadius < 0 || NULL == colors || colorCount < 1) { return NULL; } @@ -829,7 +834,7 @@ SkShader* SkGradientShader::CreateTwoPointRadial(const SkPoint& start, SkGradientShaderBase::Descriptor desc; desc_init(&desc, colors, pos, colorCount, mode, mapper, flags); return SkNEW_ARGS(SkTwoPointRadialGradient, - (start, startRadius, end, endRadius, desc)); + (start, startRadius, end, endRadius, desc, localMatrix)); } SkShader* SkGradientShader::CreateTwoPointConical(const SkPoint& start, @@ -841,7 +846,8 @@ SkShader* SkGradientShader::CreateTwoPointConical(const SkPoint& start, int colorCount, SkShader::TileMode mode, SkUnitMapper* mapper, - uint32_t flags) { + uint32_t flags, + const SkMatrix* localMatrix) { if (startRadius < 0 || endRadius < 0 || NULL == colors || colorCount < 1) { return NULL; } @@ -858,7 +864,7 @@ SkShader* SkGradientShader::CreateTwoPointConical(const SkPoint& start, if (!flipGradient) { desc_init(&desc, colors, pos, colorCount, mode, mapper, flags); return SkNEW_ARGS(SkTwoPointConicalGradient, - (start, startRadius, end, endRadius, flipGradient, desc)); + (start, startRadius, end, endRadius, flipGradient, desc, localMatrix)); } else { SkAutoSTArray<8, SkColor> colorsNew(colorCount); SkAutoSTArray<8, SkScalar> posNew(colorCount); @@ -876,7 +882,7 @@ SkShader* SkGradientShader::CreateTwoPointConical(const SkPoint& start, } return SkNEW_ARGS(SkTwoPointConicalGradient, - (end, endRadius, start, startRadius, flipGradient, desc)); + (end, endRadius, start, startRadius, flipGradient, desc, localMatrix)); } } @@ -884,7 +890,8 @@ SkShader* SkGradientShader::CreateSweep(SkScalar cx, SkScalar cy, const SkColor colors[], const SkScalar pos[], int colorCount, SkUnitMapper* mapper, - uint32_t flags) { + uint32_t flags, + const SkMatrix* localMatrix) { if (NULL == colors || colorCount < 1) { return NULL; } @@ -892,7 +899,7 @@ SkShader* SkGradientShader::CreateSweep(SkScalar cx, SkScalar cy, SkGradientShaderBase::Descriptor desc; desc_init(&desc, colors, pos, colorCount, SkShader::kClamp_TileMode, mapper, flags); - return SkNEW_ARGS(SkSweepGradient, (cx, cy, desc)); + return SkNEW_ARGS(SkSweepGradient, (cx, cy, desc, localMatrix)); } SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkGradientShader) diff --git a/src/effects/gradients/SkGradientShaderPriv.h b/src/effects/gradients/SkGradientShaderPriv.h index 5dec665ea1..c1e253fd4a 100644 --- a/src/effects/gradients/SkGradientShaderPriv.h +++ b/src/effects/gradients/SkGradientShaderPriv.h @@ -99,7 +99,7 @@ public: }; public: - SkGradientShaderBase(const Descriptor& desc); + SkGradientShaderBase(const Descriptor& desc, const SkMatrix* localMatrix); virtual ~SkGradientShaderBase(); // The cache is initialized on-demand when getCache16/32 is called. diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp index e660d7cd2d..70bbbf3b60 100644 --- a/src/effects/gradients/SkLinearGradient.cpp +++ b/src/effects/gradients/SkLinearGradient.cpp @@ -52,8 +52,9 @@ static void pts_to_unit_matrix(const SkPoint pts[2], SkMatrix* matrix) { /////////////////////////////////////////////////////////////////////////////// -SkLinearGradient::SkLinearGradient(const SkPoint pts[2], const Descriptor& desc) - : SkGradientShaderBase(desc) +SkLinearGradient::SkLinearGradient(const SkPoint pts[2], const Descriptor& desc, + const SkMatrix* localMatrix) + : SkGradientShaderBase(desc, localMatrix) , fStart(pts[0]) , fEnd(pts[1]) { pts_to_unit_matrix(pts, &fPtsToUnit); diff --git a/src/effects/gradients/SkLinearGradient.h b/src/effects/gradients/SkLinearGradient.h index 8d806672f8..699d76ed98 100644 --- a/src/effects/gradients/SkLinearGradient.h +++ b/src/effects/gradients/SkLinearGradient.h @@ -13,7 +13,7 @@ class SkLinearGradient : public SkGradientShaderBase { public: - SkLinearGradient(const SkPoint pts[2], const Descriptor&); + SkLinearGradient(const SkPoint pts[2], const Descriptor&, const SkMatrix* localMatrix); virtual SkShader::Context* createContext(const SkBitmap&, const SkPaint&, const SkMatrix&, void* storage) const SK_OVERRIDE; diff --git a/src/effects/gradients/SkRadialGradient.cpp b/src/effects/gradients/SkRadialGradient.cpp index bc2ea3b92b..f13d55c6e0 100644 --- a/src/effects/gradients/SkRadialGradient.cpp +++ b/src/effects/gradients/SkRadialGradient.cpp @@ -146,8 +146,8 @@ void shadeSpan16_radial_repeat(SkScalar fx, SkScalar dx, SkScalar fy, SkScalar d ///////////////////////////////////////////////////////////////////// SkRadialGradient::SkRadialGradient(const SkPoint& center, SkScalar radius, - const Descriptor& desc) - : SkGradientShaderBase(desc), + const Descriptor& desc, const SkMatrix* localMatrix) + : SkGradientShaderBase(desc, localMatrix), fCenter(center), fRadius(radius) { diff --git a/src/effects/gradients/SkRadialGradient.h b/src/effects/gradients/SkRadialGradient.h index a3d04b1aaf..7aafe2d153 100644 --- a/src/effects/gradients/SkRadialGradient.h +++ b/src/effects/gradients/SkRadialGradient.h @@ -13,7 +13,8 @@ class SkRadialGradient : public SkGradientShaderBase { public: - SkRadialGradient(const SkPoint& center, SkScalar radius, const Descriptor&); + SkRadialGradient(const SkPoint& center, SkScalar radius, const Descriptor&, + const SkMatrix* localMatrix); virtual SkShader::Context* createContext(const SkBitmap&, const SkPaint&, const SkMatrix&, void* storage) const SK_OVERRIDE; diff --git a/src/effects/gradients/SkSweepGradient.cpp b/src/effects/gradients/SkSweepGradient.cpp index 6dff1e71cd..a65631c677 100644 --- a/src/effects/gradients/SkSweepGradient.cpp +++ b/src/effects/gradients/SkSweepGradient.cpp @@ -9,8 +9,8 @@ #include "SkSweepGradient.h" SkSweepGradient::SkSweepGradient(SkScalar cx, SkScalar cy, - const Descriptor& desc) - : SkGradientShaderBase(desc) + const Descriptor& desc, const SkMatrix* localMatrix) + : SkGradientShaderBase(desc, localMatrix) , fCenter(SkPoint::Make(cx, cy)) { fPtsToUnit.setTranslate(-cx, -cy); diff --git a/src/effects/gradients/SkSweepGradient.h b/src/effects/gradients/SkSweepGradient.h index 9998ed16a7..15c5b634ae 100644 --- a/src/effects/gradients/SkSweepGradient.h +++ b/src/effects/gradients/SkSweepGradient.h @@ -13,7 +13,8 @@ class SkSweepGradient : public SkGradientShaderBase { public: - SkSweepGradient(SkScalar cx, SkScalar cy, const Descriptor&); + SkSweepGradient(SkScalar cx, SkScalar cy, const Descriptor&, + const SkMatrix* localMatrix); virtual SkShader::Context* createContext(const SkBitmap&, const SkPaint&, const SkMatrix&, void* storage) const SK_OVERRIDE; diff --git a/src/effects/gradients/SkTwoPointConicalGradient.cpp b/src/effects/gradients/SkTwoPointConicalGradient.cpp index b7aba827bb..9d1f8f1a82 100644 --- a/src/effects/gradients/SkTwoPointConicalGradient.cpp +++ b/src/effects/gradients/SkTwoPointConicalGradient.cpp @@ -197,8 +197,9 @@ void SkTwoPointConicalGradient::init() { SkTwoPointConicalGradient::SkTwoPointConicalGradient( const SkPoint& start, SkScalar startRadius, const SkPoint& end, SkScalar endRadius, - bool flippedGrad, const Descriptor& desc) - : SkGradientShaderBase(desc), + bool flippedGrad, const Descriptor& desc, + const SkMatrix* localMatrix) + : SkGradientShaderBase(desc, localMatrix), fCenter1(start), fCenter2(end), fRadius1(startRadius), diff --git a/src/effects/gradients/SkTwoPointConicalGradient.h b/src/effects/gradients/SkTwoPointConicalGradient.h index 80aa6fa693..13ce3eaf26 100644 --- a/src/effects/gradients/SkTwoPointConicalGradient.h +++ b/src/effects/gradients/SkTwoPointConicalGradient.h @@ -44,7 +44,8 @@ class SkTwoPointConicalGradient : public SkGradientShaderBase { public: SkTwoPointConicalGradient(const SkPoint& start, SkScalar startRadius, const SkPoint& end, SkScalar endRadius, - bool flippedGrad, const Descriptor&); + bool flippedGrad, const Descriptor&, + const SkMatrix* localMatrix); virtual SkShader::Context* createContext(const SkBitmap&, const SkPaint&, const SkMatrix&, diff --git a/src/effects/gradients/SkTwoPointRadialGradient.cpp b/src/effects/gradients/SkTwoPointRadialGradient.cpp index a598c6e0e3..41e577fbd0 100644 --- a/src/effects/gradients/SkTwoPointRadialGradient.cpp +++ b/src/effects/gradients/SkTwoPointRadialGradient.cpp @@ -170,8 +170,8 @@ void shadeSpan_twopoint_repeat(SkScalar fx, SkScalar dx, SkTwoPointRadialGradient::SkTwoPointRadialGradient( const SkPoint& start, SkScalar startRadius, const SkPoint& end, SkScalar endRadius, - const Descriptor& desc) - : SkGradientShaderBase(desc), + const Descriptor& desc, const SkMatrix* localMatrix) + : SkGradientShaderBase(desc, localMatrix), fCenter1(start), fCenter2(end), fRadius1(startRadius), diff --git a/src/effects/gradients/SkTwoPointRadialGradient.h b/src/effects/gradients/SkTwoPointRadialGradient.h index 9ba89f2920..1b387e6896 100644 --- a/src/effects/gradients/SkTwoPointRadialGradient.h +++ b/src/effects/gradients/SkTwoPointRadialGradient.h @@ -15,7 +15,7 @@ class SkTwoPointRadialGradient : public SkGradientShaderBase { public: SkTwoPointRadialGradient(const SkPoint& start, SkScalar startRadius, const SkPoint& end, SkScalar endRadius, - const Descriptor&); + const Descriptor&, const SkMatrix* localMatrix); virtual BitmapType asABitmap(SkBitmap* bitmap, SkMatrix* matrix, diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index 53641dc083..4af16109a4 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -1202,8 +1202,7 @@ void SkGpuDevice::drawBitmapCommon(const SkDraw& draw, SkPaint paintWithShader(paint); paintWithShader.setShader(SkShader::CreateBitmapShader(*bitmapPtr, - SkShader::kClamp_TileMode, SkShader::kClamp_TileMode))->unref(); - paintWithShader.getShader()->setLocalMatrix(localM); + SkShader::kClamp_TileMode, SkShader::kClamp_TileMode, &localM))->unref(); SkRect dstRect = {0, 0, dstSize.fWidth, dstSize.fHeight}; this->drawRect(draw, dstRect, paintWithShader); -- cgit v1.2.3