6431f848c6a98f9c6eb25c1dcadc2a13623d651f
[WebKit-https.git] / Source / Platform / chromium / public / WebLayer.h
1 /*
2  * Copyright (C) 2011 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1.  Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer.
10  * 2.  Redistributions in binary form must reproduce the above copyright
11  *     notice, this list of conditions and the following disclaimer in the
12  *     documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef WebLayer_h
27 #define WebLayer_h
28
29 #include "WebAnimation.h"
30 #include "WebColor.h"
31 #include "WebCommon.h"
32 #include "WebPrivatePtr.h"
33 #include "WebString.h"
34 #include "WebVector.h"
35
36 class SkMatrix44;
37 namespace WebCore { class LayerChromium; }
38
39 namespace WebKit {
40 class WebAnimationDelegate;
41 class WebFilterOperations;
42 class WebTransformationMatrix;
43 struct WebFloatPoint;
44 struct WebFloatRect;
45 struct WebSize;
46
47 class WebLayer {
48 public:
49     WEBKIT_EXPORT static WebLayer create();
50
51     WebLayer() { }
52     WebLayer(const WebLayer& layer) { assign(layer); }
53     virtual ~WebLayer() { reset(); }
54     WebLayer& operator=(const WebLayer& layer)
55     {
56         assign(layer);
57         return *this;
58     }
59     bool isNull() const { return m_private.isNull(); }
60     WEBKIT_EXPORT void reset();
61     WEBKIT_EXPORT void assign(const WebLayer&);
62     WEBKIT_EXPORT bool equals(const WebLayer&) const;
63
64     // Sets a region of the layer as invalid, i.e. needs to update its content.
65     WEBKIT_EXPORT void invalidateRect(const WebFloatRect&);
66
67     // Sets the entire layer as invalid, i.e. needs to update its content.
68     WEBKIT_EXPORT void invalidate();
69
70     WEBKIT_EXPORT void addChild(const WebLayer&);
71     WEBKIT_EXPORT void insertChild(const WebLayer&, size_t index);
72     WEBKIT_EXPORT void replaceChild(const WebLayer& reference, const WebLayer& newLayer);
73     WEBKIT_EXPORT void setChildren(const WebVector<WebLayer>&);
74     WEBKIT_EXPORT void removeFromParent();
75     WEBKIT_EXPORT void removeAllChildren();
76
77     WEBKIT_EXPORT void setAnchorPoint(const WebFloatPoint&);
78     WEBKIT_EXPORT WebFloatPoint anchorPoint() const;
79
80     WEBKIT_EXPORT void setAnchorPointZ(float);
81     WEBKIT_EXPORT float anchorPointZ() const;
82
83     WEBKIT_EXPORT void setBounds(const WebSize&);
84     WEBKIT_EXPORT WebSize bounds() const;
85
86     WEBKIT_EXPORT void setMasksToBounds(bool);
87     WEBKIT_EXPORT bool masksToBounds() const;
88
89     WEBKIT_EXPORT void setMaskLayer(const WebLayer&);
90     WEBKIT_EXPORT void setReplicaLayer(const WebLayer&);
91
92     WEBKIT_EXPORT void setOpacity(float);
93     WEBKIT_EXPORT float opacity() const;
94
95     WEBKIT_EXPORT void setOpaque(bool);
96     WEBKIT_EXPORT bool opaque() const;
97
98     WEBKIT_EXPORT void setPosition(const WebFloatPoint&);
99     WEBKIT_EXPORT WebFloatPoint position() const;
100
101     WEBKIT_EXPORT void setSublayerTransform(const SkMatrix44&);
102     WEBKIT_EXPORT void setSublayerTransform(const WebTransformationMatrix&);
103     WEBKIT_EXPORT SkMatrix44 sublayerTransform() const;
104
105     WEBKIT_EXPORT void setTransform(const SkMatrix44&);
106     WEBKIT_EXPORT void setTransform(const WebTransformationMatrix&);
107     WEBKIT_EXPORT SkMatrix44 transform() const;
108
109     // Sets whether the layer draws its content when compositing.
110     WEBKIT_EXPORT void setDrawsContent(bool);
111     WEBKIT_EXPORT bool drawsContent() const;
112
113     WEBKIT_EXPORT void setPreserves3D(bool);
114
115     // Mark that this layer should use its parent's transform and double-sided
116     // properties in determining this layer's backface visibility instead of
117     // using its own properties. If this property is set, this layer must
118     // have a parent, and the parent may not have this property set.
119     // Note: This API is to work around issues with visibility the handling of
120     // WebKit layers that have a contents layer (canvas, plugin, WebGL, video,
121     // etc).
122     WEBKIT_EXPORT void setUseParentBackfaceVisibility(bool);
123
124     WEBKIT_EXPORT void setBackgroundColor(WebColor);
125
126     // Clear the filters in use by passing in a newly instantiated
127     // WebFilterOperations object.
128     WEBKIT_EXPORT void setFilters(const WebFilterOperations&);
129
130     // Apply filters to pixels that show through the background of this layer.
131     // Note: These filters are only possible on layers that are drawn directly
132     // to a root render surface with an opaque background. This means if an
133     // ancestor of the background-filtered layer sets certain properties
134     // (opacity, transforms), it may conflict and hide the background filters.
135     WEBKIT_EXPORT void setBackgroundFilters(const WebFilterOperations&);
136
137     WEBKIT_EXPORT void setDebugBorderColor(const WebColor&);
138     WEBKIT_EXPORT void setDebugBorderWidth(float);
139     WEBKIT_EXPORT void setDebugName(WebString);
140
141     // An animation delegate is notified when animations are started and
142     // stopped. The WebLayer does not take ownership of the delegate, and it is
143     // the responsibility of the client to reset the layer's delegate before
144     // deleting the delegate.
145     WEBKIT_EXPORT void setAnimationDelegate(WebAnimationDelegate*);
146
147     // Returns false if the animation cannot be added.
148     WEBKIT_EXPORT bool addAnimation(WebAnimation*);
149
150     // Removes all animations with the given id.
151     WEBKIT_EXPORT void removeAnimation(int animationId);
152
153     // Removes all animations with the given id targeting the given property.
154     WEBKIT_EXPORT void removeAnimation(int animationId, WebAnimation::TargetProperty);
155
156     // Pauses all animations with the given id.
157     WEBKIT_EXPORT void pauseAnimation(int animationId, double timeOffset);
158
159     // The following functions suspend and resume all animations. The given time
160     // is assumed to use the same time base as monotonicallyIncreasingTime().
161     WEBKIT_EXPORT void suspendAnimations(double monotonicTime);
162     WEBKIT_EXPORT void resumeAnimations(double monotonicTime);
163
164     // Returns true if this layer has any active animations - useful for tests.
165     WEBKIT_EXPORT bool hasActiveAnimation();
166
167     // Transfers all animations running on the current layer.
168     WEBKIT_EXPORT void transferAnimationsTo(WebLayer*);
169
170     // Forces this layer to use a render surface. There is no benefit in doing
171     // so, but this is to facilitate benchmarks and tests.
172     WEBKIT_EXPORT void setForceRenderSurface(bool);
173
174     // Drops this layer's render surface, if it has one. Used to break cycles in some
175     // cases - if you aren't sure, you don't need to call this.
176     WEBKIT_EXPORT void clearRenderSurface();
177
178     template<typename T> T to()
179     {
180         T res;
181         res.WebLayer::assign(*this);
182         return res;
183     }
184
185     template<typename T> const T toConst() const
186     {
187         T res;
188         res.WebLayer::assign(*this);
189         return res;
190     }
191
192 #if WEBKIT_IMPLEMENTATION
193     WebLayer(const WTF::PassRefPtr<WebCore::LayerChromium>&);
194     WebLayer& operator=(const WTF::PassRefPtr<WebCore::LayerChromium>&);
195     operator WTF::PassRefPtr<WebCore::LayerChromium>() const;
196     template<typename T> T* unwrap() const
197     {
198         return static_cast<T*>(m_private.get());
199     }
200
201     template<typename T> const T* constUnwrap() const
202     {
203         return static_cast<const T*>(m_private.get());
204     }
205 #endif
206
207 protected:
208     WebPrivatePtr<WebCore::LayerChromium> m_private;
209 };
210
211 inline bool operator==(const WebLayer& a, const WebLayer& b)
212 {
213     return a.equals(b);
214 }
215
216 inline bool operator!=(const WebLayer& a, const WebLayer& b)
217 {
218     return !(a == b);
219 }
220
221 } // namespace WebKit
222
223 #endif // WebLayer_h