OLD | NEW |
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 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 const RenderLayerStackingNode* stackingNode() const { return m_stackingNode.
get(); } | 127 const RenderLayerStackingNode* stackingNode() const { return m_stackingNode.
get(); } |
128 | 128 |
129 bool hasBoxDecorationsOrBackground() const; | 129 bool hasBoxDecorationsOrBackground() const; |
130 bool hasVisibleBoxDecorations() const; | 130 bool hasVisibleBoxDecorations() const; |
131 // Returns true if this layer has visible content (ignoring any child layers
). | 131 // Returns true if this layer has visible content (ignoring any child layers
). |
132 bool isVisuallyNonEmpty() const; | 132 bool isVisuallyNonEmpty() const; |
133 // True if this layer container renderers that paint. | 133 // True if this layer container renderers that paint. |
134 bool hasNonEmptyChildRenderers() const; | 134 bool hasNonEmptyChildRenderers() const; |
135 | 135 |
136 bool usedTransparency() const { return m_usedTransparency; } | 136 bool usedTransparency() const { return m_usedTransparency; } |
| 137 void clearUsedTransparency() { m_usedTransparency = false; } |
137 | 138 |
138 // Gets the nearest enclosing positioned ancestor layer (also includes | 139 // Gets the nearest enclosing positioned ancestor layer (also includes |
139 // the <html> layer and the root layer). | 140 // the <html> layer and the root layer). |
140 RenderLayer* enclosingPositionedAncestor() const; | 141 RenderLayer* enclosingPositionedAncestor() const; |
141 | 142 |
142 RenderLayer* enclosingOverflowClipLayer(IncludeSelfOrNot = IncludeSelf) cons
t; | 143 RenderLayer* enclosingOverflowClipLayer(IncludeSelfOrNot = IncludeSelf) cons
t; |
143 | 144 |
144 const RenderLayer* compositingContainer() const; | 145 const RenderLayer* compositingContainer() const; |
145 RenderLayer* enclosingFilterLayer(IncludeSelfOrNot = IncludeSelf) const; | 146 RenderLayer* enclosingFilterLayer(IncludeSelfOrNot = IncludeSelf) const; |
146 bool hasAncestorWithFilterOutsets() const; | 147 bool hasAncestorWithFilterOutsets() const; |
147 | 148 |
148 void convertToLayerCoords(const RenderLayer* ancestorLayer, LayoutPoint&) co
nst; | 149 void convertToLayerCoords(const RenderLayer* ancestorLayer, LayoutPoint&) co
nst; |
149 void convertToLayerCoords(const RenderLayer* ancestorLayer, LayoutRect&) con
st; | 150 void convertToLayerCoords(const RenderLayer* ancestorLayer, LayoutRect&) con
st; |
150 | 151 |
151 // The two main functions that use the layer system. The paint method | 152 // The two main functions that use the layer system. The paint method |
152 // paints the layers that intersect the damage rect from back to | 153 // paints the layers that intersect the damage rect from back to |
153 // front. The hitTest method looks for mouse events by walking | 154 // front. The hitTest method looks for mouse events by walking |
154 // layers that intersect the point from front to back. | 155 // layers that intersect the point from front to back. |
155 // paint() assumes that the caller will clip to the bounds of damageRect if
necessary. | |
156 void paint(GraphicsContext*, const LayoutRect& damageRect); | |
157 bool hitTest(const HitTestRequest&, HitTestResult&); | 156 bool hitTest(const HitTestRequest&, HitTestResult&); |
158 bool hitTest(const HitTestRequest&, const HitTestLocation&, HitTestResult&); | 157 bool hitTest(const HitTestRequest&, const HitTestLocation&, HitTestResult&); |
159 | 158 |
160 // Pass offsetFromRoot if known. | 159 // Pass offsetFromRoot if known. |
161 bool intersectsDamageRect(const LayoutRect& layerBounds, const LayoutRect& d
amageRect, const RenderLayer* rootLayer, const LayoutPoint* offsetFromRoot = 0)
const; | 160 bool intersectsDamageRect(const LayoutRect& layerBounds, const LayoutRect& d
amageRect, const RenderLayer* rootLayer, const LayoutPoint* offsetFromRoot = 0)
const; |
162 | 161 |
163 // Bounding box relative to some ancestor layer. Pass offsetFromRoot if know
n. | 162 // Bounding box relative to some ancestor layer. Pass offsetFromRoot if know
n. |
164 LayoutRect physicalBoundingBox(const RenderLayer* ancestorLayer, const Layou
tPoint* offsetFromRoot = 0) const; | 163 LayoutRect physicalBoundingBox(const RenderLayer* ancestorLayer, const Layou
tPoint* offsetFromRoot = 0) const; |
165 LayoutRect physicalBoundingBoxIncludingReflectionAndStackingChildren(const R
enderLayer* ancestorLayer, const LayoutPoint& offsetFromRoot) const; | 164 LayoutRect physicalBoundingBoxIncludingReflectionAndStackingChildren(const R
enderLayer* ancestorLayer, const LayoutPoint& offsetFromRoot) const; |
166 | 165 |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 inline bool isPositionedContainer() const | 236 inline bool isPositionedContainer() const |
238 { | 237 { |
239 // FIXME: This is not in sync with containingBlock. | 238 // FIXME: This is not in sync with containingBlock. |
240 RenderLayerModelObject* layerRenderer = renderer(); | 239 RenderLayerModelObject* layerRenderer = renderer(); |
241 return isRootLayer() || layerRenderer->isPositioned() || hasTransform(); | 240 return isRootLayer() || layerRenderer->isPositioned() || hasTransform(); |
242 } | 241 } |
243 | 242 |
244 void updateOrRemoveFilterEffectRenderer(); | 243 void updateOrRemoveFilterEffectRenderer(); |
245 void updateSelfPaintingLayer(); | 244 void updateSelfPaintingLayer(); |
246 | 245 |
| 246 void clipToRect(const LayerPaintingInfo&, GraphicsContext*, const ClipRect&,
BorderRadiusClippingRule = IncludeSelfForBorderRadius); |
| 247 void restoreClip(GraphicsContext*, const LayoutRect& paintDirtyRect, const C
lipRect&); |
| 248 |
247 private: | 249 private: |
248 // TODO(ojan): Get rid of this. These are basically layer-tree-only paint ph
ases. | 250 // TODO(ojan): Get rid of this. These are basically layer-tree-only paint ph
ases. |
249 enum PaintLayerFlags { | 251 enum PaintLayerFlags { |
250 PaintContent, | 252 PaintContent, |
251 }; | 253 }; |
252 | 254 |
253 // Bounding box in the coordinates of this layer. | 255 // Bounding box in the coordinates of this layer. |
254 LayoutRect logicalBoundingBox() const; | 256 LayoutRect logicalBoundingBox() const; |
255 | 257 |
256 void setAncestorChainHasSelfPaintingLayerDescendant(); | 258 void setAncestorChainHasSelfPaintingLayerDescendant(); |
257 void dirtyAncestorChainHasSelfPaintingLayerDescendantStatus(); | 259 void dirtyAncestorChainHasSelfPaintingLayerDescendantStatus(); |
258 | 260 |
259 void clipToRect(const LayerPaintingInfo&, GraphicsContext*, const ClipRect&,
BorderRadiusClippingRule = IncludeSelfForBorderRadius); | |
260 void restoreClip(GraphicsContext*, const LayoutRect& paintDirtyRect, const C
lipRect&); | |
261 | |
262 void setNextSibling(RenderLayer* next) { m_next = next; } | 261 void setNextSibling(RenderLayer* next) { m_next = next; } |
263 void setPreviousSibling(RenderLayer* prev) { m_previous = prev; } | 262 void setPreviousSibling(RenderLayer* prev) { m_previous = prev; } |
264 void setFirstChild(RenderLayer* first) { m_first = first; } | 263 void setFirstChild(RenderLayer* first) { m_first = first; } |
265 void setLastChild(RenderLayer* last) { m_last = last; } | 264 void setLastChild(RenderLayer* last) { m_last = last; } |
266 | 265 |
267 void updateHasSelfPaintingLayerDescendant() const; | 266 void updateHasSelfPaintingLayerDescendant() const; |
268 | 267 |
269 bool hasSelfPaintingLayerDescendant() const | 268 bool hasSelfPaintingLayerDescendant() const |
270 { | 269 { |
271 if (m_hasSelfPaintingLayerDescendantDirty) | 270 if (m_hasSelfPaintingLayerDescendantDirty) |
272 updateHasSelfPaintingLayerDescendant(); | 271 updateHasSelfPaintingLayerDescendant(); |
273 ASSERT(!m_hasSelfPaintingLayerDescendantDirty); | 272 ASSERT(!m_hasSelfPaintingLayerDescendantDirty); |
274 return m_hasSelfPaintingLayerDescendant; | 273 return m_hasSelfPaintingLayerDescendant; |
275 } | 274 } |
276 | 275 |
277 LayoutPoint renderBoxLocation() const { return renderer()->isBox() ? toRende
rBox(renderer())->location() : LayoutPoint(); } | 276 LayoutPoint renderBoxLocation() const { return renderer()->isBox() ? toRende
rBox(renderer())->location() : LayoutPoint(); } |
278 | 277 |
279 // paintLayer() assumes that the caller will clip to the bounds of the paint
ing dirty if necessary. | |
280 void paintLayer(GraphicsContext*, const LayerPaintingInfo&, PaintLayerFlags)
; | |
281 | |
282 // paintLayerContents() assumes that the caller will clip to the bounds of t
he painting dirty rect if necessary. | |
283 void paintLayerContents(GraphicsContext*, const LayerPaintingInfo&, PaintLay
erFlags); | |
284 | |
285 void paintLayerByApplyingTransform(GraphicsContext*, const LayerPaintingInfo
&, PaintLayerFlags, const LayoutPoint& translationOffset = LayoutPoint()); | |
286 | |
287 void paintChildren(unsigned childrenToVisit, GraphicsContext*, const LayerPa
intingInfo&, PaintLayerFlags); | |
288 | |
289 void paintForeground(GraphicsContext*, GraphicsContext* transparencyLayerCon
text, | |
290 const LayoutRect& transparencyPaintDirtyRect, bool haveTransparency, con
st LayerPaintingInfo&, | |
291 LayoutPoint& layerLocation, ClipRect& layerForegroundRect); | |
292 | |
293 RenderLayer* hitTestLayer(RenderLayer* rootLayer, RenderLayer* containerLaye
r, const HitTestRequest& request, HitTestResult& result, | 278 RenderLayer* hitTestLayer(RenderLayer* rootLayer, RenderLayer* containerLaye
r, const HitTestRequest& request, HitTestResult& result, |
294 const LayoutRect& hitTestRect, const HitTestLocati
on&, bool appliedTransform, | 279 const LayoutRect& hitTestRect, const HitTestLocati
on&, bool appliedTransform, |
295 const HitTestingTransformState* transformState = 0
, double* zOffset = 0); | 280 const HitTestingTransformState* transformState = 0
, double* zOffset = 0); |
296 RenderLayer* hitTestLayerByApplyingTransform(RenderLayer* rootLayer, RenderL
ayer* containerLayer, const HitTestRequest&, HitTestResult&, | 281 RenderLayer* hitTestLayerByApplyingTransform(RenderLayer* rootLayer, RenderL
ayer* containerLayer, const HitTestRequest&, HitTestResult&, |
297 const LayoutRect& hitTestRect, const HitTestLocation&, const HitTestingT
ransformState* = 0, double* zOffset = 0, | 282 const LayoutRect& hitTestRect, const HitTestLocation&, const HitTestingT
ransformState* = 0, double* zOffset = 0, |
298 const LayoutPoint& translationOffset = LayoutPoint()); | 283 const LayoutPoint& translationOffset = LayoutPoint()); |
299 RenderLayer* hitTestChildren(ChildrenIteration, RenderLayer* rootLayer, cons
t HitTestRequest&, HitTestResult&, | 284 RenderLayer* hitTestChildren(ChildrenIteration, RenderLayer* rootLayer, cons
t HitTestRequest&, HitTestResult&, |
300 const LayoutRect& hitTestRect, const HitTestLocatio
n&, | 285 const LayoutRect& hitTestRect, const HitTestLocatio
n&, |
301 const HitTestingTransformState* transformState, dou
ble* zOffsetForDescendants, double* zOffset, | 286 const HitTestingTransformState* transformState, dou
ble* zOffsetForDescendants, double* zOffset, |
302 const HitTestingTransformState* unflattenedTransfor
mState, bool depthSortDescendants); | 287 const HitTestingTransformState* unflattenedTransfor
mState, bool depthSortDescendants); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
371 | 356 |
372 } // namespace blink | 357 } // namespace blink |
373 | 358 |
374 #ifndef NDEBUG | 359 #ifndef NDEBUG |
375 // Outside the WebCore namespace for ease of invocation from gdb. | 360 // Outside the WebCore namespace for ease of invocation from gdb. |
376 void showLayerTree(const blink::RenderLayer*); | 361 void showLayerTree(const blink::RenderLayer*); |
377 void showLayerTree(const blink::RenderObject*); | 362 void showLayerTree(const blink::RenderObject*); |
378 #endif | 363 #endif |
379 | 364 |
380 #endif // SKY_ENGINE_CORE_RENDERING_RENDERLAYER_H_ | 365 #endif // SKY_ENGINE_CORE_RENDERING_RENDERLAYER_H_ |
OLD | NEW |