| 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 531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 542 } else if (layoutObject->isVideo()) { | 542 } else if (layoutObject->isVideo()) { |
| 543 HTMLMediaElement* mediaElement = toHTMLMediaElement(layoutObject->node()
); | 543 HTMLMediaElement* mediaElement = toHTMLMediaElement(layoutObject->node()
); |
| 544 m_graphicsLayer->setContentsToPlatformLayer(mediaElement->platformLayer(
)); | 544 m_graphicsLayer->setContentsToPlatformLayer(mediaElement->platformLayer(
)); |
| 545 } else if (isAcceleratedCanvas(layoutObject)) { | 545 } else if (isAcceleratedCanvas(layoutObject)) { |
| 546 HTMLCanvasElement* canvas = toHTMLCanvasElement(layoutObject->node()); | 546 HTMLCanvasElement* canvas = toHTMLCanvasElement(layoutObject->node()); |
| 547 if (CanvasRenderingContext* context = canvas->renderingContext()) | 547 if (CanvasRenderingContext* context = canvas->renderingContext()) |
| 548 m_graphicsLayer->setContentsToPlatformLayer(context->platformLayer()
); | 548 m_graphicsLayer->setContentsToPlatformLayer(context->platformLayer()
); |
| 549 layerConfigChanged = true; | 549 layerConfigChanged = true; |
| 550 } | 550 } |
| 551 if (layoutObject->isLayoutPart()) { | 551 if (layoutObject->isLayoutPart()) { |
| 552 if (PaintLayerCompositor::attachFrameContentLayersToIframeLayer(toLayout
Part(layoutObject))) | 552 if (PaintLayerCompositor::parentFrameContentLayers(toLayoutPart(layoutOb
ject))) |
| 553 layerConfigChanged = true; | 553 layerConfigChanged = true; |
| 554 } | 554 } |
| 555 | 555 |
| 556 // Changes to either the internal hierarchy or the mask layer have an impact | 556 // Changes to either the internal hierarchy or the mask layer have an impact |
| 557 // on painting phases, so we need to update when either are updated. | 557 // on painting phases, so we need to update when either are updated. |
| 558 if (layerConfigChanged || maskLayerChanged) | 558 if (layerConfigChanged || maskLayerChanged) |
| 559 updatePaintingPhases(); | 559 updatePaintingPhases(); |
| 560 | 560 |
| 561 return layerConfigChanged; | 561 return layerConfigChanged; |
| 562 } | 562 } |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 703 IntRect relativeCompositingBounds; | 703 IntRect relativeCompositingBounds; |
| 704 LayoutPoint offsetFromCompositedAncestor; | 704 LayoutPoint offsetFromCompositedAncestor; |
| 705 IntPoint snappedOffsetFromCompositedAncestor; | 705 IntPoint snappedOffsetFromCompositedAncestor; |
| 706 computeBoundsOfOwningLayer(compositingContainer, localCompositingBounds, rel
ativeCompositingBounds, offsetFromCompositedAncestor, snappedOffsetFromComposite
dAncestor); | 706 computeBoundsOfOwningLayer(compositingContainer, localCompositingBounds, rel
ativeCompositingBounds, offsetFromCompositedAncestor, snappedOffsetFromComposite
dAncestor); |
| 707 | 707 |
| 708 IntPoint graphicsLayerParentLocation; | 708 IntPoint graphicsLayerParentLocation; |
| 709 computeGraphicsLayerParentLocation(compositingContainer, ancestorCompositing
Bounds, graphicsLayerParentLocation); | 709 computeGraphicsLayerParentLocation(compositingContainer, ancestorCompositing
Bounds, graphicsLayerParentLocation); |
| 710 | 710 |
| 711 // Might update graphicsLayerParentLocation. | 711 // Might update graphicsLayerParentLocation. |
| 712 updateAncestorClippingLayerGeometry(compositingContainer, snappedOffsetFromC
ompositedAncestor, graphicsLayerParentLocation); | 712 updateAncestorClippingLayerGeometry(compositingContainer, snappedOffsetFromC
ompositedAncestor, graphicsLayerParentLocation); |
| 713 updateOverflowControlsHostLayerGeometry(compositingStackingContext, composit
ingContainer); |
| 713 | 714 |
| 714 FloatSize contentsSize(relativeCompositingBounds.size()); | 715 FloatSize contentsSize(relativeCompositingBounds.size()); |
| 715 | 716 |
| 716 updateMainGraphicsLayerGeometry(relativeCompositingBounds, localCompositingB
ounds, graphicsLayerParentLocation); | 717 updateMainGraphicsLayerGeometry(relativeCompositingBounds, localCompositingB
ounds, graphicsLayerParentLocation); |
| 717 updateOverflowControlsHostLayerGeometry(compositingStackingContext, composit
ingContainer); | |
| 718 updateContentsOffsetInCompositingLayer(snappedOffsetFromCompositedAncestor,
graphicsLayerParentLocation); | 718 updateContentsOffsetInCompositingLayer(snappedOffsetFromCompositedAncestor,
graphicsLayerParentLocation); |
| 719 updateSquashingLayerGeometry(offsetFromCompositedAncestor, graphicsLayerPare
ntLocation, m_owningLayer, m_squashedLayers, m_squashingLayer.get(), &m_squashin
gLayerOffsetFromTransformedAncestor, layersNeedingPaintInvalidation); | 719 updateSquashingLayerGeometry(offsetFromCompositedAncestor, graphicsLayerPare
ntLocation, m_owningLayer, m_squashedLayers, m_squashingLayer.get(), &m_squashin
gLayerOffsetFromTransformedAncestor, layersNeedingPaintInvalidation); |
| 720 | 720 |
| 721 // If we have a layer that clips children, position it. | 721 // If we have a layer that clips children, position it. |
| 722 IntRect clippingBox; | 722 IntRect clippingBox; |
| 723 if (m_childContainmentLayer) | 723 if (m_childContainmentLayer) |
| 724 clippingBox = clipBox(toLayoutBox(layoutObject())); | 724 clippingBox = clipBox(toLayoutBox(layoutObject())); |
| 725 | 725 |
| 726 updateChildTransformLayerGeometry(); | 726 updateChildTransformLayerGeometry(); |
| 727 updateChildContainmentLayerGeometry(clippingBox, localCompositingBounds); | 727 updateChildContainmentLayerGeometry(clippingBox, localCompositingBounds); |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 822 | 822 |
| 823 // The primary layer is then parented in, and positioned relative to this cl
ipping layer. | 823 // The primary layer is then parented in, and positioned relative to this cl
ipping layer. |
| 824 graphicsLayerParentLocation = parentClipRect.location(); | 824 graphicsLayerParentLocation = parentClipRect.location(); |
| 825 } | 825 } |
| 826 | 826 |
| 827 void CompositedLayerMapping::updateOverflowControlsHostLayerGeometry(const Paint
Layer* compositingStackingContext, const PaintLayer* compositingContainer) | 827 void CompositedLayerMapping::updateOverflowControlsHostLayerGeometry(const Paint
Layer* compositingStackingContext, const PaintLayer* compositingContainer) |
| 828 { | 828 { |
| 829 if (!m_overflowControlsHostLayer) | 829 if (!m_overflowControlsHostLayer) |
| 830 return; | 830 return; |
| 831 | 831 |
| 832 LayoutPoint hostLayerPosition; | |
| 833 | |
| 834 if (needsToReparentOverflowControls()) { | 832 if (needsToReparentOverflowControls()) { |
| 835 if (m_overflowControlsAncestorClippingLayer) { | 833 if (m_overflowControlsClippingLayer) { |
| 836 m_overflowControlsAncestorClippingLayer->setSize(m_ancestorClippingL
ayer->size()); | 834 m_overflowControlsClippingLayer->setSize(m_ancestorClippingLayer->si
ze()); |
| 837 m_overflowControlsAncestorClippingLayer->setOffsetFromLayoutObject(m
_ancestorClippingLayer->offsetFromLayoutObject()); | 835 m_overflowControlsClippingLayer->setOffsetFromLayoutObject(m_ancesto
rClippingLayer->offsetFromLayoutObject()); |
| 838 m_overflowControlsAncestorClippingLayer->setMasksToBounds(true); | 836 m_overflowControlsClippingLayer->setMasksToBounds(true); |
| 839 hostLayerPosition = toLayoutPoint(LayoutSize(-m_overflowControlsAnce
storClippingLayer->offsetFromLayoutObject())); | 837 m_overflowControlsHostLayer->setPosition(IntPoint(-m_overflowControl
sClippingLayer->offsetFromLayoutObject())); |
| 840 | 838 |
| 841 FloatPoint position = m_ancestorClippingLayer->position(); | 839 FloatPoint position = m_ancestorClippingLayer->position(); |
| 842 if (compositingStackingContext != compositingContainer) { | 840 if (compositingStackingContext != compositingContainer) { |
| 843 LayoutPoint offset; | 841 LayoutPoint offset; |
| 844 compositingContainer->convertToLayerCoords(compositingStackingCo
ntext, offset); | 842 compositingContainer->convertToLayerCoords(compositingStackingCo
ntext, offset); |
| 845 FloatSize offsetFromStackingContainer = toFloatSize(FloatPoint(o
ffset)); | 843 FloatSize offsetFromStackingContainer = toFloatSize(FloatPoint(o
ffset)); |
| 846 position += offsetFromStackingContainer; | 844 position += offsetFromStackingContainer; |
| 847 } | 845 } |
| 848 | 846 |
| 849 m_overflowControlsAncestorClippingLayer->setPosition(position); | 847 m_overflowControlsClippingLayer->setPosition(position); |
| 850 } else { | 848 } else { |
| 851 // The controls are in the same 2D space as the compositing containe
r, so we can map them into the space of the container. | 849 // The controls are in the same 2D space as the compositing containe
r, so we can map them into the space of the container. |
| 852 TransformState transformState(TransformState::ApplyTransformDirectio
n, FloatPoint()); | 850 TransformState transformState(TransformState::ApplyTransformDirectio
n, FloatPoint()); |
| 853 m_owningLayer.layoutObject()->mapLocalToContainer(compositingStackin
gContext->layoutObject(), transformState, ApplyContainerFlip); | 851 m_owningLayer.layoutObject()->mapLocalToContainer(compositingStackin
gContext->layoutObject(), transformState, ApplyContainerFlip); |
| 854 transformState.flatten(); | 852 transformState.flatten(); |
| 855 hostLayerPosition = LayoutPoint(transformState.lastPlanarPoint()); | 853 LayoutPoint offsetFromStackingContainer = LayoutPoint(transformState
.lastPlanarPoint()); |
| 856 if (PaintLayerScrollableArea* scrollableArea = compositingStackingCo
ntext->scrollableArea()) | 854 if (PaintLayerScrollableArea* scrollableArea = compositingStackingCo
ntext->scrollableArea()) |
| 857 hostLayerPosition.move(LayoutSize(scrollableArea->adjustedScroll
Offset())); | 855 offsetFromStackingContainer.move(LayoutSize(scrollableArea->adju
stedScrollOffset())); |
| 856 m_overflowControlsHostLayer->setPosition(FloatPoint(offsetFromStacki
ngContainer)); |
| 858 } | 857 } |
| 858 } else { |
| 859 m_overflowControlsHostLayer->setPosition(FloatPoint()); |
| 859 } | 860 } |
| 860 | |
| 861 // To clip correctly, m_overflowControlsHostLayer should match the border bo
x rect, which is at | |
| 862 // the origin of the LayoutObject. The parent is m_graphicsLayer, so we must
adjust the position | |
| 863 // by the distance from m_graphicsLayer to the LayoutObject. | |
| 864 | |
| 865 IntSize offsetFromLayoutObject = m_graphicsLayer->offsetFromLayoutObject() -
roundedIntSize(m_owningLayer.subpixelAccumulation()); | |
| 866 hostLayerPosition.move(-offsetFromLayoutObject); | |
| 867 m_overflowControlsHostLayer->setPosition(FloatPoint(hostLayerPosition)); | |
| 868 | |
| 869 const IntRect borderBox = toLayoutBox(m_owningLayer.layoutObject())->pixelSn
appedBorderBoxRect(); | |
| 870 m_overflowControlsHostLayer->setSize(FloatSize(borderBox.size())); | |
| 871 m_overflowControlsHostLayer->setMasksToBounds(true); | |
| 872 } | 861 } |
| 873 | 862 |
| 874 void CompositedLayerMapping::updateChildContainmentLayerGeometry(const IntRect&
clippingBox, const IntRect& localCompositingBounds) | 863 void CompositedLayerMapping::updateChildContainmentLayerGeometry(const IntRect&
clippingBox, const IntRect& localCompositingBounds) |
| 875 { | 864 { |
| 876 if (!m_childContainmentLayer) | 865 if (!m_childContainmentLayer) |
| 877 return; | 866 return; |
| 878 | 867 |
| 879 FloatPoint clipPositionInLayoutObjectSpace(clippingBox.location() - localCom
positingBounds.location() + roundedIntSize(m_owningLayer.subpixelAccumulation())
); | 868 FloatPoint clipPositionInLayoutObjectSpace(clippingBox.location() - localCom
positingBounds.location() + roundedIntSize(m_owningLayer.subpixelAccumulation())
); |
| 880 | 869 |
| 881 // If there are layers between the the child containment layer and | 870 // If there are layers between the the child containment layer and |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1108 }; | 1097 }; |
| 1109 | 1098 |
| 1110 updateBottomLayer(m_childTransformLayer.get()); | 1099 updateBottomLayer(m_childTransformLayer.get()); |
| 1111 updateBottomLayer(m_childContainmentLayer.get()); | 1100 updateBottomLayer(m_childContainmentLayer.get()); |
| 1112 updateBottomLayer(m_scrollingLayer.get()); | 1101 updateBottomLayer(m_scrollingLayer.get()); |
| 1113 | 1102 |
| 1114 // Now constructing the subtree for the overflow controls. | 1103 // Now constructing the subtree for the overflow controls. |
| 1115 bottomLayer = m_graphicsLayer.get(); | 1104 bottomLayer = m_graphicsLayer.get(); |
| 1116 if (m_isMainFrameLayoutViewLayer) | 1105 if (m_isMainFrameLayoutViewLayer) |
| 1117 bottomLayer = layoutObject()->frame()->page()->frameHost().visualViewpor
t().containerLayer(); | 1106 bottomLayer = layoutObject()->frame()->page()->frameHost().visualViewpor
t().containerLayer(); |
| 1118 updateBottomLayer(m_overflowControlsAncestorClippingLayer.get()); | 1107 updateBottomLayer(m_overflowControlsClippingLayer.get()); |
| 1119 updateBottomLayer(m_overflowControlsHostLayer.get()); | 1108 updateBottomLayer(m_overflowControlsHostLayer.get()); |
| 1120 if (m_layerForHorizontalScrollbar) | 1109 if (m_layerForHorizontalScrollbar) |
| 1121 m_overflowControlsHostLayer->addChild(m_layerForHorizontalScrollbar.get(
)); | 1110 m_overflowControlsHostLayer->addChild(m_layerForHorizontalScrollbar.get(
)); |
| 1122 if (m_layerForVerticalScrollbar) | 1111 if (m_layerForVerticalScrollbar) |
| 1123 m_overflowControlsHostLayer->addChild(m_layerForVerticalScrollbar.get())
; | 1112 m_overflowControlsHostLayer->addChild(m_layerForVerticalScrollbar.get())
; |
| 1124 if (m_layerForScrollCorner) | 1113 if (m_layerForScrollCorner) |
| 1125 m_overflowControlsHostLayer->addChild(m_layerForScrollCorner.get()); | 1114 m_overflowControlsHostLayer->addChild(m_layerForScrollCorner.get()); |
| 1126 | 1115 |
| 1127 // The squashing containment layer, if it exists, becomes a no-op parent. | 1116 // The squashing containment layer, if it exists, becomes a no-op parent. |
| 1128 if (m_squashingLayer) { | 1117 if (m_squashingLayer) { |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1349 needsHorizontalScrollbarLayer &= !invisible; | 1338 needsHorizontalScrollbarLayer &= !invisible; |
| 1350 needsVerticalScrollbarLayer &= !invisible; | 1339 needsVerticalScrollbarLayer &= !invisible; |
| 1351 needsScrollCornerLayer &= !invisible; | 1340 needsScrollCornerLayer &= !invisible; |
| 1352 | 1341 |
| 1353 bool horizontalScrollbarLayerChanged = toggleScrollbarLayerIfNeeded(m_layerF
orHorizontalScrollbar, needsHorizontalScrollbarLayer, CompositingReasonLayerForH
orizontalScrollbar); | 1342 bool horizontalScrollbarLayerChanged = toggleScrollbarLayerIfNeeded(m_layerF
orHorizontalScrollbar, needsHorizontalScrollbarLayer, CompositingReasonLayerForH
orizontalScrollbar); |
| 1354 bool verticalScrollbarLayerChanged = toggleScrollbarLayerIfNeeded(m_layerFor
VerticalScrollbar, needsVerticalScrollbarLayer, CompositingReasonLayerForVertica
lScrollbar); | 1343 bool verticalScrollbarLayerChanged = toggleScrollbarLayerIfNeeded(m_layerFor
VerticalScrollbar, needsVerticalScrollbarLayer, CompositingReasonLayerForVertica
lScrollbar); |
| 1355 bool scrollCornerLayerChanged = toggleScrollbarLayerIfNeeded(m_layerForScrol
lCorner, needsScrollCornerLayer, CompositingReasonLayerForScrollCorner); | 1344 bool scrollCornerLayerChanged = toggleScrollbarLayerIfNeeded(m_layerForScrol
lCorner, needsScrollCornerLayer, CompositingReasonLayerForScrollCorner); |
| 1356 | 1345 |
| 1357 bool needsOverflowControlsHostLayer = needsHorizontalScrollbarLayer || needs
VerticalScrollbarLayer || needsScrollCornerLayer; | 1346 bool needsOverflowControlsHostLayer = needsHorizontalScrollbarLayer || needs
VerticalScrollbarLayer || needsScrollCornerLayer; |
| 1358 toggleScrollbarLayerIfNeeded(m_overflowControlsHostLayer, needsOverflowContr
olsHostLayer, CompositingReasonLayerForOverflowControlsHost); | 1347 toggleScrollbarLayerIfNeeded(m_overflowControlsHostLayer, needsOverflowContr
olsHostLayer, CompositingReasonLayerForOverflowControlsHost); |
| 1359 bool needsOverflowAncestorClipLayer = needsOverflowControlsHostLayer && need
sAncestorClip; | 1348 bool needsOverflowClipLayer = needsOverflowControlsHostLayer && needsAncesto
rClip; |
| 1360 toggleScrollbarLayerIfNeeded(m_overflowControlsAncestorClippingLayer, needsO
verflowAncestorClipLayer, CompositingReasonLayerForOverflowControlsHost); | 1349 toggleScrollbarLayerIfNeeded(m_overflowControlsClippingLayer, needsOverflowC
lipLayer, CompositingReasonLayerForOverflowControlsHost); |
| 1361 | 1350 |
| 1362 if (ScrollingCoordinator* scrollingCoordinator = scrollingCoordinatorFromLay
er(m_owningLayer)) { | 1351 if (ScrollingCoordinator* scrollingCoordinator = scrollingCoordinatorFromLay
er(m_owningLayer)) { |
| 1363 if (horizontalScrollbarLayerChanged) | 1352 if (horizontalScrollbarLayerChanged) |
| 1364 scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_owning
Layer.scrollableArea(), HorizontalScrollbar); | 1353 scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_owning
Layer.scrollableArea(), HorizontalScrollbar); |
| 1365 if (verticalScrollbarLayerChanged) | 1354 if (verticalScrollbarLayerChanged) |
| 1366 scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_owning
Layer.scrollableArea(), VerticalScrollbar); | 1355 scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_owning
Layer.scrollableArea(), VerticalScrollbar); |
| 1367 } | 1356 } |
| 1368 | 1357 |
| 1369 return horizontalScrollbarLayerChanged || verticalScrollbarLayerChanged || s
crollCornerLayerChanged; | 1358 return horizontalScrollbarLayerChanged || verticalScrollbarLayerChanged || s
crollCornerLayerChanged; |
| 1370 } | 1359 } |
| 1371 | 1360 |
| 1372 void CompositedLayerMapping::positionOverflowControlsLayers() | 1361 void CompositedLayerMapping::positionOverflowControlsLayers() |
| 1373 { | 1362 { |
| 1363 IntSize offsetFromLayoutObject = m_graphicsLayer->offsetFromLayoutObject() -
roundedIntSize(m_owningLayer.subpixelAccumulation()); |
| 1374 if (GraphicsLayer* layer = layerForHorizontalScrollbar()) { | 1364 if (GraphicsLayer* layer = layerForHorizontalScrollbar()) { |
| 1375 Scrollbar* hBar = m_owningLayer.scrollableArea()->horizontalScrollbar(); | 1365 Scrollbar* hBar = m_owningLayer.scrollableArea()->horizontalScrollbar(); |
| 1376 if (hBar) { | 1366 if (hBar) { |
| 1377 layer->setPosition(hBar->frameRect().location()); | 1367 layer->setPosition(hBar->frameRect().location() - offsetFromLayoutOb
ject); |
| 1378 layer->setSize(FloatSize(hBar->frameRect().size())); | 1368 layer->setSize(FloatSize(hBar->frameRect().size())); |
| 1379 if (layer->hasContentsLayer()) | 1369 if (layer->hasContentsLayer()) |
| 1380 layer->setContentsRect(IntRect(IntPoint(), hBar->frameRect().siz
e())); | 1370 layer->setContentsRect(IntRect(IntPoint(), hBar->frameRect().siz
e())); |
| 1381 } | 1371 } |
| 1382 layer->setDrawsContent(hBar && !layer->hasContentsLayer()); | 1372 layer->setDrawsContent(hBar && !layer->hasContentsLayer()); |
| 1383 } | 1373 } |
| 1384 | 1374 |
| 1385 if (GraphicsLayer* layer = layerForVerticalScrollbar()) { | 1375 if (GraphicsLayer* layer = layerForVerticalScrollbar()) { |
| 1386 Scrollbar* vBar = m_owningLayer.scrollableArea()->verticalScrollbar(); | 1376 Scrollbar* vBar = m_owningLayer.scrollableArea()->verticalScrollbar(); |
| 1387 if (vBar) { | 1377 if (vBar) { |
| 1388 layer->setPosition(vBar->frameRect().location()); | 1378 layer->setPosition(vBar->frameRect().location() - offsetFromLayoutOb
ject); |
| 1389 layer->setSize(FloatSize(vBar->frameRect().size())); | 1379 layer->setSize(FloatSize(vBar->frameRect().size())); |
| 1390 if (layer->hasContentsLayer()) | 1380 if (layer->hasContentsLayer()) |
| 1391 layer->setContentsRect(IntRect(IntPoint(), vBar->frameRect().siz
e())); | 1381 layer->setContentsRect(IntRect(IntPoint(), vBar->frameRect().siz
e())); |
| 1392 } | 1382 } |
| 1393 layer->setDrawsContent(vBar && !layer->hasContentsLayer()); | 1383 layer->setDrawsContent(vBar && !layer->hasContentsLayer()); |
| 1394 } | 1384 } |
| 1395 | 1385 |
| 1396 if (GraphicsLayer* layer = layerForScrollCorner()) { | 1386 if (GraphicsLayer* layer = layerForScrollCorner()) { |
| 1397 const IntRect& scrollCornerAndResizer = m_owningLayer.scrollableArea()->
scrollCornerAndResizerRect(); | 1387 const IntRect& scrollCornerAndResizer = m_owningLayer.scrollableArea()->
scrollCornerAndResizerRect(); |
| 1398 layer->setPosition(FloatPoint(scrollCornerAndResizer.location())); | 1388 layer->setPosition(FloatPoint(scrollCornerAndResizer.location() - offset
FromLayoutObject)); |
| 1399 layer->setSize(FloatSize(scrollCornerAndResizer.size())); | 1389 layer->setSize(FloatSize(scrollCornerAndResizer.size())); |
| 1400 layer->setDrawsContent(!scrollCornerAndResizer.isEmpty()); | 1390 layer->setDrawsContent(!scrollCornerAndResizer.isEmpty()); |
| 1401 } | 1391 } |
| 1402 } | 1392 } |
| 1403 | 1393 |
| 1404 enum ApplyToGraphicsLayersModeFlags { | 1394 enum ApplyToGraphicsLayersModeFlags { |
| 1405 ApplyToLayersAffectedByPreserve3D = (1 << 0), | 1395 ApplyToLayersAffectedByPreserve3D = (1 << 0), |
| 1406 ApplyToSquashingLayer = (1 << 1), | 1396 ApplyToSquashingLayer = (1 << 1), |
| 1407 ApplyToScrollbarLayers = (1 << 2), | 1397 ApplyToScrollbarLayers = (1 << 2), |
| 1408 ApplyToBackgroundLayer = (1 << 3), | 1398 ApplyToBackgroundLayer = (1 << 3), |
| (...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1963 | 1953 |
| 1964 bool CompositedLayerMapping::needsToReparentOverflowControls() const | 1954 bool CompositedLayerMapping::needsToReparentOverflowControls() const |
| 1965 { | 1955 { |
| 1966 return m_owningLayer.scrollableArea() | 1956 return m_owningLayer.scrollableArea() |
| 1967 && m_owningLayer.scrollableArea()->hasOverlayScrollbars() | 1957 && m_owningLayer.scrollableArea()->hasOverlayScrollbars() |
| 1968 && m_owningLayer.scrollableArea()->topmostScrollChild(); | 1958 && m_owningLayer.scrollableArea()->topmostScrollChild(); |
| 1969 } | 1959 } |
| 1970 | 1960 |
| 1971 GraphicsLayer* CompositedLayerMapping::detachLayerForOverflowControls(const Pain
tLayer& enclosingLayer) | 1961 GraphicsLayer* CompositedLayerMapping::detachLayerForOverflowControls(const Pain
tLayer& enclosingLayer) |
| 1972 { | 1962 { |
| 1973 GraphicsLayer* host = m_overflowControlsAncestorClippingLayer.get(); | 1963 GraphicsLayer* host = m_overflowControlsClippingLayer.get(); |
| 1974 if (!host) | 1964 if (!host) |
| 1975 host = m_overflowControlsHostLayer.get(); | 1965 host = m_overflowControlsHostLayer.get(); |
| 1976 host->removeFromParent(); | 1966 host->removeFromParent(); |
| 1977 return host; | 1967 return host; |
| 1978 } | 1968 } |
| 1979 | 1969 |
| 1980 GraphicsLayer* CompositedLayerMapping::parentForSublayers() const | 1970 GraphicsLayer* CompositedLayerMapping::parentForSublayers() const |
| 1981 { | 1971 { |
| 1982 if (m_scrollingBlockSelectionLayer) | 1972 if (m_scrollingBlockSelectionLayer) |
| 1983 return m_scrollingBlockSelectionLayer.get(); | 1973 return m_scrollingBlockSelectionLayer.get(); |
| 1984 | 1974 |
| 1985 if (m_scrollingContentsLayer) | 1975 if (m_scrollingContentsLayer) |
| 1986 return m_scrollingContentsLayer.get(); | 1976 return m_scrollingContentsLayer.get(); |
| 1987 | 1977 |
| 1988 if (m_childContainmentLayer) | 1978 if (m_childContainmentLayer) |
| 1989 return m_childContainmentLayer.get(); | 1979 return m_childContainmentLayer.get(); |
| 1990 | 1980 |
| 1991 if (m_childTransformLayer) | 1981 if (m_childTransformLayer) |
| 1992 return m_childTransformLayer.get(); | 1982 return m_childTransformLayer.get(); |
| 1993 | 1983 |
| 1994 return m_graphicsLayer.get(); | 1984 return m_graphicsLayer.get(); |
| 1995 } | 1985 } |
| 1996 | 1986 |
| 1997 void CompositedLayerMapping::setSublayers(const GraphicsLayerVector& sublayers) | |
| 1998 { | |
| 1999 GraphicsLayer* overflowControlsContainer = m_overflowControlsAncestorClippin
gLayer | |
| 2000 ? m_overflowControlsAncestorClippingLayer.get() | |
| 2001 : m_overflowControlsHostLayer.get(); | |
| 2002 GraphicsLayer* parent = parentForSublayers(); | |
| 2003 bool needsOverflowControlsReattached = overflowControlsContainer && overflow
ControlsContainer->parent() == parent; | |
| 2004 | |
| 2005 parent->setChildren(sublayers); | |
| 2006 | |
| 2007 // If we have scrollbars, but are not using composited scrolling, then paren
tForSublayers may return m_graphicsLayer. | |
| 2008 // In that case, the above call to setChildren has clobbered the overflow co
ntrols host layer, so we need to reattach it. | |
| 2009 if (needsOverflowControlsReattached) | |
| 2010 parent->addChild(overflowControlsContainer); | |
| 2011 } | |
| 2012 | |
| 2013 GraphicsLayer* CompositedLayerMapping::childForSuperlayers() const | 1987 GraphicsLayer* CompositedLayerMapping::childForSuperlayers() const |
| 2014 { | 1988 { |
| 2015 if (m_squashingContainmentLayer) | 1989 if (m_squashingContainmentLayer) |
| 2016 return m_squashingContainmentLayer.get(); | 1990 return m_squashingContainmentLayer.get(); |
| 2017 | 1991 |
| 2018 if (m_ancestorClippingLayer) | 1992 if (m_ancestorClippingLayer) |
| 2019 return m_ancestorClippingLayer.get(); | 1993 return m_ancestorClippingLayer.get(); |
| 2020 | 1994 |
| 2021 return m_graphicsLayer.get(); | 1995 return m_graphicsLayer.get(); |
| 2022 } | 1996 } |
| (...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2524 } else if (graphicsLayer == m_childClippingMaskLayer.get()) { | 2498 } else if (graphicsLayer == m_childClippingMaskLayer.get()) { |
| 2525 name = "Child Clipping Mask Layer"; | 2499 name = "Child Clipping Mask Layer"; |
| 2526 } else if (graphicsLayer == m_layerForHorizontalScrollbar.get()) { | 2500 } else if (graphicsLayer == m_layerForHorizontalScrollbar.get()) { |
| 2527 name = "Horizontal Scrollbar Layer"; | 2501 name = "Horizontal Scrollbar Layer"; |
| 2528 } else if (graphicsLayer == m_layerForVerticalScrollbar.get()) { | 2502 } else if (graphicsLayer == m_layerForVerticalScrollbar.get()) { |
| 2529 name = "Vertical Scrollbar Layer"; | 2503 name = "Vertical Scrollbar Layer"; |
| 2530 } else if (graphicsLayer == m_layerForScrollCorner.get()) { | 2504 } else if (graphicsLayer == m_layerForScrollCorner.get()) { |
| 2531 name = "Scroll Corner Layer"; | 2505 name = "Scroll Corner Layer"; |
| 2532 } else if (graphicsLayer == m_overflowControlsHostLayer.get()) { | 2506 } else if (graphicsLayer == m_overflowControlsHostLayer.get()) { |
| 2533 name = "Overflow Controls Host Layer"; | 2507 name = "Overflow Controls Host Layer"; |
| 2534 } else if (graphicsLayer == m_overflowControlsAncestorClippingLayer.get()) { | 2508 } else if (graphicsLayer == m_overflowControlsClippingLayer.get()) { |
| 2535 name = "Overflow Controls Ancestor Clipping Layer"; | 2509 name = "Overflow Controls ClipLayer Layer"; |
| 2536 } else if (graphicsLayer == m_scrollingLayer.get()) { | 2510 } else if (graphicsLayer == m_scrollingLayer.get()) { |
| 2537 name = "Scrolling Layer"; | 2511 name = "Scrolling Layer"; |
| 2538 } else if (graphicsLayer == m_scrollingContentsLayer.get()) { | 2512 } else if (graphicsLayer == m_scrollingContentsLayer.get()) { |
| 2539 name = "Scrolling Contents Layer"; | 2513 name = "Scrolling Contents Layer"; |
| 2540 } else if (graphicsLayer == m_scrollingBlockSelectionLayer.get()) { | 2514 } else if (graphicsLayer == m_scrollingBlockSelectionLayer.get()) { |
| 2541 name = "Scrolling Block Selection Layer"; | 2515 name = "Scrolling Block Selection Layer"; |
| 2542 } else { | 2516 } else { |
| 2543 ASSERT_NOT_REACHED(); | 2517 ASSERT_NOT_REACHED(); |
| 2544 } | 2518 } |
| 2545 | 2519 |
| 2546 return name; | 2520 return name; |
| 2547 } | 2521 } |
| 2548 | 2522 |
| 2549 } // namespace blink | 2523 } // namespace blink |
| OLD | NEW |