[BlackBerry] Poor rendering opening a Google map short link
[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 "FilterOperations.h"
38 #include "FloatPoint.h"
39 #include "FloatRect.h"
40 #include "IntRect.h"
41 #include "TransformationMatrix.h"
42 #include <wtf/HashMap.h>
43 #include <wtf/text/WTFString.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, CustomLayer };
58     enum FilterType { Linear, Nearest, Trilinear, Lanczos };
59
60 #if ENABLE(CSS_FILTERS)
61     enum CSSFilterShaders {
62         CSSFilterShaderGrayscale = 0,
63         CSSFilterShaderSepia,
64         CSSFilterShaderSaturate,
65         CSSFilterShaderHueRotate,
66         CSSFilterShaderInvert,
67         CSSFilterShaderBrightness,
68         CSSFilterShaderContrast,
69         CSSFilterShaderOpacity,
70         CSSFilterShaderBlurY,
71         CSSFilterShaderBlurX,
72         CSSFilterShaderShadow,
73         CSSFilterShaderPassthrough,
74 #if ENABLE(CSS_SHADERS)
75         CSSFilterShaderCustom,
76 #endif
77         NumberOfCSSFilterShaders
78     };
79 #endif
80
81     LayerData(LayerType type)
82         : m_layerType(type)
83         , m_anchorPoint(0.5, 0.5)
84         , m_backgroundColor(0, 0, 0, 0)
85         , m_borderColor(0, 0, 0, 0)
86         , m_opacity(1.0)
87         , m_anchorPointZ(0.0)
88         , m_borderWidth(0.0)
89         , m_pluginView(0)
90 #if ENABLE(VIDEO)
91         , m_mediaPlayer(0)
92 #endif
93         , m_suspendTime(0)
94         , m_contentsScale(1.0)
95         , m_doubleSided(true)
96         , m_masksToBounds(false)
97         , m_isOpaque(false)
98         , m_preserves3D(false)
99         , m_needsDisplayOnBoundsChange(false)
100         , m_needsTexture(false)
101         , m_isFixedPosition(false)
102         , m_hasFixedContainer(false)
103         , m_hasFixedAncestorInDOMTree(false)
104         , m_isContainerForFixedPositionLayers(false)
105         , m_sizeIsScaleInvariant(false)
106         , m_contentsResolutionIndependent(false)
107         , m_isVisible(true)
108     {
109     }
110
111     virtual ~LayerData()
112     {
113     }
114
115     FloatPoint anchorPoint() const { return m_anchorPoint; }
116
117     float anchorPointZ() const { return m_anchorPointZ; }
118
119     Color backgroundColor() const { return m_backgroundColor; }
120
121     Color borderColor() const { return m_borderColor; }
122
123     float borderWidth() const { return m_borderWidth; }
124
125     IntSize bounds() const { return m_bounds; }
126
127     bool sizeIsScaleInvariant() const { return m_sizeIsScaleInvariant; }
128
129     bool contentsResolutionIndependent() const { return m_contentsResolutionIndependent; }
130
131     bool doubleSided() const { return m_doubleSided; }
132
133     FloatRect frame() const { return m_frame; }
134
135     bool masksToBounds() const { return m_masksToBounds; }
136
137     float opacity() const { return m_opacity; }
138
139 #if ENABLE(CSS_FILTERS)
140     FilterOperations filters() const { return m_filters; }
141 #endif
142
143     bool isOpaque() const { return m_isOpaque; }
144
145     FloatPoint position() const { return m_position; }
146
147     // This is currently only used for perspective transform, see GraphicsLayer::setChildrenTransform()
148     const TransformationMatrix& sublayerTransform() const { return m_sublayerTransform; }
149
150     const TransformationMatrix& transform() const { return m_transform; }
151
152     bool preserves3D() const { return m_preserves3D; }
153
154     bool needsTexture() const { return m_layerType == WebGLLayer || m_layerType == CanvasLayer || m_needsTexture; }
155
156     bool isFixedPosition() const { return m_isFixedPosition; }
157     bool hasFixedContainer() const { return m_hasFixedContainer; }
158     bool hasFixedAncestorInDOMTree() const { return m_hasFixedAncestorInDOMTree; }
159     bool isContainerForFixedPositionLayers() const { return m_isContainerForFixedPositionLayers; }
160     bool isFixedToTop() const { return m_isFixedToTop; }
161     bool isFixedToLeft() const { return m_isFixedToLeft; }
162
163     IntRect frameVisibleRect() const { return m_frameVisibleRect; }
164     IntSize frameContentsSize() const { return m_frameContentsSize; }
165
166     PluginView* pluginView() const { return m_pluginView; }
167
168     IntRect holePunchRect() const { return m_holePunchRect; }
169     bool hasHolePunchRect() const { return !m_holePunchRect.isEmpty(); }
170
171     double contentsScale() const { return m_contentsScale; }
172
173 #if ENABLE(VIDEO)
174     MediaPlayer* mediaPlayer() const { return m_mediaPlayer; }
175 #endif
176
177     void replicate(LayerData *to) const { *to = *this; }
178
179     LayerType layerType() const { return m_layerType; }
180
181     bool isCanvasLayer() const
182     {
183         return m_layerType == CanvasLayer;
184     }
185
186     bool isVisible() const
187     {
188         return m_isVisible;
189     }
190
191     bool includeVisibility() const
192     {
193         if (pluginView())
194             return true;
195
196 #if ENABLE(VIDEO)
197         if (mediaPlayer())
198             return true;
199 #endif
200
201         if (isCanvasLayer())
202             return true;
203
204         return false;
205     }
206
207 protected:
208     LayerType m_layerType;
209
210     IntSize m_bounds;
211     FloatPoint m_position;
212     FloatPoint m_anchorPoint;
213     Color m_backgroundColor;
214     Color m_borderColor;
215
216     FloatRect m_frame;
217     TransformationMatrix m_transform;
218     TransformationMatrix m_sublayerTransform;
219
220     float m_opacity;
221 #if ENABLE(CSS_FILTERS)
222     FilterOperations m_filters;
223 #endif
224     float m_anchorPointZ;
225     float m_borderWidth;
226
227     PluginView* m_pluginView;
228 #if ENABLE(VIDEO)
229     MediaPlayer* m_mediaPlayer;
230 #endif
231     IntRect m_holePunchRect;
232
233     IntRect m_frameVisibleRect;
234     IntSize m_frameContentsSize;
235
236     double m_suspendTime;
237     double m_contentsScale;
238
239     unsigned m_doubleSided : 1;
240     unsigned m_masksToBounds : 1;
241     unsigned m_isOpaque : 1;
242     unsigned m_preserves3D : 1;
243     unsigned m_needsDisplayOnBoundsChange : 1;
244
245     unsigned m_needsTexture : 1;
246     unsigned m_isFixedPosition : 1;
247     unsigned m_hasFixedContainer : 1;
248     unsigned m_hasFixedAncestorInDOMTree : 1;
249     unsigned m_isContainerForFixedPositionLayers: 1;
250     unsigned m_isFixedToTop : 1;
251     unsigned m_isFixedToLeft : 1;
252
253     unsigned m_sizeIsScaleInvariant : 1;
254     unsigned m_contentsResolutionIndependent : 1;
255
256     // The following is only available for media (video) and plugin layers.
257     unsigned m_isVisible : 1;
258
259     // CAUTION: all the data members are copied from one instance to another
260     // i.e. from one thread to another in the replicate method.
261     // Beware of adding any member data e.g. of type String whose default
262     // assignment operator doesn't behave properly if the two String instances
263     // are owned by different threads.
264 };
265
266 } // namespace WebCore
267
268 #endif // USE(ACCELERATED_COMPOSITING)
269
270 #endif // LayerData_h