| 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 719 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 730 updateChildContainmentLayerGeometry(clippingBox, localCompositingBounds); | 730 updateChildContainmentLayerGeometry(clippingBox, localCompositingBounds); |
| 731 | 731 |
| 732 updateMaskLayerGeometry(); | 732 updateMaskLayerGeometry(); |
| 733 updateTransformGeometry(snappedOffsetFromCompositedAncestor, relativeComposi
tingBounds); | 733 updateTransformGeometry(snappedOffsetFromCompositedAncestor, relativeComposi
tingBounds); |
| 734 updateForegroundLayerGeometry(contentsSize, clippingBox); | 734 updateForegroundLayerGeometry(contentsSize, clippingBox); |
| 735 updateBackgroundLayerGeometry(contentsSize); | 735 updateBackgroundLayerGeometry(contentsSize); |
| 736 updateReflectionLayerGeometry(layersNeedingPaintInvalidation); | 736 updateReflectionLayerGeometry(layersNeedingPaintInvalidation); |
| 737 updateScrollingLayerGeometry(localCompositingBounds); | 737 updateScrollingLayerGeometry(localCompositingBounds); |
| 738 updateChildClippingMaskLayerGeometry(); | 738 updateChildClippingMaskLayerGeometry(); |
| 739 | 739 |
| 740 if (m_owningLayer.scrollableArea() && m_owningLayer.scrollableArea()->scroll
sOverflow()) | 740 if (m_owningLayer.getScrollableArea() && m_owningLayer.getScrollableArea()->
scrollsOverflow()) |
| 741 m_owningLayer.scrollableArea()->positionOverflowControls(); | 741 m_owningLayer.getScrollableArea()->positionOverflowControls(); |
| 742 | 742 |
| 743 if (RuntimeEnabledFeatures::cssCompositingEnabled()) { | 743 if (RuntimeEnabledFeatures::cssCompositingEnabled()) { |
| 744 updateLayerBlendMode(layoutObject()->styleRef()); | 744 updateLayerBlendMode(layoutObject()->styleRef()); |
| 745 updateIsRootForIsolatedGroup(); | 745 updateIsRootForIsolatedGroup(); |
| 746 } | 746 } |
| 747 | 747 |
| 748 updateContentsRect(); | 748 updateContentsRect(); |
| 749 updateBackgroundColor(); | 749 updateBackgroundColor(); |
| 750 updateDrawsContent(); | 750 updateDrawsContent(); |
| 751 updateElementIdAndCompositorMutableProperties(); | 751 updateElementIdAndCompositorMutableProperties(); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 797 graphicsLayerParentLocation = roundedIntPoint(compositingContainer->subp
ixelAccumulation()); | 797 graphicsLayerParentLocation = roundedIntPoint(compositingContainer->subp
ixelAccumulation()); |
| 798 } else if (compositingContainer) { | 798 } else if (compositingContainer) { |
| 799 graphicsLayerParentLocation = ancestorCompositingBounds.location(); | 799 graphicsLayerParentLocation = ancestorCompositingBounds.location(); |
| 800 } else { | 800 } else { |
| 801 graphicsLayerParentLocation = layoutObject()->view()->documentRect().loc
ation(); | 801 graphicsLayerParentLocation = layoutObject()->view()->documentRect().loc
ation(); |
| 802 } | 802 } |
| 803 | 803 |
| 804 if (compositingContainer && compositingContainer->needsCompositedScrolling()
) { | 804 if (compositingContainer && compositingContainer->needsCompositedScrolling()
) { |
| 805 LayoutBox* layoutBox = toLayoutBox(compositingContainer->layoutObject())
; | 805 LayoutBox* layoutBox = toLayoutBox(compositingContainer->layoutObject())
; |
| 806 IntSize scrollOffset = layoutBox->scrolledContentOffset(); | 806 IntSize scrollOffset = layoutBox->scrolledContentOffset(); |
| 807 IntPoint scrollOrigin = compositingContainer->scrollableArea()->scrollOr
igin(); | 807 IntPoint scrollOrigin = compositingContainer->getScrollableArea()->scrol
lOrigin(); |
| 808 scrollOrigin.move(-layoutBox->borderLeft(), -layoutBox->borderTop()); | 808 scrollOrigin.move(-layoutBox->borderLeft(), -layoutBox->borderTop()); |
| 809 graphicsLayerParentLocation = -(scrollOrigin + scrollOffset); | 809 graphicsLayerParentLocation = -(scrollOrigin + scrollOffset); |
| 810 } | 810 } |
| 811 } | 811 } |
| 812 | 812 |
| 813 void CompositedLayerMapping::updateAncestorClippingLayerGeometry(const PaintLaye
r* compositingContainer, const IntPoint& snappedOffsetFromCompositedAncestor, In
tPoint& graphicsLayerParentLocation) | 813 void CompositedLayerMapping::updateAncestorClippingLayerGeometry(const PaintLaye
r* compositingContainer, const IntPoint& snappedOffsetFromCompositedAncestor, In
tPoint& graphicsLayerParentLocation) |
| 814 { | 814 { |
| 815 if (!compositingContainer || !m_ancestorClippingLayer) | 815 if (!compositingContainer || !m_ancestorClippingLayer) |
| 816 return; | 816 return; |
| 817 | 817 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 850 position += offsetFromStackingContainer; | 850 position += offsetFromStackingContainer; |
| 851 } | 851 } |
| 852 | 852 |
| 853 m_overflowControlsAncestorClippingLayer->setPosition(position); | 853 m_overflowControlsAncestorClippingLayer->setPosition(position); |
| 854 } else { | 854 } else { |
| 855 // The controls are in the same 2D space as the compositing containe
r, so we can map them into the space of the container. | 855 // The controls are in the same 2D space as the compositing containe
r, so we can map them into the space of the container. |
| 856 TransformState transformState(TransformState::ApplyTransformDirectio
n, FloatPoint()); | 856 TransformState transformState(TransformState::ApplyTransformDirectio
n, FloatPoint()); |
| 857 m_owningLayer.layoutObject()->mapLocalToAncestor(compositingStacking
Context->layoutObject(), transformState, ApplyContainerFlip); | 857 m_owningLayer.layoutObject()->mapLocalToAncestor(compositingStacking
Context->layoutObject(), transformState, ApplyContainerFlip); |
| 858 transformState.flatten(); | 858 transformState.flatten(); |
| 859 hostLayerPosition = LayoutPoint(transformState.lastPlanarPoint()); | 859 hostLayerPosition = LayoutPoint(transformState.lastPlanarPoint()); |
| 860 if (PaintLayerScrollableArea* scrollableArea = compositingStackingCo
ntext->scrollableArea()) | 860 if (PaintLayerScrollableArea* scrollableArea = compositingStackingCo
ntext->getScrollableArea()) |
| 861 hostLayerPosition.move(LayoutSize(scrollableArea->adjustedScroll
Offset())); | 861 hostLayerPosition.move(LayoutSize(scrollableArea->adjustedScroll
Offset())); |
| 862 } | 862 } |
| 863 } | 863 } |
| 864 | 864 |
| 865 // To clip correctly, m_overflowControlsHostLayer should match the border bo
x rect, which is at | 865 // To clip correctly, m_overflowControlsHostLayer should match the border bo
x rect, which is at |
| 866 // the origin of the LayoutObject. The parent is m_graphicsLayer, so we must
adjust the position | 866 // the origin of the LayoutObject. The parent is m_graphicsLayer, so we must
adjust the position |
| 867 // by the distance from m_graphicsLayer to the LayoutObject. | 867 // by the distance from m_graphicsLayer to the LayoutObject. |
| 868 | 868 |
| 869 IntSize offsetFromLayoutObject = m_graphicsLayer->offsetFromLayoutObject() -
roundedIntSize(m_owningLayer.subpixelAccumulation()); | 869 IntSize offsetFromLayoutObject = m_graphicsLayer->offsetFromLayoutObject() -
roundedIntSize(m_owningLayer.subpixelAccumulation()); |
| 870 hostLayerPosition.move(-offsetFromLayoutObject); | 870 hostLayerPosition.move(-offsetFromLayoutObject); |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 958 } | 958 } |
| 959 | 959 |
| 960 void CompositedLayerMapping::updateScrollingLayerGeometry(const IntRect& localCo
mpositingBounds) | 960 void CompositedLayerMapping::updateScrollingLayerGeometry(const IntRect& localCo
mpositingBounds) |
| 961 { | 961 { |
| 962 if (!m_scrollingLayer) | 962 if (!m_scrollingLayer) |
| 963 return; | 963 return; |
| 964 | 964 |
| 965 ASSERT(m_scrollingContentsLayer); | 965 ASSERT(m_scrollingContentsLayer); |
| 966 LayoutBox* layoutBox = toLayoutBox(layoutObject()); | 966 LayoutBox* layoutBox = toLayoutBox(layoutObject()); |
| 967 IntRect overflowClipRect = enclosingIntRect(layoutBox->overflowClipRect(Layo
utPoint())); | 967 IntRect overflowClipRect = enclosingIntRect(layoutBox->overflowClipRect(Layo
utPoint())); |
| 968 DoubleSize adjustedScrollOffset = m_owningLayer.scrollableArea()->adjustedSc
rollOffset(); | 968 DoubleSize adjustedScrollOffset = m_owningLayer.getScrollableArea()->adjuste
dScrollOffset(); |
| 969 m_scrollingLayer->setPosition(FloatPoint(overflowClipRect.location() - local
CompositingBounds.location() + roundedIntSize(m_owningLayer.subpixelAccumulation
()))); | 969 m_scrollingLayer->setPosition(FloatPoint(overflowClipRect.location() - local
CompositingBounds.location() + roundedIntSize(m_owningLayer.subpixelAccumulation
()))); |
| 970 m_scrollingLayer->setSize(FloatSize(overflowClipRect.size())); | 970 m_scrollingLayer->setSize(FloatSize(overflowClipRect.size())); |
| 971 | 971 |
| 972 IntSize oldScrollingLayerOffset = m_scrollingLayer->offsetFromLayoutObject()
; | 972 IntSize oldScrollingLayerOffset = m_scrollingLayer->offsetFromLayoutObject()
; |
| 973 m_scrollingLayer->setOffsetFromLayoutObject(-toIntSize(overflowClipRect.loca
tion())); | 973 m_scrollingLayer->setOffsetFromLayoutObject(-toIntSize(overflowClipRect.loca
tion())); |
| 974 | 974 |
| 975 if (m_childClippingMaskLayer && !layoutObject()->style()->clipPath()) { | 975 if (m_childClippingMaskLayer && !layoutObject()->style()->clipPath()) { |
| 976 m_childClippingMaskLayer->setPosition(m_scrollingLayer->position()); | 976 m_childClippingMaskLayer->setPosition(m_scrollingLayer->position()); |
| 977 m_childClippingMaskLayer->setSize(m_scrollingLayer->size()); | 977 m_childClippingMaskLayer->setSize(m_scrollingLayer->size()); |
| 978 m_childClippingMaskLayer->setOffsetFromLayoutObject(toIntSize(overflowCl
ipRect.location())); | 978 m_childClippingMaskLayer->setOffsetFromLayoutObject(toIntSize(overflowCl
ipRect.location())); |
| (...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1302 { | 1302 { |
| 1303 m_backgroundLayerPaintsFixedRootBackground = backgroundLayerPaintsFixedRootB
ackground; | 1303 m_backgroundLayerPaintsFixedRootBackground = backgroundLayerPaintsFixedRootB
ackground; |
| 1304 } | 1304 } |
| 1305 | 1305 |
| 1306 bool CompositedLayerMapping::toggleScrollbarLayerIfNeeded(OwnPtr<GraphicsLayer>&
layer, bool needsLayer, CompositingReasons reason) | 1306 bool CompositedLayerMapping::toggleScrollbarLayerIfNeeded(OwnPtr<GraphicsLayer>&
layer, bool needsLayer, CompositingReasons reason) |
| 1307 { | 1307 { |
| 1308 if (needsLayer == !!layer) | 1308 if (needsLayer == !!layer) |
| 1309 return false; | 1309 return false; |
| 1310 layer = needsLayer ? createGraphicsLayer(reason) : nullptr; | 1310 layer = needsLayer ? createGraphicsLayer(reason) : nullptr; |
| 1311 | 1311 |
| 1312 if (PaintLayerScrollableArea* scrollableArea = m_owningLayer.scrollableArea(
)) { | 1312 if (PaintLayerScrollableArea* scrollableArea = m_owningLayer.getScrollableAr
ea()) { |
| 1313 if (ScrollingCoordinator* scrollingCoordinator = scrollingCoordinatorFro
mLayer(m_owningLayer)) { | 1313 if (ScrollingCoordinator* scrollingCoordinator = scrollingCoordinatorFro
mLayer(m_owningLayer)) { |
| 1314 if (reason == CompositingReasonLayerForHorizontalScrollbar) | 1314 if (reason == CompositingReasonLayerForHorizontalScrollbar) |
| 1315 scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(scro
llableArea, HorizontalScrollbar); | 1315 scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(scro
llableArea, HorizontalScrollbar); |
| 1316 else if (reason == CompositingReasonLayerForVerticalScrollbar) | 1316 else if (reason == CompositingReasonLayerForVerticalScrollbar) |
| 1317 scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(scro
llableArea, VerticalScrollbar); | 1317 scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(scro
llableArea, VerticalScrollbar); |
| 1318 } | 1318 } |
| 1319 } | 1319 } |
| 1320 return true; | 1320 return true; |
| 1321 } | 1321 } |
| 1322 | 1322 |
| 1323 bool CompositedLayerMapping::updateOverflowControlsLayers(bool needsHorizontalSc
rollbarLayer, bool needsVerticalScrollbarLayer, bool needsScrollCornerLayer, boo
l needsAncestorClip) | 1323 bool CompositedLayerMapping::updateOverflowControlsLayers(bool needsHorizontalSc
rollbarLayer, bool needsVerticalScrollbarLayer, bool needsScrollCornerLayer, boo
l needsAncestorClip) |
| 1324 { | 1324 { |
| 1325 if (PaintLayerScrollableArea* scrollableArea = m_owningLayer.scrollableArea(
)) { | 1325 if (PaintLayerScrollableArea* scrollableArea = m_owningLayer.getScrollableAr
ea()) { |
| 1326 // If the scrollable area is marked as needing a new scrollbar layer, | 1326 // If the scrollable area is marked as needing a new scrollbar layer, |
| 1327 // destroy the layer now so that it will be created again below. | 1327 // destroy the layer now so that it will be created again below. |
| 1328 if (m_layerForHorizontalScrollbar && needsHorizontalScrollbarLayer && sc
rollableArea->shouldRebuildHorizontalScrollbarLayer()) | 1328 if (m_layerForHorizontalScrollbar && needsHorizontalScrollbarLayer && sc
rollableArea->shouldRebuildHorizontalScrollbarLayer()) |
| 1329 toggleScrollbarLayerIfNeeded(m_layerForHorizontalScrollbar, false, C
ompositingReasonLayerForHorizontalScrollbar); | 1329 toggleScrollbarLayerIfNeeded(m_layerForHorizontalScrollbar, false, C
ompositingReasonLayerForHorizontalScrollbar); |
| 1330 if (m_layerForVerticalScrollbar && needsVerticalScrollbarLayer && scroll
ableArea->shouldRebuildVerticalScrollbarLayer()) | 1330 if (m_layerForVerticalScrollbar && needsVerticalScrollbarLayer && scroll
ableArea->shouldRebuildVerticalScrollbarLayer()) |
| 1331 toggleScrollbarLayerIfNeeded(m_layerForVerticalScrollbar, false, Com
positingReasonLayerForVerticalScrollbar); | 1331 toggleScrollbarLayerIfNeeded(m_layerForVerticalScrollbar, false, Com
positingReasonLayerForVerticalScrollbar); |
| 1332 scrollableArea->resetRebuildScrollbarLayerFlags(); | 1332 scrollableArea->resetRebuildScrollbarLayerFlags(); |
| 1333 } | 1333 } |
| 1334 | 1334 |
| 1335 // If the subtree is invisible, we don't actually need scrollbar layers. | 1335 // If the subtree is invisible, we don't actually need scrollbar layers. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1346 toggleScrollbarLayerIfNeeded(m_overflowControlsHostLayer, needsOverflowContr
olsHostLayer, CompositingReasonLayerForOverflowControlsHost); | 1346 toggleScrollbarLayerIfNeeded(m_overflowControlsHostLayer, needsOverflowContr
olsHostLayer, CompositingReasonLayerForOverflowControlsHost); |
| 1347 bool needsOverflowAncestorClipLayer = needsOverflowControlsHostLayer && need
sAncestorClip; | 1347 bool needsOverflowAncestorClipLayer = needsOverflowControlsHostLayer && need
sAncestorClip; |
| 1348 toggleScrollbarLayerIfNeeded(m_overflowControlsAncestorClippingLayer, needsO
verflowAncestorClipLayer, CompositingReasonLayerForOverflowControlsHost); | 1348 toggleScrollbarLayerIfNeeded(m_overflowControlsAncestorClippingLayer, needsO
verflowAncestorClipLayer, CompositingReasonLayerForOverflowControlsHost); |
| 1349 | 1349 |
| 1350 return horizontalScrollbarLayerChanged || verticalScrollbarLayerChanged || s
crollCornerLayerChanged; | 1350 return horizontalScrollbarLayerChanged || verticalScrollbarLayerChanged || s
crollCornerLayerChanged; |
| 1351 } | 1351 } |
| 1352 | 1352 |
| 1353 void CompositedLayerMapping::positionOverflowControlsLayers() | 1353 void CompositedLayerMapping::positionOverflowControlsLayers() |
| 1354 { | 1354 { |
| 1355 if (GraphicsLayer* layer = layerForHorizontalScrollbar()) { | 1355 if (GraphicsLayer* layer = layerForHorizontalScrollbar()) { |
| 1356 Scrollbar* hBar = m_owningLayer.scrollableArea()->horizontalScrollbar(); | 1356 Scrollbar* hBar = m_owningLayer.getScrollableArea()->horizontalScrollbar
(); |
| 1357 if (hBar) { | 1357 if (hBar) { |
| 1358 layer->setPosition(hBar->frameRect().location()); | 1358 layer->setPosition(hBar->frameRect().location()); |
| 1359 layer->setSize(FloatSize(hBar->frameRect().size())); | 1359 layer->setSize(FloatSize(hBar->frameRect().size())); |
| 1360 if (layer->hasContentsLayer()) | 1360 if (layer->hasContentsLayer()) |
| 1361 layer->setContentsRect(IntRect(IntPoint(), hBar->frameRect().siz
e())); | 1361 layer->setContentsRect(IntRect(IntPoint(), hBar->frameRect().siz
e())); |
| 1362 } | 1362 } |
| 1363 layer->setDrawsContent(hBar && !layer->hasContentsLayer()); | 1363 layer->setDrawsContent(hBar && !layer->hasContentsLayer()); |
| 1364 } | 1364 } |
| 1365 | 1365 |
| 1366 if (GraphicsLayer* layer = layerForVerticalScrollbar()) { | 1366 if (GraphicsLayer* layer = layerForVerticalScrollbar()) { |
| 1367 Scrollbar* vBar = m_owningLayer.scrollableArea()->verticalScrollbar(); | 1367 Scrollbar* vBar = m_owningLayer.getScrollableArea()->verticalScrollbar()
; |
| 1368 if (vBar) { | 1368 if (vBar) { |
| 1369 layer->setPosition(vBar->frameRect().location()); | 1369 layer->setPosition(vBar->frameRect().location()); |
| 1370 layer->setSize(FloatSize(vBar->frameRect().size())); | 1370 layer->setSize(FloatSize(vBar->frameRect().size())); |
| 1371 if (layer->hasContentsLayer()) | 1371 if (layer->hasContentsLayer()) |
| 1372 layer->setContentsRect(IntRect(IntPoint(), vBar->frameRect().siz
e())); | 1372 layer->setContentsRect(IntRect(IntPoint(), vBar->frameRect().siz
e())); |
| 1373 } | 1373 } |
| 1374 layer->setDrawsContent(vBar && !layer->hasContentsLayer()); | 1374 layer->setDrawsContent(vBar && !layer->hasContentsLayer()); |
| 1375 } | 1375 } |
| 1376 | 1376 |
| 1377 if (GraphicsLayer* layer = layerForScrollCorner()) { | 1377 if (GraphicsLayer* layer = layerForScrollCorner()) { |
| 1378 const IntRect& scrollCornerAndResizer = m_owningLayer.scrollableArea()->
scrollCornerAndResizerRect(); | 1378 const IntRect& scrollCornerAndResizer = m_owningLayer.getScrollableArea(
)->scrollCornerAndResizerRect(); |
| 1379 layer->setPosition(FloatPoint(scrollCornerAndResizer.location())); | 1379 layer->setPosition(FloatPoint(scrollCornerAndResizer.location())); |
| 1380 layer->setSize(FloatSize(scrollCornerAndResizer.size())); | 1380 layer->setSize(FloatSize(scrollCornerAndResizer.size())); |
| 1381 layer->setDrawsContent(!scrollCornerAndResizer.isEmpty()); | 1381 layer->setDrawsContent(!scrollCornerAndResizer.isEmpty()); |
| 1382 } | 1382 } |
| 1383 } | 1383 } |
| 1384 | 1384 |
| 1385 enum ApplyToGraphicsLayersModeFlags { | 1385 enum ApplyToGraphicsLayersModeFlags { |
| 1386 ApplyToLayersAffectedByPreserve3D = (1 << 0), | 1386 ApplyToLayersAffectedByPreserve3D = (1 << 0), |
| 1387 ApplyToSquashingLayer = (1 << 1), | 1387 ApplyToSquashingLayer = (1 << 1), |
| 1388 ApplyToScrollbarLayers = (1 << 2), | 1388 ApplyToScrollbarLayers = (1 << 2), |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1607 m_scrollingLayer = createGraphicsLayer(CompositingReasonLayerForScro
llingContainer); | 1607 m_scrollingLayer = createGraphicsLayer(CompositingReasonLayerForScro
llingContainer); |
| 1608 m_scrollingLayer->setDrawsContent(false); | 1608 m_scrollingLayer->setDrawsContent(false); |
| 1609 m_scrollingLayer->setMasksToBounds(true); | 1609 m_scrollingLayer->setMasksToBounds(true); |
| 1610 | 1610 |
| 1611 // Inner layer which renders the content that scrolls. | 1611 // Inner layer which renders the content that scrolls. |
| 1612 m_scrollingContentsLayer = createGraphicsLayer(CompositingReasonLaye
rForScrollingContents); | 1612 m_scrollingContentsLayer = createGraphicsLayer(CompositingReasonLaye
rForScrollingContents); |
| 1613 m_scrollingLayer->addChild(m_scrollingContentsLayer.get()); | 1613 m_scrollingLayer->addChild(m_scrollingContentsLayer.get()); |
| 1614 | 1614 |
| 1615 layerChanged = true; | 1615 layerChanged = true; |
| 1616 if (scrollingCoordinator) { | 1616 if (scrollingCoordinator) { |
| 1617 scrollingCoordinator->scrollableAreaScrollLayerDidChange(m_ownin
gLayer.scrollableArea()); | 1617 scrollingCoordinator->scrollableAreaScrollLayerDidChange(m_ownin
gLayer.getScrollableArea()); |
| 1618 scrollingCoordinator->scrollableAreasDidChange(); | 1618 scrollingCoordinator->scrollableAreasDidChange(); |
| 1619 } | 1619 } |
| 1620 } | 1620 } |
| 1621 } else if (m_scrollingLayer) { | 1621 } else if (m_scrollingLayer) { |
| 1622 m_scrollingLayer = nullptr; | 1622 m_scrollingLayer = nullptr; |
| 1623 m_scrollingContentsLayer = nullptr; | 1623 m_scrollingContentsLayer = nullptr; |
| 1624 layerChanged = true; | 1624 layerChanged = true; |
| 1625 if (scrollingCoordinator) { | 1625 if (scrollingCoordinator) { |
| 1626 scrollingCoordinator->scrollableAreaScrollLayerDidChange(m_owningLay
er.scrollableArea()); | 1626 scrollingCoordinator->scrollableAreaScrollLayerDidChange(m_owningLay
er.getScrollableArea()); |
| 1627 scrollingCoordinator->scrollableAreasDidChange(); | 1627 scrollingCoordinator->scrollableAreasDidChange(); |
| 1628 } | 1628 } |
| 1629 } | 1629 } |
| 1630 | 1630 |
| 1631 return layerChanged; | 1631 return layerChanged; |
| 1632 } | 1632 } |
| 1633 | 1633 |
| 1634 static void updateScrollParentForGraphicsLayer(GraphicsLayer* layer, GraphicsLay
er* topmostLayer, const PaintLayer* scrollParent, ScrollingCoordinator* scrollin
gCoordinator) | 1634 static void updateScrollParentForGraphicsLayer(GraphicsLayer* layer, GraphicsLay
er* topmostLayer, const PaintLayer* scrollParent, ScrollingCoordinator* scrollin
gCoordinator) |
| 1635 { | 1635 { |
| 1636 if (!layer) | 1636 if (!layer) |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1878 if (m_owningLayer.hasBoxDecorationsOrBackground() | 1878 if (m_owningLayer.hasBoxDecorationsOrBackground() |
| 1879 || imageLayoutObject->hasClip() | 1879 || imageLayoutObject->hasClip() |
| 1880 || imageLayoutObject->hasClipPath() | 1880 || imageLayoutObject->hasClipPath() |
| 1881 || imageLayoutObject->hasObjectFit()) | 1881 || imageLayoutObject->hasObjectFit()) |
| 1882 return false; | 1882 return false; |
| 1883 | 1883 |
| 1884 if (ImageResource* cachedImage = imageLayoutObject->cachedImage()) { | 1884 if (ImageResource* cachedImage = imageLayoutObject->cachedImage()) { |
| 1885 if (!cachedImage->hasImage()) | 1885 if (!cachedImage->hasImage()) |
| 1886 return false; | 1886 return false; |
| 1887 | 1887 |
| 1888 Image* image = cachedImage->image(); | 1888 Image* image = cachedImage->getImage(); |
| 1889 if (!image->isBitmapImage()) | 1889 if (!image->isBitmapImage()) |
| 1890 return false; | 1890 return false; |
| 1891 | 1891 |
| 1892 return true; | 1892 return true; |
| 1893 } | 1893 } |
| 1894 | 1894 |
| 1895 return false; | 1895 return false; |
| 1896 } | 1896 } |
| 1897 | 1897 |
| 1898 void CompositedLayerMapping::contentChanged(ContentChangeType changeType) | 1898 void CompositedLayerMapping::contentChanged(ContentChangeType changeType) |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1910 | 1910 |
| 1911 void CompositedLayerMapping::updateImageContents() | 1911 void CompositedLayerMapping::updateImageContents() |
| 1912 { | 1912 { |
| 1913 ASSERT(layoutObject()->isImage()); | 1913 ASSERT(layoutObject()->isImage()); |
| 1914 LayoutImage* imageLayoutObject = toLayoutImage(layoutObject()); | 1914 LayoutImage* imageLayoutObject = toLayoutImage(layoutObject()); |
| 1915 | 1915 |
| 1916 ImageResource* cachedImage = imageLayoutObject->cachedImage(); | 1916 ImageResource* cachedImage = imageLayoutObject->cachedImage(); |
| 1917 if (!cachedImage) | 1917 if (!cachedImage) |
| 1918 return; | 1918 return; |
| 1919 | 1919 |
| 1920 Image* image = cachedImage->image(); | 1920 Image* image = cachedImage->getImage(); |
| 1921 if (!image) | 1921 if (!image) |
| 1922 return; | 1922 return; |
| 1923 | 1923 |
| 1924 // This is a no-op if the layer doesn't have an inner layer for the image. | 1924 // This is a no-op if the layer doesn't have an inner layer for the image. |
| 1925 m_graphicsLayer->setContentsToImage(image, LayoutObject::shouldRespectImageO
rientation(imageLayoutObject)); | 1925 m_graphicsLayer->setContentsToImage(image, LayoutObject::shouldRespectImageO
rientation(imageLayoutObject)); |
| 1926 | 1926 |
| 1927 m_graphicsLayer->setFilterQuality(layoutObject()->style()->imageRendering()
== ImageRenderingPixelated ? kNone_SkFilterQuality : kLow_SkFilterQuality); | 1927 m_graphicsLayer->setFilterQuality(layoutObject()->style()->imageRendering()
== ImageRenderingPixelated ? kNone_SkFilterQuality : kLow_SkFilterQuality); |
| 1928 | 1928 |
| 1929 // Prevent double-drawing: https://bugs.webkit.org/show_bug.cgi?id=58632 | 1929 // Prevent double-drawing: https://bugs.webkit.org/show_bug.cgi?id=58632 |
| 1930 updateDrawsContent(); | 1930 updateDrawsContent(); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1957 | 1957 |
| 1958 LayoutRect CompositedLayerMapping::contentsBox() const | 1958 LayoutRect CompositedLayerMapping::contentsBox() const |
| 1959 { | 1959 { |
| 1960 LayoutRect contentsBox = LayoutRect(contentsRect(layoutObject())); | 1960 LayoutRect contentsBox = LayoutRect(contentsRect(layoutObject())); |
| 1961 contentsBox.move(contentOffsetInCompositingLayer()); | 1961 contentsBox.move(contentOffsetInCompositingLayer()); |
| 1962 return contentsBox; | 1962 return contentsBox; |
| 1963 } | 1963 } |
| 1964 | 1964 |
| 1965 bool CompositedLayerMapping::needsToReparentOverflowControls() const | 1965 bool CompositedLayerMapping::needsToReparentOverflowControls() const |
| 1966 { | 1966 { |
| 1967 return m_owningLayer.scrollableArea() | 1967 return m_owningLayer.getScrollableArea() |
| 1968 && m_owningLayer.scrollableArea()->hasOverlayScrollbars() | 1968 && m_owningLayer.getScrollableArea()->hasOverlayScrollbars() |
| 1969 && m_owningLayer.scrollableArea()->topmostScrollChild(); | 1969 && m_owningLayer.getScrollableArea()->topmostScrollChild(); |
| 1970 } | 1970 } |
| 1971 | 1971 |
| 1972 GraphicsLayer* CompositedLayerMapping::detachLayerForOverflowControls(const Pain
tLayer& enclosingLayer) | 1972 GraphicsLayer* CompositedLayerMapping::detachLayerForOverflowControls(const Pain
tLayer& enclosingLayer) |
| 1973 { | 1973 { |
| 1974 GraphicsLayer* host = m_overflowControlsAncestorClippingLayer.get(); | 1974 GraphicsLayer* host = m_overflowControlsAncestorClippingLayer.get(); |
| 1975 if (!host) | 1975 if (!host) |
| 1976 host = m_overflowControlsHostLayer.get(); | 1976 host = m_overflowControlsHostLayer.get(); |
| 1977 host->removeFromParent(); | 1977 host->removeFromParent(); |
| 1978 return host; | 1978 return host; |
| 1979 } | 1979 } |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2164 PaintLayerPainter(*paintInfo.paintLayer).paintLayerContents(context,
paintingInfo, paintLayerFlags | PaintLayerPaintingOverlayScrollbars); | 2164 PaintLayerPainter(*paintInfo.paintLayer).paintLayerContents(context,
paintingInfo, paintLayerFlags | PaintLayerPaintingOverlayScrollbars); |
| 2165 } else { | 2165 } else { |
| 2166 PaintLayerPaintingInfo paintingInfo(paintInfo.paintLayer, LayoutRect(dir
tyRect), GlobalPaintNormalPhase, paintInfo.paintLayer->subpixelAccumulation()); | 2166 PaintLayerPaintingInfo paintingInfo(paintInfo.paintLayer, LayoutRect(dir
tyRect), GlobalPaintNormalPhase, paintInfo.paintLayer->subpixelAccumulation()); |
| 2167 | 2167 |
| 2168 // PaintLayer::paintLayer assumes that the caller clips to the passed re
ct. Squashed layers need to do this clipping in software, | 2168 // PaintLayer::paintLayer assumes that the caller clips to the passed re
ct. Squashed layers need to do this clipping in software, |
| 2169 // since there is no graphics layer to clip them precisely. Furthermore,
in some cases we squash layers that need clipping in software | 2169 // since there is no graphics layer to clip them precisely. Furthermore,
in some cases we squash layers that need clipping in software |
| 2170 // from clipping ancestors (see CompositedLayerMapping::localClipRectFor
SquashedLayer()). | 2170 // from clipping ancestors (see CompositedLayerMapping::localClipRectFor
SquashedLayer()). |
| 2171 // FIXME: Is it correct to clip to dirtyRect in slimming paint mode? | 2171 // FIXME: Is it correct to clip to dirtyRect in slimming paint mode? |
| 2172 // FIXME: Combine similar code here and LayerClipRecorder. | 2172 // FIXME: Combine similar code here and LayerClipRecorder. |
| 2173 dirtyRect.intersect(paintInfo.localClipRectForSquashedLayer); | 2173 dirtyRect.intersect(paintInfo.localClipRectForSquashedLayer); |
| 2174 context.paintController().createAndAppend<ClipDisplayItem>(graphicsLayer
, DisplayItem::ClipLayerOverflowControls, dirtyRect); | 2174 context.getPaintController().createAndAppend<ClipDisplayItem>(graphicsLa
yer, DisplayItem::ClipLayerOverflowControls, dirtyRect); |
| 2175 | 2175 |
| 2176 PaintLayerPainter(*paintInfo.paintLayer).paintLayer(context, paintingInf
o, paintLayerFlags); | 2176 PaintLayerPainter(*paintInfo.paintLayer).paintLayer(context, paintingInf
o, paintLayerFlags); |
| 2177 context.paintController().endItem<EndClipDisplayItem>(graphicsLayer, Dis
playItem::clipTypeToEndClipType(DisplayItem::ClipLayerOverflowControls)); | 2177 context.getPaintController().endItem<EndClipDisplayItem>(graphicsLayer,
DisplayItem::clipTypeToEndClipType(DisplayItem::ClipLayerOverflowControls)); |
| 2178 } | 2178 } |
| 2179 } | 2179 } |
| 2180 | 2180 |
| 2181 static void paintScrollbar(const Scrollbar* scrollbar, GraphicsContext& context,
const IntRect& clip) | 2181 static void paintScrollbar(const Scrollbar* scrollbar, GraphicsContext& context,
const IntRect& clip) |
| 2182 { | 2182 { |
| 2183 if (!scrollbar) | 2183 if (!scrollbar) |
| 2184 return; | 2184 return; |
| 2185 | 2185 |
| 2186 const IntRect& scrollbarRect = scrollbar->frameRect(); | 2186 const IntRect& scrollbarRect = scrollbar->frameRect(); |
| 2187 TransformRecorder transformRecorder(context, *scrollbar, AffineTransform::tr
anslation(-scrollbarRect.x(), -scrollbarRect.y())); | 2187 TransformRecorder transformRecorder(context, *scrollbar, AffineTransform::tr
anslation(-scrollbarRect.x(), -scrollbarRect.y())); |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2358 paintInfo.paintLayer = &m_owningLayer; | 2358 paintInfo.paintLayer = &m_owningLayer; |
| 2359 paintInfo.compositedBounds = compositedBounds(); | 2359 paintInfo.compositedBounds = compositedBounds(); |
| 2360 paintInfo.offsetFromLayoutObject = graphicsLayer->offsetFromLayoutObject
(); | 2360 paintInfo.offsetFromLayoutObject = graphicsLayer->offsetFromLayoutObject
(); |
| 2361 | 2361 |
| 2362 // We have to use the same root as for hit testing, because both methods
can compute and cache clipRects. | 2362 // We have to use the same root as for hit testing, because both methods
can compute and cache clipRects. |
| 2363 doPaintTask(paintInfo, *graphicsLayer, paintLayerFlags, context, interes
tRect); | 2363 doPaintTask(paintInfo, *graphicsLayer, paintLayerFlags, context, interes
tRect); |
| 2364 } else if (graphicsLayer == m_squashingLayer.get()) { | 2364 } else if (graphicsLayer == m_squashingLayer.get()) { |
| 2365 for (size_t i = 0; i < m_squashedLayers.size(); ++i) | 2365 for (size_t i = 0; i < m_squashedLayers.size(); ++i) |
| 2366 doPaintTask(m_squashedLayers[i], *graphicsLayer, paintLayerFlags, co
ntext, interestRect); | 2366 doPaintTask(m_squashedLayers[i], *graphicsLayer, paintLayerFlags, co
ntext, interestRect); |
| 2367 } else if (graphicsLayer == layerForHorizontalScrollbar()) { | 2367 } else if (graphicsLayer == layerForHorizontalScrollbar()) { |
| 2368 paintScrollbar(m_owningLayer.scrollableArea()->horizontalScrollbar(), co
ntext, interestRect); | 2368 paintScrollbar(m_owningLayer.getScrollableArea()->horizontalScrollbar(),
context, interestRect); |
| 2369 } else if (graphicsLayer == layerForVerticalScrollbar()) { | 2369 } else if (graphicsLayer == layerForVerticalScrollbar()) { |
| 2370 paintScrollbar(m_owningLayer.scrollableArea()->verticalScrollbar(), cont
ext, interestRect); | 2370 paintScrollbar(m_owningLayer.getScrollableArea()->verticalScrollbar(), c
ontext, interestRect); |
| 2371 } else if (graphicsLayer == layerForScrollCorner()) { | 2371 } else if (graphicsLayer == layerForScrollCorner()) { |
| 2372 IntPoint scrollCornerAndResizerLocation = m_owningLayer.scrollableArea()
->scrollCornerAndResizerRect().location(); | 2372 IntPoint scrollCornerAndResizerLocation = m_owningLayer.getScrollableAre
a()->scrollCornerAndResizerRect().location(); |
| 2373 CullRect cullRect(enclosingIntRect(interestRect)); | 2373 CullRect cullRect(enclosingIntRect(interestRect)); |
| 2374 ScrollableAreaPainter(*m_owningLayer.scrollableArea()).paintScrollCorner
(context, -scrollCornerAndResizerLocation, cullRect); | 2374 ScrollableAreaPainter(*m_owningLayer.getScrollableArea()).paintScrollCor
ner(context, -scrollCornerAndResizerLocation, cullRect); |
| 2375 ScrollableAreaPainter(*m_owningLayer.scrollableArea()).paintResizer(cont
ext, -scrollCornerAndResizerLocation, cullRect); | 2375 ScrollableAreaPainter(*m_owningLayer.getScrollableArea()).paintResizer(c
ontext, -scrollCornerAndResizerLocation, cullRect); |
| 2376 } | 2376 } |
| 2377 InspectorInstrumentation::didPaint(m_owningLayer.layoutObject(), graphicsLay
er, context, LayoutRect(interestRect)); | 2377 InspectorInstrumentation::didPaint(m_owningLayer.layoutObject(), graphicsLay
er, context, LayoutRect(interestRect)); |
| 2378 #if ENABLE(ASSERT) | 2378 #if ENABLE(ASSERT) |
| 2379 if (Page* page = layoutObject()->frame()->page()) | 2379 if (Page* page = layoutObject()->frame()->page()) |
| 2380 page->setIsPainting(false); | 2380 page->setIsPainting(false); |
| 2381 #endif | 2381 #endif |
| 2382 } | 2382 } |
| 2383 | 2383 |
| 2384 bool CompositedLayerMapping::isTrackingPaintInvalidations() const | 2384 bool CompositedLayerMapping::isTrackingPaintInvalidations() const |
| 2385 { | 2385 { |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2547 } else if (graphicsLayer == m_scrollingContentsLayer.get()) { | 2547 } else if (graphicsLayer == m_scrollingContentsLayer.get()) { |
| 2548 name = "Scrolling Contents Layer"; | 2548 name = "Scrolling Contents Layer"; |
| 2549 } else { | 2549 } else { |
| 2550 ASSERT_NOT_REACHED(); | 2550 ASSERT_NOT_REACHED(); |
| 2551 } | 2551 } |
| 2552 | 2552 |
| 2553 return name; | 2553 return name; |
| 2554 } | 2554 } |
| 2555 | 2555 |
| 2556 } // namespace blink | 2556 } // namespace blink |
| OLD | NEW |