| Index: third_party/WebKit/Source/platform/graphics/filters/FilterEffect.cpp
|
| diff --git a/third_party/WebKit/Source/platform/graphics/filters/FilterEffect.cpp b/third_party/WebKit/Source/platform/graphics/filters/FilterEffect.cpp
|
| index 1b5f60c7b2725cb7b309c48a587378a669e0b253..4d8dbdf5802d6b662cad33a2489f881d0ede8658 100644
|
| --- a/third_party/WebKit/Source/platform/graphics/filters/FilterEffect.cpp
|
| +++ b/third_party/WebKit/Source/platform/graphics/filters/FilterEffect.cpp
|
| @@ -56,40 +56,40 @@ FloatRect FilterEffect::absoluteBounds() const
|
| return getFilter()->mapLocalRectToAbsoluteRect(computedBounds);
|
| }
|
|
|
| -FloatRect FilterEffect::determineAbsolutePaintRect(const FloatRect& originalRequestedRect) const
|
| +FloatRect FilterEffect::mapInputs(const FloatRect& rect) const
|
| {
|
| - FloatRect requestedRect = originalRequestedRect;
|
| - // Filters in SVG clip to primitive subregion, while CSS doesn't.
|
| - if (clipsToBounds())
|
| - requestedRect.intersect(absoluteBounds());
|
| -
|
| - FloatRect inputRect = mapPaintRect(requestedRect, false);
|
| + if (!m_inputEffects.size()) {
|
| + if (clipsToBounds())
|
| + return absoluteBounds();
|
| + return rect;
|
| + }
|
| FloatRect inputUnion;
|
| - unsigned size = m_inputEffects.size();
|
| + for (const auto& effect : m_inputEffects)
|
| + inputUnion.unite(effect->mapRect(rect));
|
| + return inputUnion;
|
| +}
|
|
|
| - for (unsigned i = 0; i < size; ++i)
|
| - inputUnion.unite(m_inputEffects.at(i)->determineAbsolutePaintRect(inputRect));
|
| - inputUnion = mapPaintRect(inputUnion, true);
|
| +FloatRect FilterEffect::mapEffect(const FloatRect& rect) const
|
| +{
|
| + return rect;
|
| +}
|
|
|
| - if (affectsTransparentPixels() || !size) {
|
| - inputUnion = requestedRect;
|
| - } else {
|
| - // Rect may have inflated. Re-intersect with request.
|
| - inputUnion.intersect(requestedRect);
|
| - }
|
| - return inputUnion;
|
| +FloatRect FilterEffect::applyBounds(const FloatRect& rect) const
|
| +{
|
| + // Filters in SVG clip to primitive subregion, while CSS doesn't.
|
| + if (!clipsToBounds())
|
| + return rect;
|
| + FloatRect bounds = absoluteBounds();
|
| + if (affectsTransparentPixels())
|
| + return bounds;
|
| + return intersection(rect, bounds);
|
| }
|
|
|
| -FloatRect FilterEffect::mapRectRecursive(const FloatRect& rect) const
|
| +FloatRect FilterEffect::mapRect(const FloatRect& rect) const
|
| {
|
| - FloatRect result;
|
| - if (m_inputEffects.size() > 0) {
|
| - result = m_inputEffects.at(0)->mapRectRecursive(rect);
|
| - for (unsigned i = 1; i < m_inputEffects.size(); ++i)
|
| - result.unite(m_inputEffects.at(i)->mapRectRecursive(rect));
|
| - } else
|
| - result = rect;
|
| - return mapRect(result);
|
| + FloatRect result = mapInputs(rect);
|
| + result = mapEffect(result);
|
| + return applyBounds(result);
|
| }
|
|
|
| FilterEffect* FilterEffect::inputEffect(unsigned number) const
|
|
|