[LFC][IFC] Add support for word-spacing property
https://bugs.webkit.org/show_bug.cgi?id=204723
<rdar://problem/57541871>
Reviewed by Antti Koivisto.
* layout/inlineformatting/InlineLineBuilder.cpp:
(WebCore::Layout::LineBuilder::TrimmableContent::append):
* layout/inlineformatting/LineLayoutContext.cpp:
(WebCore::Layout::inlineItemWidth):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@252967 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 240e747..8def547 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,16 @@
+2019-12-01 Zalan Bujtas <zalan@apple.com>
+
+ [LFC][IFC] Add support for word-spacing property
+ https://bugs.webkit.org/show_bug.cgi?id=204723
+ <rdar://problem/57541871>
+
+ Reviewed by Antti Koivisto.
+
+ * layout/inlineformatting/InlineLineBuilder.cpp:
+ (WebCore::Layout::LineBuilder::TrimmableContent::append):
+ * layout/inlineformatting/LineLayoutContext.cpp:
+ (WebCore::Layout::inlineItemWidth):
+
2019-11-30 Antoine Quint <graouts@apple.com>
[Web Animations] Implement Animation.commitStyles()
diff --git a/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp b/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp
index cfcad5f..744c112 100644
--- a/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp
+++ b/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp
@@ -710,7 +710,8 @@
void LineBuilder::TrimmableContent::append(LayoutUnit itemRunWidth, size_t runIndex)
{
- ASSERT(itemRunWidth >= 0);
+ // word-spacing could very well be negative, but it does not mean that the line gains that much extra space when the content is trimmed.
+ itemRunWidth = std::max(0_lu, itemRunWidth);
m_width += itemRunWidth;
m_runIndexes.append(runIndex);
}
diff --git a/Source/WebCore/layout/inlineformatting/LineLayoutContext.cpp b/Source/WebCore/layout/inlineformatting/LineLayoutContext.cpp
index 8596e32..5b436dc 100644
--- a/Source/WebCore/layout/inlineformatting/LineLayoutContext.cpp
+++ b/Source/WebCore/layout/inlineformatting/LineLayoutContext.cpp
@@ -38,14 +38,17 @@
static LayoutUnit inlineItemWidth(const FormattingContext& formattingContext, const InlineItem& inlineItem, LayoutUnit contentLogicalLeft)
{
if (inlineItem.isForcedLineBreak())
- return 0;
+ return { };
if (is<InlineTextItem>(inlineItem)) {
auto& inlineTextItem = downcast<InlineTextItem>(inlineItem);
- if (auto contentWidth = inlineTextItem.width())
- return *contentWidth;
- auto end = inlineTextItem.isCollapsible() ? inlineTextItem.start() + 1 : inlineTextItem.end();
- return TextUtil::width(inlineTextItem.layoutBox(), inlineTextItem.start(), end, contentLogicalLeft);
+ auto contentWidth = inlineTextItem.width();
+ if (!contentWidth) {
+ auto end = inlineTextItem.isCollapsible() ? inlineTextItem.start() + 1 : inlineTextItem.end();
+ contentWidth = TextUtil::width(inlineTextItem.layoutBox(), inlineTextItem.start(), end, contentLogicalLeft);
+ }
+ auto wordSpacing = inlineTextItem.isWhitespace() ? LayoutUnit(inlineTextItem.style().fontCascade().wordSpacing()) : 0_lu;
+ return *contentWidth + wordSpacing;
}
auto& layoutBox = inlineItem.layoutBox();