Title: [289192] trunk/Source/WebCore
Revision
289192
Author
za...@apple.com
Date
2022-02-06 18:01:46 -0800 (Sun, 06 Feb 2022)

Log Message

[LFC][IFC] LineBox should hold on to its logical rect
https://bugs.webkit.org/show_bug.cgi?id=236201

Reviewed by Antti Koivisto.

Now that the Display::Line has all visual coords, we don't have a way to retrieve the line's logical rect
(we never did, it just happened to match the Display::Line's rect).
This is also in preparation for adding vertical writing mode support.

* layout/formattingContexts/inline/InlineFormattingContext.cpp:
(WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
* layout/formattingContexts/inline/InlineLineBox.h:
(WebCore::Layout::LineBox::logicalRect const):
(WebCore::Layout::LineBox::setLogicalRect):
* layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
(WebCore::Layout::LineBoxBuilder::build):
* layout/formattingContexts/inline/InlineLineBoxBuilder.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (289191 => 289192)


--- trunk/Source/WebCore/ChangeLog	2022-02-07 01:50:37 UTC (rev 289191)
+++ trunk/Source/WebCore/ChangeLog	2022-02-07 02:01:46 UTC (rev 289192)
@@ -1,5 +1,25 @@
 2022-02-06  Alan Bujtas  <za...@apple.com>
 
+        [LFC][IFC] LineBox should hold on to its logical rect
+        https://bugs.webkit.org/show_bug.cgi?id=236201
+
+        Reviewed by Antti Koivisto.
+
+        Now that the Display::Line has all visual coords, we don't have a way to retrieve the line's logical rect 
+        (we never did, it just happened to match the Display::Line's rect).
+        This is also in preparation for adding vertical writing mode support.
+
+        * layout/formattingContexts/inline/InlineFormattingContext.cpp:
+        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
+        * layout/formattingContexts/inline/InlineLineBox.h:
+        (WebCore::Layout::LineBox::logicalRect const):
+        (WebCore::Layout::LineBox::setLogicalRect):
+        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
+        (WebCore::Layout::LineBoxBuilder::build):
+        * layout/formattingContexts/inline/InlineLineBoxBuilder.h:
+
+2022-02-06  Alan Bujtas  <za...@apple.com>
+
         [LFC][IFC] Logical rect for text run does not require the parent inline box's FontMetrics:ascent
         https://bugs.webkit.org/show_bug.cgi?id=236195
 

Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp (289191 => 289192)


--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp	2022-02-07 01:50:37 UTC (rev 289191)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp	2022-02-07 02:01:46 UTC (rev 289192)
@@ -547,14 +547,14 @@
     auto& formattingState = this->formattingState();
     auto currentLineIndex = formattingState.lines().size();
 
-    auto lineBoxAndHeight = LineBoxBuilder { *this }.build(lineContent, currentLineIndex);
-    auto displayLine = InlineDisplayLineBuilder { *this }.build(lineContent, lineBoxAndHeight.lineBox, lineBoxAndHeight.lineBoxLogicalHeight);
+    auto lineBox = LineBoxBuilder { *this }.build(lineContent, currentLineIndex);
+    auto displayLine = InlineDisplayLineBuilder { *this }.build(lineContent, lineBox, lineBox.logicalRect().height());
     formattingState.addBoxes(InlineDisplayContentBuilder { root(), formattingState }.build(lineContent
-        , lineBoxAndHeight.lineBox
+        , lineBox
         , displayLine
         , currentLineIndex)
     );
-    formattingState.addLineBox(WTFMove(lineBoxAndHeight.lineBox));
+    formattingState.addLineBox(WTFMove(lineBox));
     formattingState.addLine(displayLine);
 
     return InlineFormattingGeometry::flipVisualRectToLogicalForWritingMode(formattingState.lines().last().lineBoxRect(), root().style().writingMode());

Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBox.h (289191 => 289192)


--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBox.h	2022-02-07 01:50:37 UTC (rev 289191)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBox.h	2022-02-07 02:01:46 UTC (rev 289192)
@@ -81,6 +81,8 @@
 
     InlineLayoutUnit rootInlineBoxAlignmentOffset() const { return m_rootInlineBoxAlignmentOffset; }
 
+    const InlineRect& logicalRect() const { return m_logicalRect; }
+
 private:
     friend class LineBoxBuilder;
     friend class LineBoxVerticalAligner;
@@ -93,10 +95,12 @@
     InlineLevelBox& inlineLevelBoxForLayoutBox(const Box& layoutBox) { return &layoutBox == &m_rootInlineBox.layoutBox() ? m_rootInlineBox : m_nonRootInlineLevelBoxList[m_nonRootInlineLevelBoxMap.get(&layoutBox)]; }
     InlineRect logicalRectForInlineLevelBox(const Box& layoutBox) const;
 
+    void setLogicalRect(const InlineRect& logicalRect) { m_logicalRect = logicalRect; }
     void setHasContent(bool hasContent) { m_hasContent = hasContent; }
 
 private:
     bool m_hasContent { false };
+    InlineRect m_logicalRect;
     OptionSet<InlineLevelBox::Type> m_boxTypes;
 
     InlineLayoutUnit m_rootInlineBoxAlignmentOffset { 0 };

Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp (289191 => 289192)


--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp	2022-02-07 01:50:37 UTC (rev 289191)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp	2022-02-07 02:01:46 UTC (rev 289192)
@@ -112,7 +112,7 @@
 {
 }
 
-LineBoxBuilder::LineBoxAndHeight LineBoxBuilder::build(const LineBuilder::LineContent& lineContent, size_t lineIndex)
+LineBox LineBoxBuilder::build(const LineBuilder::LineContent& lineContent, size_t lineIndex)
 {
     auto& rootStyle = lineIndex ? rootBox().firstLineStyle() : rootBox().style();
     auto rootInlineBoxAlignmentOffset = valueOrDefault(Layout::horizontalAlignmentOffset(rootStyle.textAlign(), lineContent, lineContent.inlineBaseDirection == TextDirection::LTR));
@@ -121,7 +121,8 @@
     constructInlineLevelBoxes(lineBox, lineContent, lineIndex);
     adjustIdeographicBaselineIfApplicable(lineBox, lineIndex);
     auto lineBoxLogicalHeight = LineBoxVerticalAligner { formattingContext() }.computeLogicalHeightAndAlign(lineBox);
-    return { lineBox, lineBoxLogicalHeight };
+    lineBox.setLogicalRect({ lineContent.lineLogicalTopLeft, lineContent.lineLogicalWidth, lineBoxLogicalHeight });
+    return lineBox;
 }
 
 void LineBoxBuilder::adjustLayoutBoundsWithFallbackFonts(InlineLevelBox& inlineBox, const TextUtil::FallbackFontList& fallbackFontsForContent) const

Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.h (289191 => 289192)


--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.h	2022-02-07 01:50:37 UTC (rev 289191)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.h	2022-02-07 02:01:46 UTC (rev 289192)
@@ -43,11 +43,7 @@
 public:
     LineBoxBuilder(const InlineFormattingContext&);
 
-    struct LineBoxAndHeight {
-        LineBox lineBox;
-        InlineLayoutUnit lineBoxLogicalHeight;
-    };
-    LineBoxAndHeight build(const LineBuilder::LineContent&, size_t lineIndex);
+    LineBox build(const LineBuilder::LineContent&, size_t lineIndex);
 
 private:
     void setBaselineAndLayoutBounds(InlineLevelBox&, const LayoutBoundsMetrics&) const;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to