Chromium Code Reviews| 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 983 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 994 m_scrollingContentsLayer->setSize(FloatSize(scrollSize)); | 994 m_scrollingContentsLayer->setSize(FloatSize(scrollSize)); |
| 995 // FIXME: The paint offset and the scroll offset should really be separate c oncepts. | 995 // FIXME: The paint offset and the scroll offset should really be separate c oncepts. |
| 996 m_scrollingContentsLayer->setOffsetDoubleFromLayoutObject(scrollingContentsO ffset, GraphicsLayer::DontSetNeedsDisplay); | 996 m_scrollingContentsLayer->setOffsetDoubleFromLayoutObject(scrollingContentsO ffset, GraphicsLayer::DontSetNeedsDisplay); |
| 997 | 997 |
| 998 if (m_foregroundLayer) { | 998 if (m_foregroundLayer) { |
| 999 if (m_foregroundLayer->size() != m_scrollingContentsLayer->size()) | 999 if (m_foregroundLayer->size() != m_scrollingContentsLayer->size()) |
| 1000 m_foregroundLayer->setSize(m_scrollingContentsLayer->size()); | 1000 m_foregroundLayer->setSize(m_scrollingContentsLayer->size()); |
| 1001 m_foregroundLayer->setNeedsDisplay(); | 1001 m_foregroundLayer->setNeedsDisplay(); |
| 1002 m_foregroundLayer->setOffsetFromLayoutObject(m_scrollingContentsLayer->o ffsetFromLayoutObject()); | 1002 m_foregroundLayer->setOffsetFromLayoutObject(m_scrollingContentsLayer->o ffsetFromLayoutObject()); |
| 1003 } | 1003 } |
| 1004 | |
| 1005 updateScrollingBlockSelection(); | |
| 1006 } | 1004 } |
| 1007 | 1005 |
| 1008 void CompositedLayerMapping::updateChildClippingMaskLayerGeometry() | 1006 void CompositedLayerMapping::updateChildClippingMaskLayerGeometry() |
| 1009 { | 1007 { |
| 1010 if (!m_childClippingMaskLayer || !layoutObject()->style()->clipPath()) | 1008 if (!m_childClippingMaskLayer || !layoutObject()->style()->clipPath()) |
| 1011 return; | 1009 return; |
| 1012 LayoutBox* layoutBox = toLayoutBox(layoutObject()); | 1010 LayoutBox* layoutBox = toLayoutBox(layoutObject()); |
| 1013 IntRect clientBox = enclosingIntRect(layoutBox->clientBoxRect()); | 1011 IntRect clientBox = enclosingIntRect(layoutBox->clientBoxRect()); |
| 1014 | 1012 |
| 1015 m_childClippingMaskLayer->setPosition(m_graphicsLayer->position()); | 1013 m_childClippingMaskLayer->setPosition(m_graphicsLayer->position()); |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1191 // graphics layers. | 1189 // graphics layers. |
| 1192 // | 1190 // |
| 1193 // And drawing of composited children takes into account the subpixel | 1191 // And drawing of composited children takes into account the subpixel |
| 1194 // accumulation of this CLM already (through its own | 1192 // accumulation of this CLM already (through its own |
| 1195 // graphicsLayerParentLocation it appears). | 1193 // graphicsLayerParentLocation it appears). |
| 1196 FloatPoint offsetDueToAncestorGraphicsLayers = m_graphicsLayer->position() + graphicsLayerParentLocation; | 1194 FloatPoint offsetDueToAncestorGraphicsLayers = m_graphicsLayer->position() + graphicsLayerParentLocation; |
| 1197 m_contentOffsetInCompositingLayer = LayoutSize(snappedOffsetFromCompositedAn cestor - offsetDueToAncestorGraphicsLayers); | 1195 m_contentOffsetInCompositingLayer = LayoutSize(snappedOffsetFromCompositedAn cestor - offsetDueToAncestorGraphicsLayers); |
| 1198 m_contentOffsetInCompositingLayerDirty = false; | 1196 m_contentOffsetInCompositingLayerDirty = false; |
| 1199 } | 1197 } |
| 1200 | 1198 |
| 1201 void CompositedLayerMapping::updateScrollingBlockSelection() | |
| 1202 { | |
| 1203 if (RuntimeEnabledFeatures::selectionPaintingWithoutSelectionGapsEnabled()) | |
| 1204 return; | |
| 1205 | |
| 1206 if (!m_scrollingBlockSelectionLayer) | |
| 1207 return; | |
| 1208 | |
| 1209 if (!m_scrollingContentsAreEmpty) { | |
| 1210 // In this case, the selection will be painted directly into m_scrolling ContentsLayer. | |
| 1211 m_scrollingBlockSelectionLayer->setDrawsContent(false); | |
|
chrishtr
2016/01/28 22:06:22
delete m_scrollingBlockSelectionLayer?
wkorman
2016/01/28 22:54:32
Done.
| |
| 1212 return; | |
| 1213 } | |
| 1214 | |
| 1215 const IntRect blockSelectionGapsBounds = m_owningLayer.blockSelectionGapsBou nds(); | |
| 1216 const bool shouldDrawContent = !blockSelectionGapsBounds.isEmpty(); | |
| 1217 m_scrollingBlockSelectionLayer->setDrawsContent(shouldDrawContent); | |
| 1218 if (!shouldDrawContent) | |
| 1219 return; | |
| 1220 // FIXME: Remove the flooredIntSize conversion. crbug.com/414283. | |
| 1221 const IntPoint position = blockSelectionGapsBounds.location() + flooredIntSi ze(m_owningLayer.scrollableArea()->adjustedScrollOffset()); | |
| 1222 if (m_scrollingBlockSelectionLayer->size() == blockSelectionGapsBounds.size( ) && m_scrollingBlockSelectionLayer->position() == position) | |
| 1223 return; | |
| 1224 | |
| 1225 m_scrollingBlockSelectionLayer->setPosition(position); | |
| 1226 m_scrollingBlockSelectionLayer->setSize(FloatSize(blockSelectionGapsBounds.s ize())); | |
| 1227 m_scrollingBlockSelectionLayer->setOffsetFromLayoutObject(toIntSize(blockSel ectionGapsBounds.location()), GraphicsLayer::SetNeedsDisplay); | |
| 1228 } | |
| 1229 | |
| 1230 void CompositedLayerMapping::updateDrawsContent() | 1199 void CompositedLayerMapping::updateDrawsContent() |
| 1231 { | 1200 { |
| 1232 bool hasPaintedContent = containsPaintedContent(); | 1201 bool hasPaintedContent = containsPaintedContent(); |
| 1233 m_graphicsLayer->setDrawsContent(hasPaintedContent); | 1202 m_graphicsLayer->setDrawsContent(hasPaintedContent); |
| 1234 | 1203 |
| 1235 if (m_scrollingLayer) { | 1204 if (m_scrollingLayer) { |
| 1236 // m_scrollingLayer never has backing store. | 1205 // m_scrollingLayer never has backing store. |
| 1237 // m_scrollingContentsLayer only needs backing store if the scrolled con tents need to paint. | 1206 // m_scrollingContentsLayer only needs backing store if the scrolled con tents need to paint. |
| 1238 m_scrollingContentsAreEmpty = !m_owningLayer.hasVisibleContent() || !(la youtObject()->hasBackground() || paintsChildren()); | 1207 m_scrollingContentsAreEmpty = !m_owningLayer.hasVisibleContent() || !(la youtObject()->hasBackground() || paintsChildren()); |
| 1239 m_scrollingContentsLayer->setDrawsContent(!m_scrollingContentsAreEmpty); | 1208 m_scrollingContentsLayer->setDrawsContent(!m_scrollingContentsAreEmpty); |
| 1240 updateScrollingBlockSelection(); | |
| 1241 } | 1209 } |
| 1242 | 1210 |
| 1243 if (hasPaintedContent && isAcceleratedCanvas(layoutObject())) { | 1211 if (hasPaintedContent && isAcceleratedCanvas(layoutObject())) { |
| 1244 CanvasRenderingContext* context = toHTMLCanvasElement(layoutObject()->no de())->renderingContext(); | 1212 CanvasRenderingContext* context = toHTMLCanvasElement(layoutObject()->no de())->renderingContext(); |
| 1245 // Content layer may be null if context is lost. | 1213 // Content layer may be null if context is lost. |
| 1246 if (WebLayer* contentLayer = context->platformLayer()) { | 1214 if (WebLayer* contentLayer = context->platformLayer()) { |
| 1247 Color bgColor(Color::transparent); | 1215 Color bgColor(Color::transparent); |
| 1248 if (contentLayerSupportsDirectBackgroundComposition(layoutObject())) { | 1216 if (contentLayerSupportsDirectBackgroundComposition(layoutObject())) { |
| 1249 bgColor = layoutObjectBackgroundColor(); | 1217 bgColor = layoutObjectBackgroundColor(); |
| 1250 hasPaintedContent = false; | 1218 hasPaintedContent = false; |
| (...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1632 if (!m_scrollingLayer) { | 1600 if (!m_scrollingLayer) { |
| 1633 // Outer layer which corresponds with the scroll view. | 1601 // Outer layer which corresponds with the scroll view. |
| 1634 m_scrollingLayer = createGraphicsLayer(CompositingReasonLayerForScro llingContainer); | 1602 m_scrollingLayer = createGraphicsLayer(CompositingReasonLayerForScro llingContainer); |
| 1635 m_scrollingLayer->setDrawsContent(false); | 1603 m_scrollingLayer->setDrawsContent(false); |
| 1636 m_scrollingLayer->setMasksToBounds(true); | 1604 m_scrollingLayer->setMasksToBounds(true); |
| 1637 | 1605 |
| 1638 // Inner layer which renders the content that scrolls. | 1606 // Inner layer which renders the content that scrolls. |
| 1639 m_scrollingContentsLayer = createGraphicsLayer(CompositingReasonLaye rForScrollingContents); | 1607 m_scrollingContentsLayer = createGraphicsLayer(CompositingReasonLaye rForScrollingContents); |
| 1640 m_scrollingLayer->addChild(m_scrollingContentsLayer.get()); | 1608 m_scrollingLayer->addChild(m_scrollingContentsLayer.get()); |
| 1641 | 1609 |
| 1642 if (!RuntimeEnabledFeatures::selectionPaintingWithoutSelectionGapsEn abled()) { | |
| 1643 m_scrollingBlockSelectionLayer = createGraphicsLayer(Compositing ReasonLayerForScrollingBlockSelection); | |
| 1644 m_scrollingBlockSelectionLayer->setDrawsContent(true); | |
| 1645 m_scrollingContentsLayer->addChild(m_scrollingBlockSelectionLaye r.get()); | |
| 1646 } | |
| 1647 | |
| 1648 layerChanged = true; | 1610 layerChanged = true; |
| 1649 if (scrollingCoordinator) { | 1611 if (scrollingCoordinator) { |
| 1650 scrollingCoordinator->scrollableAreaScrollLayerDidChange(m_ownin gLayer.scrollableArea()); | 1612 scrollingCoordinator->scrollableAreaScrollLayerDidChange(m_ownin gLayer.scrollableArea()); |
| 1651 scrollingCoordinator->scrollableAreasDidChange(); | 1613 scrollingCoordinator->scrollableAreasDidChange(); |
| 1652 } | 1614 } |
| 1653 } | 1615 } |
| 1654 } else if (m_scrollingLayer) { | 1616 } else if (m_scrollingLayer) { |
| 1655 m_scrollingLayer = nullptr; | 1617 m_scrollingLayer = nullptr; |
| 1656 m_scrollingContentsLayer = nullptr; | 1618 m_scrollingContentsLayer = nullptr; |
| 1657 m_scrollingBlockSelectionLayer = nullptr; | 1619 m_scrollingBlockSelectionLayer = nullptr; |
| (...skipping 927 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2585 } else if (graphicsLayer == m_scrollingBlockSelectionLayer.get()) { | 2547 } else if (graphicsLayer == m_scrollingBlockSelectionLayer.get()) { |
| 2586 name = "Scrolling Block Selection Layer"; | 2548 name = "Scrolling Block Selection Layer"; |
| 2587 } else { | 2549 } else { |
| 2588 ASSERT_NOT_REACHED(); | 2550 ASSERT_NOT_REACHED(); |
| 2589 } | 2551 } |
| 2590 | 2552 |
| 2591 return name; | 2553 return name; |
| 2592 } | 2554 } |
| 2593 | 2555 |
| 2594 } // namespace blink | 2556 } // namespace blink |
| OLD | NEW |