Title: [290649] trunk/Source/WebCore
Revision
290649
Author
[email protected]
Date
2022-03-01 08:19:30 -0800 (Tue, 01 Mar 2022)

Log Message

[IFC][Integration] InlineIterator::Box::rect() returns the unflipped visual rect
https://bugs.webkit.org/show_bug.cgi?id=237304

Reviewed by Antti Koivisto.

Rename InlineIterator::Box::rect() to visualRectIgnoringBlockDirection().
This is the unflipped version of the visual rect. It's no longer logical but
when the writing mode sets right-to-left/bottom-to-top block direction, it's not yet visual either.
It'll help to indentify callsites where we actually need the flipped version of this visual rect.

* layout/formattingContexts/inline/display/InlineDisplayBox.h:
(WebCore::InlineDisplay::Box::unflippedVisualRect const):
(WebCore::InlineDisplay::Box::top const):
(WebCore::InlineDisplay::Box::bottom const):
(WebCore::InlineDisplay::Box::left const):
(WebCore::InlineDisplay::Box::right const):
(WebCore::InlineDisplay::Box::width const):
(WebCore::InlineDisplay::Box::height const):
(WebCore::InlineDisplay::Box::moveVertically):
(WebCore::InlineDisplay::Box::moveHorizontally):
(WebCore::InlineDisplay::Box::setLeft):
(WebCore::InlineDisplay::Box::setRight):
(WebCore::InlineDisplay::Box::setTop):
(WebCore::InlineDisplay::Box::setBottom):
(WebCore::InlineDisplay::Box::setRect):
(WebCore::InlineDisplay::Box::Box):
(WebCore::InlineDisplay::Box::truncate):
(WebCore::InlineDisplay::Box::rect const): Deleted.
* layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
(WebCore::Layout::InlineDisplayContentBuilder::adjustVisualGeometryForDisplayBox):
* layout/integration/InlineIteratorBox.h:
(WebCore::InlineIterator::Box::logicalTop const):
(WebCore::InlineIterator::Box::logicalBottom const):
(WebCore::InlineIterator::Box::logicalLeft const):
(WebCore::InlineIterator::Box::logicalRight const):
(WebCore::InlineIterator::Box::logicalWidth const):
(WebCore::InlineIterator::Box::logicalHeight const):
(WebCore::InlineIterator::Box::unflippedVisualRect const):
(WebCore::InlineIterator::Box::rect const): Deleted.
* layout/integration/InlineIteratorBoxLegacyPath.h:
(WebCore::InlineIterator::BoxLegacyPath::unflippedVisualRect const):
(WebCore::InlineIterator::BoxLegacyPath::rect const): Deleted.
* layout/integration/InlineIteratorBoxModernPath.h:
(WebCore::InlineIterator::BoxModernPath::unflippedVisualRect const):
(WebCore::InlineIterator::BoxModernPath::createTextRun const):
(WebCore::InlineIterator::BoxModernPath::rect const): Deleted.
* layout/integration/LayoutIntegrationBoxTree.cpp:
(WebCore::LayoutIntegration::showInlineContent):
* layout/integration/LayoutIntegrationLineLayout.cpp:
(WebCore::LayoutIntegration::LineLayout::firstInlineBoxRect const):
(WebCore::LayoutIntegration::LineLayout::collectInlineBoxRects const):
(WebCore::LayoutIntegration::LineLayout::hitTest):
* layout/layouttree/LayoutTreeBuilder.cpp:
(WebCore::Layout::showInlineTreeAndRuns):
* rendering/InlineBoxPainter.cpp:
(WebCore::InlineBoxPainter::paintMask):
(WebCore::InlineBoxPainter::paintDecorations):
(WebCore::InlineBoxPainter::paintFillLayer):
* rendering/RenderBlockFlow.cpp:
(WebCore::RenderBlockFlow::addFocusRingRectsForInlineChildren):
* rendering/RenderBoxModelObject.cpp:
(WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
(WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry const):
(WebCore::pixelSnapBackgroundImageGeometryForPainting): Deleted.
* rendering/RenderInline.cpp:
(WebCore::RenderInline::paintOutline):
* rendering/RenderLineBreak.cpp:
(WebCore::RenderLineBreak::linesBoundingBox const):
(WebCore::RenderLineBreak::absoluteRects const):
(WebCore::RenderLineBreak::absoluteQuads const):
* rendering/RenderText.cpp:
(WebCore::RenderText::absoluteRects const):
(WebCore::boundariesForTextRun):
(WebCore::localQuadForTextRun):
(WebCore::RenderText::firstRunLocation const):
(WebCore::RenderText::linesBoundingBox const):
* rendering/RenderTreeAsText.cpp:
(WebCore::write):
* rendering/TextBoxPainter.cpp:
(WebCore::TextBoxPainter::computePaintRect):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (290648 => 290649)


--- trunk/Source/WebCore/ChangeLog	2022-03-01 16:18:35 UTC (rev 290648)
+++ trunk/Source/WebCore/ChangeLog	2022-03-01 16:19:30 UTC (rev 290649)
@@ -1,3 +1,86 @@
+2022-03-01  Alan Bujtas  <[email protected]>
+
+        [IFC][Integration] InlineIterator::Box::rect() returns the unflipped visual rect
+        https://bugs.webkit.org/show_bug.cgi?id=237304
+
+        Reviewed by Antti Koivisto.
+
+        Rename InlineIterator::Box::rect() to visualRectIgnoringBlockDirection().
+        This is the unflipped version of the visual rect. It's no longer logical but
+        when the writing mode sets right-to-left/bottom-to-top block direction, it's not yet visual either.
+        It'll help to indentify callsites where we actually need the flipped version of this visual rect.
+
+        * layout/formattingContexts/inline/display/InlineDisplayBox.h:
+        (WebCore::InlineDisplay::Box::unflippedVisualRect const):
+        (WebCore::InlineDisplay::Box::top const):
+        (WebCore::InlineDisplay::Box::bottom const):
+        (WebCore::InlineDisplay::Box::left const):
+        (WebCore::InlineDisplay::Box::right const):
+        (WebCore::InlineDisplay::Box::width const):
+        (WebCore::InlineDisplay::Box::height const):
+        (WebCore::InlineDisplay::Box::moveVertically):
+        (WebCore::InlineDisplay::Box::moveHorizontally):
+        (WebCore::InlineDisplay::Box::setLeft):
+        (WebCore::InlineDisplay::Box::setRight):
+        (WebCore::InlineDisplay::Box::setTop):
+        (WebCore::InlineDisplay::Box::setBottom):
+        (WebCore::InlineDisplay::Box::setRect):
+        (WebCore::InlineDisplay::Box::Box):
+        (WebCore::InlineDisplay::Box::truncate):
+        (WebCore::InlineDisplay::Box::rect const): Deleted.
+        * layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp:
+        (WebCore::Layout::InlineDisplayContentBuilder::adjustVisualGeometryForDisplayBox):
+        * layout/integration/InlineIteratorBox.h:
+        (WebCore::InlineIterator::Box::logicalTop const):
+        (WebCore::InlineIterator::Box::logicalBottom const):
+        (WebCore::InlineIterator::Box::logicalLeft const):
+        (WebCore::InlineIterator::Box::logicalRight const):
+        (WebCore::InlineIterator::Box::logicalWidth const):
+        (WebCore::InlineIterator::Box::logicalHeight const):
+        (WebCore::InlineIterator::Box::unflippedVisualRect const):
+        (WebCore::InlineIterator::Box::rect const): Deleted.
+        * layout/integration/InlineIteratorBoxLegacyPath.h:
+        (WebCore::InlineIterator::BoxLegacyPath::unflippedVisualRect const):
+        (WebCore::InlineIterator::BoxLegacyPath::rect const): Deleted.
+        * layout/integration/InlineIteratorBoxModernPath.h:
+        (WebCore::InlineIterator::BoxModernPath::unflippedVisualRect const):
+        (WebCore::InlineIterator::BoxModernPath::createTextRun const):
+        (WebCore::InlineIterator::BoxModernPath::rect const): Deleted.
+        * layout/integration/LayoutIntegrationBoxTree.cpp:
+        (WebCore::LayoutIntegration::showInlineContent):
+        * layout/integration/LayoutIntegrationLineLayout.cpp:
+        (WebCore::LayoutIntegration::LineLayout::firstInlineBoxRect const):
+        (WebCore::LayoutIntegration::LineLayout::collectInlineBoxRects const):
+        (WebCore::LayoutIntegration::LineLayout::hitTest):
+        * layout/layouttree/LayoutTreeBuilder.cpp:
+        (WebCore::Layout::showInlineTreeAndRuns):
+        * rendering/InlineBoxPainter.cpp:
+        (WebCore::InlineBoxPainter::paintMask):
+        (WebCore::InlineBoxPainter::paintDecorations):
+        (WebCore::InlineBoxPainter::paintFillLayer):
+        * rendering/RenderBlockFlow.cpp:
+        (WebCore::RenderBlockFlow::addFocusRingRectsForInlineChildren):
+        * rendering/RenderBoxModelObject.cpp:
+        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
+        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry const):
+        (WebCore::pixelSnapBackgroundImageGeometryForPainting): Deleted.
+        * rendering/RenderInline.cpp:
+        (WebCore::RenderInline::paintOutline):
+        * rendering/RenderLineBreak.cpp:
+        (WebCore::RenderLineBreak::linesBoundingBox const):
+        (WebCore::RenderLineBreak::absoluteRects const):
+        (WebCore::RenderLineBreak::absoluteQuads const):
+        * rendering/RenderText.cpp:
+        (WebCore::RenderText::absoluteRects const):
+        (WebCore::boundariesForTextRun):
+        (WebCore::localQuadForTextRun):
+        (WebCore::RenderText::firstRunLocation const):
+        (WebCore::RenderText::linesBoundingBox const):
+        * rendering/RenderTreeAsText.cpp:
+        (WebCore::write):
+        * rendering/TextBoxPainter.cpp:
+        (WebCore::TextBoxPainter::computePaintRect):
+
 2022-03-01  Wenson Hsieh  <[email protected]>
 
         focus({preventScroll: true}) does not prevent scrolling on iOS

