OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef EffectPaintPropertyNode_h | 5 #ifndef EffectPaintPropertyNode_h |
6 #define EffectPaintPropertyNode_h | 6 #define EffectPaintPropertyNode_h |
7 | 7 |
8 #include "platform/PlatformExport.h" | 8 #include "platform/PlatformExport.h" |
| 9 #include "platform/graphics/CompositorFilterOperations.h" |
9 #include "wtf/PassRefPtr.h" | 10 #include "wtf/PassRefPtr.h" |
10 #include "wtf/RefCounted.h" | 11 #include "wtf/RefCounted.h" |
11 #include "wtf/RefPtr.h" | 12 #include "wtf/RefPtr.h" |
12 | 13 |
13 #include <iosfwd> | 14 #include <iosfwd> |
14 | 15 |
15 namespace blink { | 16 namespace blink { |
16 | 17 |
17 // A paint effect created by the opacity css property along with a reference to | 18 // Effect nodes are abstraction of isolated groups, along with optional effects |
18 // the parent effect for inherited effects. | 19 // that can be applied to the composited output of the group. |
19 // | 20 // |
20 // The effect tree is rooted at a node with no parent. This root node should | 21 // The effect tree is rooted at a node with no parent. This root node should |
21 // not be modified. | 22 // not be modified. |
22 // | |
23 // TODO(pdr): Support more effects than just opacity. | |
24 class PLATFORM_EXPORT EffectPaintPropertyNode | 23 class PLATFORM_EXPORT EffectPaintPropertyNode |
25 : public RefCounted<EffectPaintPropertyNode> { | 24 : public RefCounted<EffectPaintPropertyNode> { |
26 public: | 25 public: |
27 static PassRefPtr<EffectPaintPropertyNode> create( | 26 static PassRefPtr<EffectPaintPropertyNode> create( |
28 PassRefPtr<const EffectPaintPropertyNode> parent, | 27 PassRefPtr<const EffectPaintPropertyNode> parent, |
| 28 PassRefPtr<const TransformPaintPropertyNode> localTransformSpace, |
| 29 PassRefPtr<const ClipPaintPropertyNode> outputClip, |
| 30 CompositorFilterOperations filter, |
29 float opacity) { | 31 float opacity) { |
30 return adoptRef(new EffectPaintPropertyNode(std::move(parent), opacity)); | 32 return adoptRef(new EffectPaintPropertyNode( |
| 33 std::move(parent), std::move(localTransformSpace), |
| 34 std::move(outputClip), std::move(filter), opacity)); |
31 } | 35 } |
32 | 36 |
33 void update(PassRefPtr<const EffectPaintPropertyNode> parent, float opacity) { | 37 void update(PassRefPtr<const EffectPaintPropertyNode> parent, |
| 38 PassRefPtr<const TransformPaintPropertyNode> localTransformSpace, |
| 39 PassRefPtr<const ClipPaintPropertyNode> outputClip, |
| 40 CompositorFilterOperations filter, |
| 41 float opacity) { |
34 DCHECK(!isRoot()); | 42 DCHECK(!isRoot()); |
35 DCHECK(parent != this); | 43 DCHECK(parent != this); |
36 m_parent = parent; | 44 m_parent = parent; |
| 45 m_localTransformSpace = localTransformSpace; |
| 46 m_outputClip = outputClip; |
| 47 m_filter = std::move(filter); |
37 m_opacity = opacity; | 48 m_opacity = opacity; |
38 } | 49 } |
39 | 50 |
| 51 const TransformPaintPropertyNode* localTransformSpace() const { |
| 52 return m_localTransformSpace.get(); |
| 53 } |
| 54 const ClipPaintPropertyNode* outputClip() const { return m_outputClip.get(); } |
| 55 |
40 float opacity() const { return m_opacity; } | 56 float opacity() const { return m_opacity; } |
| 57 const CompositorFilterOperations& filter() const { return m_filter; } |
41 | 58 |
42 // Parent effect or nullptr if this is the root effect. | 59 // Parent effect or nullptr if this is the root effect. |
43 const EffectPaintPropertyNode* parent() const { return m_parent.get(); } | 60 const EffectPaintPropertyNode* parent() const { return m_parent.get(); } |
44 bool isRoot() const { return !m_parent; } | 61 bool isRoot() const { return !m_parent; } |
45 | 62 |
46 private: | 63 private: |
47 EffectPaintPropertyNode(PassRefPtr<const EffectPaintPropertyNode> parent, | 64 EffectPaintPropertyNode( |
48 float opacity) | 65 PassRefPtr<const EffectPaintPropertyNode> parent, |
49 : m_parent(parent), m_opacity(opacity) {} | 66 PassRefPtr<const TransformPaintPropertyNode> localTransformSpace, |
| 67 PassRefPtr<const ClipPaintPropertyNode> outputClip, |
| 68 CompositorFilterOperations filter, |
| 69 float opacity) |
| 70 : m_parent(parent), |
| 71 m_localTransformSpace(localTransformSpace), |
| 72 m_outputClip(outputClip), |
| 73 m_filter(std::move(filter)), |
| 74 m_opacity(opacity) {} |
50 | 75 |
51 RefPtr<const EffectPaintPropertyNode> m_parent; | 76 RefPtr<const EffectPaintPropertyNode> m_parent; |
| 77 // The local transform space serves two purposes: |
| 78 // 1. Assign a depth mapping for 3D depth sorting against other paint chunks |
| 79 // and effects under the same parent. |
| 80 // 2. Some effects are spatial (namely blur filter and reflection), the |
| 81 // effect parameters will be specified in the local space. |
| 82 RefPtr<const TransformPaintPropertyNode> m_localTransformSpace; |
| 83 // The output of the effect can be optionally clipped when composited onto |
| 84 // the current backdrop. |
| 85 RefPtr<const ClipPaintPropertyNode> m_outputClip; |
| 86 |
| 87 // Optionally a number of effects can be applied to the composited output. |
| 88 // The chain of effects will be applied in the following order: |
| 89 // === Begin of effects === |
| 90 CompositorFilterOperations m_filter; |
52 float m_opacity; | 91 float m_opacity; |
| 92 // === End of effects === |
53 }; | 93 }; |
54 | 94 |
55 // Redeclared here to avoid ODR issues. | 95 // Redeclared here to avoid ODR issues. |
56 // See platform/testing/PaintPrinters.h. | 96 // See platform/testing/PaintPrinters.h. |
57 void PrintTo(const EffectPaintPropertyNode&, std::ostream*); | 97 void PrintTo(const EffectPaintPropertyNode&, std::ostream*); |
58 | 98 |
59 } // namespace blink | 99 } // namespace blink |
60 | 100 |
61 #endif // EffectPaintPropertyNode_h | 101 #endif // EffectPaintPropertyNode_h |
OLD | NEW |