Modified: trunk/Source/WebCore/ChangeLog (285805 => 285806)
--- trunk/Source/WebCore/ChangeLog 2021-11-15 14:46:03 UTC (rev 285805)
+++ trunk/Source/WebCore/ChangeLog 2021-11-15 14:47:03 UTC (rev 285806)
@@ -1,3 +1,16 @@
+2021-11-15 Alan Bujtas <[email protected]>
+
+ [LFC][IFC] Take text-indent into account when computing preferred width
+ https://bugs.webkit.org/show_bug.cgi?id=233115
+
+ Reviewed by Antti Koivisto.
+
+ * layout/formattingContexts/inline/InlineFormattingContext.cpp:
+ (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthForConstraint const):
+ * layout/formattingContexts/inline/InlineLineBuilder.cpp:
+ (WebCore::Layout::LineBuilder::computedIntrinsicWidth):
+ * layout/formattingContexts/inline/InlineLineBuilder.h:
+
2021-11-15 Enrique Ocaña González <[email protected]>
[GTK] webaudio/silent-audio-interrupted-in-background.html is a flaky timeout
Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp (285805 => 285806)
--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp 2021-11-15 14:46:03 UTC (rev 285805)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp 2021-11-15 14:47:03 UTC (rev 285806)
@@ -422,10 +422,12 @@
auto layoutRange = LineBuilder::InlineItemRange { 0 , inlineItems.size() };
auto maximumLineWidth = InlineLayoutUnit { };
auto maximumFloatWidth = LayoutUnit { };
+ auto isFirstLine = true;
while (!layoutRange.isEmpty()) {
- auto intrinsicContent = lineBuilder.computedIntrinsicWidth(layoutRange, availableWidth);
+ auto intrinsicContent = lineBuilder.computedIntrinsicWidth(layoutRange, availableWidth, isFirstLine);
layoutRange.start = intrinsicContent.inlineItemRange.end;
maximumLineWidth = std::max(maximumLineWidth, intrinsicContent.logicalWidth);
+ isFirstLine = false;
// FIXME: Add support for clear.
for (auto* floatBox : intrinsicContent.floats)
maximumFloatWidth += geometryForBox(*floatBox).marginBoxWidth();
Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.cpp (285805 => 285806)
--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.cpp 2021-11-15 14:46:03 UTC (rev 285805)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.cpp 2021-11-15 14:47:03 UTC (rev 285806)
@@ -323,12 +323,15 @@
, lineRuns };
}
-LineBuilder::IntrinsicContent LineBuilder::computedIntrinsicWidth(const InlineItemRange& needsLayoutRange, InlineLayoutUnit availableWidth)
+LineBuilder::IntrinsicContent LineBuilder::computedIntrinsicWidth(const InlineItemRange& needsLayoutRange, InlineLayoutUnit availableWidth, bool isFirstLine)
{
- initialize({ { { }, { availableWidth, maxInlineLayoutUnit() } }, false }, false, { }, { }, { });
+ auto lineConstraints = initialConstraintsForLine({ 0, 0, availableWidth, 0 }, isFirstLine);
+ initialize(lineConstraints, isFirstLine, needsLayoutRange.start, { }, { });
+
auto committedContent = placeInlineContent(needsLayoutRange);
auto committedRange = close(needsLayoutRange, committedContent);
- return { committedRange, m_line.contentLogicalWidth(), m_floats };
+ auto lineWidth = lineConstraints.logicalRect.left() + m_line.contentLogicalWidth();
+ return { committedRange, lineWidth, m_floats };
}
void LineBuilder::initialize(const UsedConstraints& lineConstraints, bool isFirstLine, size_t leadingInlineItemIndex, size_t partialLeadingContentLength, std::optional<InlineLayoutUnit> overflowingLogicalWidth)
Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.h (285805 => 285806)
--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.h 2021-11-15 14:46:03 UTC (rev 285805)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBuilder.h 2021-11-15 14:47:03 UTC (rev 285806)
@@ -71,7 +71,7 @@
InlineLayoutUnit logicalWidth { 0 };
const FloatList& floats;
};
- IntrinsicContent computedIntrinsicWidth(const InlineItemRange&, InlineLayoutUnit availableWidth);
+ IntrinsicContent computedIntrinsicWidth(const InlineItemRange&, InlineLayoutUnit availableWidth, bool isFirstLine);
private:
void candidateContentForLine(LineCandidate&, size_t inlineItemIndex, const InlineItemRange& needsLayoutRange, InlineLayoutUnit currentLogicalRight);