Index: third_party/WebKit/Source/platform/graphics/paint/EffectPaintPropertyNode.h |
diff --git a/third_party/WebKit/Source/platform/graphics/paint/EffectPaintPropertyNode.h b/third_party/WebKit/Source/platform/graphics/paint/EffectPaintPropertyNode.h |
index 94b9519480df322e950ba412367622d75bc60bf2..0f09dabc0bec8da7a901b7be0f7c1a7b26322127 100644 |
--- a/third_party/WebKit/Source/platform/graphics/paint/EffectPaintPropertyNode.h |
+++ b/third_party/WebKit/Source/platform/graphics/paint/EffectPaintPropertyNode.h |
@@ -6,6 +6,7 @@ |
#define EffectPaintPropertyNode_h |
#include "platform/PlatformExport.h" |
+#include "platform/graphics/CompositorFilterOperations.h" |
#include "wtf/PassRefPtr.h" |
#include "wtf/RefCounted.h" |
#include "wtf/RefPtr.h" |
@@ -14,42 +15,81 @@ |
namespace blink { |
-// A paint effect created by the opacity css property along with a reference to |
-// the parent effect for inherited effects. |
+// Effect nodes are abstraction of isolated groups, along with optional effects |
+// that can be applied to the composited output of the group. |
// |
// The effect tree is rooted at a node with no parent. This root node should |
// not be modified. |
-// |
-// TODO(pdr): Support more effects than just opacity. |
class PLATFORM_EXPORT EffectPaintPropertyNode |
: public RefCounted<EffectPaintPropertyNode> { |
public: |
static PassRefPtr<EffectPaintPropertyNode> create( |
PassRefPtr<const EffectPaintPropertyNode> parent, |
+ PassRefPtr<const TransformPaintPropertyNode> localTransformSpace, |
+ PassRefPtr<const ClipPaintPropertyNode> outputClip, |
+ CompositorFilterOperations filter, |
float opacity) { |
- return adoptRef(new EffectPaintPropertyNode(std::move(parent), opacity)); |
+ return adoptRef(new EffectPaintPropertyNode( |
+ std::move(parent), std::move(localTransformSpace), |
+ std::move(outputClip), std::move(filter), opacity)); |
} |
- void update(PassRefPtr<const EffectPaintPropertyNode> parent, float opacity) { |
+ void update(PassRefPtr<const EffectPaintPropertyNode> parent, |
+ PassRefPtr<const TransformPaintPropertyNode> localTransformSpace, |
+ PassRefPtr<const ClipPaintPropertyNode> outputClip, |
+ CompositorFilterOperations filter, |
+ float opacity) { |
DCHECK(!isRoot()); |
DCHECK(parent != this); |
m_parent = parent; |
+ m_localTransformSpace = localTransformSpace; |
+ m_outputClip = outputClip; |
+ m_filter = std::move(filter); |
m_opacity = opacity; |
} |
+ const TransformPaintPropertyNode* localTransformSpace() const { |
+ return m_localTransformSpace.get(); |
+ } |
+ const ClipPaintPropertyNode* outputClip() const { return m_outputClip.get(); } |
+ |
float opacity() const { return m_opacity; } |
+ const CompositorFilterOperations& filter() const { return m_filter; } |
// Parent effect or nullptr if this is the root effect. |
const EffectPaintPropertyNode* parent() const { return m_parent.get(); } |
bool isRoot() const { return !m_parent; } |
private: |
- EffectPaintPropertyNode(PassRefPtr<const EffectPaintPropertyNode> parent, |
- float opacity) |
- : m_parent(parent), m_opacity(opacity) {} |
+ EffectPaintPropertyNode( |
+ PassRefPtr<const EffectPaintPropertyNode> parent, |
+ PassRefPtr<const TransformPaintPropertyNode> localTransformSpace, |
+ PassRefPtr<const ClipPaintPropertyNode> outputClip, |
+ CompositorFilterOperations filter, |
+ float opacity) |
+ : m_parent(parent), |
+ m_localTransformSpace(localTransformSpace), |
+ m_outputClip(outputClip), |
+ m_filter(std::move(filter)), |
+ m_opacity(opacity) {} |
RefPtr<const EffectPaintPropertyNode> m_parent; |
+ // The local transform space serves two purposes: |
+ // 1. Assign a depth mapping for 3D depth sorting against other paint chunks |
+ // and effects under the same parent. |
+ // 2. Some effects are spatial (namely blur filter and reflection), the |
+ // effect parameters will be specified in the local space. |
+ RefPtr<const TransformPaintPropertyNode> m_localTransformSpace; |
+ // The output of the effect can be optionally clipped when composited onto |
+ // the current backdrop. |
+ RefPtr<const ClipPaintPropertyNode> m_outputClip; |
+ |
+ // Optionally a number of effects can be applied to the composited output. |
+ // The chain of effects will be applied in the following order: |
+ // === Begin of effects === |
+ CompositorFilterOperations m_filter; |
float m_opacity; |
+ // === End of effects === |
}; |
// Redeclared here to avoid ODR issues. |