Title: [246066] trunk/Source/WebCore
- Revision
- 246066
- Author
- [email protected]
- Date
- 2019-06-04 08:49:56 -0700 (Tue, 04 Jun 2019)
Log Message
[LFC][IFC] Add hard line break handling to LineBreaker
https://bugs.webkit.org/show_bug.cgi?id=198503
<rdar://problem/51373482>
Reviewed by Antti Koivisto.
LineBreaker should simply return BreakingContext::Keep with the breaking opportunity of yes.
* layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
(WebCore::Layout::InlineFormattingContext::LineLayout::placeInlineItems const):
* layout/inlineformatting/InlineLineBreaker.cpp:
(WebCore::Layout::LineBreaker::breakingContext):
(WebCore::Layout::LineBreaker::wordBreakingBehavior const):
(WebCore::Layout::LineBreaker::isAtBreakingOpportunity):
* layout/inlineformatting/InlineLineBreaker.h:
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (246065 => 246066)
--- trunk/Source/WebCore/ChangeLog 2019-06-04 15:48:04 UTC (rev 246065)
+++ trunk/Source/WebCore/ChangeLog 2019-06-04 15:49:56 UTC (rev 246066)
@@ -1,5 +1,23 @@
2019-06-04 Zalan Bujtas <[email protected]>
+ [LFC][IFC] Add hard line break handling to LineBreaker
+ https://bugs.webkit.org/show_bug.cgi?id=198503
+ <rdar://problem/51373482>
+
+ Reviewed by Antti Koivisto.
+
+ LineBreaker should simply return BreakingContext::Keep with the breaking opportunity of yes.
+
+ * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
+ (WebCore::Layout::InlineFormattingContext::LineLayout::placeInlineItems const):
+ * layout/inlineformatting/InlineLineBreaker.cpp:
+ (WebCore::Layout::LineBreaker::breakingContext):
+ (WebCore::Layout::LineBreaker::wordBreakingBehavior const):
+ (WebCore::Layout::LineBreaker::isAtBreakingOpportunity):
+ * layout/inlineformatting/InlineLineBreaker.h:
+
+2019-06-04 Zalan Bujtas <[email protected]>
+
[LFC][IFC] Remove InlineItem::width
https://bugs.webkit.org/show_bug.cgi?id=198502
<rdar://problem/51371744>
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextLineLayout.cpp (246065 => 246066)
--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextLineLayout.cpp 2019-06-04 15:48:04 UTC (rev 246065)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextLineLayout.cpp 2019-06-04 15:49:56 UTC (rev 246066)
@@ -214,11 +214,6 @@
auto& inlineItem = lineInput.inlineItems[inlineItemIndex];
auto inlineItemWidth = WebCore::Layout::inlineItemWidth(layoutState(), *inlineItem, currentLogicalRight);
- if (inlineItem->isHardLineBreak()) {
- uncommittedContent.add(*inlineItem, inlineItemWidth);
- commitPendingContent();
- return closeLine();
- }
// FIXME: Ensure LineContext::trimmableWidth includes uncommitted content if needed.
auto breakingContext = lineBreaker.breakingContext(*inlineItem, inlineItemWidth, { availableWidth, currentLogicalRight, line->trailingTrimmableWidth(), !line->hasContent() });
if (breakingContext.isAtBreakingOpportunity)
@@ -229,7 +224,7 @@
return closeLine();
// Partial content stays on the current line.
- if (breakingContext.breakingBehavior == LineBreaker::BreakingBehavior::Break) {
+ if (breakingContext.breakingBehavior == LineBreaker::BreakingBehavior::Split) {
ASSERT(inlineItem->isText());
ASSERT_NOT_IMPLEMENTED_YET();
@@ -236,11 +231,17 @@
return closeLine();
}
+ ASSERT(breakingContext.breakingBehavior == LineBreaker::BreakingBehavior::Keep);
if (inlineItem->isFloat()) {
handleFloat(*line, floatingContext, *inlineItem);
++committedInlineItemCount;
continue;
}
+ if (inlineItem->isHardLineBreak()) {
+ uncommittedContent.add(*inlineItem, inlineItemWidth);
+ commitPendingContent();
+ return closeLine();
+ }
uncommittedContent.add(*inlineItem, inlineItemWidth);
if (breakingContext.isAtBreakingOpportunity)
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineLineBreaker.cpp (246065 => 246066)
--- trunk/Source/WebCore/layout/inlineformatting/InlineLineBreaker.cpp 2019-06-04 15:48:04 UTC (rev 246065)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineLineBreaker.cpp 2019-06-04 15:49:56 UTC (rev 246066)
@@ -40,6 +40,9 @@
if (lineContext.isEmpty || logicalWidth <= lineContext.availableWidth)
return { BreakingBehavior::Keep, isAtBreakingOpportunity(inlineItem) };
+ if (inlineItem.isHardLineBreak())
+ return { BreakingBehavior::Keep, isAtBreakingOpportunity(inlineItem) };
+
if (is<InlineTextItem>(inlineItem))
return { wordBreakingBehavior(downcast<InlineTextItem>(inlineItem), lineContext.isEmpty), isAtBreakingOpportunity(inlineItem) };
@@ -62,20 +65,20 @@
auto& style = inlineItem.style();
if (inlineItem.isWhitespace())
- return style.collapseWhiteSpace() ? BreakingBehavior::Wrap : BreakingBehavior::Break;
+ return style.collapseWhiteSpace() ? BreakingBehavior::Wrap : BreakingBehavior::Split;
auto shouldHypenate = !m_hyphenationIsDisabled && style.hyphens() == Hyphens::Auto && canHyphenate(style.locale());
if (shouldHypenate)
- return BreakingBehavior::Break;
+ return BreakingBehavior::Split;
if (style.autoWrap()) {
// Break any word
if (style.wordBreak() == WordBreak::BreakAll)
- return BreakingBehavior::Break;
+ return BreakingBehavior::Split;
// Break first run on line.
if (lineIsEmpty && style.breakWords() && style.preserveNewline())
- return BreakingBehavior::Break;
+ return BreakingBehavior::Split;
}
// Non-breakable non-whitespace run.
@@ -84,6 +87,9 @@
bool LineBreaker::isAtBreakingOpportunity(const InlineItem& inlineItem)
{
+ if (inlineItem.isHardLineBreak())
+ return true;
+
if (is<InlineTextItem>(inlineItem))
return downcast<InlineTextItem>(inlineItem).isWhitespace();
return !inlineItem.isFloat() && !inlineItem.isContainerStart() && !inlineItem.isContainerEnd();
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineLineBreaker.h (246065 => 246066)
--- trunk/Source/WebCore/layout/inlineformatting/InlineLineBreaker.h 2019-06-04 15:48:04 UTC (rev 246065)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineLineBreaker.h 2019-06-04 15:49:56 UTC (rev 246066)
@@ -34,7 +34,7 @@
class LineBreaker {
public:
- enum class BreakingBehavior { Keep, Break, Wrap };
+ enum class BreakingBehavior { Keep, Split, Wrap };
struct BreakingContext {
BreakingBehavior breakingBehavior;
bool isAtBreakingOpportunity { false };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes