Index: third_party/WebKit/Source/platform/graphics/filters/FEComposite.cpp |
diff --git a/third_party/WebKit/Source/platform/graphics/filters/FEComposite.cpp b/third_party/WebKit/Source/platform/graphics/filters/FEComposite.cpp |
index 2b663728d28bab97effb40bbd6d24233957db0ea..c8711cf8d8004b960c492b67e16e5ee4ff741b18 100644 |
--- a/third_party/WebKit/Source/platform/graphics/filters/FEComposite.cpp |
+++ b/third_party/WebKit/Source/platform/graphics/filters/FEComposite.cpp |
@@ -113,55 +113,39 @@ bool FEComposite::setK4(float k4) |
return true; |
} |
-FloatRect FEComposite::determineAbsolutePaintRect(const FloatRect& originalRequestedRect) const |
+bool FEComposite::affectsTransparentPixels() const |
{ |
- FloatRect requestedRect = originalRequestedRect; |
- if (clipsToBounds()) |
- requestedRect.intersect(absoluteBounds()); |
+ return k4() > 0; |
pdr.
2016/09/16 18:29:18
Can you add a comment explaining this line?
There
fs
2016/09/16 18:53:28
Sure.
fs
2016/09/16 20:16:21
Noticed that I should probably have checked m_type
|
+} |
- // No mapPaintRect required for FEComposite. |
- FloatRect input1Rect = inputEffect(1)->determineAbsolutePaintRect(requestedRect); |
- FloatRect affectedRect; |
+FloatRect FEComposite::mapInputs(const FloatRect& rect) const |
+{ |
+ FloatRect input1Rect = inputEffect(1)->mapRect(rect); |
switch (m_type) { |
case FECOMPOSITE_OPERATOR_IN: |
// 'in' has output only in the intersection of both inputs. |
- affectedRect = intersection(input1Rect, inputEffect(0)->determineAbsolutePaintRect(input1Rect)); |
- break; |
+ return intersection(input1Rect, inputEffect(0)->mapRect(input1Rect)); |
case FECOMPOSITE_OPERATOR_ATOP: |
// 'atop' has output only in the extents of the second input. |
- // Make sure first input knows where it needs to produce output. |
- inputEffect(0)->determineAbsolutePaintRect(input1Rect); |
- affectedRect = input1Rect; |
- break; |
+ return input1Rect; |
case FECOMPOSITE_OPERATOR_ARITHMETIC: |
- if (k4() > 0) { |
- // Make sure first input knows where it needs to produce output. |
- inputEffect(0)->determineAbsolutePaintRect(requestedRect); |
- // Arithmetic with non-zero k4 may influnce the complete filter primitive |
- // region. So we can't optimize the paint region here. |
- affectedRect = requestedRect; |
- break; |
- } |
+ // Arithmetic with non-zero k4 may influnce the complete filter primitive |
pdr.
2016/09/16 18:29:18
Nit: "influence"
If possible, can you add comment
fs
2016/09/16 18:53:28
I'll see if can express this in a not too verbose
fs
2016/09/16 20:16:21
Comments added.
|
+ // region. |
+ if (k4() > 0) |
+ return rect; |
if (k2() <= 0) { |
// Input 0 does not appear where input 1 is not present. |
- FloatRect input0Rect = inputEffect(0)->determineAbsolutePaintRect(input1Rect); |
- if (k3() > 0) { |
- affectedRect = input1Rect; |
- } else { |
- // Just k1 is positive. Use intersection. |
- affectedRect = intersection(input1Rect, input0Rect); |
- } |
- break; |
+ if (k3() > 0) |
+ return input1Rect; |
+ // Just k1 is positive. Use intersection. |
+ return intersection(input1Rect, inputEffect(0)->mapRect(input1Rect)); |
} |
// else fall through to use union |
default: |
- // Take the union of both input effects. |
- affectedRect = unionRect(input1Rect, inputEffect(0)->determineAbsolutePaintRect(requestedRect)); |
break; |
} |
- |
- affectedRect.intersect(requestedRect); |
- return affectedRect; |
+ // Take the union of both input effects. |
+ return unionRect(input1Rect, inputEffect(0)->mapRect(rect)); |
} |
SkXfermode::Mode toXfermode(CompositeOperationType mode) |