Title: [238028] trunk/Source/WebCore
Revision
238028
Author
za...@apple.com
Date
2018-11-09 07:28:55 -0800 (Fri, 09 Nov 2018)

Log Message

[LFC][IFC] Move some code from InlineFormattingContext::Line to InlineFormattingContext/Geometry
https://bugs.webkit.org/show_bug.cgi?id=191445

Reviewed by Antti Koivisto.

The idea here is that Line should not have to deal with all the post processig tasks like the runs final aligments.
(The line class would eventually turn into a collection of random things).

* layout/inlineformatting/InlineFormattingContext.cpp:
(WebCore::Layout::InlineFormattingContext::closeLine const):
(WebCore::Layout::InlineFormattingContext::appendContentToLine const):
(WebCore::Layout::InlineFormattingContext::layoutInlineContent const):
* layout/inlineformatting/InlineFormattingContext.h:
(WebCore::Layout::InlineFormattingContext::Line::contentLogicalLeft const):
(WebCore::Layout::InlineFormattingContext::Line::lastRunType const):
* layout/inlineformatting/InlineFormattingContextGeometry.cpp:
(WebCore::Layout::InlineFormattingContext::Geometry::adjustedLineLogicalLeft):
(WebCore::Layout::InlineFormattingContext::Geometry::justifyRuns):
(WebCore::Layout::InlineFormattingContext::Geometry::computeExpansionOpportunities):
* layout/inlineformatting/Line.cpp:
(WebCore::Layout::InlineFormattingContext::Line::Line):
(WebCore::Layout::InlineFormattingContext::Line::init):
(WebCore::Layout::InlineFormattingContext::Line::contentLogicalRight const):
(WebCore::Layout::InlineFormattingContext::Line::appendContent):
(WebCore::Layout::InlineFormattingContext::Line::close):
(WebCore::Layout::adjustedLineLogicalLeft): Deleted.
(WebCore::Layout::InlineFormattingContext::Line::contentLogicalRight): Deleted.
(WebCore::Layout::InlineFormattingContext::Line::computeExpansionOpportunities): Deleted.
(WebCore::Layout::InlineFormattingContext::Line::justifyRuns): Deleted.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (238027 => 238028)


--- trunk/Source/WebCore/ChangeLog	2018-11-09 15:05:42 UTC (rev 238027)
+++ trunk/Source/WebCore/ChangeLog	2018-11-09 15:28:55 UTC (rev 238028)
@@ -1,3 +1,35 @@
+2018-11-09  Zalan Bujtas  <za...@apple.com>
+
+        [LFC][IFC] Move some code from InlineFormattingContext::Line to InlineFormattingContext/Geometry
+        https://bugs.webkit.org/show_bug.cgi?id=191445
+
+        Reviewed by Antti Koivisto.
+
+        The idea here is that Line should not have to deal with all the post processig tasks like the runs final aligments.
+        (The line class would eventually turn into a collection of random things).
+
+        * layout/inlineformatting/InlineFormattingContext.cpp:
+        (WebCore::Layout::InlineFormattingContext::closeLine const):
+        (WebCore::Layout::InlineFormattingContext::appendContentToLine const):
+        (WebCore::Layout::InlineFormattingContext::layoutInlineContent const):
+        * layout/inlineformatting/InlineFormattingContext.h:
+        (WebCore::Layout::InlineFormattingContext::Line::contentLogicalLeft const):
+        (WebCore::Layout::InlineFormattingContext::Line::lastRunType const):
+        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
+        (WebCore::Layout::InlineFormattingContext::Geometry::adjustedLineLogicalLeft):
+        (WebCore::Layout::InlineFormattingContext::Geometry::justifyRuns):
+        (WebCore::Layout::InlineFormattingContext::Geometry::computeExpansionOpportunities):
+        * layout/inlineformatting/Line.cpp:
+        (WebCore::Layout::InlineFormattingContext::Line::Line):
+        (WebCore::Layout::InlineFormattingContext::Line::init):
+        (WebCore::Layout::InlineFormattingContext::Line::contentLogicalRight const):
+        (WebCore::Layout::InlineFormattingContext::Line::appendContent):
+        (WebCore::Layout::InlineFormattingContext::Line::close):
+        (WebCore::Layout::adjustedLineLogicalLeft): Deleted.
+        (WebCore::Layout::InlineFormattingContext::Line::contentLogicalRight): Deleted.
+        (WebCore::Layout::InlineFormattingContext::Line::computeExpansionOpportunities): Deleted.
+        (WebCore::Layout::InlineFormattingContext::Line::justifyRuns): Deleted.
+
 2018-11-09  Philippe Normand  <pnorm...@igalia.com>
 
         Unreviewed, GStreamer build warning fix

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp (238027 => 238028)


