Title: [292752] trunk/Source/WebCore
Revision
292752
Author
za...@apple.com
Date
2022-04-11 18:30:11 -0700 (Mon, 11 Apr 2022)

Log Message

[IFC][Integration] LayoutIntegration::LineLayout should not expose InlineContent
https://bugs.webkit.org/show_bug.cgi?id=239059

Reviewed by Antti Koivisto.

Implement inkOverflowTop/inkOverflowBottom for inline iterator (LineBox) so that we can
keep InlineContent internal to LayoutIntegration::LineLayout.

* layout/integration/InlineIteratorLineBox.h:
(WebCore::InlineIterator::LineBox::inkOverflowTop const):
(WebCore::InlineIterator::LineBox::inkOverflowBottom const):
* layout/integration/InlineIteratorLineBoxLegacyPath.h:
(WebCore::InlineIterator::LineBoxIteratorLegacyPath::inkOverflowTop const):
(WebCore::InlineIterator::LineBoxIteratorLegacyPath::inkOverflowBottom const):
* layout/integration/InlineIteratorLineBoxModernPath.h:
(WebCore::InlineIterator::LineBoxIteratorModernPath::inkOverflowTop const):
(WebCore::InlineIterator::LineBoxIteratorModernPath::inkOverflowBottom const):
* layout/integration/LayoutIntegrationLineLayout.cpp:
(WebCore::LayoutIntegration::LineLayout::hasVisualOverflow const):
* layout/integration/LayoutIntegrationLineLayout.h:
(WebCore::LayoutIntegration::LineLayout::isPaginated const):
(WebCore::LayoutIntegration::LineLayout::inlineContent const): Deleted.
* rendering/RenderBlockFlow.cpp:
(WebCore::RenderBlockFlow::layoutModernLines):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (292751 => 292752)


--- trunk/Source/WebCore/ChangeLog	2022-04-12 01:16:08 UTC (rev 292751)
+++ trunk/Source/WebCore/ChangeLog	2022-04-12 01:30:11 UTC (rev 292752)
@@ -1,3 +1,30 @@
+2022-04-11  Alan Bujtas  <za...@apple.com>
+
+        [IFC][Integration] LayoutIntegration::LineLayout should not expose InlineContent
+        https://bugs.webkit.org/show_bug.cgi?id=239059
+
+        Reviewed by Antti Koivisto.
+
+        Implement inkOverflowTop/inkOverflowBottom for inline iterator (LineBox) so that we can
+        keep InlineContent internal to LayoutIntegration::LineLayout.
+
+        * layout/integration/InlineIteratorLineBox.h:
+        (WebCore::InlineIterator::LineBox::inkOverflowTop const):
+        (WebCore::InlineIterator::LineBox::inkOverflowBottom const):
+        * layout/integration/InlineIteratorLineBoxLegacyPath.h:
+        (WebCore::InlineIterator::LineBoxIteratorLegacyPath::inkOverflowTop const):
+        (WebCore::InlineIterator::LineBoxIteratorLegacyPath::inkOverflowBottom const):
+        * layout/integration/InlineIteratorLineBoxModernPath.h:
+        (WebCore::InlineIterator::LineBoxIteratorModernPath::inkOverflowTop const):
+        (WebCore::InlineIterator::LineBoxIteratorModernPath::inkOverflowBottom const):
+        * layout/integration/LayoutIntegrationLineLayout.cpp:
+        (WebCore::LayoutIntegration::LineLayout::hasVisualOverflow const):
+        * layout/integration/LayoutIntegrationLineLayout.h:
+        (WebCore::LayoutIntegration::LineLayout::isPaginated const):
+        (WebCore::LayoutIntegration::LineLayout::inlineContent const): Deleted.
+        * rendering/RenderBlockFlow.cpp:
+        (WebCore::RenderBlockFlow::layoutModernLines):
+
 2022-04-11  Myles C. Maxfield  <mmaxfi...@apple.com>
 
         [WebGPU] Hook up device.queue to the IDL

Modified: trunk/Source/WebCore/layout/integration/InlineIteratorLineBox.h (292751 => 292752)