Modified: trunk/Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayBox.h (290648 => 290649)


--- trunk/Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayBox.h	2022-03-01 16:18:35 UTC (rev 290648)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayBox.h	2022-03-01 16:19:30 UTC (rev 290649)
@@ -98,25 +98,25 @@
 
     bool hasContent() const { return m_hasContent; }
 
-    const FloatRect& rect() const { return m_physicalRect; }
+    const FloatRect& visualRectIgnoringBlockDirection() const { return m_unflippedVisualRect; }
     const FloatRect& inkOverflow() const { return m_inkOverflow; }
 
-    float top() const { return rect().y(); }
-    float bottom() const { return rect().maxY(); }
-    float left() const { return rect().x(); }
-    float right() const { return rect().maxX(); }
+    float top() const { return visualRectIgnoringBlockDirection().y(); }
+    float bottom() const { return visualRectIgnoringBlockDirection().maxY(); }
+    float left() const { return visualRectIgnoringBlockDirection().x(); }
+    float right() const { return visualRectIgnoringBlockDirection().maxX(); }
 
-    float width() const { return rect().width(); }
-    float height() const { return rect().height(); }
+    float width() const { return visualRectIgnoringBlockDirection().width(); }
+    float height() const { return visualRectIgnoringBlockDirection().height(); }
 
     void moveVertically(float offset)
     {
-        m_physicalRect.move({ { }, offset });
+        m_unflippedVisualRect.move({ { }, offset });
         m_inkOverflow.move({ { }, offset });
     }
     void moveHorizontally(float offset)
     {
-        m_physicalRect.move({ offset, { } });
+        m_unflippedVisualRect.move({ offset, { } });
         m_inkOverflow.move({ offset, { } });
     }
     void adjustInkOverflow(const FloatRect& childBorderBox) { return m_inkOverflow.uniteEvenIfEmpty(childBorderBox); }