--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp	2018-11-09 15:05:42 UTC (rev 238027)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp	2018-11-09 15:28:55 UTC (rev 238028)
@@ -127,6 +127,26 @@
     line.init(logicalRect);
 }
 
+void InlineFormattingContext::closeLine(Line& line, IsLastLine isLastLine) const
+{
+    auto runRange = line.close();
+    ASSERT(!runRange.firstRunIndex || runRange.lastRunIndex);
+
+    if (!runRange.firstRunIndex)
+        return;
+
+    Geometry::alignRuns(downcast<InlineFormattingState>(formattingState()), root().style().textAlign(), line, runRange, isLastLine);
+}
+
+void InlineFormattingContext::appendContentToLine(Line& line, const InlineLineBreaker::Run& run) const
+{
+    auto lastRunType = line.lastRunType();
+    line.appendContent(run);
+
+    if (root().style().textAlign() == TextAlignMode::Justify)
+        Geometry::computeExpansionOpportunities(downcast<InlineFormattingState>(formattingState()), run.content, lastRunType.value_or(InlineRunProvider::Run::Type::NonWhitespace));
+}
+
 void InlineFormattingContext::layoutInlineContent(const InlineRunProvider& inlineRunProvider) const
 {
     auto& layoutState = this->layoutState();
@@ -133,7 +153,7 @@
     auto& inlineFormattingState = downcast<InlineFormattingState>(formattingState());
     auto floatingContext = FloatingContext { inlineFormattingState.floatingState() };
 
-    Line line(inlineFormattingState, root());
+    Line line(inlineFormattingState);
     initializeNewLine(line);
 
     InlineLineBreaker lineBreaker(layoutState, inlineFormattingState.inlineContent(), inlineRunProvider.runs());
@@ -168,19 +188,19 @@
             if (line.hasContent()) {
                 // Previous run ended up being at the line end. Adjust the line accordingly.
                 if (!line.isClosed())
-                    line.close(Line::LastLine::No);
+                    closeLine(line, IsLastLine::No);
                 initializeNewLine(line);
             }
          }
 
         if (generatesInlineRun)
-             line.appendContent(*run);
+            appendContentToLine(line, *run);
 
         if (isLastRun)
-            line.close(Line::LastLine::No);
+            closeLine(line, IsLastLine::No);
     }
 
-    line.close(Line::LastLine::Yes);
+    closeLine(line, IsLastLine::Yes);
 }
 
 void InlineFormattingContext::computeWidthAndMargin(const Box& layoutBox) const

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h (238027 => 238028)


