OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 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 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 static void clearPositionConstraintExceptForLayer(GraphicsLayer* layer, | 277 static void clearPositionConstraintExceptForLayer(GraphicsLayer* layer, |
278 GraphicsLayer* except) { | 278 GraphicsLayer* except) { |
279 if (layer && layer != except && toWebLayer(layer)) | 279 if (layer && layer != except && toWebLayer(layer)) |
280 toWebLayer(layer)->setPositionConstraint(WebLayerPositionConstraint()); | 280 toWebLayer(layer)->setPositionConstraint(WebLayerPositionConstraint()); |
281 } | 281 } |
282 | 282 |
283 static WebLayerPositionConstraint computePositionConstraint( | 283 static WebLayerPositionConstraint computePositionConstraint( |
284 const PaintLayer* layer) { | 284 const PaintLayer* layer) { |
285 DCHECK(layer->hasCompositedLayerMapping()); | 285 DCHECK(layer->hasCompositedLayerMapping()); |
286 do { | 286 do { |
287 if (layer->layoutObject()->style()->position() == EPosition::kFixed) { | 287 if (layer->layoutObject().style()->position() == EPosition::kFixed) { |
288 const LayoutObject* fixedPositionObject = layer->layoutObject(); | 288 const LayoutObject& fixedPositionObject = layer->layoutObject(); |
289 bool fixedToRight = !fixedPositionObject->style()->right().isAuto(); | 289 bool fixedToRight = !fixedPositionObject.style()->right().isAuto(); |
290 bool fixedToBottom = !fixedPositionObject->style()->bottom().isAuto(); | 290 bool fixedToBottom = !fixedPositionObject.style()->bottom().isAuto(); |
291 return WebLayerPositionConstraint::fixedPosition(fixedToRight, | 291 return WebLayerPositionConstraint::fixedPosition(fixedToRight, |
292 fixedToBottom); | 292 fixedToBottom); |
293 } | 293 } |
294 | 294 |
295 layer = layer->parent(); | 295 layer = layer->parent(); |
296 | 296 |
297 // Composited layers that inherit a fixed position state will be positioned | 297 // Composited layers that inherit a fixed position state will be positioned |
298 // with respect to the nearest compositedLayerMapping's GraphicsLayer. | 298 // with respect to the nearest compositedLayerMapping's GraphicsLayer. |
299 // So, once we find a layer that has its own compositedLayerMapping, we can | 299 // So, once we find a layer that has its own compositedLayerMapping, we can |
300 // stop searching for a fixed position LayoutObject. | 300 // stop searching for a fixed position LayoutObject. |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
566 } | 566 } |
567 | 567 |
568 static void projectRectsToGraphicsLayerSpaceRecursive( | 568 static void projectRectsToGraphicsLayerSpaceRecursive( |
569 const PaintLayer* curLayer, | 569 const PaintLayer* curLayer, |
570 const LayerHitTestRects& layerRects, | 570 const LayerHitTestRects& layerRects, |
571 GraphicsLayerHitTestRects& graphicsRects, | 571 GraphicsLayerHitTestRects& graphicsRects, |
572 LayoutGeometryMap& geometryMap, | 572 LayoutGeometryMap& geometryMap, |
573 HashSet<const PaintLayer*>& layersWithRects, | 573 HashSet<const PaintLayer*>& layersWithRects, |
574 LayerFrameMap& layerChildFrameMap) { | 574 LayerFrameMap& layerChildFrameMap) { |
575 // If this layer is throttled, ignore it. | 575 // If this layer is throttled, ignore it. |
576 if (curLayer->layoutObject()->frameView() && | 576 if (curLayer->layoutObject().frameView() && |
577 curLayer->layoutObject()->frameView()->shouldThrottleRendering()) | 577 curLayer->layoutObject().frameView()->shouldThrottleRendering()) |
578 return; | 578 return; |
579 // Project any rects for the current layer | 579 // Project any rects for the current layer |
580 LayerHitTestRects::const_iterator layerIter = layerRects.find(curLayer); | 580 LayerHitTestRects::const_iterator layerIter = layerRects.find(curLayer); |
581 if (layerIter != layerRects.end()) { | 581 if (layerIter != layerRects.end()) { |
582 // Find the enclosing composited layer when it's in another document (for | 582 // Find the enclosing composited layer when it's in another document (for |
583 // non-composited iframes). | 583 // non-composited iframes). |
584 const PaintLayer* compositedLayer = | 584 const PaintLayer* compositedLayer = |
585 layerIter->key | 585 layerIter->key |
586 ->enclosingLayerForPaintInvalidationCrossingFrameBoundaries(); | 586 ->enclosingLayerForPaintInvalidationCrossingFrameBoundaries(); |
587 DCHECK(compositedLayer); | 587 DCHECK(compositedLayer); |
588 | 588 |
589 // Find the appropriate GraphicsLayer for the composited Layer. | 589 // Find the appropriate GraphicsLayer for the composited Layer. |
590 GraphicsLayer* graphicsLayer = | 590 GraphicsLayer* graphicsLayer = |
591 compositedLayer->graphicsLayerBacking(curLayer->layoutObject()); | 591 compositedLayer->graphicsLayerBacking(&curLayer->layoutObject()); |
592 | 592 |
593 GraphicsLayerHitTestRects::iterator glIter = | 593 GraphicsLayerHitTestRects::iterator glIter = |
594 graphicsRects.find(graphicsLayer); | 594 graphicsRects.find(graphicsLayer); |
595 Vector<LayoutRect>* glRects; | 595 Vector<LayoutRect>* glRects; |
596 if (glIter == graphicsRects.end()) | 596 if (glIter == graphicsRects.end()) |
597 glRects = &graphicsRects.insert(graphicsLayer, Vector<LayoutRect>()) | 597 glRects = &graphicsRects.insert(graphicsLayer, Vector<LayoutRect>()) |
598 .storedValue->value; | 598 .storedValue->value; |
599 else | 599 else |
600 glRects = &glIter->value; | 600 glRects = &glIter->value; |
601 | 601 |
602 // Transform each rect to the co-ordinate space of the graphicsLayer. | 602 // Transform each rect to the co-ordinate space of the graphicsLayer. |
603 for (size_t i = 0; i < layerIter->value.size(); ++i) { | 603 for (size_t i = 0; i < layerIter->value.size(); ++i) { |
604 LayoutRect rect = layerIter->value[i]; | 604 LayoutRect rect = layerIter->value[i]; |
605 if (compositedLayer != curLayer) { | 605 if (compositedLayer != curLayer) { |
606 FloatQuad compositorQuad = geometryMap.mapToAncestor( | 606 FloatQuad compositorQuad = geometryMap.mapToAncestor( |
607 FloatRect(rect), compositedLayer->layoutObject()); | 607 FloatRect(rect), &compositedLayer->layoutObject()); |
608 rect = LayoutRect(compositorQuad.boundingBox()); | 608 rect = LayoutRect(compositorQuad.boundingBox()); |
609 // If the enclosing composited layer itself is scrolled, we have to undo | 609 // If the enclosing composited layer itself is scrolled, we have to undo |
610 // the subtraction of its scroll offset since we want the offset | 610 // the subtraction of its scroll offset since we want the offset |
611 // relative to the scrolling content, not the element itself. | 611 // relative to the scrolling content, not the element itself. |
612 if (compositedLayer->layoutObject()->hasOverflowClip()) | 612 if (compositedLayer->layoutObject().hasOverflowClip()) |
613 rect.move(compositedLayer->layoutBox()->scrolledContentOffset()); | 613 rect.move(compositedLayer->layoutBox()->scrolledContentOffset()); |
614 } | 614 } |
615 PaintLayer::mapRectInPaintInvalidationContainerToBacking( | 615 PaintLayer::mapRectInPaintInvalidationContainerToBacking( |
616 *compositedLayer->layoutObject(), rect); | 616 compositedLayer->layoutObject(), rect); |
617 rect.move(-graphicsLayer->offsetFromLayoutObject()); | 617 rect.move(-graphicsLayer->offsetFromLayoutObject()); |
618 | 618 |
619 glRects->push_back(rect); | 619 glRects->push_back(rect); |
620 } | 620 } |
621 } | 621 } |
622 | 622 |
623 // Walk child layers of interest | 623 // Walk child layers of interest |
624 for (const PaintLayer* childLayer = curLayer->firstChild(); childLayer; | 624 for (const PaintLayer* childLayer = curLayer->firstChild(); childLayer; |
625 childLayer = childLayer->nextSibling()) { | 625 childLayer = childLayer->nextSibling()) { |
626 if (layersWithRects.contains(childLayer)) { | 626 if (layersWithRects.contains(childLayer)) { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
670 for (const auto& layerRect : layerRects) { | 670 for (const auto& layerRect : layerRects) { |
671 const PaintLayer* layer = layerRect.key; | 671 const PaintLayer* layer = layerRect.key; |
672 do { | 672 do { |
673 if (!layersWithRects.insert(layer).isNewEntry) | 673 if (!layersWithRects.insert(layer).isNewEntry) |
674 break; | 674 break; |
675 | 675 |
676 if (layer->parent()) { | 676 if (layer->parent()) { |
677 layer = layer->parent(); | 677 layer = layer->parent(); |
678 } else { | 678 } else { |
679 LayoutItem parentDocLayoutItem = | 679 LayoutItem parentDocLayoutItem = |
680 layer->layoutObject()->frame()->ownerLayoutItem(); | 680 layer->layoutObject().frame()->ownerLayoutItem(); |
681 if (!parentDocLayoutItem.isNull()) { | 681 if (!parentDocLayoutItem.isNull()) { |
682 layer = parentDocLayoutItem.enclosingLayer(); | 682 layer = parentDocLayoutItem.enclosingLayer(); |
683 touchHandlerInChildFrame = true; | 683 touchHandlerInChildFrame = true; |
684 } | 684 } |
685 } | 685 } |
686 } while (layer); | 686 } while (layer); |
687 } | 687 } |
688 | 688 |
689 // Now walk the layer projecting rects while maintaining a LayoutGeometryMap | 689 // Now walk the layer projecting rects while maintaining a LayoutGeometryMap |
690 MapCoordinatesFlags flags = UseTransforms; | 690 MapCoordinatesFlags flags = UseTransforms; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
735 void ScrollingCoordinator::setTouchEventTargetRects( | 735 void ScrollingCoordinator::setTouchEventTargetRects( |
736 LayerHitTestRects& layerRects) { | 736 LayerHitTestRects& layerRects) { |
737 TRACE_EVENT0("input", "ScrollingCoordinator::setTouchEventTargetRects"); | 737 TRACE_EVENT0("input", "ScrollingCoordinator::setTouchEventTargetRects"); |
738 | 738 |
739 // Ensure we have an entry for each composited layer that previously had rects | 739 // Ensure we have an entry for each composited layer that previously had rects |
740 // (so that old ones will get cleared out). Note that ideally we'd track this | 740 // (so that old ones will get cleared out). Note that ideally we'd track this |
741 // on GraphicsLayer instead of Layer, but we have no good hook into the | 741 // on GraphicsLayer instead of Layer, but we have no good hook into the |
742 // lifetime of a GraphicsLayer. | 742 // lifetime of a GraphicsLayer. |
743 GraphicsLayerHitTestRects graphicsLayerRects; | 743 GraphicsLayerHitTestRects graphicsLayerRects; |
744 for (const PaintLayer* layer : m_layersWithTouchRects) { | 744 for (const PaintLayer* layer : m_layersWithTouchRects) { |
745 if (layer->layoutObject()->frameView() && | 745 if (layer->layoutObject().frameView() && |
746 layer->layoutObject()->frameView()->shouldThrottleRendering()) { | 746 layer->layoutObject().frameView()->shouldThrottleRendering()) { |
747 continue; | 747 continue; |
748 } | 748 } |
749 GraphicsLayer* mainGraphicsLayer = | 749 GraphicsLayer* mainGraphicsLayer = |
750 layer->graphicsLayerBacking(layer->layoutObject()); | 750 layer->graphicsLayerBacking(&layer->layoutObject()); |
751 if (mainGraphicsLayer) | 751 if (mainGraphicsLayer) |
752 graphicsLayerRects.insert(mainGraphicsLayer, Vector<LayoutRect>()); | 752 graphicsLayerRects.insert(mainGraphicsLayer, Vector<LayoutRect>()); |
753 GraphicsLayer* scrollingContentsLayer = layer->graphicsLayerBacking(); | 753 GraphicsLayer* scrollingContentsLayer = layer->graphicsLayerBacking(); |
754 if (scrollingContentsLayer && scrollingContentsLayer != mainGraphicsLayer) | 754 if (scrollingContentsLayer && scrollingContentsLayer != mainGraphicsLayer) |
755 graphicsLayerRects.insert(scrollingContentsLayer, Vector<LayoutRect>()); | 755 graphicsLayerRects.insert(scrollingContentsLayer, Vector<LayoutRect>()); |
756 } | 756 } |
757 | 757 |
758 m_layersWithTouchRects.clear(); | 758 m_layersWithTouchRects.clear(); |
759 for (const auto& layerRect : layerRects) { | 759 for (const auto& layerRect : layerRects) { |
760 if (!layerRect.value.isEmpty()) { | 760 if (!layerRect.value.isEmpty()) { |
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1188 frameView ? toWebLayer(frameView->layoutViewportScrollableArea() | 1188 frameView ? toWebLayer(frameView->layoutViewportScrollableArea() |
1189 ->layerForScrolling()) | 1189 ->layerForScrolling()) |
1190 : nullptr) { | 1190 : nullptr) { |
1191 return WebSize(frameView->layoutViewportScrollableArea()->contentsSize()) != | 1191 return WebSize(frameView->layoutViewportScrollableArea()->contentsSize()) != |
1192 scrollLayer->bounds(); | 1192 scrollLayer->bounds(); |
1193 } | 1193 } |
1194 return false; | 1194 return false; |
1195 } | 1195 } |
1196 | 1196 |
1197 } // namespace blink | 1197 } // namespace blink |
OLD | NEW |