Changeset 252869 in webkit


Ignore:
Timestamp:
Nov 25, 2019 4:28:18 PM (4 years ago)
Author:
Alan Bujtas
Message:

[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):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r252868 r252869  
     12019-11-25  Zalan Bujtas  <zalan@apple.com>
     2
     3        [LFC][IFC] Use FontCascade::spaceWidth to measure single or collapsed whitespace content
     4        https://bugs.webkit.org/show_bug.cgi?id=204594
     5        <rdar://problem/57478360>
     6
     7        Reviewed by Antti Koivisto.
     8
     9        * layout/inlineformatting/InlineTextItem.cpp:
     10        (WebCore::Layout::InlineTextItem::createAndAppendTextItems):
     11
    1122019-11-25  Antti Koivisto  <antti@apple.com>
    213
  • trunk/Source/WebCore/layout/inlineformatting/InlineTextItem.cpp

    r252816 r252869  
    3030
    3131#include "BreakLines.h"
     32#include "FontCascade.h"
    3233
    3334namespace WebCore {
     
    8384void InlineTextItem::createAndAppendTextItems(InlineItems& inlineContent, const Box& inlineBox)
    8485{
    85     auto text = inlineBox.textContext()->content;
     86    auto& textContext = *inlineBox.textContext();
     87    auto text = textContext.content;
    8688    if (!text.length())
    8789        return inlineContent.append(InlineTextItem::createEmptyItem(inlineBox));
    8890
    8991    auto& style = inlineBox.style();
     92    auto& font = style.fontCascade();
    9093    LazyLineBreakIterator lineBreakIterator(text);
    9194    unsigned currentPosition = 0;
    9295
    9396    auto inlineItemWidth = [&](auto startPosition, auto length) -> Optional<LayoutUnit> {
    94         if (!inlineBox.textContext()->canUseSimplifiedContentMeasuring)
     97        if (!textContext.canUseSimplifiedContentMeasuring)
    9598            return { };
    9699        return TextUtil::width(inlineBox, startPosition, startPosition + length);
     
    112115        if (isWhitespaceCharacter(text[currentPosition])) {
    113116            auto length = moveToNextNonWhitespacePosition(text, currentPosition);
    114             inlineContent.append(InlineTextItem::createWhitespaceItem(inlineBox, currentPosition, length, inlineItemWidth(currentPosition, length)));
     117            auto simpleSingleWhitespaceContent = textContext.canUseSimplifiedContentMeasuring && (length == 1 || style.collapseWhiteSpace());
     118            auto width = simpleSingleWhitespaceContent ? makeOptional(LayoutUnit { font.spaceWidth() }) : inlineItemWidth(currentPosition, length);
     119            inlineContent.append(InlineTextItem::createWhitespaceItem(inlineBox, currentPosition, length, width));
    115120            currentPosition += length;
    116121            continue;
Note: See TracChangeset for help on using the changeset viewer.