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

Unified Diff: cc/layer_impl.h

Issue 11280263: Organize internal properties of cc/ layer types (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | cc/layer_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/layer_impl.h
diff --git a/cc/layer_impl.h b/cc/layer_impl.h
index 3e72d20a70220a488d3b675637e3892bbd49d503..96c8025c896b702ebafbe65b191cd4763928146d 100644
--- a/cc/layer_impl.h
+++ b/cc/layer_impl.h
@@ -36,6 +36,58 @@ class Layer;
struct AppendQuadsData;
+// Container for properties that layers need to compute before they can be drawn.
+struct DrawProperties {
danakj 2012/12/01 03:51:40 If the struct has all the same things on both thre
+ DrawProperties()
+ : drawOpacity(0)
+ , drawOpacityIsAnimating(false)
+ , drawTransformIsAnimating(false)
+ , screenSpaceTransformIsAnimating(false)
+ , isClipped(false)
+ , renderTarget(0)
+ {
+ }
+
+ // Transforms objects from content space to target surface space, where
+ // this layer would be drawn.
+ gfx::Transform drawTransform;
+
+ // Transforms objects from content space to screen space (viewport space).
+ gfx::Transform screenSpaceTransform;
+
+ // drawOpacity may be different than layer's opacity, particularly in the
+ // case where a renderSurface re-parents the layer's opacity.
+ float drawOpacity;
+
+ // XXXIsAnimating flags are used to indicate whether the drawProperties
+ // are actually meaningful on the main thread. When the properties are
+ // animating, the main thread may not have the same values that are used
+ // to draw.
+ bool drawOpacityIsAnimating;
+ bool drawTransformIsAnimating;
+ bool screenSpaceTransformIsAnimating;
+
+ // True if the layer needs to be clipped by clipRect.
+ bool isClipped;
+
+ // The layer whose coordinate space this layer draws into. This can be
+ // either the same layer (m_drawProperties.renderTarget == this) or an
+ // ancestor of this layer.
+ LayerImpl* renderTarget;
+
+ // Uses layer's content space.
+ gfx::Rect visibleContentRect;
+
+ // In target surface space, the rect that encloses the clipped, drawable
+ // content of the layer.
+ gfx::Rect drawableContentRect;
+
+ // In target surface space, the original rect that clipped this
+ // layer. This value is used to avoid unnecessarily changing GL scissor
+ // state.
+ gfx::Rect clipRect;
+};
+
class CC_EXPORT LayerImpl : public LayerAnimationControllerClient {
public:
typedef ScopedPtrVector<LayerImpl> LayerList;
@@ -162,15 +214,15 @@ public:
void createRenderSurface();
void clearRenderSurface() { m_renderSurface.reset(); }
- float drawOpacity() const { return m_drawOpacity; }
- void setDrawOpacity(float opacity) { m_drawOpacity = opacity; }
+ float drawOpacity() const { return m_drawProperties.drawOpacity; }
danakj 2012/12/01 03:51:40 I guess the plan is for these accessors to go away
+ void setDrawOpacity(float opacity) { m_drawProperties.drawOpacity = opacity; }
- bool drawOpacityIsAnimating() const { return m_drawOpacityIsAnimating; }
- void setDrawOpacityIsAnimating(bool drawOpacityIsAnimating) { m_drawOpacityIsAnimating = drawOpacityIsAnimating; }
+ bool drawOpacityIsAnimating() const { return m_drawProperties.drawOpacityIsAnimating; }
+ void setDrawOpacityIsAnimating(bool drawOpacityIsAnimating) { m_drawProperties.drawOpacityIsAnimating = drawOpacityIsAnimating; }
- void setRenderTarget(LayerImpl* target) { m_renderTarget = target; }
- LayerImpl* renderTarget() { DCHECK(!m_renderTarget || m_renderTarget->renderSurface()); return m_renderTarget; }
- const LayerImpl* renderTarget() const { DCHECK(!m_renderTarget || m_renderTarget->renderSurface()); return m_renderTarget; }
+ void setRenderTarget(LayerImpl* target) { m_drawProperties.renderTarget = target; }
+ LayerImpl* renderTarget() { DCHECK(!m_drawProperties.renderTarget || m_drawProperties.renderTarget->renderSurface()); return m_drawProperties.renderTarget; }
+ const LayerImpl* renderTarget() const { DCHECK(!m_drawProperties.renderTarget || m_drawProperties.renderTarget->renderSurface()); return m_drawProperties.renderTarget; }
// The client should be responsible for setting bounds, contentBounds and
// contentsScale to appropriate values. LayerImpl doesn't calculate any of
@@ -226,8 +278,8 @@ public:
InputHandlerClient::ScrollStatus tryScroll(const gfx::PointF& screenSpacePoint, InputHandlerClient::ScrollInputType) const;
- const gfx::Rect& visibleContentRect() const { return m_visibleContentRect; }
- void setVisibleContentRect(const gfx::Rect& visibleContentRect) { m_visibleContentRect = visibleContentRect; }
+ const gfx::Rect& visibleContentRect() const { return m_drawProperties.visibleContentRect; }
+ void setVisibleContentRect(const gfx::Rect& visibleContentRect) { m_drawProperties.visibleContentRect = visibleContentRect; }
bool doubleSided() const { return m_doubleSided; }
void setDoubleSided(bool);
@@ -235,24 +287,24 @@ public:
void setTransform(const gfx::Transform&);
bool transformIsAnimating() const;
- const gfx::Transform& drawTransform() const { return m_drawTransform; }
- void setDrawTransform(const gfx::Transform& matrix) { m_drawTransform = matrix; }
- const gfx::Transform& screenSpaceTransform() const { return m_screenSpaceTransform; }
- void setScreenSpaceTransform(const gfx::Transform& matrix) { m_screenSpaceTransform = matrix; }
+ const gfx::Transform& drawTransform() const { return m_drawProperties.drawTransform; }
+ void setDrawTransform(const gfx::Transform& matrix) { m_drawProperties.drawTransform = matrix; }
+ const gfx::Transform& screenSpaceTransform() const { return m_drawProperties.screenSpaceTransform; }
+ void setScreenSpaceTransform(const gfx::Transform& matrix) { m_drawProperties.screenSpaceTransform = matrix; }
- bool drawTransformIsAnimating() const { return m_drawTransformIsAnimating; }
- void setDrawTransformIsAnimating(bool animating) { m_drawTransformIsAnimating = animating; }
- bool screenSpaceTransformIsAnimating() const { return m_screenSpaceTransformIsAnimating; }
- void setScreenSpaceTransformIsAnimating(bool animating) { m_screenSpaceTransformIsAnimating = animating; }
+ bool drawTransformIsAnimating() const { return m_drawProperties.drawTransformIsAnimating; }
+ void setDrawTransformIsAnimating(bool animating) { m_drawProperties.drawTransformIsAnimating = animating; }
+ bool screenSpaceTransformIsAnimating() const { return m_drawProperties.screenSpaceTransformIsAnimating; }
+ void setScreenSpaceTransformIsAnimating(bool animating) { m_drawProperties.screenSpaceTransformIsAnimating = animating; }
- bool isClipped() const { return m_isClipped; }
- void setIsClipped(bool isClipped) { m_isClipped = isClipped; }
+ bool isClipped() const { return m_drawProperties.isClipped; }
+ void setIsClipped(bool isClipped) { m_drawProperties.isClipped = isClipped; }
- const gfx::Rect& clipRect() const { return m_clipRect; }
- void setClipRect(const gfx::Rect& clipRect) { m_clipRect = clipRect; }
+ const gfx::Rect& clipRect() const { return m_drawProperties.clipRect; }
+ void setClipRect(const gfx::Rect& clipRect) { m_drawProperties.clipRect = clipRect; }
- const gfx::Rect& drawableContentRect() const { return m_drawableContentRect; }
- void setDrawableContentRect(const gfx::Rect& rect) { m_drawableContentRect = rect; }
+ const gfx::Rect& drawableContentRect() const { return m_drawProperties.drawableContentRect; }
+ void setDrawableContentRect(const gfx::Rect& rect) { m_drawProperties.drawableContentRect = rect; }
const gfx::RectF& updateRect() const { return m_updateRect; }
void setUpdateRect(const gfx::RectF& updateRect) { m_updateRect = updateRect; }
@@ -354,8 +406,6 @@ private:
// For layers that do not own a surface this flag acts as m_layerPropertyChanged.
bool m_layerSurfacePropertyChanged;
- // Uses layer's content space.
- gfx::Rect m_visibleContentRect;
bool m_masksToBounds;
bool m_contentsOpaque;
float m_opacity;
@@ -380,16 +430,9 @@ private:
gfx::Vector2d m_maxScrollOffset;
gfx::Transform m_implTransform;
- // The layer whose coordinate space this layer draws into. This can be
- // either the same layer (m_renderTarget == this) or an ancestor of this
- // layer.
- LayerImpl* m_renderTarget;
-
// The global depth value of the center of the layer. This value is used
// to sort layers from back to front.
float m_drawDepth;
- float m_drawOpacity;
- bool m_drawOpacityIsAnimating;
// Debug layer name.
std::string m_debugName;
@@ -398,11 +441,6 @@ private:
WebKit::WebFilterOperations m_backgroundFilters;
SkImageFilter* m_filter;
- gfx::Transform m_drawTransform;
- gfx::Transform m_screenSpaceTransform;
- bool m_drawTransformIsAnimating;
- bool m_screenSpaceTransformIsAnimating;
-
#ifndef NDEBUG
bool m_betweenWillDrawAndDidDraw;
#endif
@@ -411,13 +449,6 @@ private:
// will render to this surface.
scoped_ptr<RenderSurfaceImpl> m_renderSurface;
- // Uses target surface's space.
- gfx::Rect m_drawableContentRect;
- gfx::Rect m_clipRect;
-
- // True if the layer is clipped by m_clipRect.
- bool m_isClipped;
-
// Rect indicating what was repainted/updated during update.
// Note that plugin layers bypass this and leave it empty.
// Uses layer's content space.
@@ -429,6 +460,10 @@ private:
// Manages scrollbars for this layer
scoped_ptr<ScrollbarAnimationController> m_scrollbarAnimationController;
+ // Group of properties that need to be computed based on the layer tree
+ // hierarchy before layers can be drawn.
+ DrawProperties m_drawProperties;
+
DISALLOW_COPY_AND_ASSIGN(LayerImpl);
};
« no previous file with comments | « no previous file | cc/layer_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698