--- trunk/Source/WebCore/layout/integration/InlineIteratorLineBox.h	2022-04-12 01:16:08 UTC (rev 292751)
+++ trunk/Source/WebCore/layout/integration/InlineIteratorLineBox.h	2022-04-12 01:30:11 UTC (rev 292752)
@@ -67,6 +67,9 @@
     float contentLogicalTopAdjustedForPrecedingLineBox() const;
     float contentLogicalBottomAdjustedForFollowingLineBox() const;
 
+    float inkOverflowTop() const;
+    float inkOverflowBottom() const;
+
     const RenderBlockFlow& containingBlock() const;
     RenderFragmentContainer* containingFragment() const;
 
@@ -180,6 +183,20 @@
     });
 }
 
+inline float LineBox::inkOverflowTop() const
+{
+    return WTF::switchOn(m_pathVariant, [](const auto& path) {
+        return path.inkOverflowTop();
+    });
+}
+
+inline float LineBox::inkOverflowBottom() const
+{
+    return WTF::switchOn(m_pathVariant, [](const auto& path) {
+        return path.inkOverflowBottom();
+    });
+}
+
 inline float LineBox::contentLogicalLeft() const
 {
     return WTF::switchOn(m_pathVariant, [](const auto& path) {

Modified: trunk/Source/WebCore/layout/integration/InlineIteratorLineBoxLegacyPath.h (292751 => 292752)


--- trunk/Source/WebCore/layout/integration/InlineIteratorLineBoxLegacyPath.h	2022-04-12 01:16:08 UTC (rev 292751)
+++ trunk/Source/WebCore/layout/integration/InlineIteratorLineBoxLegacyPath.h	2022-04-12 01:30:11 UTC (rev 292752)
@@ -49,6 +49,8 @@
     float contentLogicalBottomAdjustedForFollowingLineBox() const { return m_rootInlineBox->selectionBottom().toFloat(); }
     float top() const { return m_rootInlineBox->lineBoxTop().toFloat(); }
     float bottom() const { return m_rootInlineBox->lineBoxBottom().toFloat(); }
+    float inkOverflowTop() const { return m_rootInlineBox->logicalTopVisualOverflow(); }
+    float inkOverflowBottom() const { return m_rootInlineBox->logicalBottomVisualOverflow(); }
 
     float contentLogicalLeft() const { return m_rootInlineBox->logicalLeft(); }
     float contentLogicalRight() const { return m_rootInlineBox->logicalRight(); }

Modified: trunk/Source/WebCore/layout/integration/InlineIteratorLineBoxModernPath.h (292751 => 292752)


--- trunk/Source/WebCore/layout/integration/InlineIteratorLineBoxModernPath.h	2022-04-12 01:16:08 UTC (rev 292751)
+++ trunk/Source/WebCore/layout/integration/InlineIteratorLineBoxModernPath.h	2022-04-12 01:30:11 UTC (rev 292752)
@@ -53,6 +53,8 @@
     float contentLogicalBottom() const { return line().enclosingContentBottom(); }
     float top() const { return line().lineBoxTop(); }
     float bottom() const { return line().lineBoxBottom(); }
+    float inkOverflowTop() const { return line().inkOverflow().y(); }
+    float inkOverflowBottom() const { return line().inkOverflow().maxY(); }
 
     float contentLogicalTopAdjustedForPrecedingLineBox() const { return !m_lineIndex ? contentLogicalTop() : LineBoxIteratorModernPath(*m_inlineContent, m_lineIndex - 1).contentLogicalBottomAdjustedForFollowingLineBox(); }
     // FIXME: Implement.

Modified: trunk/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.cpp (292751 => 292752)


--- trunk/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.cpp	2022-04-12 01:16:08 UTC (rev 292751)
+++ trunk/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.cpp	2022-04-12 01:30:11 UTC (rev 292752)
@@ -492,6 +492,11 @@
     return m_inlineContent->lines.size();
 }
 
+bool LineLayout::hasVisualOverflow() const
+{
+    return m_inlineContent && m_inlineContent->hasVisualOverflow();
+}
+
 LayoutUnit LineLayout::firstLinePhysicalBaseline() const
 {
     if (!m_inlineContent || m_inlineContent->lines.isEmpty()) {

Modified: trunk/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.h (292751 => 292752)


--- trunk/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.h	2022-04-12 01:16:08 UTC (rev 292751)
+++ trunk/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.h	2022-04-12 01:30:11 UTC (rev 292752)
@@ -91,22 +91,23 @@
     std::pair<LayoutUnit, LayoutUnit> computeIntrinsicWidthConstraints();
 
     void layout();
+    void paint(PaintInfo&, const LayoutPoint& paintOffset);
+    bool hitTest(const HitTestRequest&, HitTestResult&, const HitTestLocation&, const LayoutPoint& accumulatedOffset, HitTestAction);
+    void adjustForPagination();
 
+    void collectOverflow();
+    LayoutRect visualOverflowBoundingBoxRectFor(const RenderInline&) const;
+    Vector<FloatRect> collectInlineBoxRects(const RenderInline&) const;
+
+    bool isPaginated() const { return m_isPaginatedContent; }
     LayoutUnit contentLogicalHeight() const;
     size_t lineCount() const;
-
+    bool hasVisualOverflow() const;
     LayoutUnit firstLinePhysicalBaseline() const;
     LayoutUnit lastLineLogicalBaseline() const;
+    LayoutRect firstInlineBoxRect(const RenderInline&) const;
+    LayoutRect enclosingBorderBoxRectFor(const RenderInline&) const;
 
-    void adjustForPagination();
-    void collectOverflow();
-
-    const InlineContent* inlineContent() const { return m_inlineContent.get(); }
-    bool isPaginated() const { return m_isPaginatedContent; }
-
-    void paint(PaintInfo&, const LayoutPoint& paintOffset);
-    bool hitTest(const HitTestRequest&, HitTestResult&, const HitTestLocation&, const LayoutPoint& accumulatedOffset, HitTestAction);
-
     InlineIterator::TextBoxIterator textBoxesFor(const RenderText&) const;
     InlineIterator::LeafBoxIterator boxFor(const RenderElement&) const;
     InlineIterator::InlineBoxIterator firstInlineBoxFor(const RenderInline&) const;
@@ -114,11 +115,6 @@
     InlineIterator::LineBoxIterator firstLineBox() const;
     InlineIterator::LineBoxIterator lastLineBox() const;
 
-    LayoutRect firstInlineBoxRect(const RenderInline&) const;
-    LayoutRect enclosingBorderBoxRectFor(const RenderInline&) const;
-    LayoutRect visualOverflowBoundingBoxRectFor(const RenderInline&) const;
-    Vector<FloatRect> collectInlineBoxRects(const RenderInline&) const;
-
     const RenderObject& rendererForLayoutBox(const Layout::Box&) const;
     const RenderBlockFlow& flow() const { return m_boxTree.flow(); }
     RenderBlockFlow& flow() { return m_boxTree.flow(); }

Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.cpp (292751 => 292752)


--- trunk/Source/WebCore/rendering/RenderBlockFlow.cpp	2022-04-12 01:16:08 UTC (rev 292751)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.cpp	2022-04-12 01:30:11 UTC (rev 292752)
@@ -3645,13 +3645,11 @@
     repaintLogicalBottom = std::max(oldBorderBoxBottom, newBorderBoxBottom);
 
     auto inflateRepaintTopAndBottomWithInkOverflow = [&] {
-        auto* inlineContent = layoutFormattingContextLineLayout.inlineContent();
-        if (!inlineContent || !inlineContent->hasVisualOverflow())
+        if (!layoutFormattingContextLineLayout.hasVisualOverflow())
             return;
-        for (auto& line : inlineContent->lines) {
-            auto inkOverflow = LayoutRect { line.inkOverflow() };
-            repaintLogicalTop = std::min(repaintLogicalTop, inkOverflow.y());
-            repaintLogicalBottom = std::max(repaintLogicalBottom, inkOverflow.maxY());
+        for (auto lineBox = InlineIterator::firstLineBoxFor(*this); lineBox; lineBox.traverseNext()) {
+            repaintLogicalTop = std::min(repaintLogicalTop, LayoutUnit { lineBox->inkOverflowTop() });
+            repaintLogicalBottom = std::max(repaintLogicalBottom, LayoutUnit { lineBox->inkOverflowBottom() });
         }
     };
     inflateRepaintTopAndBottomWithInkOverflow();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to