fa96b5e4caa09037726ffa79752aab4524c7d25c
[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 WebLayer rootLayer() const;
71     WEBKIT_EXPORT WebLayer parent() const;
72     WEBKIT_EXPORT size_t numberOfChildren() const;
73     WEBKIT_EXPORT WebLayer childAt(size_t) const;
74
75     WEBKIT_EXPORT void addChild(const WebLayer&);
76     WEBKIT_EXPORT void insertChild(const WebLayer&, size_t index);
77     WEBKIT_EXPORT void replaceChild(const WebLayer& reference, const WebLayer& newLayer);
78     WEBKIT_EXPORT void setChildren(const WebVector<WebLayer>&);
79     WEBKIT_EXPORT void removeFromParent();
80     WEBKIT_EXPORT void removeAllChildren();
81
82     WEBKIT_EXPORT void setAnchorPoint(const WebFloatPoint&);
83     WEBKIT_EXPORT WebFloatPoint anchorPoint() const;
84
85     WEBKIT_EXPORT void setAnchorPointZ(float);
86     WEBKIT_EXPORT float anchorPointZ() const;
87
88     WEBKIT_EXPORT void setBounds(const WebSize&);
89     WEBKIT_EXPORT WebSize bounds() const;
90
91     WEBKIT_EXPORT void setMasksToBounds(bool);
92     WEBKIT_EXPORT bool masksToBounds() const;
93
94     WEBKIT_EXPORT void setMaskLayer(const WebLayer&);
95     WEBKIT_EXPORT WebLayer maskLayer() const;
96
97     WEBKIT_EXPORT void setReplicaLayer(const WebLayer&);
98
99     WEBKIT_EXPORT void setOpacity(float);
100     WEBKIT_EXPORT float opacity() const;
101
102     WEBKIT_EXPORT void setOpaque(bool);
103     WEBKIT_EXPORT bool opaque() const;
104
105     WEBKIT_EXPORT void setPosition(const WebFloatPoint&);
106     WEBKIT_EXPORT WebFloatPoint position() const;
107
108     WEBKIT_EXPORT void setSublayerTransform(const SkMatrix44&);
109     WEBKIT_EXPORT void setSublayerTransform(const WebTransformationMatrix&);
110     WEBKIT_EXPORT SkMatrix44 sublayerTransform() const;
111
112     WEBKIT_EXPORT void setTransform(const SkMatrix44&);
113     WEBKIT_EXPORT void setTransform(const WebTransformationMatrix&);
114     WEBKIT_EXPORT SkMatrix44 transform() const;
115
116     // Sets whether the layer draws its content when compositing.
117     WEBKIT_EXPORT void setDrawsContent(bool);
118     WEBKIT_EXPORT bool drawsContent() const;
119
120     WEBKIT_EXPORT void setPreserves3D(bool);
121
122     // Mark that this layer should use its parent's transform and double-sided
123     // properties in determining this layer's backface visibility instead of
124     // using its own properties. If this property is set, this layer must
125     // have a parent, and the parent may not have this property set.
126     // Note: This API is to work around issues with visibility the handling of
127     // WebKit layers that have a contents layer (canvas, plugin, WebGL, video,
128     // etc).
129     WEBKIT_EXPORT void setUseParentBackfaceVisibility(bool);
130
131     WEBKIT_EXPORT void setBackgroundColor(WebColor);
132
133     // Clear the filters in use by passing in a newly instantiated
134     // WebFilterOperations object.
135     WEBKIT_EXPORT void setFilters(const WebFilterOperations&);
136
137     // Apply filters to pixels that show through the background of this layer.
138     // Note: These filters are only possible on layers that are drawn directly
139     // to a root render surface with an opaque background. This means if an
140     // ancestor of the background-filtered layer sets certain properties
141     // (opacity, transforms), it may conflict and hide the background filters.
142     WEBKIT_EXPORT void setBackgroundFilters(const WebFilterOperations&);
143
144     WEBKIT_EXPORT void setDebugBorderColor(const WebColor&);
145     WEBKIT_EXPORT void setDebugBorderWidth(float);
146     WEBKIT_EXPORT void setDebugName(WebString);
147
148     // An animation delegate is notified when animations are started and
149     // stopped. The WebLayer does not take ownership of the delegate, and it is
150     // the responsibility of the client to reset the layer's delegate before
151     // deleting the delegate.
152     WEBKIT_EXPORT void setAnimationDelegate(WebAnimationDelegate*);
153
154     // Returns false if the animation cannot be added.
155     WEBKIT_EXPORT bool addAnimation(WebAnimation*);
156
157     // Removes all animations with the given id.
158     WEBKIT_EXPORT void removeAnimation(int animationId);
159
160     // Removes all animations with the given id targeting the given property.
161     WEBKIT_EXPORT void removeAnimation(int animationId, WebAnimation::TargetProperty);
162
163     // Pauses all animations with the given id.
164     WEBKIT_EXPORT void pauseAnimation(int animationId, double timeOffset);
165
166     // The following functions suspend and resume all animations. The given time
167     // is assumed to use the same time base as monotonicallyIncreasingTime().
168     WEBKIT_EXPORT void suspendAnimations(double monotonicTime);
169     WEBKIT_EXPORT void resumeAnimations(double monotonicTime);
170
171     // Returns true if this layer has any active animations - useful for tests.
172     WEBKIT_EXPORT bool hasActiveAnimation();
173
174     // Transfers all animations running on the current layer.
175     WEBKIT_EXPORT void transferAnimationsTo(WebLayer*);
176
177     // DEPRECATED.
178     // This requests that this layer's compositor-managed textures always be reserved
179     // when determining texture limits.
180     WEBKIT_EXPORT void setAlwaysReserveTextures(bool);
181
182     // Forces this layer to use a render surface. There is no benefit in doing
183     // so, but this is to facilitate benchmarks and tests.
184     WEBKIT_EXPORT void setForceRenderSurface(bool);
185
186     // Drops this layer's render surface, if it has one. Used to break cycles in some
187     // cases - if you aren't sure, you don't need to call this.
188     WEBKIT_EXPORT void clearRenderSurface();
189
190     template<typename T> T to()
191     {
192         T res;
193         res.WebLayer::assign(*this);
194         return res;
195     }
196
197     template<typename T> const T toConst() const
198     {
199         T res;
200         res.WebLayer::assign(*this);
201         return res;
202     }
203
204 #if WEBKIT_IMPLEMENTATION
205     WebLayer(const WTF::PassRefPtr<WebCore::LayerChromium>&);
206     WebLayer& operator=(const WTF::PassRefPtr<WebCore::LayerChromium>&);
207     operator WTF::PassRefPtr<WebCore::LayerChromium>() const;
208     template<typename T> T* unwrap() const
209     {
210         return static_cast<T*>(m_private.get());
211     }
212
213     template<typename T> const T* constUnwrap() const
214     {
215         return static_cast<const T*>(m_private.get());
216     }
217 #endif
218
219 protected:
220     WebPrivatePtr<WebCore::LayerChromium> m_private;
221 };
222
223 inline bool operator==(const WebLayer& a, const WebLayer& b)
224 {
225     return a.equals(b);
226 }
227
228 inline bool operator!=(const WebLayer& a, const WebLayer& b)
229 {
230     return !(a == b);
231 }
232
233 } // namespace WebKit
234
235 #endif // WebLayer_h