Title: [268954] trunk/Source/WebCore
Revision
268954
Author
[email protected]
Date
2020-10-24 15:55:57 -0700 (Sat, 24 Oct 2020)

Log Message

[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):

Modified Paths

Diff

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);
     }
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to