@@ -124,30 +124,30 @@
     void setLeft(float pysicalLeft)
     {
         auto offset = pysicalLeft - left();
-        m_physicalRect.setX(pysicalLeft);
+        m_unflippedVisualRect.setX(pysicalLeft);
         m_inkOverflow.setX(m_inkOverflow.x() + offset);
     }
     void setRight(float physicalRight)
     {
         auto offset = physicalRight - right();
-        m_physicalRect.shiftMaxXEdgeTo(physicalRight);
+        m_unflippedVisualRect.shiftMaxXEdgeTo(physicalRight);
         m_inkOverflow.shiftMaxXEdgeTo(m_inkOverflow.maxX() + offset);
     }
     void setTop(float physicalTop)
     {
         auto offset = physicalTop - top();
-        m_physicalRect.setY(physicalTop);
+        m_unflippedVisualRect.setY(physicalTop);
         m_inkOverflow.shiftMaxYEdgeTo(m_inkOverflow.y() + offset);
     }
     void setBottom(float physicalBottom)
     {
         auto offset = physicalBottom - bottom();
-        m_physicalRect.shiftMaxYEdgeTo(physicalBottom);
+        m_unflippedVisualRect.shiftMaxYEdgeTo(physicalBottom);
         m_inkOverflow.shiftMaxYEdgeTo(m_inkOverflow.maxY() + offset);
     }
     void setRect(const FloatRect& rect, const FloatRect& inkOverflow)
     {
-        m_physicalRect = rect;
+        m_unflippedVisualRect = rect;
         m_inkOverflow = inkOverflow;
     }
     void setHasContent() { m_hasContent = true; }
@@ -178,7 +178,7 @@
     const Type m_type { Type::GenericInlineLevelBox };
     CheckedRef<const Layout::Box> m_layoutBox;
     UBiDiLevel m_bidiLevel { UBIDI_DEFAULT_LTR };
-    FloatRect m_physicalRect;
+    FloatRect m_unflippedVisualRect;
     FloatRect m_inkOverflow;
     bool m_hasContent : 1;
     bool m_isFirstForLayoutBox : 1;
@@ -192,7 +192,7 @@
     , m_type(type)
     , m_layoutBox(layoutBox)
     , m_bidiLevel(bidiLevel)
-    , m_physicalRect(physicalRect)
+    , m_unflippedVisualRect(physicalRect)
     , m_inkOverflow(inkOverflow)
     , m_hasContent(hasContent)
     , m_isFirstForLayoutBox(positionWithinInlineLevelBox.contains(PositionWithinInlineLevelBox::First))
@@ -213,8 +213,8 @@
 
 inline void Box::truncate(float truncatedwidth)
 {
-    m_physicalRect.setWidth(truncatedwidth);
-    m_inkOverflow.shiftMaxXEdgeTo(m_physicalRect.maxY());
+    m_unflippedVisualRect.setWidth(truncatedwidth);
+    m_inkOverflow.shiftMaxXEdgeTo(m_unflippedVisualRect.maxY());
 }
 
 }

Modified: trunk/Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp (290648 => 290649)


--- trunk/Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp	2022-03-01 16:18:35 UTC (rev 290648)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayContentBuilder.cpp	2022-03-01 16:19:30 UTC (rev 290649)
@@ -526,13 +526,13 @@
     afterInlineBoxContent();
 
     auto computeInkOverflow = [&] {
-        auto inkOverflow = FloatRect { displayBox.rect() };
+        auto inkOverflow = FloatRect { displayBox.visualRectIgnoringBlockDirection() };
         m_contentHasInkOverflow = computeBoxShadowInkOverflow(!m_lineIndex ? layoutBox.firstLineStyle() : layoutBox.style(), inkOverflow) || m_contentHasInkOverflow;
         displayBox.adjustInkOverflow(inkOverflow);
     };
     computeInkOverflow();
 
-    setInlineBoxGeometry(layoutBox, displayBox.rect(), isFirstBox);
+    setInlineBoxGeometry(layoutBox, displayBox.visualRectIgnoringBlockDirection(), isFirstBox);
     if (lineBox.inlineLevelBoxForLayoutBox(layoutBox).hasContent())
         displayBox.setHasContent();
 }

Modified: trunk/Source/WebCore/layout/integration/InlineIteratorBox.h (290648 => 290649)


--- trunk/Source/WebCore/layout/integration/InlineIteratorBox.h	2022-03-01 16:18:35 UTC (rev 290648)
+++ trunk/Source/WebCore/layout/integration/InlineIteratorBox.h	2022-03-01 16:19:30 UTC (rev 290649)
@@ -60,14 +60,14 @@
     bool isInlineBox() const;
     bool isRootInlineBox() const;
 
-    FloatRect rect() const;
+    FloatRect visualRectIgnoringBlockDirection() const;
 
-    float logicalTop() const { return isHorizontal() ? rect().y() : rect().x(); }
-    float logicalBottom() const { return isHorizontal() ? rect().maxY() : rect().maxX(); }
-    float logicalLeft() const { return isHorizontal() ? rect().x() : rect().y(); }
-    float logicalRight() const { return isHorizontal() ? rect().maxX() : rect().maxY(); }
-    float logicalWidth() const { return isHorizontal() ? rect().width() : rect().height(); }
-    float logicalHeight() const { return isHorizontal() ? rect().height() : rect().width(); }
+    float logicalTop() const { return isHorizontal() ? visualRectIgnoringBlockDirection().y() : visualRectIgnoringBlockDirection().x(); }
+    float logicalBottom() const { return isHorizontal() ? visualRectIgnoringBlockDirection().maxY() : visualRectIgnoringBlockDirection().maxX(); }
+    float logicalLeft() const { return isHorizontal() ? visualRectIgnoringBlockDirection().x() : visualRectIgnoringBlockDirection().y(); }
+    float logicalRight() const { return isHorizontal() ? visualRectIgnoringBlockDirection().maxX() : visualRectIgnoringBlockDirection().maxY(); }
+    float logicalWidth() const { return isHorizontal() ? visualRectIgnoringBlockDirection().width() : visualRectIgnoringBlockDirection().height(); }
+    float logicalHeight() const { return isHorizontal() ? visualRectIgnoringBlockDirection().height() : visualRectIgnoringBlockDirection().width(); }
 
     bool isHorizontal() const;
     bool isLineBreak() const;
