Changeset 292596 in webkit
- Timestamp:
- Apr 8, 2022, 2:59:15 AM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
-
ChangeLog (modified) (1 diff)
-
rendering/RenderElement.cpp (modified) (4 diffs)
-
rendering/RenderElement.h (modified) (1 diff)
-
rendering/RenderLayer.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r292592 r292596 1 2022-04-08 Rob Buis <rbuis@igalia.com> 2 3 Take top layers into account in addLayers/removeLayers 4 https://bugs.webkit.org/show_bug.cgi?id=238946 5 6 Reviewed by Simon Fraser. 7 8 Take top layers into account in addLayers/removeLayers, they 9 should use the RenderView layer as parent (emulating layerParent). 10 11 * rendering/RenderElement.cpp: 12 (WebCore::addLayers): 13 (WebCore::RenderElement::addLayers): 14 (WebCore::RenderElement::removeLayers): 15 (WebCore::RenderElement::willBeRemovedFromTree): 16 * rendering/RenderElement.h: 17 * rendering/RenderLayer.cpp: 18 (WebCore::RenderLayer::calculateClipRects const): 19 1 20 2022-04-07 Antti Koivisto <antti@apple.com> 2 21 -
trunk/Source/WebCore/rendering/RenderElement.cpp
r292525 r292596 640 640 } 641 641 642 static void addLayers(const RenderElement& addedRenderer, RenderElement& currentRenderer, RenderLayer & parentLayer, std::optional<RenderLayer*>& beforeChild)642 static void addLayers(const RenderElement& addedRenderer, RenderElement& currentRenderer, RenderLayer* parentLayer) 643 643 { 644 644 if (currentRenderer.hasLayer()) { 645 if ( !beforeChild.has_value())646 beforeChild = layerNextSiblingRespectingTopLayer(addedRenderer, parentLayer);647 648 parentLayer .addChild(*downcast<RenderLayerModelObject>(currentRenderer).layer(), beforeChild.value());645 if (isInTopLayerOrBackdrop(currentRenderer.style(), currentRenderer.element())) 646 parentLayer = addedRenderer.view().layer(); 647 RenderLayer* beforeChild = layerNextSiblingRespectingTopLayer(addedRenderer, *parentLayer); 648 parentLayer->addChild(*downcast<RenderLayerModelObject>(currentRenderer).layer(), beforeChild); 649 649 return; 650 650 } 651 651 652 652 for (auto& child : childrenOfType<RenderElement>(currentRenderer)) 653 addLayers(addedRenderer, child, parentLayer , beforeChild);653 addLayers(addedRenderer, child, parentLayer); 654 654 } 655 655 … … 659 659 return; 660 660 661 std::optional<RenderLayer*> beforeChild;662 WebCore::addLayers(*this, *this, *parentLayer, beforeChild); 663 } 664 665 void RenderElement::removeLayers(RenderLayer* parentLayer) 666 { 661 WebCore::addLayers(*this, *this, parentLayer); 662 } 663 664 void RenderElement::removeLayers() 665 { 666 RenderLayer* parentLayer = layerParent(); 667 667 if (!parentLayer) 668 668 return; … … 674 674 675 675 for (auto& child : childrenOfType<RenderElement>(*this)) 676 child.removeLayers( parentLayer);676 child.removeLayers(); 677 677 } 678 678 … … 966 966 } 967 967 // Keep our layer hierarchy updated. 968 if (firstChild() || hasLayer()) { 969 auto* parentLayer = layerParent(); 970 removeLayers(parentLayer); 971 } 968 if (firstChild() || hasLayer()) 969 removeLayers(); 972 970 973 971 if (isOutOfFlowPositioned() && parent()->childrenInline()) -
trunk/Source/WebCore/rendering/RenderElement.h
r292525 r292596 112 112 RenderLayer* layerNextSibling(RenderLayer& parentLayer) const; 113 113 void addLayers(RenderLayer* parentLayer); 114 void removeLayers( RenderLayer* parentLayer);114 void removeLayers(); 115 115 void moveLayers(RenderLayer* oldParent, RenderLayer& newParent); 116 116 -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r292575 r292596 5573 5573 void RenderLayer::removeReflection() 5574 5574 { 5575 if (!m_reflection->renderTreeBeingDestroyed()) 5576 m_reflection->removeLayers(this); 5575 if (!m_reflection->renderTreeBeingDestroyed()) { 5576 if (auto* layer = m_reflection->layer()) 5577 removeChild(*layer); 5578 } 5577 5579 5578 5580 m_reflection->setParent(nullptr);
Note:
See TracChangeset
for help on using the changeset viewer.