diff options
Diffstat (limited to 'src/effects/SkDropShadowImageFilter.cpp')
-rw-r--r-- | src/effects/SkDropShadowImageFilter.cpp | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/src/effects/SkDropShadowImageFilter.cpp b/src/effects/SkDropShadowImageFilter.cpp index 7519d5313d..eb05cf09ec 100644 --- a/src/effects/SkDropShadowImageFilter.cpp +++ b/src/effects/SkDropShadowImageFilter.cpp @@ -116,25 +116,23 @@ void SkDropShadowImageFilter::computeFastBounds(const SkRect& src, SkRect* dst) } } -bool SkDropShadowImageFilter::onFilterBounds(const SkIRect& src, const SkMatrix& ctm, - SkIRect* dst) const { - SkIRect bounds = src; +void SkDropShadowImageFilter::onFilterNodeBounds(const SkIRect& src, const SkMatrix& ctm, + SkIRect* dst, MapDirection direction) const { + *dst = src; SkVector offsetVec = SkVector::Make(fDx, fDy); + if (kReverse_MapDirection == direction) { + offsetVec.negate(); + } ctm.mapVectors(&offsetVec, 1); - bounds.offset(-SkScalarCeilToInt(offsetVec.x()), - -SkScalarCeilToInt(offsetVec.y())); + dst->offset(SkScalarCeilToInt(offsetVec.x()), + SkScalarCeilToInt(offsetVec.y())); SkVector sigma = SkVector::Make(fSigmaX, fSigmaY); ctm.mapVectors(&sigma, 1); - bounds.outset(SkScalarCeilToInt(SkScalarMul(sigma.x(), SkIntToScalar(3))), - SkScalarCeilToInt(SkScalarMul(sigma.y(), SkIntToScalar(3)))); + dst->outset(SkScalarCeilToInt(SkScalarMul(sigma.x(), SkIntToScalar(3))), + SkScalarCeilToInt(SkScalarMul(sigma.y(), SkIntToScalar(3)))); if (fShadowMode == kDrawShadowAndForeground_ShadowMode) { - bounds.join(src); - } - if (getInput(0) && !getInput(0)->filterBounds(bounds, ctm, &bounds)) { - return false; + dst->join(src); } - *dst = bounds; - return true; } #ifndef SK_IGNORE_TO_STRING |