| 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;
|
|
|