Index: src/effects/SkDropShadowImageFilter.cpp |
diff --git a/src/effects/SkDropShadowImageFilter.cpp b/src/effects/SkDropShadowImageFilter.cpp |
index 60294e4f027a8ca91fe891b98715782c9ff903b4..cbe8cb1a8e14c84ecbd7a5d244ea3279f678d3fe 100644 |
--- a/src/effects/SkDropShadowImageFilter.cpp |
+++ b/src/effects/SkDropShadowImageFilter.cpp |
@@ -16,44 +16,36 @@ |
SkDropShadowImageFilter::SkDropShadowImageFilter(SkScalar dx, SkScalar dy, SkScalar sigma, SkColor color, SkImageFilter* input) |
: INHERITED(input) |
- , fDx(dx) |
- , fDy(dy) |
- , fSigmaX(sigma) |
- , fSigmaY(sigma) |
+ , fOffset(SkVector::Make(dx, dy)) |
+ , fSigma(SkVector::Make(sigma, sigma)) |
, fColor(color) |
{ |
} |
SkDropShadowImageFilter::SkDropShadowImageFilter(SkScalar dx, SkScalar dy, SkScalar sigmaX, SkScalar sigmaY, SkColor color, SkImageFilter* input, const CropRect* cropRect) |
: INHERITED(input, cropRect) |
- , fDx(dx) |
- , fDy(dy) |
- , fSigmaX(sigmaX) |
- , fSigmaY(sigmaY) |
+ , fOffset(SkVector::Make(dx, dy)) |
+ , fSigma(SkVector::Make(sigmaX, sigmaY)) |
, fColor(color) |
{ |
} |
SkDropShadowImageFilter::SkDropShadowImageFilter(SkFlattenableReadBuffer& buffer) |
: INHERITED(1, buffer) { |
- fDx = buffer.readScalar(); |
- fDy = buffer.readScalar(); |
- fSigmaX = buffer.readScalar(); |
- fSigmaY = buffer.readScalar(); |
+ buffer.readPoint(&fOffset); |
+ buffer.readPoint(&fSigma); |
fColor = buffer.readColor(); |
- buffer.validate(SkScalarIsFinite(fDx) && |
- SkScalarIsFinite(fDy) && |
- SkScalarIsFinite(fSigmaX) && |
- SkScalarIsFinite(fSigmaY)); |
+ buffer.validate(SkScalarIsFinite(fOffset.fX) && |
+ SkScalarIsFinite(fOffset.fY) && |
+ SkScalarIsFinite(fSigma.fX) && |
+ SkScalarIsFinite(fSigma.fY)); |
} |
void SkDropShadowImageFilter::flatten(SkFlattenableWriteBuffer& buffer) const |
{ |
this->INHERITED::flatten(buffer); |
- buffer.writeScalar(fDx); |
- buffer.writeScalar(fDy); |
- buffer.writeScalar(fSigmaX); |
- buffer.writeScalar(fSigmaY); |
+ buffer.writePoint(fOffset); |
+ buffer.writePoint(fSigma); |
buffer.writeColor(fColor); |
} |
@@ -77,14 +69,18 @@ bool SkDropShadowImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& source |
} |
SkCanvas canvas(device.get()); |
- SkAutoTUnref<SkImageFilter> blurFilter(new SkBlurImageFilter(fSigmaX, fSigmaY)); |
+ SkVector sigma; |
+ matrix.mapVectors(&sigma, &fSigma, 1); |
+ SkAutoTUnref<SkImageFilter> blurFilter(new SkBlurImageFilter(sigma.fX, sigma.fY)); |
SkAutoTUnref<SkColorFilter> colorFilter(SkColorFilter::CreateModeFilter(fColor, SkXfermode::kSrcIn_Mode)); |
SkPaint paint; |
paint.setImageFilter(blurFilter.get()); |
paint.setColorFilter(colorFilter.get()); |
paint.setXfermodeMode(SkXfermode::kSrcOver_Mode); |
+ SkVector offsetVec; |
+ matrix.mapVectors(&offsetVec, &fOffset, 1); |
canvas.translate(-SkIntToScalar(bounds.fLeft), -SkIntToScalar(bounds.fTop)); |
- canvas.drawBitmap(src, fDx, fDy, &paint); |
+ canvas.drawBitmap(src, offsetVec.fX, offsetVec.fY, &paint); |
canvas.drawBitmap(src, 0, 0); |
*result = device->accessBitmap(false); |
offset->fX = bounds.fLeft; |