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

Side by Side Diff: sky/engine/core/rendering/RenderLayer.h

Issue 965013003: Move transforms from RenderLayer to RenderBox. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 9 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2003, 2009, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2003, 2009, 2012 Apple Inc. All rights reserved.
3 * Copyright (C) 2013 Intel Corporation. All rights reserved. 3 * Copyright (C) 2013 Intel Corporation. All rights reserved.
4 * 4 *
5 * Portions are Copyright (C) 1998 Netscape Communications Corporation. 5 * Portions are Copyright (C) 1998 Netscape Communications Corporation.
6 * 6 *
7 * Other contributors: 7 * Other contributors:
8 * Robert O'Callahan <roc+@cs.cmu.edu> 8 * Robert O'Callahan <roc+@cs.cmu.edu>
9 * David Baron <dbaron@fas.harvard.edu> 9 * David Baron <dbaron@fas.harvard.edu>
10 * Christian Biesinger <cbiesinger@web.de> 10 * Christian Biesinger <cbiesinger@web.de>
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 #include "sky/engine/core/rendering/LayerPaintingInfo.h" 48 #include "sky/engine/core/rendering/LayerPaintingInfo.h"
49 #include "sky/engine/core/rendering/RenderBox.h" 49 #include "sky/engine/core/rendering/RenderBox.h"
50 #include "sky/engine/core/rendering/RenderLayerClipper.h" 50 #include "sky/engine/core/rendering/RenderLayerClipper.h"
51 #include "sky/engine/core/rendering/RenderLayerStackingNode.h" 51 #include "sky/engine/core/rendering/RenderLayerStackingNode.h"
52 #include "sky/engine/core/rendering/RenderLayerStackingNodeIterator.h" 52 #include "sky/engine/core/rendering/RenderLayerStackingNodeIterator.h"
53 #include "sky/engine/public/platform/WebBlendMode.h" 53 #include "sky/engine/public/platform/WebBlendMode.h"
54 #include "sky/engine/wtf/OwnPtr.h" 54 #include "sky/engine/wtf/OwnPtr.h"
55 55
56 namespace blink { 56 namespace blink {
57 57
58 class FilterOperations;
59 class HitTestRequest;
60 class HitTestResult;
61 class HitTestingTransformState;
62 class RenderStyle; 58 class RenderStyle;
63 class TransformationMatrix;
64 59
65 enum BorderRadiusClippingRule { IncludeSelfForBorderRadius, DoNotIncludeSelfForB orderRadius }; 60 enum BorderRadiusClippingRule { IncludeSelfForBorderRadius, DoNotIncludeSelfForB orderRadius };
66 enum IncludeSelfOrNot { IncludeSelf, ExcludeSelf }; 61 enum IncludeSelfOrNot { IncludeSelf, ExcludeSelf };
67 62
68 class RenderLayer { 63 class RenderLayer {
69 WTF_MAKE_NONCOPYABLE(RenderLayer); 64 WTF_MAKE_NONCOPYABLE(RenderLayer);
70 public: 65 public:
71 RenderLayer(RenderBox*, LayerType); 66 RenderLayer(RenderBox*, LayerType);
72 ~RenderLayer(); 67 ~RenderLayer();
73 68
(...skipping 22 matching lines...) Expand all
96 return curr; 91 return curr;
97 } 92 }
98 93
99 LayoutPoint location() const; 94 LayoutPoint location() const;
100 IntSize size() const; 95 IntSize size() const;
101 LayoutRect rect() const { return LayoutRect(location(), size()); } 96 LayoutRect rect() const { return LayoutRect(location(), size()); }
102 97
103 bool isRootLayer() const { return m_isRootLayer; } 98 bool isRootLayer() const { return m_isRootLayer; }
104 99
105 void updateLayerPositionsAfterLayout(); 100 void updateLayerPositionsAfterLayout();
106 void updateTransformationMatrix();
107 101
108 RenderLayerStackingNode* stackingNode() { return m_stackingNode.get(); } 102 RenderLayerStackingNode* stackingNode() { return m_stackingNode.get(); }
109 const RenderLayerStackingNode* stackingNode() const { return m_stackingNode. get(); } 103 const RenderLayerStackingNode* stackingNode() const { return m_stackingNode. get(); }
110 104
111 // Gets the nearest enclosing positioned ancestor layer (also includes 105 // Gets the nearest enclosing positioned ancestor layer (also includes
112 // the <html> layer and the root layer). 106 // the <html> layer and the root layer).
113 RenderLayer* enclosingPositionedAncestor() const; 107 RenderLayer* enclosingPositionedAncestor() const;
114 108
115 const RenderLayer* compositingContainer() const; 109 const RenderLayer* compositingContainer() const;
116 110
117 void convertToLayerCoords(const RenderLayer* ancestorLayer, LayoutPoint&) co nst; 111 void convertToLayerCoords(const RenderLayer* ancestorLayer, LayoutPoint&) co nst;
118 void convertToLayerCoords(const RenderLayer* ancestorLayer, LayoutRect&) con st; 112 void convertToLayerCoords(const RenderLayer* ancestorLayer, LayoutRect&) con st;
119 113
120 // Pass offsetFromRoot if known. 114 // Pass offsetFromRoot if known.
121 bool intersectsDamageRect(const LayoutRect& layerBounds, const LayoutRect& d amageRect, const RenderLayer* rootLayer, const LayoutPoint* offsetFromRoot = 0) const; 115 bool intersectsDamageRect(const LayoutRect& layerBounds, const LayoutRect& d amageRect, const RenderLayer* rootLayer, const LayoutPoint* offsetFromRoot = 0) const;
122 116
123 // Bounding box relative to some ancestor layer. Pass offsetFromRoot if know n. 117 // Bounding box relative to some ancestor layer. Pass offsetFromRoot if know n.
124 LayoutRect physicalBoundingBox(const RenderLayer* ancestorLayer, const Layou tPoint* offsetFromRoot = 0) const; 118 LayoutRect physicalBoundingBox(const RenderLayer* ancestorLayer, const Layou tPoint* offsetFromRoot = 0) const;
125 LayoutRect physicalBoundingBoxIncludingReflectionAndStackingChildren(const R enderLayer* ancestorLayer, const LayoutPoint& offsetFromRoot) const; 119 LayoutRect physicalBoundingBoxIncludingReflectionAndStackingChildren(const R enderLayer* ancestorLayer, const LayoutPoint& offsetFromRoot) const;
126 LayoutRect boundingBoxForCompositing(const RenderLayer* ancestorLayer = 0) c onst; 120 LayoutRect boundingBoxForCompositing(const RenderLayer* ancestorLayer = 0) c onst;
127 121
128 // This transform has the transform-origin baked in.
129 TransformationMatrix* transform() const { return m_transform.get(); }
130
131 bool preserves3D() const { return renderer()->style()->transformStyle3D() == TransformStyle3DPreserve3D; }
132 bool has3DTransform() const { return m_transform && !m_transform->isAffine() ; }
133
134 bool has3DTransformedDescendant() const { return m_has3DTransformedDescendan t; } 122 bool has3DTransformedDescendant() const { return m_has3DTransformedDescendan t; }
135 // Both updates the status, and returns true if descendants of this have 3d. 123 // Both updates the status, and returns true if descendants of this have 3d.
136 bool update3DTransformedDescendantStatus(); 124 bool update3DTransformedDescendantStatus();
137 125
138 // FIXME: reflections should force transform-style to be flat in the style: https://bugs.webkit.org/show_bug.cgi?id=106959
139 bool shouldPreserve3D() const { return renderer()->style()->transformStyle3D () == TransformStyle3DPreserve3D; }
140
141 void* operator new(size_t); 126 void* operator new(size_t);
142 // Only safe to call from RenderBox::destroyLayer() 127 // Only safe to call from RenderBox::destroyLayer()
143 void operator delete(void*); 128 void operator delete(void*);
144 129
145 RenderLayerClipper& clipper() { return m_clipper; } 130 RenderLayerClipper& clipper() { return m_clipper; }
146 const RenderLayerClipper& clipper() const { return m_clipper; } 131 const RenderLayerClipper& clipper() const { return m_clipper; }
147 132
148 inline bool isPositionedContainer() const 133 inline bool isPositionedContainer() const
149 { 134 {
150 // FIXME: This is not in sync with containingBlock. 135 // FIXME: This is not in sync with containingBlock.
151 return isRootLayer() || renderer()->isPositioned() || renderer()->hasTra nsform(); 136 return isRootLayer() || renderer()->isPositioned() || renderer()->hasTra nsform();
152 } 137 }
153 138
154 void clipToRect(const LayerPaintingInfo&, GraphicsContext*, const ClipRect&, BorderRadiusClippingRule = IncludeSelfForBorderRadius); 139 void clipToRect(const LayerPaintingInfo&, GraphicsContext*, const ClipRect&, BorderRadiusClippingRule = IncludeSelfForBorderRadius);
155 void restoreClip(GraphicsContext*, const LayoutRect& paintDirtyRect, const C lipRect&); 140 void restoreClip(GraphicsContext*, const LayoutRect& paintDirtyRect, const C lipRect&);
156 141
157 private:
158 // Bounding box in the coordinates of this layer. 142 // Bounding box in the coordinates of this layer.
159 LayoutRect logicalBoundingBox() const; 143 LayoutRect logicalBoundingBox() const;
160 144
161 void setNextSibling(RenderLayer* next) { m_next = next; } 145 void setNextSibling(RenderLayer* next) { m_next = next; }
162 void setPreviousSibling(RenderLayer* prev) { m_previous = prev; } 146 void setPreviousSibling(RenderLayer* prev) { m_previous = prev; }
163 void setFirstChild(RenderLayer* first) { m_first = first; } 147 void setFirstChild(RenderLayer* first) { m_first = first; }
164 void setLastChild(RenderLayer* last) { m_last = last; } 148 void setLastChild(RenderLayer* last) { m_last = last; }
165 149
166 bool shouldBeSelfPaintingLayer() const; 150 bool shouldBeSelfPaintingLayer() const;
167 151
168 void updateTransform(const RenderStyle* oldStyle, RenderStyle* newStyle);
169
170 void dirty3DTransformedDescendantStatus(); 152 void dirty3DTransformedDescendantStatus();
171 153
154 private:
172 LayerType m_layerType; 155 LayerType m_layerType;
173 156
174 // Self-painting layer is an optimization where we avoid the heavy RenderLay er painting 157 // Self-painting layer is an optimization where we avoid the heavy RenderLay er painting
175 // machinery for a RenderLayer allocated only to handle the overflow clip ca se. 158 // machinery for a RenderLayer allocated only to handle the overflow clip ca se.
176 // FIXME(crbug.com/332791): Self-painting layer should be merged into the ov erflow-only concept. 159 // FIXME(crbug.com/332791): Self-painting layer should be merged into the ov erflow-only concept.
177 unsigned m_isSelfPaintingLayer : 1; 160 unsigned m_isSelfPaintingLayer : 1;
178 161
179 const unsigned m_isRootLayer : 1; 162 const unsigned m_isRootLayer : 1;
180 163
181 unsigned m_3DTransformedDescendantStatusDirty : 1; 164 unsigned m_3DTransformedDescendantStatusDirty : 1;
182 // Set on a stacking context layer that has 3D descendants anywhere 165 // Set on a stacking context layer that has 3D descendants anywhere
183 // in a preserves3D hierarchy. Hint to do 3D-aware hit testing. 166 // in a preserves3D hierarchy. Hint to do 3D-aware hit testing.
184 unsigned m_has3DTransformedDescendant : 1; 167 unsigned m_has3DTransformedDescendant : 1;
185 168
186 RenderBox* m_renderer; 169 RenderBox* m_renderer;
187 170
188 RenderLayer* m_parent; 171 RenderLayer* m_parent;
189 RenderLayer* m_previous; 172 RenderLayer* m_previous;
190 RenderLayer* m_next; 173 RenderLayer* m_next;
191 RenderLayer* m_first; 174 RenderLayer* m_first;
192 RenderLayer* m_last; 175 RenderLayer* m_last;
193 176
194 OwnPtr<TransformationMatrix> m_transform;
195
196 RenderLayerClipper m_clipper; // FIXME: Lazily allocate? 177 RenderLayerClipper m_clipper; // FIXME: Lazily allocate?
197 OwnPtr<RenderLayerStackingNode> m_stackingNode; 178 OwnPtr<RenderLayerStackingNode> m_stackingNode;
198 }; 179 };
199 180
200 } // namespace blink 181 } // namespace blink
201 182
202 #endif // SKY_ENGINE_CORE_RENDERING_RENDERLAYER_H_ 183 #endif // SKY_ENGINE_CORE_RENDERING_RENDERLAYER_H_
OLDNEW
« no previous file with comments | « sky/engine/core/rendering/RenderBoxModelObject.cpp ('k') | sky/engine/core/rendering/RenderLayer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698