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();