@@ -183,10 +183,10 @@
     });
 }
 
-inline FloatRect Box::rect() const
+inline FloatRect Box::visualRectIgnoringBlockDirection() const
 {
     return WTF::switchOn(m_pathVariant, [](auto& path) {
-        return path.rect();
+        return path.visualRectIgnoringBlockDirection();
     });
 }
 

Modified: trunk/Source/WebCore/layout/integration/InlineIteratorBoxLegacyPath.h (290648 => 290649)


--- trunk/Source/WebCore/layout/integration/InlineIteratorBoxLegacyPath.h	2022-03-01 16:18:35 UTC (rev 290648)
+++ trunk/Source/WebCore/layout/integration/InlineIteratorBoxLegacyPath.h	2022-03-01 16:19:30 UTC (rev 290649)
@@ -46,7 +46,7 @@
     bool isInlineBox() const { return m_inlineBox->isInlineFlowBox(); }
     bool isRootInlineBox() const { return m_inlineBox->isRootInlineBox(); }
 
-    FloatRect rect() const { return m_inlineBox->frameRect(); }
+    FloatRect visualRectIgnoringBlockDirection() const { return m_inlineBox->frameRect(); }
 
     bool isHorizontal() const { return m_inlineBox->isHorizontal(); }
     bool isLineBreak() const { return m_inlineBox->isLineBreak(); }

Modified: trunk/Source/WebCore/layout/integration/InlineIteratorBoxModernPath.h (290648 => 290649)


--- trunk/Source/WebCore/layout/integration/InlineIteratorBoxModernPath.h	2022-03-01 16:18:35 UTC (rev 290648)
+++ trunk/Source/WebCore/layout/integration/InlineIteratorBoxModernPath.h	2022-03-01 16:19:30 UTC (rev 290649)
@@ -52,7 +52,7 @@
     bool isInlineBox() const { return box().isInlineBox(); }
     bool isRootInlineBox() const { return box().isRootInlineBox(); }
 
-    FloatRect rect() const { return box().rect(); }
+    FloatRect visualRectIgnoringBlockDirection() const { return box().visualRectIgnoringBlockDirection(); }
 
     bool isHorizontal() const { return box().isHorizontal(); }
     bool isLineBreak() const { return box().isLineBreak(); }
