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

Reply via email to