Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: b6df426f37df31a8168cb073df8ada64aa9c63e1
https://github.com/WebKit/WebKit/commit/b6df426f37df31a8168cb073df8ada64aa9c63e1
Author: Alan Baradlay <[email protected]>
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@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
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes