855fcce7e4353b8dded51dee0eed0c400382a16e
[WebKit-https.git] / Source / WebCore / platform / graphics / chromium / cc / CCRenderSurface.h
1 /*
2  * Copyright (C) 2011 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
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 AND ITS CONTRIBUTORS "AS IS" AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26
27 #ifndef CCRenderSurface_h
28 #define CCRenderSurface_h
29
30 #if USE(ACCELERATED_COMPOSITING)
31
32 #include "FloatRect.h"
33 #include "IntRect.h"
34 #include "TextureManager.h"
35 #include "cc/CCLayerQuad.h"
36 #include <public/WebFilterOperations.h>
37 #include <public/WebTransformationMatrix.h>
38 #include <wtf/Noncopyable.h>
39
40 namespace WebCore {
41
42 class CCDamageTracker;
43 class CCQuadCuller;
44 class CCSharedQuadState;
45 class CCLayerImpl;
46 class LayerRendererChromium;
47 class ManagedTexture;
48
49 class CCRenderSurface {
50     WTF_MAKE_NONCOPYABLE(CCRenderSurface);
51 public:
52     explicit CCRenderSurface(CCLayerImpl*);
53     ~CCRenderSurface();
54
55     bool prepareContentsTexture(LayerRendererChromium*);
56     void releaseContentsTexture();
57     bool hasValidContentsTexture() const;
58
59     bool prepareBackgroundTexture(LayerRendererChromium*);
60     void releaseBackgroundTexture();
61     bool hasValidBackgroundTexture() const;
62
63     void setScissorRect(LayerRendererChromium*, const FloatRect& surfaceDamageRect) const;
64
65     String name() const;
66     void dumpSurface(TextStream&, int indent) const;
67
68     FloatPoint contentRectCenter() const { return FloatRect(m_contentRect).center(); }
69
70     // Returns the rect that encloses the RenderSurface including any reflection.
71     FloatRect drawableContentRect() const;
72
73     float drawOpacity() const { return m_drawOpacity; }
74     void setDrawOpacity(float opacity) { m_drawOpacity = opacity; }
75
76     void setFilters(const WebKit::WebFilterOperations& filters) { m_filters = filters; }
77     const WebKit::WebFilterOperations& filters() const { return m_filters; }
78
79     void setBackgroundFilters(const WebKit::WebFilterOperations& filters) { m_backgroundFilters = filters; }
80     const WebKit::WebFilterOperations& backgroundFilters() const { return m_backgroundFilters; }
81
82     void setNearestAncestorThatMovesPixels(CCRenderSurface* surface) { m_nearestAncestorThatMovesPixels = surface; }
83     const CCRenderSurface* nearestAncestorThatMovesPixels() const { return m_nearestAncestorThatMovesPixels; }
84
85     bool drawOpacityIsAnimating() const { return m_drawOpacityIsAnimating; }
86     void setDrawOpacityIsAnimating(bool drawOpacityIsAnimating) { m_drawOpacityIsAnimating = drawOpacityIsAnimating; }
87
88     void setDrawTransform(const WebKit::WebTransformationMatrix& drawTransform) { m_drawTransform = drawTransform; }
89     const WebKit::WebTransformationMatrix& drawTransform() const { return m_drawTransform; }
90
91     void setOriginTransform(const WebKit::WebTransformationMatrix& originTransform) { m_originTransform = originTransform; }
92     const WebKit::WebTransformationMatrix& originTransform() const { return m_originTransform; }
93
94     void setScreenSpaceTransform(const WebKit::WebTransformationMatrix& screenSpaceTransform) { m_screenSpaceTransform = screenSpaceTransform; }
95     const WebKit::WebTransformationMatrix& screenSpaceTransform() const { return m_screenSpaceTransform; }
96
97     void setReplicaDrawTransform(const WebKit::WebTransformationMatrix& replicaDrawTransform) { m_replicaDrawTransform = replicaDrawTransform; }
98     const WebKit::WebTransformationMatrix& replicaDrawTransform() const { return m_replicaDrawTransform; }
99
100     void setReplicaOriginTransform(const WebKit::WebTransformationMatrix& replicaOriginTransform) { m_replicaOriginTransform = replicaOriginTransform; }
101     const WebKit::WebTransformationMatrix& replicaOriginTransform() const { return m_replicaOriginTransform; }
102
103     void setReplicaScreenSpaceTransform(const WebKit::WebTransformationMatrix& replicaScreenSpaceTransform) { m_replicaScreenSpaceTransform = replicaScreenSpaceTransform; }
104     const WebKit::WebTransformationMatrix& replicaScreenSpaceTransform() const { return m_replicaScreenSpaceTransform; }
105
106     bool targetSurfaceTransformsAreAnimating() const { return m_targetSurfaceTransformsAreAnimating; }
107     void setTargetSurfaceTransformsAreAnimating(bool animating) { m_targetSurfaceTransformsAreAnimating = animating; }
108     bool screenSpaceTransformsAreAnimating() const { return m_screenSpaceTransformsAreAnimating; }
109     void setScreenSpaceTransformsAreAnimating(bool animating) { m_screenSpaceTransformsAreAnimating = animating; }
110
111     // Usage: this clipRect should not be used if one of the two conditions is true: (a) clipRect() is empty, or (b) owningLayer->parent()->usesLayerClipping() is false.
112     void setClipRect(const IntRect&);
113     const IntRect& clipRect() const { return m_clipRect; }
114
115     void setContentRect(const IntRect&);
116     const IntRect& contentRect() const { return m_contentRect; }
117
118     void clearLayerList() { m_layerList.clear(); }
119     Vector<CCLayerImpl*>& layerList() { return m_layerList; }
120
121     ManagedTexture* contentsTexture() const { return m_contentsTexture.get(); }
122     ManagedTexture* backgroundTexture() const { return m_backgroundTexture.get(); }
123
124     int owningLayerId() const;
125     CCRenderSurface* targetRenderSurface() const;
126
127     bool hasReplica() const;
128
129     bool hasMask() const;
130     bool replicaHasMask() const;
131
132     void resetPropertyChangedFlag() { m_surfacePropertyChanged = false; }
133     bool surfacePropertyChanged() const;
134     bool surfacePropertyChangedOnlyFromDescendant() const;
135
136     CCDamageTracker* damageTracker() const { return m_damageTracker.get(); }
137
138     PassOwnPtr<CCSharedQuadState> createSharedQuadState() const;
139     PassOwnPtr<CCSharedQuadState> createReplicaSharedQuadState() const;
140
141     // FIXME: Remove the surfaceDamageRect parameter when the value is removed from CCRenderSurfaceDrawQuad.
142     void appendQuads(CCQuadCuller&, CCSharedQuadState*, bool forReplica, const FloatRect& surfaceDamageRect);
143
144 private:
145     CCLayerImpl* m_owningLayer;
146
147     IntRect m_contentRect;
148     bool m_surfacePropertyChanged;
149
150     OwnPtr<ManagedTexture> m_contentsTexture;
151     OwnPtr<ManagedTexture> m_backgroundTexture;
152
153     float m_drawOpacity;
154     bool m_drawOpacityIsAnimating;
155     WebKit::WebTransformationMatrix m_drawTransform;
156     WebKit::WebTransformationMatrix m_originTransform;
157     WebKit::WebTransformationMatrix m_screenSpaceTransform;
158     WebKit::WebTransformationMatrix m_replicaDrawTransform;
159     WebKit::WebTransformationMatrix m_replicaOriginTransform;
160     WebKit::WebTransformationMatrix m_replicaScreenSpaceTransform;
161     bool m_targetSurfaceTransformsAreAnimating;
162     bool m_screenSpaceTransformsAreAnimating;
163     WebKit::WebFilterOperations m_filters;
164     WebKit::WebFilterOperations m_backgroundFilters;
165     IntRect m_clipRect;
166     Vector<CCLayerImpl*> m_layerList;
167
168     // The nearest ancestor target surface that will contain the contents of this surface, and that is going
169     // to move pixels within the surface (such as with a blur). This can point to itself.
170     CCRenderSurface* m_nearestAncestorThatMovesPixels;
171
172     OwnPtr<CCDamageTracker> m_damageTracker;
173
174     // Stored in the "surface space" where this damage can be used for scissoring.
175     FloatRect m_damageRect;
176
177     // For CCLayerIteratorActions
178     int m_targetRenderSurfaceLayerIndexHistory;
179     int m_currentLayerIndexHistory;
180     friend struct CCLayerIteratorActions;
181 };
182
183 }
184 #endif // USE(ACCELERATED_COMPOSITING)
185
186 #endif