7cc62892515bc2789e39f1740898389028af10e7
[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         };
94         unsigned changeMask;
95     };
96     union {
97         struct {
98             bool contentsOpaque : 1;
99             bool drawsContent : 1;
100             bool contentsVisible : 1;
101             bool backfaceVisible : 1;
102             bool masksToBounds : 1;
103             bool preserves3D : 1;
104             bool isRootLayer: 1;
105             bool fixedToViewport : 1;
106             bool showDebugBorders : 1;
107             bool showRepaintCounter : 1;
108         };
109         unsigned flags;
110     };
111
112     CoordinatedGraphicsLayerState()
113         : changeMask(0)
114         , contentsOpaque(false)
115         , drawsContent(false)
116         , contentsVisible(true)
117         , backfaceVisible(true)
118         , masksToBounds(false)
119         , preserves3D(false)
120         , isRootLayer(false)
121         , fixedToViewport(false)
122         , showDebugBorders(false)
123         , showRepaintCounter(false)
124         , opacity(0)
125         , debugBorderWidth(0)
126         , replica(InvalidCoordinatedLayerID)
127         , mask(InvalidCoordinatedLayerID)
128         , imageID(InvalidCoordinatedImageBackingID)
129 #if USE(GRAPHICS_SURFACE)
130         , canvasFrontBuffer(0)
131 #endif
132     {
133     }
134
135     FloatPoint pos;
136     FloatPoint3D anchorPoint;
137     FloatSize size;
138     TransformationMatrix transform;
139     TransformationMatrix childrenTransform;
140     IntRect contentsRect;
141     float opacity;
142     Color solidColor;
143     Color debugBorderColor;
144     float debugBorderWidth;
145 #if ENABLE(CSS_FILTERS)
146     FilterOperations filters;
147 #endif
148     GraphicsLayerAnimations animations;
149     Vector<uint32_t> children;
150     Vector<TileCreationInfo> tilesToCreate;
151     Vector<uint32_t> tilesToRemove;
152     CoordinatedLayerID replica;
153     CoordinatedLayerID mask;
154     CoordinatedImageBackingID imageID;
155
156     unsigned repaintCount;
157     Vector<TileUpdateInfo> tilesToUpdate;
158
159 #if USE(GRAPHICS_SURFACE)
160     IntSize canvasSize;
161     GraphicsSurfaceToken canvasToken;
162     uint32_t canvasFrontBuffer;
163 #endif
164 };
165
166 struct CoordinatedGraphicsState {
167     uint32_t rootCompositingLayer;
168     Color backgroundColor;
169     FloatPoint scrollPosition;
170     IntSize contentsSize;
171     IntRect coveredRect;
172
173     Vector<std::pair<CoordinatedLayerID, CoordinatedGraphicsLayerState> > layersToUpdate;
174     Vector<std::pair<CoordinatedImageBackingID, RefPtr<CoordinatedSurface> > > imagesToUpdate;
175 };
176
177 } // namespace WebCore
178
179 #endif // USE(COORDINATED_GRAPHICS)
180
181 #endif // CoordinatedGraphicsState_h