Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(416)

Unified Diff: third_party/WebKit/Source/platform/graphics/paint/EffectPaintPropertyNode.h

Issue 2428513004: [SPv2] Create effect nodes for CSS filter (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..d10566e4d2493c9c9b86494a4f1afa24e05900c2 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,30 +15,40 @@
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,
- float opacity) {
- return adoptRef(new EffectPaintPropertyNode(std::move(parent), opacity));
+ PassRefPtr<const TransformPaintPropertyNode> localTransformSpace,
+ PassRefPtr<const ClipPaintPropertyNode> outputClip,
+ float opacity, CompositorFilterOperations filter) {
+ return adoptRef(new EffectPaintPropertyNode(std::move(parent), std::move(localTransformSpace), std::move(outputClip), opacity, std::move(filter)));
}
- void update(PassRefPtr<const EffectPaintPropertyNode> parent, float opacity) {
+ void update(PassRefPtr<const EffectPaintPropertyNode> parent,
+ PassRefPtr<const TransformPaintPropertyNode> localTransformSpace,
+ PassRefPtr<const ClipPaintPropertyNode> outputClip,
+ float opacity, CompositorFilterOperations filter) {
DCHECK(!isRoot());
DCHECK(parent != this);
m_parent = parent;
+ m_localTransformSpace = localTransformSpace;
+ m_outputClip = outputClip;
m_opacity = opacity;
+ m_filter = std::move(filter);
}
+ 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(); }
@@ -45,11 +56,28 @@ class PLATFORM_EXPORT EffectPaintPropertyNode
private:
EffectPaintPropertyNode(PassRefPtr<const EffectPaintPropertyNode> parent,
- float opacity)
- : m_parent(parent), m_opacity(opacity) {}
+ PassRefPtr<const TransformPaintPropertyNode> localTransformSpace,
+ PassRefPtr<const ClipPaintPropertyNode> outputClip,
+ float opacity, CompositorFilterOperations filter)
+ : m_parent(parent), m_localTransformSpace(localTransformSpace), m_outputClip(outputClip), m_opacity(opacity), m_filter(std::move(filter)) {}
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 are applied in reverse order of the following list:
pdr. 2016/10/19 17:44:43 Nit: can we list these in order instead of reverse
trchen 2016/10/21 23:26:39 Done. By the way every time we added a new proper
+ // === Begin of effects ===
float m_opacity;
+ CompositorFilterOperations m_filter;
+ // === End of effects ===
};
// Redeclared here to avoid ODR issues.

Powered by Google App Engine
This is Rietveld 408576698