--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h	2018-11-09 15:05:42 UTC (rev 238027)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h	2018-11-09 15:28:55 UTC (rev 238028)
@@ -50,9 +50,14 @@
 private:
     class Line {
     public:
-        Line(InlineFormattingState&, const Box& formattingRoot);
+        Line(InlineFormattingState&);
 
         void init(const Display::Box::Rect&);
+        struct RunRange {
+            std::optional<unsigned> firstRunIndex;
+            std::optional<unsigned> lastRunIndex;
+        };
+        RunRange close();
 
         void appendContent(const InlineLineBreaker::Run&);
 
@@ -59,51 +64,53 @@
         void adjustLogicalLeft(LayoutUnit delta);
         void adjustLogicalRight(LayoutUnit delta);
 
-        enum class LastLine { No, Yes };
-        void close(LastLine = LastLine::No);
-
         bool hasContent() const { return m_firstRunIndex.has_value(); }
         bool isClosed() const { return m_closed; }
         bool isFirstLine() const { return m_isFirstLine; }
-        LayoutUnit contentLogicalRight();
+        LayoutUnit contentLogicalRight() const;
+        LayoutUnit contentLogicalLeft() const { return m_logicalRect.left(); }
         LayoutUnit availableWidth() const { return m_availableWidth; }
+        std::optional<InlineRunProvider::Run::Type> lastRunType() const { return m_lastRunType; }
 
         LayoutUnit logicalTop() const { return m_logicalRect.top(); }
         LayoutUnit logicalBottom() const { return m_logicalRect.bottom(); }
 
     private:
-        void justifyRuns();
-        void computeExpansionOpportunities(const InlineLineBreaker::Run&);
-
         struct TrailingTrimmableContent {
             LayoutUnit width;
             unsigned length;
         };
         std::optional<TrailingTrimmableContent> m_trailingTrimmableContent;
-        bool m_lastRunIsWhitespace { false };
+        std::optional<InlineRunProvider::Run::Type> m_lastRunType;
         bool m_lastRunCanExpand { false };
 
         InlineFormattingState& m_formattingState;
-        const Box& m_formattingRoot;
 
         Display::Box::Rect m_logicalRect;
         LayoutUnit m_availableWidth;
 
         std::optional<unsigned> m_firstRunIndex;
-        bool m_alignmentIsJustify { false };
         bool m_isFirstLine { true };
         bool m_closed { true };
     };
+    enum class IsLastLine { No, Yes };
 
-    // This class implements positioning and sizing for boxes participating in a block formatting context.
     class Geometry : public FormattingContext::Geometry {
     public:
         static HeightAndMargin inlineBlockHeightAndMargin(const LayoutState&, const Box&);
         static WidthAndMargin inlineBlockWidthAndMargin(LayoutState&, const Box&);
+        static void alignRuns(InlineFormattingState&, TextAlignMode, Line&, Line::RunRange, IsLastLine);
+        static void computeExpansionOpportunities(InlineFormattingState&, const InlineRunProvider::Run&, InlineRunProvider::Run::Type lastRunType);
+
+    private:
+        static void justifyRuns(InlineFormattingState&, Line&, Line::RunRange);
     };
 
     void layoutInlineContent(const InlineRunProvider&) const;
+
     void initializeNewLine(Line&) const;
+    void closeLine(Line&, IsLastLine) const;
+    void appendContentToLine(Line&, const InlineLineBreaker::Run&) const;
 
     void layoutFormattingContextRoot(const Box&) const;
     void computeWidthAndHeightForReplacedInlineBox(const Box&) const;

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp (238027 => 238028)


--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp	2018-11-09 15:05:42 UTC (rev 238027)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp	2018-11-09 15:28:55 UTC (rev 238028)
@@ -77,7 +77,109 @@
     return complicatedCases(layoutState, layoutBox);
 }
 
+static LayoutUnit adjustedLineLogicalLeft(TextAlignMode align, LayoutUnit lineLogicalLeft, LayoutUnit remainingWidth)
+{
+    switch (align) {
+    case TextAlignMode::Left:
+    case TextAlignMode::WebKitLeft:
+    case TextAlignMode::Start:
+        return lineLogicalLeft;
+    case TextAlignMode::Right:
+    case TextAlignMode::WebKitRight:
+    case TextAlignMode::End:
+        return lineLogicalLeft + std::max(remainingWidth, LayoutUnit());
+    case TextAlignMode::Center:
+    case TextAlignMode::WebKitCenter:
+        return lineLogicalLeft + std::max(remainingWidth / 2, LayoutUnit());
+    case TextAlignMode::Justify:
+        ASSERT_NOT_REACHED();
+        break;
+    }
+    ASSERT_NOT_REACHED();
+    return lineLogicalLeft;
 }
