Title: [285806] trunk/Source/WebCore
Revision
285806
Author
[email protected]
Date
2021-11-15 06:47:03 -0800 (Mon, 15 Nov 2021)

Log Message

[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:

Modified Paths

Diff

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);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to