[LFC][IFC] Introduce InlineItem::nonBreakableStart/End
authorzalan@apple.com <zalan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 20 Nov 2018 15:52:28 +0000 (15:52 +0000)
committerzalan@apple.com <zalan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 20 Nov 2018 15:52:28 +0000 (15:52 +0000)
commit873f980a5766988057aa51a750116032082357f6
tree801042620972cd116c71480e2b6edd4eed48bc8b
parent3fb438a209df4b3920d9c32fa64a017f3ef4e842
[LFC][IFC] Introduce InlineItem::nonBreakableStart/End
https://bugs.webkit.org/show_bug.cgi?id=191839

Reviewed by Antti Koivisto.

Non-breakable start/end marks margin/padding/border space (even when it does not directly come from the associated layout box)

<span style="padding: 5px"><span>nested content with padding parent</span</span>
<nested content with padding parent> <- inline run has 5px non-breakable start/end.

<span style="border: 5px solid green"><span style="padding-right: 10px; margin-right: 1px">1</span>2</span><span>    3</span>
<1> <- inline run has 5px non-breakable start and 11px non-breakable end.
<2> <- inline run has 0px non-breakable start and 5px non-breakable end.
<3> <- no non-breakable values.

This is what the runs look like (input to line breaking)
<     1           2     >
< > (whitespace)
<3>
The line breaking treats the paddding/border etc space as part of the run and as non-breaking opportunity.
With the given runs the first position where we can break the line is at the whitespace.

* layout/inlineformatting/InlineFormattingContext.cpp:
(WebCore::Layout::InlineFormattingContext::collectInlineContentForSubtree const):
* layout/inlineformatting/InlineItem.h:
(WebCore::Layout::InlineItem::nonBreakableStart const):
(WebCore::Layout::InlineItem::nonBreakableEnd const):
(WebCore::Layout::InlineItem::addNonBreakableStart):
(WebCore::Layout::InlineItem::addNonBreakableEnd):

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