57746fa646fb4d642aba189daf622d0001848fa3
[WebKit-https.git] / Source / WebCore / platform / graphics / blackberry / LayerData.h
1 /*
2  * Copyright (C) 2010, 2011, 2012 Research In Motion Limited. All rights reserved.
3  * Copyright (C) 2010 Google Inc. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met:
8  *
9  *     * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *     * Redistributions in binary form must reproduce the above
12  * copyright notice, this list of conditions and the following disclaimer
13  * in the documentation and/or other materials provided with the
14  * distribution.
15  *     * Neither the name of Google Inc. nor the names of its
16  * contributors may be used to endorse or promote products derived from
17  * this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31
32
33 #ifndef LayerData_h
34 #define LayerData_h
35
36 #include "Color.h"
37 #include "FloatPoint.h"
38 #include "FloatRect.h"
39 #include "IntRect.h"
40 #include "LayerAnimation.h"
41 #include "PlatformString.h"
42 #include "TransformationMatrix.h"
43 #include <wtf/HashMap.h>
44
45 #if USE(ACCELERATED_COMPOSITING)
46
47 namespace WebCore {
48
49 class HTMLCanvasElement;
50 class PluginView;
51 #if ENABLE(VIDEO)
52 class MediaPlayer;
53 #endif
54
55 class LayerData {
56 public:
57     enum LayerType { Layer, TransformLayer, WebGLLayer };
58     enum FilterType { Linear, Nearest, Trilinear, Lanczos };
59     enum LayerProgramShader { LayerProgramShaderRGBA = 0,
60                               LayerProgramShaderBGRA,
61                               NumberOfLayerProgramShaders };
62
63     LayerData(LayerType type)
64         : m_layerType(type)
65         , m_anchorPoint(0.5, 0.5)
66         , m_backgroundColor(0, 0, 0, 0)
67         , m_borderColor(0, 0, 0, 0)
68         , m_opacity(1.0)
69         , m_anchorPointZ(0.0)
70         , m_borderWidth(0.0)
71         , m_layerProgramShader(LayerProgramShaderBGRA)
72         , m_pluginView(0)
73 #if ENABLE(VIDEO)
74         , m_mediaPlayer(0)
75 #endif
76         , m_texID(0)
77         , m_texWidth(0)
78         , m_texHeight(0)
79         , m_canvas(0)
80         , m_frontBufferLock(0)
81         , m_suspendTime(0)
82         , m_doubleSided(true)
83         , m_masksToBounds(false)
84         , m_opaque(true)
85         , m_preserves3D(false)
86         , m_needsDisplayOnBoundsChange(false)
87         , m_needsTexture(false)
88         , m_isFixedPosition(false)
89         , m_hasFixedContainer(false)
90         , m_hasFixedAncestorInDOMTree(false)
91         , m_isVisible(true)
92     {
93     }
94
95     virtual ~LayerData()
96     {
97     }
98
99     FloatPoint anchorPoint() const { return m_anchorPoint; }
100
101     float anchorPointZ() const { return m_anchorPointZ; }
102
103     Color backgroundColor() const { return m_backgroundColor; }
104
105     Color borderColor() const { return m_borderColor; }
106
107     float borderWidth() const { return m_borderWidth; }
108
109     IntSize bounds() const { return m_bounds; }
110
111     bool doubleSided() const { return m_doubleSided; }
112
113     FloatRect frame() const { return m_frame; }
114
115     bool masksToBounds() const { return m_masksToBounds; }
116
117     float opacity() const { return m_opacity; }
118
119     bool opaque() const { return m_opaque; }
120
121     FloatPoint position() const { return m_position; }
122
123     // This is currently only used for perspective transform, see GraphicsLayer::setChildrenTransform()
124     const TransformationMatrix& sublayerTransform() const { return m_sublayerTransform; }
125
126     const TransformationMatrix& transform() const { return m_transform; }
127
128     bool preserves3D() const { return m_preserves3D; }
129
130     unsigned getTextureID() const { return m_texID; }
131     void setTextureID(unsigned int value) { m_texID = value; }
132
133     bool needsTexture() const { return m_layerType == WebGLLayer ? true : m_needsTexture; }
134
135     LayerProgramShader layerProgramShader() const { return m_layerProgramShader; }
136
137     bool isFixedPosition() const { return m_isFixedPosition; }
138     bool hasFixedContainer() const { return m_hasFixedContainer; }
139     bool hasFixedAncestorInDOMTree() const { return m_hasFixedAncestorInDOMTree; }
140
141     PluginView* pluginView() const { return m_pluginView; }
142
143     IntRect holePunchRect() const { return m_holePunchRect; }
144     bool hasHolePunchRect() const { return !m_holePunchRect.isEmpty(); }
145
146 #if ENABLE(VIDEO)
147     MediaPlayer* mediaPlayer() const { return m_mediaPlayer; }
148 #endif
149
150     HTMLCanvasElement* canvas() const { return m_canvas; }
151
152     void replicate(LayerData *to) const { *to = *this; }
153
154     LayerType layerType() const { return m_layerType; }
155
156     bool includeVisibility() const
157     {
158         if (pluginView())
159             return true;
160
161 #if ENABLE(VIDEO)
162         if (mediaPlayer())
163             return true;
164 #endif
165
166         return false;
167     }
168
169 protected:
170     LayerType m_layerType;
171
172     IntSize m_bounds;
173     FloatPoint m_position;
174     FloatPoint m_anchorPoint;
175     Color m_backgroundColor;
176     Color m_borderColor;
177
178     FloatRect m_frame;
179     TransformationMatrix m_transform;
180     TransformationMatrix m_sublayerTransform;
181
182     float m_opacity;
183     float m_anchorPointZ;
184     float m_borderWidth;
185
186     LayerProgramShader m_layerProgramShader;
187
188     PluginView* m_pluginView;
189 #if ENABLE(VIDEO)
190     MediaPlayer* m_mediaPlayer;
191     IntRect m_holePunchClipRect;
192 #endif
193     IntRect m_holePunchRect;
194
195     unsigned m_texID;
196     unsigned m_texWidth;
197     unsigned m_texHeight;
198
199     HTMLCanvasElement* m_canvas;
200
201     pthread_mutex_t* m_frontBufferLock;
202
203     Vector<RefPtr<LayerAnimation> > m_runningAnimations;
204     Vector<RefPtr<LayerAnimation> > m_suspendedAnimations;
205     double m_suspendTime;
206
207     unsigned m_doubleSided : 1;
208     unsigned m_masksToBounds : 1;
209     unsigned m_opaque : 1;
210     unsigned m_preserves3D : 1;
211     unsigned m_needsDisplayOnBoundsChange : 1;
212
213     unsigned m_needsTexture : 1;
214     unsigned m_isFixedPosition : 1;
215     unsigned m_hasFixedContainer : 1;
216     unsigned m_hasFixedAncestorInDOMTree : 1;
217
218     // The following is only available for media (video) and plugin layers.
219     unsigned m_isVisible : 1;
220
221     // CAUTION: all the data members are copied from one instance to another
222     // i.e. from one thread to another in the replicate method.
223     // Beware of adding any member data e.g. of type String whose default
224     // assignment operator doesn't behave properly if the two String instances
225     // are owned by different threads.
226 };
227
228 } // namespace WebCore
229
230 #endif // USE(ACCELERATED_COMPOSITING)
231
232 #endif // LayerData_h