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