Title: [246062] trunk/Source/WebCore
Revision
246062
Author
[email protected]
Date
2019-06-04 07:54:52 -0700 (Tue, 04 Jun 2019)

Log Message

[LFC][IFC] Remove redundant InlineItem::width() calls.
https://bugs.webkit.org/show_bug.cgi?id=198489
<rdar://problem/51360390>

Reviewed by Antti Koivisto.

This is in preparation for removing InlineItem::width().

* layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
(WebCore::Layout::InlineFormattingContext::LineLayout::handleFloat const):
(WebCore::Layout::InlineFormattingContext::LineLayout::commitInlineItemToLine const):
* layout/inlineformatting/InlineLine.cpp:
(WebCore::Layout::Line::appendNonBreakableSpace):
(WebCore::Layout::Line::appendInlineContainerStart):
(WebCore::Layout::Line::appendInlineContainerEnd):
* layout/inlineformatting/InlineLine.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (246061 => 246062)


--- trunk/Source/WebCore/ChangeLog	2019-06-04 14:34:11 UTC (rev 246061)
+++ trunk/Source/WebCore/ChangeLog	2019-06-04 14:54:52 UTC (rev 246062)
@@ -1,3 +1,22 @@
+2019-06-04  Zalan Bujtas  <[email protected]>
+
+        [LFC][IFC] Remove redundant InlineItem::width() calls.
+        https://bugs.webkit.org/show_bug.cgi?id=198489
+        <rdar://problem/51360390>
+
+        Reviewed by Antti Koivisto.
+
+        This is in preparation for removing InlineItem::width().
+
+        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
+        (WebCore::Layout::InlineFormattingContext::LineLayout::handleFloat const):
+        (WebCore::Layout::InlineFormattingContext::LineLayout::commitInlineItemToLine const):
+        * layout/inlineformatting/InlineLine.cpp:
+        (WebCore::Layout::Line::appendNonBreakableSpace):
+        (WebCore::Layout::Line::appendInlineContainerStart):
+        (WebCore::Layout::Line::appendInlineContainerEnd):
+        * layout/inlineformatting/InlineLine.h:
+
 2019-06-04  Antoine Quint  <[email protected]>
 
         The "mouseenter" and "pointerenter" events are fired from the bottom up

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextLineLayout.cpp (246061 => 246062)


--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextLineLayout.cpp	2019-06-04 14:34:11 UTC (rev 246061)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextLineLayout.cpp	2019-06-04 14:54:52 UTC (rev 246062)
@@ -340,27 +340,31 @@
     displayBox.setTopLeft(floatingContext.positionForFloat(floatBox));
     m_floatingState.append(floatBox);
     // Shrink availble space for current line and move existing inline runs.
