Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(116)

Side by Side Diff: cc/layer_impl.h

Issue 11122003: [cc] Rename all cc/ filenames to Chromium style (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « cc/layer_animation_controller.cc ('k') | cc/layer_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4
5 #ifndef CCLayerImpl_h
6 #define CCLayerImpl_h
7
8 #include "base/memory/scoped_ptr.h"
9 #include "cc/scoped_ptr_vector.h"
10 #include "CCInputHandler.h"
11 #include "CCLayerAnimationController.h"
12 #include "CCRenderPass.h"
13 #include "CCRenderSurface.h"
14 #include "CCResourceProvider.h"
15 #include "CCSharedQuadState.h"
16 #include "FloatRect.h"
17 #include "IntRect.h"
18 #include "Region.h"
19 #include "SkColor.h"
20 #include <public/WebFilterOperations.h>
21 #include <public/WebTransformationMatrix.h>
22 #include <string>
23 #include <wtf/OwnPtr.h>
24
25 namespace cc {
26
27 class CCLayerSorter;
28 class CCLayerTreeHostImpl;
29 class CCQuadSink;
30 class CCRenderer;
31 class CCScrollbarAnimationController;
32 class CCScrollbarLayerImpl;
33 class LayerChromium;
34
35 struct CCAppendQuadsData;
36
37 class CCLayerImpl : public CCLayerAnimationControllerClient {
38 public:
39 static scoped_ptr<CCLayerImpl> create(int id)
40 {
41 return make_scoped_ptr(new CCLayerImpl(id));
42 }
43
44 virtual ~CCLayerImpl();
45
46 // CCLayerAnimationControllerClient implementation.
47 virtual int id() const OVERRIDE;
48 virtual void setOpacityFromAnimation(float) OVERRIDE;
49 virtual float opacity() const OVERRIDE;
50 virtual void setTransformFromAnimation(const WebKit::WebTransformationMatrix &) OVERRIDE;
51 virtual const WebKit::WebTransformationMatrix& transform() const OVERRIDE;
52
53 // Tree structure.
54 CCLayerImpl* parent() const { return m_parent; }
55 const ScopedPtrVector<CCLayerImpl>& children() const { return m_children; }
56 void addChild(scoped_ptr<CCLayerImpl>);
57 void removeFromParent();
58 void removeAllChildren();
59
60 void setMaskLayer(scoped_ptr<CCLayerImpl>);
61 CCLayerImpl* maskLayer() const { return m_maskLayer.get(); }
62
63 void setReplicaLayer(scoped_ptr<CCLayerImpl>);
64 CCLayerImpl* replicaLayer() const { return m_replicaLayer.get(); }
65
66 bool hasMask() const { return m_maskLayer; }
67 bool hasReplica() const { return m_replicaLayer; }
68 bool replicaHasMask() const { return m_replicaLayer && (m_maskLayer || m_rep licaLayer->m_maskLayer); }
69
70 CCLayerTreeHostImpl* layerTreeHostImpl() const { return m_layerTreeHostImpl; }
71 void setLayerTreeHostImpl(CCLayerTreeHostImpl* hostImpl) { m_layerTreeHostIm pl = hostImpl; }
72
73 scoped_ptr<CCSharedQuadState> createSharedQuadState() const;
74 // willDraw must be called before appendQuads. If willDraw is called,
75 // didDraw is guaranteed to be called before another willDraw or before
76 // the layer is destroyed. To enforce this, any class that overrides
77 // willDraw/didDraw must call the base class version.
78 virtual void willDraw(CCResourceProvider*);
79 virtual void appendQuads(CCQuadSink&, CCAppendQuadsData&) { }
80 virtual void didDraw(CCResourceProvider*);
81
82 virtual CCResourceProvider::ResourceId contentsResourceId() const;
83
84 virtual bool hasContributingDelegatedRenderPasses() const;
85 virtual CCRenderPass::Id firstContributingRenderPassId() const;
86 virtual CCRenderPass::Id nextContributingRenderPassId(CCRenderPass::Id) cons t;
87
88 // Returns true if this layer has content to draw.
89 void setDrawsContent(bool);
90 bool drawsContent() const { return m_drawsContent; }
91
92 bool forceRenderSurface() const { return m_forceRenderSurface; }
93 void setForceRenderSurface(bool force) { m_forceRenderSurface = force; }
94
95 // Returns true if any of the layer's descendants has content to draw.
96 virtual bool descendantDrawsContent();
97
98 void setAnchorPoint(const FloatPoint&);
99 const FloatPoint& anchorPoint() const { return m_anchorPoint; }
100
101 void setAnchorPointZ(float);
102 float anchorPointZ() const { return m_anchorPointZ; }
103
104 void setBackgroundColor(SkColor);
105 SkColor backgroundColor() const { return m_backgroundColor; }
106
107 void setFilters(const WebKit::WebFilterOperations&);
108 const WebKit::WebFilterOperations& filters() const { return m_filters; }
109
110 void setBackgroundFilters(const WebKit::WebFilterOperations&);
111 const WebKit::WebFilterOperations& backgroundFilters() const { return m_back groundFilters; }
112
113 void setMasksToBounds(bool);
114 bool masksToBounds() const { return m_masksToBounds; }
115
116 void setContentsOpaque(bool);
117 bool contentsOpaque() const { return m_contentsOpaque; }
118
119 void setOpacity(float);
120 bool opacityIsAnimating() const;
121
122 void setPosition(const FloatPoint&);
123 const FloatPoint& position() const { return m_position; }
124
125 void setIsContainerForFixedPositionLayers(bool isContainerForFixedPositionLa yers) { m_isContainerForFixedPositionLayers = isContainerForFixedPositionLayers; }
126 bool isContainerForFixedPositionLayers() const { return m_isContainerForFixe dPositionLayers; }
127
128 void setFixedToContainerLayer(bool fixedToContainerLayer = true) { m_fixedTo ContainerLayer = fixedToContainerLayer;}
129 bool fixedToContainerLayer() const { return m_fixedToContainerLayer; }
130
131 void setPreserves3D(bool);
132 bool preserves3D() const { return m_preserves3D; }
133
134 void setUseParentBackfaceVisibility(bool useParentBackfaceVisibility) { m_us eParentBackfaceVisibility = useParentBackfaceVisibility; }
135 bool useParentBackfaceVisibility() const { return m_useParentBackfaceVisibil ity; }
136
137 void setUseLCDText(bool useLCDText) { m_useLCDText = useLCDText; }
138 bool useLCDText() const { return m_useLCDText; }
139
140 void setSublayerTransform(const WebKit::WebTransformationMatrix&);
141 const WebKit::WebTransformationMatrix& sublayerTransform() const { return m_ sublayerTransform; }
142
143 // Debug layer border - visual effect only, do not change geometry/clipping/ etc.
144 void setDebugBorderColor(SkColor);
145 SkColor debugBorderColor() const { return m_debugBorderColor; }
146 void setDebugBorderWidth(float);
147 float debugBorderWidth() const { return m_debugBorderWidth; }
148 bool hasDebugBorders() const;
149
150 // Debug layer name.
151 void setDebugName(const std::string& debugName) { m_debugName = debugName; }
152 std::string debugName() const { return m_debugName; }
153
154 CCRenderSurface* renderSurface() const { return m_renderSurface.get(); }
155 void createRenderSurface();
156 void clearRenderSurface() { m_renderSurface.clear(); }
157
158 float drawOpacity() const { return m_drawOpacity; }
159 void setDrawOpacity(float opacity) { m_drawOpacity = opacity; }
160
161 bool drawOpacityIsAnimating() const { return m_drawOpacityIsAnimating; }
162 void setDrawOpacityIsAnimating(bool drawOpacityIsAnimating) { m_drawOpacityI sAnimating = drawOpacityIsAnimating; }
163
164 CCLayerImpl* renderTarget() const { ASSERT(!m_renderTarget || m_renderTarget ->renderSurface()); return m_renderTarget; }
165 void setRenderTarget(CCLayerImpl* target) { m_renderTarget = target; }
166
167 void setBounds(const IntSize&);
168 const IntSize& bounds() const { return m_bounds; }
169
170 const IntSize& contentBounds() const { return m_contentBounds; }
171 void setContentBounds(const IntSize&);
172
173 const IntPoint& scrollPosition() const { return m_scrollPosition; }
174 void setScrollPosition(const IntPoint&);
175
176 const IntSize& maxScrollPosition() const {return m_maxScrollPosition; }
177 void setMaxScrollPosition(const IntSize&);
178
179 const FloatSize& scrollDelta() const { return m_scrollDelta; }
180 void setScrollDelta(const FloatSize&);
181
182 const WebKit::WebTransformationMatrix& implTransform() const { return m_impl Transform; }
183 void setImplTransform(const WebKit::WebTransformationMatrix& transform);
184
185 const IntSize& sentScrollDelta() const { return m_sentScrollDelta; }
186 void setSentScrollDelta(const IntSize& sentScrollDelta) { m_sentScrollDelta = sentScrollDelta; }
187
188 // Returns the delta of the scroll that was outside of the bounds of the ini tial scroll
189 FloatSize scrollBy(const FloatSize& scroll);
190
191 bool scrollable() const { return m_scrollable; }
192 void setScrollable(bool scrollable) { m_scrollable = scrollable; }
193
194 bool shouldScrollOnMainThread() const { return m_shouldScrollOnMainThread; }
195 void setShouldScrollOnMainThread(bool shouldScrollOnMainThread) { m_shouldSc rollOnMainThread = shouldScrollOnMainThread; }
196
197 bool haveWheelEventHandlers() const { return m_haveWheelEventHandlers; }
198 void setHaveWheelEventHandlers(bool haveWheelEventHandlers) { m_haveWheelEve ntHandlers = haveWheelEventHandlers; }
199
200 const Region& nonFastScrollableRegion() const { return m_nonFastScrollableRe gion; }
201 void setNonFastScrollableRegion(const Region& region) { m_nonFastScrollableR egion = region; }
202
203 void setDrawCheckerboardForMissingTiles(bool checkerboard) { m_drawCheckerbo ardForMissingTiles = checkerboard; }
204 bool drawCheckerboardForMissingTiles() const;
205
206 CCInputHandlerClient::ScrollStatus tryScroll(const IntPoint& viewportPoint, CCInputHandlerClient::ScrollInputType) const;
207
208 const IntRect& visibleContentRect() const { return m_visibleContentRect; }
209 void setVisibleContentRect(const IntRect& visibleContentRect) { m_visibleCon tentRect = visibleContentRect; }
210
211 bool doubleSided() const { return m_doubleSided; }
212 void setDoubleSided(bool);
213
214 void setTransform(const WebKit::WebTransformationMatrix&);
215 bool transformIsAnimating() const;
216
217 const WebKit::WebTransformationMatrix& drawTransform() const { return m_draw Transform; }
218 void setDrawTransform(const WebKit::WebTransformationMatrix& matrix) { m_dra wTransform = matrix; }
219 const WebKit::WebTransformationMatrix& screenSpaceTransform() const { return m_screenSpaceTransform; }
220 void setScreenSpaceTransform(const WebKit::WebTransformationMatrix& matrix) { m_screenSpaceTransform = matrix; }
221
222 bool drawTransformIsAnimating() const { return m_drawTransformIsAnimating; }
223 void setDrawTransformIsAnimating(bool animating) { m_drawTransformIsAnimatin g = animating; }
224 bool screenSpaceTransformIsAnimating() const { return m_screenSpaceTransform IsAnimating; }
225 void setScreenSpaceTransformIsAnimating(bool animating) { m_screenSpaceTrans formIsAnimating = animating; }
226
227 const IntRect& drawableContentRect() const { return m_drawableContentRect; }
228 void setDrawableContentRect(const IntRect& rect) { m_drawableContentRect = r ect; }
229 const FloatRect& updateRect() const { return m_updateRect; }
230 void setUpdateRect(const FloatRect& updateRect) { m_updateRect = updateRect; }
231
232 std::string layerTreeAsText() const;
233
234 void setStackingOrderChanged(bool);
235
236 bool layerPropertyChanged() const { return m_layerPropertyChanged || layerIs AlwaysDamaged(); }
237 bool layerSurfacePropertyChanged() const;
238
239 void resetAllChangeTrackingForSubtree();
240
241 virtual bool layerIsAlwaysDamaged() const;
242
243 CCLayerAnimationController* layerAnimationController() { return m_layerAnima tionController.get(); }
244
245 virtual Region visibleContentOpaqueRegion() const;
246
247 // Indicates that the context previously used to render this layer
248 // was lost and that a new one has been created. Won't be called
249 // until the new context has been created successfully.
250 virtual void didLoseContext();
251
252 CCScrollbarAnimationController* scrollbarAnimationController() const { retur n m_scrollbarAnimationController.get(); }
253
254 CCScrollbarLayerImpl* horizontalScrollbarLayer() const;
255 void setHorizontalScrollbarLayer(CCScrollbarLayerImpl*);
256
257 CCScrollbarLayerImpl* verticalScrollbarLayer() const;
258 void setVerticalScrollbarLayer(CCScrollbarLayerImpl*);
259
260 protected:
261 explicit CCLayerImpl(int);
262
263 void appendDebugBorderQuad(CCQuadSink&, const CCSharedQuadState*, CCAppendQu adsData&) const;
264
265 IntRect layerRectToContentRect(const WebKit::WebRect& layerRect);
266
267 virtual void dumpLayerProperties(std::string*, int indent) const;
268 static std::string indentString(int indent);
269
270 private:
271 void setParent(CCLayerImpl* parent) { m_parent = parent; }
272 friend class TreeSynchronizer;
273 void clearChildList(); // Warning: This does not preserve tree structure inv ariants and so is only exposed to the tree synchronizer.
274
275 void noteLayerPropertyChangedForSubtree();
276
277 // Note carefully this does not affect the current layer.
278 void noteLayerPropertyChangedForDescendants();
279
280 virtual const char* layerTypeAsString() const;
281
282 void dumpLayer(std::string*, int indent) const;
283
284 // Properties internal to CCLayerImpl
285 CCLayerImpl* m_parent;
286 ScopedPtrVector<CCLayerImpl> m_children;
287 // m_maskLayer can be temporarily stolen during tree sync, we need this ID t o confirm newly assigned layer is still the previous one
288 int m_maskLayerId;
289 scoped_ptr<CCLayerImpl> m_maskLayer;
290 int m_replicaLayerId; // ditto
291 scoped_ptr<CCLayerImpl> m_replicaLayer;
292 int m_layerId;
293 CCLayerTreeHostImpl* m_layerTreeHostImpl;
294
295 // Properties synchronized from the associated LayerChromium.
296 FloatPoint m_anchorPoint;
297 float m_anchorPointZ;
298 IntSize m_bounds;
299 IntSize m_contentBounds;
300 IntPoint m_scrollPosition;
301 bool m_scrollable;
302 bool m_shouldScrollOnMainThread;
303 bool m_haveWheelEventHandlers;
304 Region m_nonFastScrollableRegion;
305 SkColor m_backgroundColor;
306
307 // Whether the "back" of this layer should draw.
308 bool m_doubleSided;
309
310 // Tracks if drawing-related properties have changed since last redraw.
311 bool m_layerPropertyChanged;
312
313 // Indicates that a property has changed on this layer that would not
314 // affect the pixels on its target surface, but would require redrawing
315 // but would require redrawing the targetSurface onto its ancestor targetSur face.
316 // For layers that do not own a surface this flag acts as m_layerPropertyCha nged.
317 bool m_layerSurfacePropertyChanged;
318
319 // Uses layer's content space.
320 IntRect m_visibleContentRect;
321 bool m_masksToBounds;
322 bool m_contentsOpaque;
323 float m_opacity;
324 FloatPoint m_position;
325 bool m_preserves3D;
326 bool m_useParentBackfaceVisibility;
327 bool m_drawCheckerboardForMissingTiles;
328 WebKit::WebTransformationMatrix m_sublayerTransform;
329 WebKit::WebTransformationMatrix m_transform;
330 bool m_useLCDText;
331
332 bool m_drawsContent;
333 bool m_forceRenderSurface;
334
335 // Set for the layer that other layers are fixed to.
336 bool m_isContainerForFixedPositionLayers;
337 // This is true if the layer should be fixed to the closest ancestor contain er.
338 bool m_fixedToContainerLayer;
339
340 FloatSize m_scrollDelta;
341 IntSize m_sentScrollDelta;
342 IntSize m_maxScrollPosition;
343 WebKit::WebTransformationMatrix m_implTransform;
344
345 // The layer whose coordinate space this layer draws into. This can be
346 // either the same layer (m_renderTarget == this) or an ancestor of this
347 // layer.
348 CCLayerImpl* m_renderTarget;
349
350 // The global depth value of the center of the layer. This value is used
351 // to sort layers from back to front.
352 float m_drawDepth;
353 float m_drawOpacity;
354 bool m_drawOpacityIsAnimating;
355
356 // Debug borders.
357 SkColor m_debugBorderColor;
358 float m_debugBorderWidth;
359
360 // Debug layer name.
361 std::string m_debugName;
362
363 WebKit::WebFilterOperations m_filters;
364 WebKit::WebFilterOperations m_backgroundFilters;
365
366 WebKit::WebTransformationMatrix m_drawTransform;
367 WebKit::WebTransformationMatrix m_screenSpaceTransform;
368 bool m_drawTransformIsAnimating;
369 bool m_screenSpaceTransformIsAnimating;
370
371 #ifndef NDEBUG
372 bool m_betweenWillDrawAndDidDraw;
373 #endif
374
375 // Render surface associated with this layer. The layer and its descendants
376 // will render to this surface.
377 OwnPtr<CCRenderSurface> m_renderSurface;
378
379 // Hierarchical bounding rect containing the layer and its descendants.
380 // Uses target surface's space.
381 IntRect m_drawableContentRect;
382
383 // Rect indicating what was repainted/updated during update.
384 // Note that plugin layers bypass this and leave it empty.
385 // Uses layer's content space.
386 FloatRect m_updateRect;
387
388 // Manages animations for this layer.
389 scoped_ptr<CCLayerAnimationController> m_layerAnimationController;
390
391 // Manages scrollbars for this layer
392 OwnPtr<CCScrollbarAnimationController> m_scrollbarAnimationController;
393 };
394
395 void sortLayers(std::vector<CCLayerImpl*>::iterator first, std::vector<CCLayerIm pl*>::iterator end, CCLayerSorter*);
396
397 }
398
399 #endif // CCLayerImpl_h
OLDNEW
« no previous file with comments | « cc/layer_animation_controller.cc ('k') | cc/layer_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698