[LFC][IFC] Use FontCascade::spaceWidth to measure single or collapsed whitespace content
https://bugs.webkit.org/show_bug.cgi?id=204594
<rdar://problem/57478360>
Reviewed by Antti Koivisto.
* layout/inlineformatting/InlineTextItem.cpp:
(WebCore::Layout::InlineTextItem::createAndAppendTextItems):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@252869 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 319d71c..ddd4bf2 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,14 @@
+2019-11-25 Zalan Bujtas <zalan@apple.com>
+
+ [LFC][IFC] Use FontCascade::spaceWidth to measure single or collapsed whitespace content
+ https://bugs.webkit.org/show_bug.cgi?id=204594
+ <rdar://problem/57478360>
+
+ Reviewed by Antti Koivisto.
+
+ * layout/inlineformatting/InlineTextItem.cpp:
+ (WebCore::Layout::InlineTextItem::createAndAppendTextItems):
+
2019-11-25 Antti Koivisto <antti@apple.com>
User Variant for RenderBlockFlow line layout
diff --git a/Source/WebCore/layout/inlineformatting/InlineTextItem.cpp b/Source/WebCore/layout/inlineformatting/InlineTextItem.cpp
index b69f360..875538f 100644
--- a/Source/WebCore/layout/inlineformatting/InlineTextItem.cpp
+++ b/Source/WebCore/layout/inlineformatting/InlineTextItem.cpp
@@ -29,6 +29,7 @@
#if ENABLE(LAYOUT_FORMATTING_CONTEXT)
#include "BreakLines.h"
+#include "FontCascade.h"
namespace WebCore {
namespace Layout {
@@ -82,16 +83,18 @@
void InlineTextItem::createAndAppendTextItems(InlineItems& inlineContent, const Box& inlineBox)
{
- auto text = inlineBox.textContext()->content;
+ auto& textContext = *inlineBox.textContext();
+ auto text = textContext.content;
if (!text.length())
return inlineContent.append(InlineTextItem::createEmptyItem(inlineBox));
auto& style = inlineBox.style();
+ auto& font = style.fontCascade();
LazyLineBreakIterator lineBreakIterator(text);
unsigned currentPosition = 0;
auto inlineItemWidth = [&](auto startPosition, auto length) -> Optional<LayoutUnit> {
- if (!inlineBox.textContext()->canUseSimplifiedContentMeasuring)
+ if (!textContext.canUseSimplifiedContentMeasuring)
return { };
return TextUtil::width(inlineBox, startPosition, startPosition + length);
};
@@ -111,7 +114,9 @@
if (isWhitespaceCharacter(text[currentPosition])) {
auto length = moveToNextNonWhitespacePosition(text, currentPosition);
- inlineContent.append(InlineTextItem::createWhitespaceItem(inlineBox, currentPosition, length, inlineItemWidth(currentPosition, length)));
+ auto simpleSingleWhitespaceContent = textContext.canUseSimplifiedContentMeasuring && (length == 1 || style.collapseWhiteSpace());
+ auto width = simpleSingleWhitespaceContent ? makeOptional(LayoutUnit { font.spaceWidth() }) : inlineItemWidth(currentPosition, length);
+ inlineContent.append(InlineTextItem::createWhitespaceItem(inlineBox, currentPosition, length, width));
currentPosition += length;
continue;
}