[BlackBerry] Accelerated compositing updates
[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, CanvasLayer };
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_frontBufferLock(0)
78         , m_suspendTime(0)
79         , m_doubleSided(true)
80         , m_masksToBounds(false)
81         , m_opaque(true)
82         , m_preserves3D(false)
83         , m_needsDisplayOnBoundsChange(false)
84         , m_needsTexture(false)
85         , m_isFixedPosition(false)
86         , m_hasFixedContainer(false)
87         , m_hasFixedAncestorInDOMTree(false)
88         , m_isVisible(true)
89     {
90     }
91
92     virtual ~LayerData()
93     {
94     }
95
96     FloatPoint anchorPoint() const { return m_anchorPoint; }
97
98     float anchorPointZ() const { return m_anchorPointZ; }
99
100     Color backgroundColor() const { return m_backgroundColor; }
101
102     Color borderColor() const { return m_borderColor; }
103
104     float borderWidth() const { return m_borderWidth; }
105
106     IntSize bounds() const { return m_bounds; }
107
108     bool doubleSided() const { return m_doubleSided; }
109
110     FloatRect frame() const { return m_frame; }
111
112     bool masksToBounds() const { return m_masksToBounds; }
113
114     float opacity() const { return m_opacity; }
115
116     bool opaque() const { return m_opaque; }
117
118     FloatPoint position() const { return m_position; }
119
120     // This is currently only used for perspective transform, see GraphicsLayer::setChildrenTransform()
121     const TransformationMatrix& sublayerTransform() const { return m_sublayerTransform; }
122
123     const TransformationMatrix& transform() const { return m_transform; }
124
125     bool preserves3D() const { return m_preserves3D; }
126
127     unsigned getTextureID() const { return m_texID; }
128     void setTextureID(unsigned int value) { m_texID = value; }
129
130     bool needsTexture() const { return m_layerType == WebGLLayer || m_layerType == CanvasLayer || m_needsTexture; }
131
132     LayerProgramShader layerProgramShader() const { return m_layerProgramShader; }
133
134     bool isFixedPosition() const { return m_isFixedPosition; }
135     bool hasFixedContainer() const { return m_hasFixedContainer; }
136     bool hasFixedAncestorInDOMTree() const { return m_hasFixedAncestorInDOMTree; }
137
138     PluginView* pluginView() const { return m_pluginView; }
139
140     IntRect holePunchRect() const { return m_holePunchRect; }
141     bool hasHolePunchRect() const { return !m_holePunchRect.isEmpty(); }
142
143 #if ENABLE(VIDEO)
144     MediaPlayer* mediaPlayer() const { return m_mediaPlayer; }
145 #endif
146
147     void replicate(LayerData *to) const { *to = *this; }
148
149     LayerType layerType() const { return m_layerType; }
150
151     bool includeVisibility() const
152     {
153         if (pluginView())
154             return true;
155
156 #if ENABLE(VIDEO)
157         if (mediaPlayer())
158             return true;
159 #endif
160
161         return false;
162     }
163
164 protected:
165     LayerType m_layerType;
166
167     IntSize m_bounds;
168     FloatPoint m_position;
169     FloatPoint m_anchorPoint;
170     Color m_backgroundColor;
171     Color m_borderColor;
172
173     FloatRect m_frame;
174     TransformationMatrix m_transform;
175     TransformationMatrix m_sublayerTransform;
176
177     float m_opacity;
178     float m_anchorPointZ;
179     float m_borderWidth;
180
181     LayerProgramShader m_layerProgramShader;
182
183     PluginView* m_pluginView;
184 #if ENABLE(VIDEO)
185     MediaPlayer* m_mediaPlayer;
186     IntRect m_holePunchClipRect;
187 #endif
188     IntRect m_holePunchRect;
189
190     unsigned m_texID;
191
192     pthread_mutex_t* m_frontBufferLock;
193
194     Vector<RefPtr<LayerAnimation> > m_runningAnimations;
195     Vector<RefPtr<LayerAnimation> > m_suspendedAnimations;
196     double m_suspendTime;
197
198     unsigned m_doubleSided : 1;
199     unsigned m_masksToBounds : 1;
200     unsigned m_opaque : 1;
201     unsigned m_preserves3D : 1;
202     unsigned m_needsDisplayOnBoundsChange : 1;
203
204     unsigned m_needsTexture : 1;
205     unsigned m_isFixedPosition : 1;
206     unsigned m_hasFixedContainer : 1;
207     unsigned m_hasFixedAncestorInDOMTree : 1;
208
209     // The following is only available for media (video) and plugin layers.
210     unsigned m_isVisible : 1;
211
212     // CAUTION: all the data members are copied from one instance to another
213     // i.e. from one thread to another in the replicate method.
214     // Beware of adding any member data e.g. of type String whose default
215     // assignment operator doesn't behave properly if the two String instances
216     // are owned by different threads.
217 };
218
219 } // namespace WebCore
220
221 #endif // USE(ACCELERATED_COMPOSITING)
222
223 #endif // LayerData_h