| 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 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 TransformationMatrix renderableTransform() const; | 181 TransformationMatrix renderableTransform() const; |
| 182 | 182 |
| 183 // Get the perspective transform, which is applied to transformed sublayers. | 183 // Get the perspective transform, which is applied to transformed sublayers. |
| 184 // Returns true if the layer has a -webkit-perspective. | 184 // Returns true if the layer has a -webkit-perspective. |
| 185 // Note that this transform has the perspective-origin baked in. | 185 // Note that this transform has the perspective-origin baked in. |
| 186 TransformationMatrix perspectiveTransform() const; | 186 TransformationMatrix perspectiveTransform() const; |
| 187 FloatPoint perspectiveOrigin() const; | 187 FloatPoint perspectiveOrigin() const; |
| 188 bool preserves3D() const { return renderer()->style()->transformStyle3D() ==
TransformStyle3DPreserve3D; } | 188 bool preserves3D() const { return renderer()->style()->transformStyle3D() ==
TransformStyle3DPreserve3D; } |
| 189 bool has3DTransform() const { return m_transform && !m_transform->isAffine()
; } | 189 bool has3DTransform() const { return m_transform && !m_transform->isAffine()
; } |
| 190 | 190 |
| 191 bool has3DTransformedDescendant() const { return m_has3DTransformedDescendan
t; } |
| 192 // Both updates the status, and returns true if descendants of this have 3d. |
| 193 bool update3DTransformedDescendantStatus(); |
| 194 |
| 191 // FIXME: reflections should force transform-style to be flat in the style:
https://bugs.webkit.org/show_bug.cgi?id=106959 | 195 // FIXME: reflections should force transform-style to be flat in the style:
https://bugs.webkit.org/show_bug.cgi?id=106959 |
| 192 bool shouldPreserve3D() const { return renderer()->style()->transformStyle3D
() == TransformStyle3DPreserve3D; } | 196 bool shouldPreserve3D() const { return renderer()->style()->transformStyle3D
() == TransformStyle3DPreserve3D; } |
| 193 | 197 |
| 194 bool hasFilter() const { return renderer()->hasFilter(); } | 198 bool hasFilter() const { return renderer()->hasFilter(); } |
| 195 | 199 |
| 196 void* operator new(size_t); | 200 void* operator new(size_t); |
| 197 // Only safe to call from RenderLayerModelObject::destroyLayer() | 201 // Only safe to call from RenderLayerModelObject::destroyLayer() |
| 198 void operator delete(void*); | 202 void operator delete(void*); |
| 199 | 203 |
| 200 bool paintsWithTransform() const; | 204 bool paintsWithTransform() const; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 214 { | 218 { |
| 215 if (hasFilterInfo()) | 219 if (hasFilterInfo()) |
| 216 RenderLayerFilterInfo::removeFilterInfoForRenderLayer(this); | 220 RenderLayerFilterInfo::removeFilterInfoForRenderLayer(this); |
| 217 } | 221 } |
| 218 | 222 |
| 219 bool hasFilterInfo() const { return m_hasFilterInfo; } | 223 bool hasFilterInfo() const { return m_hasFilterInfo; } |
| 220 void setHasFilterInfo(bool hasFilterInfo) { m_hasFilterInfo = hasFilterInfo;
} | 224 void setHasFilterInfo(bool hasFilterInfo) { m_hasFilterInfo = hasFilterInfo;
} |
| 221 | 225 |
| 222 void updateFilters(const RenderStyle* oldStyle, const RenderStyle* newStyle)
; | 226 void updateFilters(const RenderStyle* oldStyle, const RenderStyle* newStyle)
; |
| 223 | 227 |
| 224 Node* enclosingElement() const; | |
| 225 | |
| 226 RenderLayerClipper& clipper() { return m_clipper; } | 228 RenderLayerClipper& clipper() { return m_clipper; } |
| 227 const RenderLayerClipper& clipper() const { return m_clipper; } | 229 const RenderLayerClipper& clipper() const { return m_clipper; } |
| 228 | 230 |
| 229 inline bool isPositionedContainer() const | 231 inline bool isPositionedContainer() const |
| 230 { | 232 { |
| 231 // FIXME: This is not in sync with containingBlock. | 233 // FIXME: This is not in sync with containingBlock. |
| 232 RenderLayerModelObject* layerRenderer = renderer(); | 234 RenderLayerModelObject* layerRenderer = renderer(); |
| 233 return isRootLayer() || layerRenderer->isPositioned() || hasTransform(); | 235 return isRootLayer() || layerRenderer->isPositioned() || hasTransform(); |
| 234 } | 236 } |
| 235 | 237 |
| 236 void updateOrRemoveFilterEffectRenderer(); | 238 void updateOrRemoveFilterEffectRenderer(); |
| 237 void updateSelfPaintingLayer(); | 239 void updateSelfPaintingLayer(); |
| 238 | 240 |
| 239 void clipToRect(const LayerPaintingInfo&, GraphicsContext*, const ClipRect&,
BorderRadiusClippingRule = IncludeSelfForBorderRadius); | 241 void clipToRect(const LayerPaintingInfo&, GraphicsContext*, const ClipRect&,
BorderRadiusClippingRule = IncludeSelfForBorderRadius); |
| 240 void restoreClip(GraphicsContext*, const LayoutRect& paintDirtyRect, const C
lipRect&); | 242 void restoreClip(GraphicsContext*, const LayoutRect& paintDirtyRect, const C
lipRect&); |
| 241 | 243 |
| 242 bool hitTestLayer(RenderLayer* rootLayer, RenderLayer* containerLayer, const
HitTestRequest& request, HitTestResult& result, | |
| 243 const LayoutRect& hitTestRect, const HitTestLocation&, | |
| 244 const HitTestingTransformState* transformState = 0, double
* zOffset = 0); | |
| 245 | |
| 246 private: | 244 private: |
| 247 // TODO(ojan): Get rid of this. These are basically layer-tree-only paint ph
ases. | 245 // TODO(ojan): Get rid of this. These are basically layer-tree-only paint ph
ases. |
| 248 enum PaintLayerFlags { | 246 enum PaintLayerFlags { |
| 249 PaintContent, | 247 PaintContent, |
| 250 }; | 248 }; |
| 251 | 249 |
| 252 // Bounding box in the coordinates of this layer. | 250 // Bounding box in the coordinates of this layer. |
| 253 LayoutRect logicalBoundingBox() const; | 251 LayoutRect logicalBoundingBox() const; |
| 254 | 252 |
| 255 void setAncestorChainHasSelfPaintingLayerDescendant(); | 253 void setAncestorChainHasSelfPaintingLayerDescendant(); |
| 256 void dirtyAncestorChainHasSelfPaintingLayerDescendantStatus(); | 254 void dirtyAncestorChainHasSelfPaintingLayerDescendantStatus(); |
| 257 | 255 |
| 258 void setNextSibling(RenderLayer* next) { m_next = next; } | 256 void setNextSibling(RenderLayer* next) { m_next = next; } |
| 259 void setPreviousSibling(RenderLayer* prev) { m_previous = prev; } | 257 void setPreviousSibling(RenderLayer* prev) { m_previous = prev; } |
| 260 void setFirstChild(RenderLayer* first) { m_first = first; } | 258 void setFirstChild(RenderLayer* first) { m_first = first; } |
| 261 void setLastChild(RenderLayer* last) { m_last = last; } | 259 void setLastChild(RenderLayer* last) { m_last = last; } |
| 262 | 260 |
| 263 void updateHasSelfPaintingLayerDescendant() const; | 261 void updateHasSelfPaintingLayerDescendant() const; |
| 264 | 262 |
| 265 bool hasSelfPaintingLayerDescendant() const | 263 bool hasSelfPaintingLayerDescendant() const |
| 266 { | 264 { |
| 267 if (m_hasSelfPaintingLayerDescendantDirty) | 265 if (m_hasSelfPaintingLayerDescendantDirty) |
| 268 updateHasSelfPaintingLayerDescendant(); | 266 updateHasSelfPaintingLayerDescendant(); |
| 269 ASSERT(!m_hasSelfPaintingLayerDescendantDirty); | 267 ASSERT(!m_hasSelfPaintingLayerDescendantDirty); |
| 270 return m_hasSelfPaintingLayerDescendant; | 268 return m_hasSelfPaintingLayerDescendant; |
| 271 } | 269 } |
| 272 | 270 |
| 273 LayoutPoint renderBoxLocation() const { return renderer()->isBox() ? toRende
rBox(renderer())->location() : LayoutPoint(); } | 271 LayoutPoint renderBoxLocation() const { return renderer()->isBox() ? toRende
rBox(renderer())->location() : LayoutPoint(); } |
| 274 | 272 |
| 275 bool hitTestChildren(ChildrenIteration, RenderLayer* rootLayer, const HitTes
tRequest&, HitTestResult&, | |
| 276 const LayoutRect& hitTestRect, const HitTestLocation&, | |
| 277 const HitTestingTransformState* transformState, double*
zOffsetForDescendants, double* zOffset, | |
| 278 const HitTestingTransformState* unflattenedTransformSta
te, bool depthSortDescendants); | |
| 279 | |
| 280 PassRefPtr<HitTestingTransformState> createLocalTransformState(RenderLayer*
rootLayer, RenderLayer* containerLayer, | |
| 281 const LayoutRect& hitTestRect, const HitTestLocation
&, | |
| 282 const HitTestingTransformState* containerTransformSt
ate, | |
| 283 const LayoutPoint& translationOffset = LayoutPoint()
) const; | |
| 284 | |
| 285 bool hitTestContents(const HitTestRequest&, HitTestResult&, const LayoutRect
& layerBounds, const HitTestLocation&) const; | |
| 286 | |
| 287 bool shouldBeSelfPaintingLayer() const; | 273 bool shouldBeSelfPaintingLayer() const; |
| 288 | 274 |
| 289 // FIXME: We should only create the stacking node if needed. | 275 // FIXME: We should only create the stacking node if needed. |
| 290 bool requiresStackingNode() const { return true; } | 276 bool requiresStackingNode() const { return true; } |
| 291 void updateStackingNode(); | 277 void updateStackingNode(); |
| 292 | 278 |
| 293 void updateTransform(const RenderStyle* oldStyle, RenderStyle* newStyle); | 279 void updateTransform(const RenderStyle* oldStyle, RenderStyle* newStyle); |
| 294 | 280 |
| 295 void dirty3DTransformedDescendantStatus(); | 281 void dirty3DTransformedDescendantStatus(); |
| 296 // Both updates the status, and returns true if descendants of this have 3d. | |
| 297 bool update3DTransformedDescendantStatus(); | |
| 298 | 282 |
| 299 void updateOrRemoveFilterClients(); | 283 void updateOrRemoveFilterClients(); |
| 300 | 284 |
| 301 LayoutRect paintingExtent(const RenderLayer* rootLayer, const LayoutRect& pa
intDirtyRect, const LayoutSize& subPixelAccumulation); | 285 LayoutRect paintingExtent(const RenderLayer* rootLayer, const LayoutRect& pa
intDirtyRect, const LayoutSize& subPixelAccumulation); |
| 302 | 286 |
| 303 LayerType m_layerType; | 287 LayerType m_layerType; |
| 304 | 288 |
| 305 // Self-painting layer is an optimization where we avoid the heavy RenderLay
er painting | 289 // Self-painting layer is an optimization where we avoid the heavy RenderLay
er painting |
| 306 // machinery for a RenderLayer allocated only to handle the overflow clip ca
se. | 290 // machinery for a RenderLayer allocated only to handle the overflow clip ca
se. |
| 307 // FIXME(crbug.com/332791): Self-painting layer should be merged into the ov
erflow-only concept. | 291 // FIXME(crbug.com/332791): Self-painting layer should be merged into the ov
erflow-only concept. |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 | 331 |
| 348 } // namespace blink | 332 } // namespace blink |
| 349 | 333 |
| 350 #ifndef NDEBUG | 334 #ifndef NDEBUG |
| 351 // Outside the WebCore namespace for ease of invocation from gdb. | 335 // Outside the WebCore namespace for ease of invocation from gdb. |
| 352 void showLayerTree(const blink::RenderLayer*); | 336 void showLayerTree(const blink::RenderLayer*); |
| 353 void showLayerTree(const blink::RenderObject*); | 337 void showLayerTree(const blink::RenderObject*); |
| 354 #endif | 338 #endif |
| 355 | 339 |
| 356 #endif // SKY_ENGINE_CORE_RENDERING_RENDERLAYER_H_ | 340 #endif // SKY_ENGINE_CORE_RENDERING_RENDERLAYER_H_ |
| OLD | NEW |