| Index: Source/core/platform/graphics/filters/FEDropShadow.cpp
|
| diff --git a/Source/core/platform/graphics/filters/FEDropShadow.cpp b/Source/core/platform/graphics/filters/FEDropShadow.cpp
|
| index b0065aef2a2232ba5a7ffbed3e5f15ff377c5141..a2c5406aa8af17e68babf1d1d574724f49bb17c0 100644
|
| --- a/Source/core/platform/graphics/filters/FEDropShadow.cpp
|
| +++ b/Source/core/platform/graphics/filters/FEDropShadow.cpp
|
| @@ -57,18 +57,7 @@ void FEDropShadow::determineAbsolutePaintRect()
|
| Filter* filter = this->filter();
|
| ASSERT(filter);
|
|
|
| - FloatRect absolutePaintRect = inputEffect(0)->absolutePaintRect();
|
| - FloatRect absoluteOffsetPaintRect(absolutePaintRect);
|
| - absoluteOffsetPaintRect.move(filter->applyHorizontalScale(m_dx), filter->applyVerticalScale(m_dy));
|
| - absolutePaintRect.unite(absoluteOffsetPaintRect);
|
| -
|
| - unsigned kernelSizeX = 0;
|
| - unsigned kernelSizeY = 0;
|
| - FEGaussianBlur::calculateKernelSize(filter, kernelSizeX, kernelSizeY, m_stdX, m_stdY);
|
| -
|
| - // We take the half kernel size and multiply it with three, because we run box blur three times.
|
| - absolutePaintRect.inflateX(3 * kernelSizeX * 0.5f);
|
| - absolutePaintRect.inflateY(3 * kernelSizeY * 0.5f);
|
| + FloatRect absolutePaintRect = mapRect(inputEffect(0)->absolutePaintRect());
|
|
|
| if (clipsToBounds())
|
| absolutePaintRect.intersect(maxEffectRect());
|
| @@ -78,6 +67,29 @@ void FEDropShadow::determineAbsolutePaintRect()
|
| setAbsolutePaintRect(enclosingIntRect(absolutePaintRect));
|
| }
|
|
|
| +FloatRect FEDropShadow::mapRect(const FloatRect& rect, bool forward)
|
| +{
|
| + FloatRect result = rect;
|
| + Filter* filter = this->filter();
|
| + ASSERT(filter);
|
| +
|
| + FloatRect offsetRect = rect;
|
| + if (forward)
|
| + offsetRect.move(filter->applyHorizontalScale(m_dx), filter->applyVerticalScale(m_dy));
|
| + else
|
| + offsetRect.move(-filter->applyHorizontalScale(m_dx), -filter->applyVerticalScale(m_dy));
|
| + result.unite(offsetRect);
|
| +
|
| + unsigned kernelSizeX = 0;
|
| + unsigned kernelSizeY = 0;
|
| + FEGaussianBlur::calculateKernelSize(filter, kernelSizeX, kernelSizeY, m_stdX, m_stdY);
|
| +
|
| + // We take the half kernel size and multiply it with three, because we run box blur three times.
|
| + result.inflateX(3 * kernelSizeX * 0.5f);
|
| + result.inflateY(3 * kernelSizeY * 0.5f);
|
| + return result;
|
| +}
|
| +
|
| void FEDropShadow::applySoftware()
|
| {
|
| FilterEffect* in = inputEffect(0);
|
|
|