+
+void InlineFormattingContext::Geometry::justifyRuns(InlineFormattingState& formattingState, Line& line, Line::RunRange runRange)
+{
+    auto& inlineRuns = formattingState.inlineRuns();
+    auto& lastInlineRun = inlineRuns.last();
+
+    // Adjust (forbid) trailing expansion for the last text run on line.
+    auto expansionBehavior = lastInlineRun.expansionOpportunity().behavior;
+    // Remove allow and add forbid.
+    expansionBehavior ^= AllowTrailingExpansion;
+    expansionBehavior |= ForbidTrailingExpansion;
+    lastInlineRun.expansionOpportunity().behavior = expansionBehavior;
+
+    // Collect expansion opportunities and justify the runs.
+    auto widthToDistribute = line.availableWidth();
+    if (widthToDistribute <= 0)
+        return;
+
+    auto expansionOpportunities = 0;
+    ASSERT(*runRange.lastRunIndex < inlineRuns.size());
+    for (auto runIndex = *runRange.firstRunIndex; runIndex <= *runRange.lastRunIndex; ++runIndex)
+        expansionOpportunities += inlineRuns[runIndex].expansionOpportunity().count;
+
+    if (!expansionOpportunities)
+        return;
+
+    float expansion = widthToDistribute.toFloat() / expansionOpportunities;
+    LayoutUnit accumulatedExpansion = 0;
+    for (auto runIndex = *runRange.firstRunIndex; runIndex <= *runRange.lastRunIndex; ++runIndex) {
+        auto& inlineRun = inlineRuns[runIndex];
+        auto expansionForRun = inlineRun.expansionOpportunity().count * expansion;
+
+        inlineRun.expansionOpportunity().expansion = expansionForRun;
+        inlineRun.setLogicalLeft(inlineRun.logicalLeft() + accumulatedExpansion);
+        inlineRun.setWidth(inlineRun.width() + expansionForRun);
+        accumulatedExpansion += expansionForRun;
+    }
 }
 
+void InlineFormattingContext::Geometry::computeExpansionOpportunities(InlineFormattingState& formattingState, const InlineRunProvider::Run& run, InlineRunProvider::Run::Type lastRunType)
+{
+    auto isExpansionOpportunity = [](auto currentRunIsWhitespace, auto lastRunIsWhitespace) {
+        return currentRunIsWhitespace || (!currentRunIsWhitespace && !lastRunIsWhitespace);
+    };
+
+    auto expansionBehavior = [](auto isAtExpansionOpportunity) {
+        ExpansionBehavior expansionBehavior = AllowTrailingExpansion;
+        expansionBehavior |= isAtExpansionOpportunity ? ForbidLeadingExpansion : AllowLeadingExpansion;
+        return expansionBehavior;
+    };
+
+    auto isAtExpansionOpportunity = isExpansionOpportunity(run.isWhitespace(), lastRunType == InlineRunProvider::Run::Type::Whitespace);
+
+    auto& currentInlineRun = formattingState.inlineRuns().last();
+    auto& expansionOpportunity = currentInlineRun.expansionOpportunity();
+    if (isAtExpansionOpportunity)
+        ++expansionOpportunity.count;
+
+    expansionOpportunity.behavior = expansionBehavior(isAtExpansionOpportunity);
+}
+
+void InlineFormattingContext::Geometry::alignRuns(InlineFormattingState& inlineFormattingState, TextAlignMode textAlign, Line& line, Line::RunRange runRange, IsLastLine isLastLine)
+{
+    auto adjutedTextAlignment = textAlign != TextAlignMode::Justify ? textAlign : isLastLine == IsLastLine::No ? TextAlignMode::Justify : TextAlignMode::Left;
+    if (adjutedTextAlignment == TextAlignMode::Justify) {
+        justifyRuns(inlineFormattingState, line, runRange);
+        return;
+    }
+
+    auto lineLogicalLeft = line.contentLogicalLeft();
+    auto adjustedLogicalLeft = adjustedLineLogicalLeft(adjutedTextAlignment, lineLogicalLeft, line.availableWidth());
+    if (adjustedLogicalLeft == lineLogicalLeft)
+        return;
+
+    auto& inlineRuns = inlineFormattingState.inlineRuns();
+    auto delta = adjustedLogicalLeft - lineLogicalLeft;
+    ASSERT(*runRange.lastRunIndex < inlineRuns.size());
+    for (auto runIndex = *runRange.firstRunIndex; runIndex <= *runRange.lastRunIndex; ++runIndex)
+        inlineRuns[runIndex].setLogicalLeft(inlineRuns[runIndex].logicalLeft() + delta);
+}
+
+}
+}
+
 #endif

Modified: trunk/Source/WebCore/layout/inlineformatting/Line.cpp (238027 => 238028)


