Modified: trunk/Source/WebCore/ChangeLog (250483 => 250484)
--- trunk/Source/WebCore/ChangeLog 2019-09-28 21:38:14 UTC (rev 250483)
+++ trunk/Source/WebCore/ChangeLog 2019-09-28 23:58:10 UTC (rev 250484)
@@ -1,3 +1,19 @@
+2019-09-28 Zalan Bujtas <za...@apple.com>
+
+ [LFC][IFC] Line::InitialConstraints's heightAndBaseline should be optional
+ https://bugs.webkit.org/show_bug.cgi?id=202348
+
+ Reviewed by Antti Koivisto.
+
+ Vertical properties are undefined while computing the preferred width.
+
+ * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
+ (WebCore::Layout::LineInput::LineInput):
+ (WebCore::Layout::InlineFormattingContext::InlineLayout::computedIntrinsicWidth const):
+ * layout/inlineformatting/InlineLine.cpp:
+ (WebCore::Layout::Line::Line):
+ * layout/inlineformatting/InlineLine.h:
+
2019-09-28 Chris Dumez <cdu...@apple.com>
[Experiment][iOS] Add temporary HTTP header to distinguish iPads for requests to Google
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextLineLayout.cpp (250483 => 250484)
--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextLineLayout.cpp 2019-09-28 21:38:14 UTC (rev 250483)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextLineLayout.cpp 2019-09-28 23:58:10 UTC (rev 250484)
@@ -91,6 +91,14 @@
Optional<LayoutUnit> floatMinimumLogicalBottom;
};
+LineInput::LineInput(const Line::InitialConstraints& initialLineConstraints, Line::SkipVerticalAligment skipVerticalAligment, IndexAndRange firstToProcess, const InlineItems& inlineItems)
+ : initialConstraints(initialLineConstraints)
+ , skipVerticalAligment(skipVerticalAligment)
+ , firstInlineItem(firstToProcess)
+ , inlineItems(inlineItems)
+{
+}
+
struct LineContent {
Optional<IndexAndRange> lastCommitted;
Vector<WeakPtr<InlineItem>> floats;
@@ -262,14 +270,6 @@
return close();
}
-LineInput::LineInput(const Line::InitialConstraints& initialLineConstraints, Line::SkipVerticalAligment skipVerticalAligment, IndexAndRange firstToProcess, const InlineItems& inlineItems)
- : initialConstraints(initialLineConstraints)
- , skipVerticalAligment(skipVerticalAligment)
- , firstInlineItem(firstToProcess)
- , inlineItems(inlineItems)
-{
-}
-
InlineFormattingContext::InlineLayout::InlineLayout(InlineFormattingContext& inlineFormattingContext, UsedHorizontalValues usedHorizontalValues)
: m_inlineFormattingContext(inlineFormattingContext)
, m_usedHorizontalValues(usedHorizontalValues)
@@ -346,10 +346,14 @@
auto& formattingContext = this->formattingContext();
LayoutUnit maximumLineWidth;
IndexAndRange currentInlineItem;
- auto quirks = formattingContext.quirks();
while (currentInlineItem.index < inlineItems.size()) {
- auto lineContent = LineLayout(formattingContext, { { { }, widthConstraint(), false, quirks.lineHeightConstraints(formattingRoot()) }, Line::SkipVerticalAligment::Yes, currentInlineItem, inlineItems }).layout();
- currentInlineItem = { lineContent.lastCommitted->index + 1, WTF::nullopt };
+ // Only the horiztonal available width is constrained when computing intrinsic width.
+ auto initialLineConstraints = Line::InitialConstraints { { }, widthConstraint(), false, { } };
+ auto lineInput = LineInput { initialLineConstraints, Line::SkipVerticalAligment::Yes, currentInlineItem, inlineItems };
+
+ auto lineContent = LineLayout(formattingContext, lineInput).layout();
+
+ currentInlineItem = { lineContent.lastCommitted->index + 1, { } };
LayoutUnit floatsWidth;
for (auto& floatItem : lineContent.floats)
floatsWidth += formattingContext.geometryForBox(floatItem->layoutBox()).marginBoxWidth();
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineLine.cpp (250483 => 250484)
--- trunk/Source/WebCore/layout/inlineformatting/InlineLine.cpp 2019-09-28 21:38:14 UTC (rev 250483)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineLine.cpp 2019-09-28 23:58:10 UTC (rev 250484)
@@ -59,12 +59,15 @@
Line::Line(const InlineFormattingContext& inlineFormattingContext, const InitialConstraints& initialConstraints, SkipVerticalAligment skipVerticalAligment)
: m_inlineFormattingContext(inlineFormattingContext)
- , m_initialStrut(initialConstraints.heightAndBaseline.strut)
+ , m_initialStrut(initialConstraints.heightAndBaseline ? initialConstraints.heightAndBaseline->strut : WTF::nullopt)
, m_lineLogicalWidth(initialConstraints.availableLogicalWidth)
, m_skipVerticalAligment(skipVerticalAligment == SkipVerticalAligment::Yes)
{
- auto lineRect = Display::Rect { initialConstraints.logicalTopLeft, { }, initialConstraints.heightAndBaseline.height };
- auto baseline = LineBox::Baseline { initialConstraints.heightAndBaseline.baselineOffset, initialConstraints.heightAndBaseline.height - initialConstraints.heightAndBaseline.baselineOffset };
+ ASSERT(m_skipVerticalAligment || initialConstraints.heightAndBaseline);
+ auto initialLineHeight = initialConstraints.heightAndBaseline ? initialConstraints.heightAndBaseline->height : LayoutUnit();
+ auto initialBaselineOffset = initialConstraints.heightAndBaseline ? initialConstraints.heightAndBaseline->baselineOffset : LayoutUnit();
+ auto lineRect = Display::Rect { initialConstraints.logicalTopLeft, { }, initialLineHeight };
+ auto baseline = LineBox::Baseline { initialBaselineOffset, initialLineHeight - initialBaselineOffset };
m_lineBox = LineBox { lineRect, baseline, { } };
}
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineLine.h (250483 => 250484)
--- trunk/Source/WebCore/layout/inlineformatting/InlineLine.h 2019-09-28 21:38:14 UTC (rev 250483)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineLine.h 2019-09-28 23:58:10 UTC (rev 250484)
@@ -49,7 +49,7 @@
LayoutUnit baselineOffset;
Optional<LineBox::Baseline> strut;
};
- HeightAndBaseline heightAndBaseline;
+ Optional<HeightAndBaseline> heightAndBaseline;
};
enum class SkipVerticalAligment { No, Yes };
Line(const InlineFormattingContext&, const InitialConstraints&, SkipVerticalAligment);