- 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(); }