Modified: trunk/Source/WebCore/ChangeLog (268953 => 268954)
--- trunk/Source/WebCore/ChangeLog 2020-10-24 20:19:25 UTC (rev 268953)
+++ trunk/Source/WebCore/ChangeLog 2020-10-24 22:55:57 UTC (rev 268954)
@@ -1,5 +1,19 @@
2020-10-24 Simon Fraser <[email protected]>
+ [LFC Display] Create display boxes for atomic inlines and inline blocks
+ https://bugs.webkit.org/show_bug.cgi?id=218153
+
+ Reviewed by Zalan Bujtas.
+
+ When iterating line runs, recurse into container layout boxes for inline-block, and
+ make display boxes for other textless runs for other atomic inlines like replaced
+ elements.
+
+ * display/DisplayTreeBuilder.cpp:
+ (WebCore::Display::TreeBuilder::buildInlineDisplayTree const):
+
+2020-10-24 Simon Fraser <[email protected]>
+
[LFC Display] Simplify display tree building
https://bugs.webkit.org/show_bug.cgi?id=218152
Modified: trunk/Source/WebCore/display/DisplayTreeBuilder.cpp (268953 => 268954)
--- trunk/Source/WebCore/display/DisplayTreeBuilder.cpp 2020-10-24 20:19:25 UTC (rev 268953)
+++ trunk/Source/WebCore/display/DisplayTreeBuilder.cpp 2020-10-24 22:55:57 UTC (rev 268954)
@@ -95,19 +95,31 @@
auto& inlineFormattingState = layoutState.establishedInlineFormattingState(inlineFormattingRoot);
for (auto& run : inlineFormattingState.lineRuns()) {
- auto& lineGeometry = inlineFormattingState.lines().at(run.lineIndex());
+ if (run.text()) {
+ auto& lineGeometry = inlineFormattingState.lines().at(run.lineIndex());
- auto lineRect = lineGeometry.logicalRect();
- auto lineLayoutRect = LayoutRect { lineRect.left(), lineRect.top(), lineRect.width(), lineRect.height() };
+ auto lineRect = lineGeometry.logicalRect();
+ auto lineLayoutRect = LayoutRect { lineRect.left(), lineRect.top(), lineRect.width(), lineRect.height() };
- auto runRect = LayoutRect { run.logicalLeft(), run.logicalTop(), run.logicalWidth(), run.logicalHeight() };
- runRect.moveBy(lineLayoutRect.location());
- runRect.move(offsetFromRoot);
+ auto runRect = LayoutRect { run.logicalLeft(), run.logicalTop(), run.logicalWidth(), run.logicalHeight() };
+ runRect.moveBy(lineLayoutRect.location());
+ runRect.move(offsetFromRoot);
- auto style = Style { run.layoutBox().style() };
- auto textBox = makeUnique<TextBox>(snapRectToDevicePixels(runRect, m_pixelSnappingFactor), WTFMove(style), run);
+ auto style = Style { run.layoutBox().style() };
+ auto textBox = makeUnique<TextBox>(snapRectToDevicePixels(runRect, m_pixelSnappingFactor), WTFMove(style), run);
- insert(WTFMove(textBox), insertionPosition);
+ insert(WTFMove(textBox), insertionPosition);
+ continue;
+ }
+
+ if (is<Layout::ContainerBox>(run.layoutBox())) {
+ recursiveBuildDisplayTree(layoutState, offsetFromRoot, run.layoutBox(), insertionPosition);
+ continue;
+ }
+
+ auto geometry = layoutState.geometryForBox(run.layoutBox());
+ auto displayBox = displayBoxForLayoutBox(geometry, run.layoutBox(), offsetFromRoot);
+ insert(WTFMove(displayBox), insertionPosition);
}
}