[LFC][IFC] Construct dedicated runs when the inline element requires it.
authorzalan@apple.com <zalan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 12 Nov 2018 16:18:08 +0000 (16:18 +0000)
committerzalan@apple.com <zalan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 12 Nov 2018 16:18:08 +0000 (16:18 +0000)
commit478e57a0a04de710c50e9c8582bd65ae755cf0f7
tree93a5aba3b7862a55dbbc5858414fccd78b8e0cba
parentc73b0d107abaefde4afb9e486e5432bcc5f45bee
[LFC][IFC] Construct dedicated runs when the inline element requires it.
https://bugs.webkit.org/show_bug.cgi?id=191509

Reviewed by Antti Koivisto.

In certain cases, a run can overlap multiple inline elements like this:

<span>normal text content</span><span style="position: relative; left: 10px;">but this one needs a dedicated run</span><span>end of text</span>

The content above generates one long run <normal text contentbut this one needs dedicated runend of text> <- input to line breaking.
However, since the middle run is positioned, it needs to be moved independently from the rest of the content, hence it needs a dedicated inline run.

* layout/inlineformatting/InlineFormattingContext.cpp:
(WebCore::Layout::InlineFormattingContext::layout const):
(WebCore::Layout::contentRequiresSeparateRun):
(WebCore::Layout::InlineFormattingContext::splitInlineRunIfNeeded const):
(WebCore::Layout::InlineFormattingContext::postProcessInlineRuns const):
(WebCore::Layout::InlineFormattingContext::closeLine const):
(WebCore::Layout::InlineFormattingContext::appendContentToLine const):
(WebCore::Layout::InlineFormattingContext::layoutInlineContent const):
(WebCore::Layout::InlineFormattingContext::instrinsicWidthConstraints const):
* layout/inlineformatting/InlineFormattingContext.h:
(WebCore::Layout::InlineFormattingContext::inlineFormattingState const):
* layout/inlineformatting/InlineLineBreaker.cpp:
(WebCore::Layout::InlineLineBreaker::nextRun): mid-word breaking is not implemented yet.
* layout/inlineformatting/InlineRun.h:
(WebCore::Layout::InlineRun::overlapsMultipleInlineItems const):
* layout/inlineformatting/InlineRunProvider.cpp:
(WebCore::Layout::InlineRunProvider::processInlineTextItem):
* layout/inlineformatting/InlineRunProvider.h:
(WebCore::Layout::InlineRunProvider::Run::TextContext::expand):
(WebCore::Layout::InlineRunProvider::Run::textContext):
(WebCore::Layout::InlineRunProvider::Run::TextContext::setStart): Deleted.
(WebCore::Layout::InlineRunProvider::Run::TextContext::setLength): Deleted.

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