| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009, 2010, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009, 2010, 2011 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 } | 342 } |
| 343 } | 343 } |
| 344 | 344 |
| 345 void CompositedLayerMapping::updateCompositingReasons() | 345 void CompositedLayerMapping::updateCompositingReasons() |
| 346 { | 346 { |
| 347 // All other layers owned by this mapping will have the same compositing rea
son | 347 // All other layers owned by this mapping will have the same compositing rea
son |
| 348 // for their lifetime, so they are initialized only when created. | 348 // for their lifetime, so they are initialized only when created. |
| 349 m_graphicsLayer->setCompositingReasons(m_owningLayer.compositingReasons()); | 349 m_graphicsLayer->setCompositingReasons(m_owningLayer.compositingReasons()); |
| 350 } | 350 } |
| 351 | 351 |
| 352 bool CompositedLayerMapping::owningLayerClippedByLayerNotAboveCompositedAncestor
(PaintLayer* scrollParent) | 352 bool CompositedLayerMapping::owningLayerClippedByLayerNotAboveCompositedAncestor
(const PaintLayer* scrollParent) |
| 353 { | 353 { |
| 354 if (!m_owningLayer.parent()) | 354 if (!m_owningLayer.parent()) |
| 355 return false; | 355 return false; |
| 356 | 356 |
| 357 const PaintLayer* compositingAncestor = m_owningLayer.enclosingLayerWithComp
ositedLayerMapping(ExcludeSelf); | 357 const PaintLayer* compositingAncestor = m_owningLayer.enclosingLayerWithComp
ositedLayerMapping(ExcludeSelf); |
| 358 if (!compositingAncestor) | 358 if (!compositingAncestor) |
| 359 return false; | 359 return false; |
| 360 | 360 |
| 361 const LayoutObject* clippingContainer = m_owningLayer.clippingContainer(); | 361 const LayoutObject* clippingContainer = m_owningLayer.clippingContainer(); |
| 362 if (!clippingContainer) | 362 if (!clippingContainer) |
| (...skipping 12 matching lines...) Expand all Loading... |
| 375 // updateAncestorClippingLayerGeometry will fail as the clip rect will be | 375 // updateAncestorClippingLayerGeometry will fail as the clip rect will be |
| 376 // infinite. | 376 // infinite. |
| 377 // FIXME: this should use cached clip rects, but this sometimes give | 377 // FIXME: this should use cached clip rects, but this sometimes give |
| 378 // inaccurate results (and trips the ASSERTS in PaintLayerClipper). | 378 // inaccurate results (and trips the ASSERTS in PaintLayerClipper). |
| 379 ClipRectsContext clipRectsContext(compositingAncestor, UncachedClipRects, Ig
noreOverlayScrollbarSize); | 379 ClipRectsContext clipRectsContext(compositingAncestor, UncachedClipRects, Ig
noreOverlayScrollbarSize); |
| 380 clipRectsContext.setIgnoreOverflowClip(); | 380 clipRectsContext.setIgnoreOverflowClip(); |
| 381 IntRect parentClipRect = pixelSnappedIntRect(m_owningLayer.clipper().backgro
undClipRect(clipRectsContext).rect()); | 381 IntRect parentClipRect = pixelSnappedIntRect(m_owningLayer.clipper().backgro
undClipRect(clipRectsContext).rect()); |
| 382 return parentClipRect != LayoutRect::infiniteIntRect(); | 382 return parentClipRect != LayoutRect::infiniteIntRect(); |
| 383 } | 383 } |
| 384 | 384 |
| 385 PaintLayer* CompositedLayerMapping::scrollParent() | 385 const PaintLayer* CompositedLayerMapping::scrollParent() |
| 386 { | 386 { |
| 387 PaintLayer* scrollParent = m_owningLayer.scrollParent(); | 387 const PaintLayer* scrollParent = m_owningLayer.scrollParent(); |
| 388 if (scrollParent && !scrollParent->needsCompositedScrolling()) | 388 if (scrollParent && !scrollParent->needsCompositedScrolling()) |
| 389 return nullptr; | 389 return nullptr; |
| 390 return scrollParent; | 390 return scrollParent; |
| 391 } | 391 } |
| 392 | 392 |
| 393 bool CompositedLayerMapping::updateGraphicsLayerConfiguration() | 393 bool CompositedLayerMapping::updateGraphicsLayerConfiguration() |
| 394 { | 394 { |
| 395 ASSERT(m_owningLayer.compositor()->lifecycle().state() == DocumentLifecycle:
:InCompositingUpdate); | 395 ASSERT(m_owningLayer.compositor()->lifecycle().state() == DocumentLifecycle:
:InCompositingUpdate); |
| 396 | 396 |
| 397 // Note carefully: here we assume that the compositing state of all descenda
nts have been updated already, | 397 // Note carefully: here we assume that the compositing state of all descenda
nts have been updated already, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 415 | 415 |
| 416 if (updateForegroundLayer(compositor->needsContentsCompositingLayer(&m_ownin
gLayer))) | 416 if (updateForegroundLayer(compositor->needsContentsCompositingLayer(&m_ownin
gLayer))) |
| 417 layerConfigChanged = true; | 417 layerConfigChanged = true; |
| 418 | 418 |
| 419 bool needsDescendantsClippingLayer = compositor->clipsCompositingDescendants
(&m_owningLayer); | 419 bool needsDescendantsClippingLayer = compositor->clipsCompositingDescendants
(&m_owningLayer); |
| 420 | 420 |
| 421 // Our scrolling layer will clip. | 421 // Our scrolling layer will clip. |
| 422 if (m_owningLayer.needsCompositedScrolling()) | 422 if (m_owningLayer.needsCompositedScrolling()) |
| 423 needsDescendantsClippingLayer = false; | 423 needsDescendantsClippingLayer = false; |
| 424 | 424 |
| 425 PaintLayer* scrollParent = this->scrollParent(); | 425 const PaintLayer* scrollParent = this->scrollParent(); |
| 426 | 426 |
| 427 // This is required because compositing layers are parented according to the
z-order hierarchy, yet | 427 // This is required because compositing layers are parented according to the
z-order hierarchy, yet |
| 428 // clipping goes down the layoutObject hierarchy. Thus, a PaintLayer can be
clipped by a | 428 // clipping goes down the layoutObject hierarchy. Thus, a PaintLayer can be
clipped by a |
| 429 // PaintLayer that is an ancestor in the layoutObject hierarchy, but a sibli
ng in the z-order | 429 // PaintLayer that is an ancestor in the layoutObject hierarchy, but a sibli
ng in the z-order |
| 430 // hierarchy. Further, that sibling need not be composited at all. In such s
cenarios, an ancestor | 430 // hierarchy. Further, that sibling need not be composited at all. In such s
cenarios, an ancestor |
| 431 // clipping layer is necessary to apply the composited clip for this layer. | 431 // clipping layer is necessary to apply the composited clip for this layer. |
| 432 bool needsAncestorClip = owningLayerClippedByLayerNotAboveCompositedAncestor
(scrollParent); | 432 bool needsAncestorClip = owningLayerClippedByLayerNotAboveCompositedAncestor
(scrollParent); |
| 433 | 433 |
| 434 if (updateClippingLayers(needsAncestorClip, needsDescendantsClippingLayer)) | 434 if (updateClippingLayers(needsAncestorClip, needsDescendantsClippingLayer)) |
| 435 layerConfigChanged = true; | 435 layerConfigChanged = true; |
| (...skipping 1222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1658 layerChanged = true; | 1658 layerChanged = true; |
| 1659 if (scrollingCoordinator) { | 1659 if (scrollingCoordinator) { |
| 1660 scrollingCoordinator->scrollableAreaScrollLayerDidChange(m_owningLay
er.scrollableArea()); | 1660 scrollingCoordinator->scrollableAreaScrollLayerDidChange(m_owningLay
er.scrollableArea()); |
| 1661 scrollingCoordinator->scrollableAreasDidChange(); | 1661 scrollingCoordinator->scrollableAreasDidChange(); |
| 1662 } | 1662 } |
| 1663 } | 1663 } |
| 1664 | 1664 |
| 1665 return layerChanged; | 1665 return layerChanged; |
| 1666 } | 1666 } |
| 1667 | 1667 |
| 1668 static void updateScrollParentForGraphicsLayer(GraphicsLayer* layer, GraphicsLay
er* topmostLayer, PaintLayer* scrollParent, ScrollingCoordinator* scrollingCoord
inator) | 1668 static void updateScrollParentForGraphicsLayer(GraphicsLayer* layer, GraphicsLay
er* topmostLayer, const PaintLayer* scrollParent, ScrollingCoordinator* scrollin
gCoordinator) |
| 1669 { | 1669 { |
| 1670 if (!layer) | 1670 if (!layer) |
| 1671 return; | 1671 return; |
| 1672 | 1672 |
| 1673 // Only the topmost layer has a scroll parent. All other layers have a null
scroll parent. | 1673 // Only the topmost layer has a scroll parent. All other layers have a null
scroll parent. |
| 1674 if (layer != topmostLayer) | 1674 if (layer != topmostLayer) |
| 1675 scrollParent = 0; | 1675 scrollParent = 0; |
| 1676 | 1676 |
| 1677 scrollingCoordinator->updateScrollParentForGraphicsLayer(layer, scrollParent
); | 1677 scrollingCoordinator->updateScrollParentForGraphicsLayer(layer, scrollParent
); |
| 1678 } | 1678 } |
| 1679 | 1679 |
| 1680 void CompositedLayerMapping::updateScrollParent(PaintLayer* scrollParent) | 1680 void CompositedLayerMapping::updateScrollParent(const PaintLayer* scrollParent) |
| 1681 { | 1681 { |
| 1682 if (ScrollingCoordinator* scrollingCoordinator = scrollingCoordinatorFromLay
er(m_owningLayer)) { | 1682 if (ScrollingCoordinator* scrollingCoordinator = scrollingCoordinatorFromLay
er(m_owningLayer)) { |
| 1683 GraphicsLayer* topmostLayer = childForSuperlayers(); | 1683 GraphicsLayer* topmostLayer = childForSuperlayers(); |
| 1684 updateScrollParentForGraphicsLayer(m_squashingContainmentLayer.get(), to
pmostLayer, scrollParent, scrollingCoordinator); | 1684 updateScrollParentForGraphicsLayer(m_squashingContainmentLayer.get(), to
pmostLayer, scrollParent, scrollingCoordinator); |
| 1685 updateScrollParentForGraphicsLayer(m_ancestorClippingLayer.get(), topmos
tLayer, scrollParent, scrollingCoordinator); | 1685 updateScrollParentForGraphicsLayer(m_ancestorClippingLayer.get(), topmos
tLayer, scrollParent, scrollingCoordinator); |
| 1686 updateScrollParentForGraphicsLayer(m_graphicsLayer.get(), topmostLayer,
scrollParent, scrollingCoordinator); | 1686 updateScrollParentForGraphicsLayer(m_graphicsLayer.get(), topmostLayer,
scrollParent, scrollingCoordinator); |
| 1687 } | 1687 } |
| 1688 } | 1688 } |
| 1689 | 1689 |
| 1690 static void updateClipParentForGraphicsLayer(GraphicsLayer* layer, GraphicsLayer
* topmostLayer, PaintLayer* clipParent, ScrollingCoordinator* scrollingCoordinat
or) | 1690 static void updateClipParentForGraphicsLayer(GraphicsLayer* layer, GraphicsLayer
* topmostLayer, const PaintLayer* clipParent, ScrollingCoordinator* scrollingCoo
rdinator) |
| 1691 { | 1691 { |
| 1692 if (!layer) | 1692 if (!layer) |
| 1693 return; | 1693 return; |
| 1694 | 1694 |
| 1695 // Only the topmost layer has a scroll parent. All other layers have a null
scroll parent. | 1695 // Only the topmost layer has a scroll parent. All other layers have a null
scroll parent. |
| 1696 if (layer != topmostLayer) | 1696 if (layer != topmostLayer) |
| 1697 clipParent = 0; | 1697 clipParent = 0; |
| 1698 | 1698 |
| 1699 scrollingCoordinator->updateClipParentForGraphicsLayer(layer, clipParent); | 1699 scrollingCoordinator->updateClipParentForGraphicsLayer(layer, clipParent); |
| 1700 } | 1700 } |
| 1701 | 1701 |
| 1702 void CompositedLayerMapping::updateClipParent(PaintLayer* scrollParent) | 1702 void CompositedLayerMapping::updateClipParent(const PaintLayer* scrollParent) |
| 1703 { | 1703 { |
| 1704 if (owningLayerClippedByLayerNotAboveCompositedAncestor(scrollParent)) | 1704 if (owningLayerClippedByLayerNotAboveCompositedAncestor(scrollParent)) |
| 1705 return; | 1705 return; |
| 1706 | 1706 |
| 1707 PaintLayer* clipParent = m_owningLayer.clipParent(); | 1707 const PaintLayer* clipParent = m_owningLayer.clipParent(); |
| 1708 if (clipParent) | 1708 if (clipParent) |
| 1709 clipParent = clipParent->enclosingLayerWithCompositedLayerMapping(Includ
eSelf); | 1709 clipParent = clipParent->enclosingLayerWithCompositedLayerMapping(Includ
eSelf); |
| 1710 | 1710 |
| 1711 if (ScrollingCoordinator* scrollingCoordinator = scrollingCoordinatorFromLay
er(m_owningLayer)) { | 1711 if (ScrollingCoordinator* scrollingCoordinator = scrollingCoordinatorFromLay
er(m_owningLayer)) { |
| 1712 GraphicsLayer* topmostLayer = childForSuperlayers(); | 1712 GraphicsLayer* topmostLayer = childForSuperlayers(); |
| 1713 updateClipParentForGraphicsLayer(m_squashingContainmentLayer.get(), topm
ostLayer, clipParent, scrollingCoordinator); | 1713 updateClipParentForGraphicsLayer(m_squashingContainmentLayer.get(), topm
ostLayer, clipParent, scrollingCoordinator); |
| 1714 updateClipParentForGraphicsLayer(m_ancestorClippingLayer.get(), topmostL
ayer, clipParent, scrollingCoordinator); | 1714 updateClipParentForGraphicsLayer(m_ancestorClippingLayer.get(), topmostL
ayer, clipParent, scrollingCoordinator); |
| 1715 updateClipParentForGraphicsLayer(m_graphicsLayer.get(), topmostLayer, cl
ipParent, scrollingCoordinator); | 1715 updateClipParentForGraphicsLayer(m_graphicsLayer.get(), topmostLayer, cl
ipParent, scrollingCoordinator); |
| 1716 } | 1716 } |
| 1717 } | 1717 } |
| (...skipping 864 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2582 } else if (graphicsLayer == m_scrollingBlockSelectionLayer.get()) { | 2582 } else if (graphicsLayer == m_scrollingBlockSelectionLayer.get()) { |
| 2583 name = "Scrolling Block Selection Layer"; | 2583 name = "Scrolling Block Selection Layer"; |
| 2584 } else { | 2584 } else { |
| 2585 ASSERT_NOT_REACHED(); | 2585 ASSERT_NOT_REACHED(); |
| 2586 } | 2586 } |
| 2587 | 2587 |
| 2588 return name; | 2588 return name; |
| 2589 } | 2589 } |
| 2590 | 2590 |
| 2591 } // namespace blink | 2591 } // namespace blink |
| OLD | NEW |