Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 4368671df993cb3f5dfa1cb24c786d110830e735
https://github.com/WebKit/WebKit/commit/4368671df993cb3f5dfa1cb24c786d110830e735
Author: Alan Baradlay <[email protected]>
Date: 2023-03-04 (Sat, 04 Mar 2023)
Changed paths:
M
Source/WebCore/layout/formattingContexts/inline/invalidation/InlineDamage.h
M
Source/WebCore/layout/formattingContexts/inline/invalidation/InlineInvalidation.cpp
M
Source/WebCore/layout/formattingContexts/inline/invalidation/InlineInvalidation.h
M Source/WebCore/layout/integration/LayoutIntegrationBoxTree.cpp
M Source/WebCore/layout/integration/LayoutIntegrationBoxTree.h
M Source/WebCore/layout/integration/LayoutIntegrationCoverage.cpp
M Source/WebCore/layout/integration/LayoutIntegrationCoverage.h
M Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.cpp
M Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.h
M Source/WebCore/rendering/RenderObject.cpp
Log Message:
-----------
[IFC][Partial layout] Add support for removing text renderers
https://bugs.webkit.org/show_bug.cgi?id=253221
Reviewed by Antti Koivisto.
Removing a text node is similar to regular text content mutation in the context
of finding the damage boundary.
However we need to take care of the associated layout box by
1. detaching it from the layout tree
2. but still keeping it around by adding it to the m_lineDamage object until
after the subsequent layout is done.
It ensures that geometry type of requests (e.g. repaint) still work between
mutation and the subsequent layout (note that while geometry information is
stored in display boxes, these boxes hold weak references to layout boxes)
We may revisit this approach and force a policy to run all geometry type of
tasks before willBeRemoved() and/or detach the display content from the
associated layout boxes (i.e. remove all weak references).
This patch also introduces additional check(s) for node removal (specifically
when the about-to-be-removed node is the last one in the inline formatting
context).
* Source/WebCore/layout/formattingContexts/inline/invalidation/InlineDamage.h:
(WebCore::Layout::InlineDamage::addDetachedBox):
*
Source/WebCore/layout/formattingContexts/inline/invalidation/InlineInvalidation.cpp:
(WebCore::Layout::damagedLineIndex):
(WebCore::Layout::leadingInlineItemPositionForDamage):
(WebCore::Layout::InlineInvalidation::textWillBeRemoved):
*
Source/WebCore/layout/formattingContexts/inline/invalidation/InlineInvalidation.h:
* Source/WebCore/layout/integration/LayoutIntegrationBoxTree.cpp:
(WebCore::LayoutIntegration::BoxTree::remove):
* Source/WebCore/layout/integration/LayoutIntegrationBoxTree.h:
* Source/WebCore/layout/integration/LayoutIntegrationCoverage.cpp:
(WebCore::LayoutIntegration::shouldInvalidateLineLayoutPathAfterChangeFor):
(WebCore::LayoutIntegration::shouldInvalidateLineLayoutPathAfterContentChangeFor):
Deleted.
* Source/WebCore/layout/integration/LayoutIntegrationCoverage.h:
* Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.cpp:
(WebCore::LayoutIntegration::LineLayout::shouldInvalidateLineLayoutPathAfterContentChange):
(WebCore::LayoutIntegration::LineLayout::shouldInvalidateLineLayoutPathAfterTreeMutation):
(WebCore::LayoutIntegration::LineLayout::removedFromTree):
* Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.h:
* Source/WebCore/rendering/RenderObject.cpp:
(WebCore::invalidateLineLayoutAfterTreeMutationIfNeeded):
(WebCore::RenderObject::insertedIntoTree):
(WebCore::RenderObject::willBeRemovedFromTree):
Canonical link: https://commits.webkit.org/261234@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes