[LFC][IFC] Construct dedicated runs when the inline element requires it (part 2)
authorzalan@apple.com <zalan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 14 Nov 2018 15:31:17 +0000 (15:31 +0000)
committerzalan@apple.com <zalan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 14 Nov 2018 15:31:17 +0000 (15:31 +0000)
commita942604e4e34139878a3e3180b8029dfab9f99c3
tree1028703ff6789056ba868297ceab8a566ea144f7
parent696feb93b4b4f0c94c0fd7315c3a822e9d12e0e6
[LFC][IFC] Construct dedicated runs when the inline element requires it (part 2)
https://bugs.webkit.org/show_bug.cgi?id=191623

Reviewed by Antti Koivisto.

This patch expands the breaking behaviour to support separate start/end breaks.

<span>parent </span><span style="padding: 10px;">start<span> middle </span>end</span><span> parent</span>

input to line breaking -> <parent start middle end parent>
output of line breaking (considering infinite constraint) -> <parent start middle end parent>
due to padding, final runs -> <parent><start middle end><parent>

"parent" -> n/a
"start" -> BreakAtStart
" middle " -> n/a
"end" -> BreakAtEnd
"parent" -> n/a

Another example:
<span>parent </span><span style="padding-right: 10px;">start<span> middle </span>end</span><span> parent</span>

line breaking -> <parent start middle end parent>
due to padding-right, final runs -> <parent start middle end><parent>

"parent" -> n/a
"start" -> n/a
" middle " -> n/a
"end" -> BreakAtEnd
"parent" -> n/a

* layout/inlineformatting/InlineFormattingContext.cpp:
(WebCore::Layout::InlineFormattingContext::splitInlineRunIfNeeded const):
(WebCore::Layout::InlineFormattingContext::collectInlineContent const): Move to a recursive algorithm (which is fine, inline contents don't tend to be too deep)
(WebCore::Layout::InlineFormattingContext::contentRequiresSeparateRun const): Deleted.
* layout/inlineformatting/InlineFormattingContext.h:
* layout/inlineformatting/InlineFormattingState.cpp:
(WebCore::Layout::InlineFormattingState::detachingRules const):
* layout/inlineformatting/InlineFormattingState.h:
(WebCore::Layout::InlineFormattingState::lastInlineItem const):
(WebCore::Layout::InlineFormattingState::addDetachingRule):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@238173 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WebCore/ChangeLog
Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp
Source/WebCore/layout/inlineformatting/InlineFormattingContext.h
Source/WebCore/layout/inlineformatting/InlineFormattingState.cpp
Source/WebCore/layout/inlineformatting/InlineFormattingState.h