--- trunk/Source/WebCore/layout/inlineformatting/Line.cpp	2018-11-09 15:05:42 UTC (rev 238027)
+++ trunk/Source/WebCore/layout/inlineformatting/Line.cpp	2018-11-09 15:28:55 UTC (rev 238028)
@@ -33,10 +33,8 @@
 namespace WebCore {
 namespace Layout {
 
-InlineFormattingContext::Line::Line(InlineFormattingState& formattingState, const Box& formattingRoot)
+InlineFormattingContext::Line::Line(InlineFormattingState& formattingState)
     : m_formattingState(formattingState)
-    , m_formattingRoot(formattingRoot)
-    , m_alignmentIsJustify(m_formattingRoot.style().textAlign() == TextAlignMode::Justify)
 {
 }
 
@@ -46,7 +44,7 @@
     m_availableWidth = logicalRect.width();
 
     m_firstRunIndex = { };
-    m_lastRunIsWhitespace = false;
+    m_lastRunType = { };
     m_lastRunCanExpand = false;
     m_trailingTrimmableContent = { };
     m_closed = false;
@@ -75,34 +73,12 @@
     m_logicalRect.shiftRightTo(m_logicalRect.right() - delta);
 }
 
-static LayoutUnit adjustedLineLogicalLeft(TextAlignMode align, LayoutUnit lineLogicalLeft, LayoutUnit remainingWidth)
-{
-    switch (align) {
-    case TextAlignMode::Left:
-    case TextAlignMode::WebKitLeft:
-    case TextAlignMode::Start:
-        return lineLogicalLeft;
-    case TextAlignMode::Right:
-    case TextAlignMode::WebKitRight:
-    case TextAlignMode::End:
-        return lineLogicalLeft + std::max(remainingWidth, LayoutUnit());
-    case TextAlignMode::Center:
-    case TextAlignMode::WebKitCenter:
-        return lineLogicalLeft + std::max(remainingWidth / 2, LayoutUnit());
-    case TextAlignMode::Justify:
-        ASSERT_NOT_REACHED();
-        break;
-    }
-    ASSERT_NOT_REACHED();
-    return lineLogicalLeft;
-}
-
 static bool isTrimmableContent(const InlineRunProvider::Run& inlineRun)
 {
     return inlineRun.isWhitespace() && inlineRun.style().collapseWhiteSpace();
 }
 
-LayoutUnit InlineFormattingContext::Line::contentLogicalRight()
+LayoutUnit InlineFormattingContext::Line::contentLogicalRight() const
 {
     if (!m_firstRunIndex.has_value())
         return m_logicalRect.left();
@@ -110,31 +86,6 @@
     return m_formattingState.inlineRuns().last().logicalRight();
 }
 
-void InlineFormattingContext::Line::computeExpansionOpportunities(const InlineLineBreaker::Run& run)
-{
-    if (!m_alignmentIsJustify)
-        return;
-
-    auto isExpansionOpportunity = [](auto currentRunIsWhitespace, auto lastRunIsWhitespace) {
-        return currentRunIsWhitespace || (!currentRunIsWhitespace && !lastRunIsWhitespace);
-    };
-
-    auto expansionBehavior = [](auto isAtExpansionOpportunity) {
-        ExpansionBehavior expansionBehavior = AllowTrailingExpansion;
-        expansionBehavior |= isAtExpansionOpportunity ? ForbidLeadingExpansion : AllowLeadingExpansion;
-        return expansionBehavior;
-    };
-
-    auto isAtExpansionOpportunity = isExpansionOpportunity(run.content.isWhitespace(), m_lastRunIsWhitespace);
-
-    auto& currentInlineRun = m_formattingState.inlineRuns().last();
-    auto& expansionOpportunity = currentInlineRun.expansionOpportunity();
-    if (isAtExpansionOpportunity)
-        ++expansionOpportunity.count;
-
-    expansionOpportunity.behavior = expansionBehavior(isAtExpansionOpportunity);
-}
-
 void InlineFormattingContext::Line::appendContent(const InlineLineBreaker::Run& run)
 {
     ASSERT(!isClosed());
@@ -164,10 +115,8 @@
         inlineRun.textContext()->setLength(inlineRun.textContext()->length() + textRun->length());
     }
 
-    computeExpansionOpportunities(run);
-
     m_availableWidth -= run.width;
-    m_lastRunIsWhitespace = content.isWhitespace();
+    m_lastRunType = content.type();
     m_lastRunCanExpand = content.isText() && !content.textContext()->isCollapsed();
     m_firstRunIndex = m_firstRunIndex.value_or(m_formattingState.inlineRuns().size() - 1);
     m_trailingTrimmableContent = { };
@@ -175,48 +124,8 @@
         m_trailingTrimmableContent = TrailingTrimmableContent { run.width, textRun->length() };
 }
 
