[EFL][Qt] REGRESSION(r144787): A fixed element lags when scrolling and wheeling.
[WebKit-https.git] / Source / WebCore / platform / graphics / texmap / coordinated / CoordinatedGraphicsState.h
1 /*
2  * Copyright (C) 2013 Nokia Corporation and/or its subsidiary(-ies)
3  * Copyright (C) 2013 Company 100, 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
7  * are met:
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 INC. AND ITS CONTRIBUTORS ``AS IS''
15  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
16  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
18  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
24  * THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 #ifndef CoordinatedGraphicsState_h
28 #define CoordinatedGraphicsState_h
29
30 #if USE(COORDINATED_GRAPHICS)
31
32 #include "Color.h"
33 #include "FloatRect.h"
34 #include "FloatSize.h"
35 #include "GraphicsLayerAnimation.h"
36 #include "IntRect.h"
37 #include "IntSize.h"
38 #include "SurfaceUpdateInfo.h"
39 #include "TransformationMatrix.h"
40
41 #if ENABLE(CSS_FILTERS)
42 #include "FilterOperations.h"
43 #endif
44
45 #if USE(GRAPHICS_SURFACE)
46 #include "GraphicsSurfaceToken.h"
47 #endif
48
49 namespace WebCore {
50
51 class CoordinatedSurface;
52
53 typedef uint32_t CoordinatedLayerID;
54 enum { InvalidCoordinatedLayerID = 0 };
55
56 typedef uint64_t CoordinatedImageBackingID;
57 enum { InvalidCoordinatedImageBackingID = 0 };
58
59 struct TileUpdateInfo {
60     uint32_t tileID;
61     IntRect tileRect;
62     WebCore::SurfaceUpdateInfo updateInfo;
63 };
64
65 struct TileCreationInfo {
66     uint32_t tileID;
67     float scale;
68 };
69
70 struct CoordinatedGraphicsLayerState {
71     union {
72         struct {
73             bool positionChanged: 1;
74             bool anchorPointChanged: 1;
75             bool sizeChanged: 1;
76             bool transformChanged: 1;
77             bool childrenTransformChanged: 1;
78             bool contentsRectChanged: 1;
79             bool opacityChanged: 1;
80             bool solidColorChanged: 1;
81             bool debugBorderColorChanged: 1;
82             bool debugBorderWidthChanged: 1;
83             bool replicaChanged: 1;
84             bool maskChanged: 1;
85             bool imageChanged: 1;
86             bool flagsChanged: 1;
87             bool animationsChanged: 1;
88             bool filtersChanged: 1;
89             bool childrenChanged: 1;
90             bool repaintCountChanged : 1;
91             bool canvasChanged: 1;
92             bool canvasShouldSwapBuffers: 1;
93             bool isScrollableChanged: 1;
94             bool committedScrollOffsetChanged: 1;
95         };
96         unsigned changeMask;
97     };
98     union {
99         struct {
100             bool contentsOpaque : 1;
101             bool drawsContent : 1;
102             bool contentsVisible : 1;
103             bool backfaceVisible : 1;
104             bool masksToBounds : 1;
105             bool preserves3D : 1;
106             bool isRootLayer: 1;
107             bool fixedToViewport : 1;
108             bool showDebugBorders : 1;
109             bool showRepaintCounter : 1;
110             bool isScrollable: 1;
111         };
112         unsigned flags;
113     };
114
115     CoordinatedGraphicsLayerState()
116         : changeMask(0)
117         , contentsOpaque(false)
118         , drawsContent(false)
119         , contentsVisible(true)
120         , backfaceVisible(true)
121         , masksToBounds(false)
122         , preserves3D(false)
123         , isRootLayer(false)
124         , fixedToViewport(false)
125         , showDebugBorders(false)
126         , showRepaintCounter(false)
127         , isScrollable(false)
128         , opacity(0)
129         , debugBorderWidth(0)
130         , replica(InvalidCoordinatedLayerID)
131         , mask(InvalidCoordinatedLayerID)
132         , imageID(InvalidCoordinatedImageBackingID)
133 #if USE(GRAPHICS_SURFACE)
134         , canvasFrontBuffer(0)
135 #endif
136     {
137     }
138
139     FloatPoint pos;
140     FloatPoint3D anchorPoint;
141     FloatSize size;
142     TransformationMatrix transform;
143     TransformationMatrix childrenTransform;
144     IntRect contentsRect;
145     float opacity;
146     Color solidColor;
147     Color debugBorderColor;
148     float debugBorderWidth;
149 #if ENABLE(CSS_FILTERS)
150     FilterOperations filters;
151 #endif
152     GraphicsLayerAnimations animations;
153     Vector<uint32_t> children;
154     Vector<TileCreationInfo> tilesToCreate;
155     Vector<uint32_t> tilesToRemove;
156     CoordinatedLayerID replica;
157     CoordinatedLayerID mask;
158     CoordinatedImageBackingID imageID;
159
160     unsigned repaintCount;
161     Vector<TileUpdateInfo> tilesToUpdate;
162
163 #if USE(GRAPHICS_SURFACE)
164     IntSize canvasSize;
165     GraphicsSurfaceToken canvasToken;
166     uint32_t canvasFrontBuffer;
167 #endif
168
169     IntSize committedScrollOffset;
170 };
171
172 struct CoordinatedGraphicsState {
173     uint32_t rootCompositingLayer;
174     Color backgroundColor;
175     FloatPoint scrollPosition;
176     IntSize contentsSize;
177     IntRect coveredRect;
178
179     Vector<std::pair<CoordinatedLayerID, CoordinatedGraphicsLayerState> > layersToUpdate;
180     Vector<std::pair<CoordinatedImageBackingID, RefPtr<CoordinatedSurface> > > imagesToUpdate;
181 };
182
183 } // namespace WebCore
184
185 #endif // USE(COORDINATED_GRAPHICS)
186
187 #endif // CoordinatedGraphicsState_h