-    auto floatBoxWidth = floatItem.width();
+    auto floatBoxWidth = displayBox.marginBoxWidth();
     floatBox.isLeftFloatingPositioned() ? line.moveLogicalLeft(floatBoxWidth) : line.moveLogicalRight(floatBoxWidth);
 }
 
 void InlineFormattingContext::LineLayout::commitInlineItemToLine(Line& line, const InlineItem& inlineItem) const
 {
-    if (inlineItem.isContainerStart())
-        return line.appendInlineContainerStart(inlineItem);
-
-    if (inlineItem.isContainerEnd())
-        return line.appendInlineContainerEnd(inlineItem);
-
     if (inlineItem.isHardLineBreak())
         return line.appendHardLineBreak(inlineItem);
 
     auto width = inlineItem.width();
+    auto& fontMetrics = inlineItem.style().fontMetrics();
     if (is<InlineTextItem>(inlineItem))
-        return line.appendTextContent(downcast<InlineTextItem>(inlineItem), { width, inlineItem.style().fontMetrics().height() });
+        return line.appendTextContent(downcast<InlineTextItem>(inlineItem), { width, fontMetrics.height() });
 
     auto& layoutBox = inlineItem.layoutBox();
     auto& displayBox = layoutState().displayBoxForLayoutBox(layoutBox);
+
+    if (inlineItem.isContainerStart()) {
+        auto containerHeight = fontMetrics.height() + displayBox.verticalBorder() + displayBox.verticalPadding().valueOr(0);
+        return line.appendInlineContainerStart(inlineItem, { width, containerHeight });
+    }
+
+    if (inlineItem.isContainerEnd())
+        return line.appendInlineContainerEnd(inlineItem, { width, 0 });
+
     if (layoutBox.isReplaced())
         return line.appendReplacedInlineBox(inlineItem, { width, displayBox.height() });
 

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineLine.cpp (246061 => 246062)


--- trunk/Source/WebCore/layout/inlineformatting/InlineLine.cpp	2019-06-04 14:34:11 UTC (rev 246061)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineLine.cpp	2019-06-04 14:54:52 UTC (rev 246062)
@@ -116,10 +116,10 @@
 void Line::appendNonBreakableSpace(const InlineItem& inlineItem, const Display::Rect& logicalRect)
 {
     m_content->runs().append(std::make_unique<Content::Run>(Display::Run { logicalRect }, inlineItem, false, false));
-    m_contentLogicalWidth += inlineItem.width();
+    m_contentLogicalWidth += logicalRect.width();
 }
 
-void Line::appendInlineContainerStart(const InlineItem& inlineItem)
+void Line::appendInlineContainerStart(const InlineItem& inlineItem, LayoutSize runSize)
 {
     auto& layoutBox = inlineItem.layoutBox();
     auto& style = layoutBox.style();
@@ -137,16 +137,15 @@
 
     alignAndAdjustLineHeight();
     auto& displayBox = m_layoutState.displayBoxForLayoutBox(layoutBox);
-    auto containerHeight = fontMetrics.height() + displayBox.verticalBorder() + displayBox.verticalPadding().valueOr(0);
     auto logicalTop = -fontMetrics.ascent() - displayBox.borderTop() - displayBox.paddingTop().valueOr(0);
-    auto logicalRect = Display::Rect { logicalTop, contentLogicalRight(), inlineItem.width(), containerHeight };
+    auto logicalRect = Display::Rect { logicalTop, contentLogicalRight(), runSize.width(), runSize.height() };
     appendNonBreakableSpace(inlineItem, logicalRect);
 }
 
-void Line::appendInlineContainerEnd(const InlineItem& inlineItem)
+void Line::appendInlineContainerEnd(const InlineItem& inlineItem, LayoutSize runSize)
 {
     // This is really just a placeholder to mark the end of the inline level container.
-    auto logicalRect = Display::Rect { 0, contentLogicalRight(), inlineItem.width(), 0 };
+    auto logicalRect = Display::Rect { 0, contentLogicalRight(), runSize.width(), runSize.height() };
     appendNonBreakableSpace(inlineItem, logicalRect);
 }
 

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineLine.h (246061 => 246062)


--- trunk/Source/WebCore/layout/inlineformatting/InlineLine.h	2019-06-04 14:34:11 UTC (rev 246061)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineLine.h	2019-06-04 14:54:52 UTC (rev 246062)
@@ -78,8 +78,8 @@
     void appendTextContent(const InlineTextItem&, LayoutSize);
     void appendNonReplacedInlineBox(const InlineItem&, LayoutSize);
     void appendReplacedInlineBox(const InlineItem&, LayoutSize);
-    void appendInlineContainerStart(const InlineItem&);
-    void appendInlineContainerEnd(const InlineItem&);
+    void appendInlineContainerStart(const InlineItem&, LayoutSize);
+    void appendInlineContainerEnd(const InlineItem&, LayoutSize);
     void appendHardLineBreak(const InlineItem&);
 
     bool hasContent() const { return !m_content->isVisuallyEmpty(); }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to