-void InlineFormattingContext::Line::justifyRuns()
+InlineFormattingContext::Line::RunRange InlineFormattingContext::Line::close()
 {
-    if (!hasContent())
-        return;
-
-    auto& inlineRuns = m_formattingState.inlineRuns();
-    auto& lastInlineRun = inlineRuns.last();
-
-    // Adjust (forbid) trailing expansion for the last text run on line.
-    auto expansionBehavior = lastInlineRun.expansionOpportunity().behavior;
-    // Remove allow and add forbid.
-    expansionBehavior ^= AllowTrailingExpansion;
-    expansionBehavior |= ForbidTrailingExpansion;
-    lastInlineRun.expansionOpportunity().behavior = expansionBehavior;
-
-    // Collect expansion opportunities and justify the runs.
-    auto widthToDistribute = availableWidth();
-    if (widthToDistribute <= 0)
-        return;
-
-    auto expansionOpportunities = 0;
-    for (auto runIndex = *m_firstRunIndex; runIndex < inlineRuns.size(); ++runIndex)
-        expansionOpportunities += inlineRuns[runIndex].expansionOpportunity().count;
-
-    if (!expansionOpportunities)
-        return;
-
-    float expansion = widthToDistribute.toFloat() / expansionOpportunities;
-    LayoutUnit accumulatedExpansion = 0;
-    for (auto runIndex = *m_firstRunIndex; runIndex < inlineRuns.size(); ++runIndex) {
-        auto& inlineRun = inlineRuns[runIndex];
-        auto expansionForRun = inlineRun.expansionOpportunity().count * expansion;
-
-        inlineRun.expansionOpportunity().expansion = expansionForRun;
-        inlineRun.setLogicalLeft(inlineRun.logicalLeft() + accumulatedExpansion);
-        inlineRun.setWidth(inlineRun.width() + expansionForRun);
-        accumulatedExpansion += expansionForRun;
-    }
-}
-
-void InlineFormattingContext::Line::close(LastLine isLastLine)
-{
     auto trimTrailingContent = [&]{
 
         if (!m_trailingTrimmableContent)
@@ -235,35 +144,16 @@
         m_trailingTrimmableContent = { };
     };
 
-    auto alignRuns = [&]{
-
-        if (!hasContent())
-            return;
-
-        auto textAlignment = !m_alignmentIsJustify ? m_formattingRoot.style().textAlign() : isLastLine == LastLine::No ? TextAlignMode::Justify : TextAlignMode::Left;
-        if (textAlignment == TextAlignMode::Justify) {
-            justifyRuns();
-            return;
-        }
-
-        auto adjustedLogicalLeft = adjustedLineLogicalLeft(textAlignment, m_logicalRect.left(), m_availableWidth);
-        if (m_logicalRect.left() == adjustedLogicalLeft)
-            return;
-
-        auto& inlineRuns = m_formattingState.inlineRuns();
-        auto delta = adjustedLogicalLeft - m_logicalRect.left();
-        for (auto runIndex = *m_firstRunIndex; runIndex < inlineRuns.size(); ++runIndex)
-            inlineRuns[runIndex].setLogicalLeft(inlineRuns[runIndex].logicalLeft() + delta);
-    };
-
     if (!hasContent())
-        return;
+        return { };
 
     trimTrailingContent();
-    alignRuns();
-
     m_isFirstLine = false;
     m_closed = true;
+
+    if (!m_firstRunIndex)
+        return { };
+    return { m_firstRunIndex, m_formattingState.inlineRuns().size() - 1 };
 }
 
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to