[webkit-changes] [WebKit/WebKit] b6df42: REGRESSION(261836 at main): Incorrect caret placement...

Alan Baradlay noreply at github.com
Tue Apr 18 20:16:19 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: b6df426f37df31a8168cb073df8ada64aa9c63e1
      https://github.com/WebKit/WebKit/commit/b6df426f37df31a8168cb073df8ada64aa9c63e1
  Author: Alan Baradlay <zalan at apple.com>
  Date:   2023-04-18 (Tue, 18 Apr 2023)

  Changed paths:
    A LayoutTests/fast/inline/partial-layout-with-enter-backspace-enter-combo-expected.txt
    A LayoutTests/fast/inline/partial-layout-with-enter-backspace-enter-combo.html
    M Source/WebCore/layout/formattingContexts/inline/invalidation/InlineInvalidation.cpp

  Log Message:
  -----------
  REGRESSION(261836 at main): Incorrect caret placement after hitting enter/backspace/enter combo in long text
https://bugs.webkit.org/show_bug.cgi?id=254989
<rdar://problem/108215532>

Reviewed by Antti Koivisto.

This bugs caused by an incorrectly computed (damaged) line index which caused us exiting inline layout too early (and not producing content for the new newline).

With partial layout we
1. first compute the damaged line index which is the entry point for the subsequent inline layout.
2. run inline layout until we see no change in generated display boxes anymore (in many cases the damage only affects a range of lines and not the full set)

With the following content:

First line 1\n
Second line 2\n
Third line 3\n

When a new \n is inserted between the last \n and [3], we compute the damage position by looking at the _start_ of the previous sibling.
In this case the previous sibling is "First line 1\nSecond line 2\nThird line 3\n" which means we damage the content starting from line #0.
The subsequent inline layout starts generating display boxes starting from line #0 and bails out at the end of line #1 since the set of display boxes are getting generated
match what we had before.

This fix ensures that when we insert some content, the damaged line index is computed based on the insertion point (end of the previous sibling).

* Source/WebCore/layout/formattingContexts/inline/invalidation/InlineInvalidation.cpp:
(WebCore::Layout::damagedLineIndex):
(WebCore::Layout::inlineItemPositionForDamagedContentPosition):
(WebCore::Layout::InlineInvalidation::textInserted):
(WebCore::Layout::InlineInvalidation::inlineLevelBoxInserted):

Canonical link: https://commits.webkit.org/263113@main




More information about the webkit-changes mailing list