@@ -82,7 +82,7 @@
     {
         auto& style = box().style();
         auto expansion = box().expansion();
-        auto rect = this->rect();
+        auto rect = this->visualRectIgnoringBlockDirection();
         auto xPos = rect.x() - (line().lineBoxLeft() + line().contentLogicalOffset());
 
         auto textForRun = [&] {

Modified: trunk/Source/WebCore/layout/integration/LayoutIntegrationBoxTree.cpp (290648 => 290649)


--- trunk/Source/WebCore/layout/integration/LayoutIntegrationBoxTree.cpp	2022-03-01 16:18:35 UTC (rev 290648)
+++ trunk/Source/WebCore/layout/integration/LayoutIntegrationBoxTree.cpp	2022-03-01 16:19:30 UTC (rev 290649)
@@ -276,7 +276,7 @@
         auto outputInlineLevelBox = [&](const auto& inlineLevelBox) {
             addSpacing();
             stream << "    ";
-            auto rect = inlineLevelBox.rect();
+            auto rect = inlineLevelBox.visualRectIgnoringBlockDirection();
             auto& layoutBox = inlineLevelBox.layoutBox();
             if (layoutBox.isAtomicInlineLevelBox())
                 stream << "Atomic inline level box";

Modified: trunk/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.cpp (290648 => 290649)


--- trunk/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.cpp	2022-03-01 16:18:35 UTC (rev 290648)
+++ trunk/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.cpp	2022-03-01 16:19:30 UTC (rev 290649)
@@ -614,7 +614,7 @@
 
     // FIXME: We should be able to flip the display boxes soon after the root block
     // is finished sizing in one go.
-    auto firstBoxRect = Layout::toLayoutRect(firstBox->rect());
+    auto firstBoxRect = Layout::toLayoutRect(firstBox->visualRectIgnoringBlockDirection());
     switch (rootLayoutBox().style().writingMode()) {
     case WritingMode::TopToBottom:
     case WritingMode::LeftToRight:
@@ -664,7 +664,7 @@
 
     Vector<FloatRect> result;
     m_inlineContent->traverseNonRootInlineBoxes(layoutBox, [&](auto& inlineBox) {
-        result.append(inlineBox.rect());
+        result.append(inlineBox.visualRectIgnoringBlockDirection());
     });
 
     return result;
@@ -811,7 +811,7 @@
             continue;
         }
 
-        auto boxRect = flippedRectForWritingMode(flow(), box.rect());
+        auto boxRect = flippedRectForWritingMode(flow(), box.visualRectIgnoringBlockDirection());
         boxRect.moveBy(accumulatedOffset);
 
         if (!locationInContainer.intersects(boxRect))

Modified: trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp (290648 => 290649)


--- trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp	2022-03-01 16:18:35 UTC (rev 290648)
+++ trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp	2022-03-01 16:19:30 UTC (rev 290649)
@@ -386,7 +386,7 @@
         auto outputInlineLevelBox = [&](const auto& inlineLevelBox) {
             addSpacing();
             stream << "    ";
-            auto rect = inlineLevelBox.rect();
+            auto rect = inlineLevelBox.visualRectIgnoringBlockDirection();
             auto& layoutBox = inlineLevelBox.layoutBox();
             if (layoutBox.isAtomicInlineLevelBox())
                 stream << "Atomic inline level box";

Modified: trunk/Source/WebCore/rendering/InlineBoxPainter.cpp (290648 => 290649)


--- trunk/Source/WebCore/rendering/InlineBoxPainter.cpp	2022-03-01 16:18:35 UTC (rev 290648)
+++ trunk/Source/WebCore/rendering/InlineBoxPainter.cpp	2022-03-01 16:19:30 UTC (rev 290649)
@@ -141,7 +141,7 @@
         return;
 
     // Move x/y to our coordinates.
-    LayoutRect localRect(m_inlineBox.rect());
+    LayoutRect localRect(m_inlineBox.visualRectIgnoringBlockDirection());
     m_inlineBox.line()->containingBlock().flipForWritingMode(localRect);
     LayoutPoint adjustedPaintOffset = m_paintOffset + localRect.location();
 
@@ -218,7 +218,7 @@
         return;
 
     // Move x/y to our coordinates.
-    LayoutRect localRect(m_inlineBox.rect());
+    LayoutRect localRect(m_inlineBox.visualRectIgnoringBlockDirection());
     m_inlineBox.line()->containingBlock().flipForWritingMode(localRect);
 
     LayoutPoint adjustedPaintoffset = m_paintOffset + localRect.location();
@@ -305,7 +305,7 @@
 #if ENABLE(CSS_BOX_DECORATION_BREAK)
     if (renderer().style().boxDecorationBreak() == BoxDecorationBreak::Clone) {
         GraphicsContextStateSaver stateSaver(m_paintInfo.context());
-        m_paintInfo.context().clip({ rect.x(), rect.y(), LayoutUnit(m_inlineBox.rect().width()), LayoutUnit(m_inlineBox.rect().height()) });
+        m_paintInfo.context().clip({ rect.location(), m_inlineBox.visualRectIgnoringBlockDirection().size() });
         renderer().paintFillLayerExtended(m_paintInfo, color, fillLayer, rect, BackgroundBleedNone, m_inlineBox, { }, op);
         return;
     }
@@ -335,8 +335,8 @@
     LayoutRect backgroundImageStrip {
         rect.x() - (isHorizontal() ? logicalOffsetOnLine : 0_lu),
         rect.y() - (isHorizontal() ? 0_lu : logicalOffsetOnLine),
-        isHorizontal() ? totalLogicalWidth : LayoutUnit(m_inlineBox.rect().width()),
-        isHorizontal() ? LayoutUnit(m_inlineBox.rect().height()) : totalLogicalWidth
+        isHorizontal() ? totalLogicalWidth : LayoutUnit(m_inlineBox.visualRectIgnoringBlockDirection().width()),
+        isHorizontal() ? LayoutUnit(m_inlineBox.visualRectIgnoringBlockDirection().height()) : totalLogicalWidth
     };
 
     GraphicsContextStateSaver stateSaver(m_paintInfo.context());

Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.cpp (290648 => 290649)


--- trunk/Source/WebCore/rendering/RenderBlockFlow.cpp	2022-03-01 16:18:35 UTC (rev 290648)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.cpp	2022-03-01 16:19:30 UTC (rev 290649)
@@ -3456,9 +3456,13 @@
     for (auto box = InlineIterator::firstRootInlineBoxFor(*this); box; box.traverseNextInlineBox()) {
         auto line = box->line();
         // FIXME: This is mixing physical and logical coordinates.
-        LayoutUnit top = std::max(line->top(), LayoutUnit(box->rect().y()));
-        LayoutUnit bottom = std::min(line->bottom(), LayoutUnit(box->rect().maxY()));
-        LayoutRect rect { LayoutUnit(additionalOffset.x() + box->rect().x()), additionalOffset.y() + top, LayoutUnit(box->rect().width()), bottom - top };
+        auto unflippedVisualRect = box->visualRectIgnoringBlockDirection();
+        auto top = std::max(line->top(), LayoutUnit { unflippedVisualRect.y() });
+        auto bottom = std::min(line->bottom(), LayoutUnit { unflippedVisualRect.maxY() });
+        auto rect = LayoutRect { LayoutUnit { additionalOffset.x() + unflippedVisualRect.x() }
+            , additionalOffset.y() + top
+            , LayoutUnit { unflippedVisualRect.width() }
+            , bottom - top };
         if (!rect.isEmpty())
             rects.append(rect);
     }

Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp (290648 => 290649)


--- trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp	2022-03-01 16:18:35 UTC (rev 290648)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp	2022-03-01 16:19:30 UTC (rev 290649)
@@ -722,7 +722,7 @@
     // the painter it should just modify the clip.
     PaintInfo maskInfo(maskImageContext, LayoutRect { maskRect }, PaintPhase::TextClip, PaintBehavior::ForceBlackText);
     if (inlineBox) {
-        auto paintOffset = scrolledPaintRect.location() - toLayoutSize(LayoutPoint(inlineBox->rect().location()));
+        auto paintOffset = scrolledPaintRect.location() - toLayoutSize(LayoutPoint(inlineBox->visualRectIgnoringBlockDirection().location()));
 
         for (auto box = inlineBox->firstLeafBox(), end = inlineBox->endLeafBox(); box != end; box.traverseNextOnLine()) {
             if (!box->isText())

Modified: trunk/Source/WebCore/rendering/RenderInline.cpp (290648 => 290649)


--- trunk/Source/WebCore/rendering/RenderInline.cpp	2022-03-01 16:18:35 UTC (rev 290648)
+++ trunk/Source/WebCore/rendering/RenderInline.cpp	2022-03-01 16:19:30 UTC (rev 290649)
@@ -977,7 +977,7 @@
         LayoutUnit top = std::max(line->top(), LayoutUnit(box->logicalTop()));
         LayoutUnit bottom = std::min(line->bottom(), LayoutUnit(box->logicalBottom()));
         // FIXME: This is mixing physical and logical coordinates.
-        rects.append({ LayoutUnit(box->rect().x()), top, LayoutUnit(box->logicalWidth()), bottom - top });
+        rects.append({ LayoutUnit(box->visualRectIgnoringBlockDirection().x()), top, LayoutUnit(box->logicalWidth()), bottom - top });
     }
     rects.append(LayoutRect());
 

Modified: trunk/Source/WebCore/rendering/RenderLineBreak.cpp (290648 => 290649)


--- trunk/Source/WebCore/rendering/RenderLineBreak.cpp	2022-03-01 16:18:35 UTC (rev 290648)
+++ trunk/Source/WebCore/rendering/RenderLineBreak.cpp	2022-03-01 16:19:30 UTC (rev 290649)
@@ -149,7 +149,7 @@
     if (!run)
         return { };
 
-    return enclosingIntRect(run->rect());
+    return enclosingIntRect(run->visualRectIgnoringBlockDirection());
 }
 
 void RenderLineBreak::absoluteRects(Vector<IntRect>& rects, const LayoutPoint& accumulatedOffset) const
@@ -158,7 +158,7 @@
     if (!box)
         return;
 
-    auto rect = box->rect();
+    auto rect = box->visualRectIgnoringBlockDirection();
     rects.append(enclosingIntRect(FloatRect(accumulatedOffset + rect.location(), rect.size())));
 }
 
@@ -168,7 +168,7 @@
     if (!box)
         return;
 
-    auto rect = box->rect();
+    auto rect = box->visualRectIgnoringBlockDirection();
     quads.append(localToAbsoluteQuad(FloatRect(rect.location(), rect.size()), UseTransforms, wasFixed));
 }
 

Modified: trunk/Source/WebCore/rendering/RenderText.cpp (290648 => 290649)


--- trunk/Source/WebCore/rendering/RenderText.cpp	2022-03-01 16:18:35 UTC (rev 290648)
+++ trunk/Source/WebCore/rendering/RenderText.cpp	2022-03-01 16:19:30 UTC (rev 290649)
@@ -312,7 +312,7 @@
 void RenderText::absoluteRects(Vector<IntRect>& rects, const LayoutPoint& accumulatedOffset) const
 {
     for (auto& run : InlineIterator::textBoxesFor(*this)) {
-        auto rect = run.rect();
+        auto rect = run.visualRectIgnoringBlockDirection();
         rects.append(enclosingIntRect(FloatRect(accumulatedOffset + rect.location(), rect.size())));
     }
 }
@@ -395,7 +395,7 @@
     if (is<SVGInlineTextBox>(run.legacyInlineBox()))
         return downcast<SVGInlineTextBox>(*run.legacyInlineBox()).calculateBoundaries();
 
-    return run.rect();
+    return run.visualRectIgnoringBlockDirection();
 }
 
 static IntRect ellipsisRectForTextRun(const InlineIterator::TextBox& run, unsigned start, unsigned end)
@@ -470,7 +470,7 @@
     if (useSelectionHeight)
         return boxSelectionRect;
 
-    auto rect = run.rect();
+    auto rect = run.visualRectIgnoringBlockDirection();
     if (run.isHorizontal()) {
         boxSelectionRect.setHeight(rect.height());
         boxSelectionRect.setY(rect.y());
@@ -682,8 +682,8 @@
             if (pointBlockDirection < bottom || (blocksAreFlipped && pointBlockDirection == bottom)) {
                 ShouldAffinityBeDownstream shouldAffinityBeDownstream;
 #if PLATFORM(IOS_FAMILY)
-                if (pointLineDirection != run->logicalLeft() && point.x() < run->rect().x() + run->logicalWidth()) {
-                    int half = run->rect().x() + run->logicalWidth() / 2;
+                if (pointLineDirection != run->logicalLeft() && point.x() < run->visualRectIgnoringBlockDirection().x() + run->logicalWidth()) {
+                    int half = run->visualRectIgnoringBlockDirection().x() + run->logicalWidth() / 2;
                     auto affinity = point.x() < half ? Affinity::Downstream : Affinity::Upstream;
                     return createVisiblePosition(run->offsetForPosition(pointLineDirection) + run->start(), affinity);
                 }
@@ -1275,7 +1275,7 @@
     auto first = InlineIterator::firstTextBoxFor(*this);
     if (!first)
         return { };
-    return IntPoint(first->rect().location());
+    return IntPoint(first->visualRectIgnoringBlockDirection().location());
 }
 
 void RenderText::setSelectionState(HighlightState state)
@@ -1577,13 +1577,13 @@
 
 IntRect RenderText::linesBoundingBox() const
 {
-    auto first = InlineIterator::firstTextBoxFor(*this);
-    if (!first)
+    auto firstTextBox = InlineIterator::firstTextBoxFor(*this);
+    if (!firstTextBox)
         return { };
 
-    auto boundingBox = first->rect();
-    for (auto box = first; ++box;)
-        boundingBox.uniteEvenIfEmpty(box->rect());
+    auto boundingBox = firstTextBox->visualRectIgnoringBlockDirection();
+    for (auto textBox = firstTextBox; ++textBox;)
+        boundingBox.uniteEvenIfEmpty(textBox->visualRectIgnoringBlockDirection());
 
     return enclosingIntRect(boundingBox);
 }

Modified: trunk/Source/WebCore/rendering/RenderTreeAsText.cpp (290648 => 290649)


--- trunk/Source/WebCore/rendering/RenderTreeAsText.cpp	2022-03-01 16:18:35 UTC (rev 290648)
+++ trunk/Source/WebCore/rendering/RenderTreeAsText.cpp	2022-03-01 16:19:30 UTC (rev 290649)
@@ -542,7 +542,7 @@
 {
     auto writeTextRun = [&](auto& textRenderer, auto& textRun)
     {
-        auto rect = textRun.rect();
+        auto rect = textRun.visualRectIgnoringBlockDirection();
         int x = rect.x();
         int y = rect.y();
         // FIXME: Use non-logical width. webkit.org/b/206809.

Modified: trunk/Source/WebCore/rendering/TextBoxPainter.cpp (290648 => 290649)


--- trunk/Source/WebCore/rendering/TextBoxPainter.cpp	2022-03-01 16:18:35 UTC (rev 290648)
+++ trunk/Source/WebCore/rendering/TextBoxPainter.cpp	2022-03-01 16:19:30 UTC (rev 290649)
@@ -573,7 +573,7 @@
     localPaintOffset.move(0, m_style.isHorizontalWritingMode() ? 0 : -textBox().logicalHeight());
 
     auto locationIncludingFlipping = [&]() -> FloatPoint {
-        auto rect = textBox().rect();
+        auto rect = textBox().visualRectIgnoringBlockDirection();
         if (!m_style.isFlippedBlocksWritingMode())
             return rect.location();
         auto& block = textBox().line()->containingBlock();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to