Title: [273974] trunk/Source/WebCore
Revision
273974
Author
[email protected]
Date
2021-03-05 09:16:10 -0800 (Fri, 05 Mar 2021)

Log Message

[LFC][IFC] Transition LineBox::InlineLevelBoxList from a list of std::unique_ptr<InlineLevelBox> to a list of InlineLevelBox objects
https://bugs.webkit.org/show_bug.cgi?id=222761

Reviewed by Antti Koivisto.

* layout/inlineformatting/InlineFormattingContext.cpp:
(WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
* layout/inlineformatting/InlineFormattingContextGeometry.cpp:
(WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
(WebCore::Layout::LineBoxBuilder::computeLineBoxHeightAndAlignInlineLevelBoxesVertically):
* layout/inlineformatting/InlineFormattingContextQuirks.cpp:
(WebCore::Layout::InlineFormattingContext::Quirks::inlineLevelBoxAffectsLineBox const):
* layout/inlineformatting/InlineLineBox.cpp:
(WebCore::Layout::LineBox::addInlineLevelBox):
* layout/inlineformatting/InlineLineBox.h:
(WebCore::Layout::LineBox::nonRootInlineLevelBoxes):
(WebCore::Layout::LineBox::inlineLevelBoxForLayoutBox):
(WebCore::Layout::LineBox::InlineLevelBox::createAtomicInlineLevelBox):
(WebCore::Layout::LineBox::InlineLevelBox::createInlineBox):
(WebCore::Layout::LineBox::InlineLevelBox::createLineBreakBox):
(WebCore::Layout::LineBox::InlineLevelBox::createGenericInlineLevelBox):
* layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
(WebCore::LayoutIntegration::InlineContentBuilder::computeLineLevelVisualAdjustmentsForRuns const):
(WebCore::LayoutIntegration::InlineContentBuilder::createDisplayNonRootInlineBoxes const):
* layout/layouttree/LayoutTreeBuilder.cpp:
(WebCore::Layout::showInlineTreeAndRuns):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (273973 => 273974)


--- trunk/Source/WebCore/ChangeLog	2021-03-05 16:33:15 UTC (rev 273973)
+++ trunk/Source/WebCore/ChangeLog	2021-03-05 17:16:10 UTC (rev 273974)
@@ -1,3 +1,32 @@
+2021-03-05  Zalan Bujtas  <[email protected]>
+
+        [LFC][IFC] Transition LineBox::InlineLevelBoxList from a list of std::unique_ptr<InlineLevelBox> to a list of InlineLevelBox objects
+        https://bugs.webkit.org/show_bug.cgi?id=222761
+
+        Reviewed by Antti Koivisto.
+
+        * layout/inlineformatting/InlineFormattingContext.cpp:
+        (WebCore::Layout::InlineFormattingContext::computeGeometryForLineContent):
+        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
+        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
+        (WebCore::Layout::LineBoxBuilder::computeLineBoxHeightAndAlignInlineLevelBoxesVertically):
+        * layout/inlineformatting/InlineFormattingContextQuirks.cpp:
+        (WebCore::Layout::InlineFormattingContext::Quirks::inlineLevelBoxAffectsLineBox const):
+        * layout/inlineformatting/InlineLineBox.cpp:
+        (WebCore::Layout::LineBox::addInlineLevelBox):
+        * layout/inlineformatting/InlineLineBox.h:
+        (WebCore::Layout::LineBox::nonRootInlineLevelBoxes):
+        (WebCore::Layout::LineBox::inlineLevelBoxForLayoutBox):
+        (WebCore::Layout::LineBox::InlineLevelBox::createAtomicInlineLevelBox):
+        (WebCore::Layout::LineBox::InlineLevelBox::createInlineBox):
+        (WebCore::Layout::LineBox::InlineLevelBox::createLineBreakBox):
+        (WebCore::Layout::LineBox::InlineLevelBox::createGenericInlineLevelBox):
+        * layout/integration/LayoutIntegrationInlineContentBuilder.cpp:
+        (WebCore::LayoutIntegration::InlineContentBuilder::computeLineLevelVisualAdjustmentsForRuns const):
+        (WebCore::LayoutIntegration::InlineContentBuilder::createDisplayNonRootInlineBoxes const):
+        * layout/layouttree/LayoutTreeBuilder.cpp:
+        (WebCore::Layout::showInlineTreeAndRuns):
+
 2021-03-05  Chris Dumez  <[email protected]>
 
         Unreviewed Windows build fix after r273966.

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp (273973 => 273974)


--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp	2021-03-05 16:33:15 UTC (rev 273973)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp	2021-03-05 17:16:10 UTC (rev 273974)
@@ -555,9 +555,9 @@
         // Grab the inline boxes (even those that don't have associated layout boxes on the current line due to line wrapping)
         // and update their geometries.
         for (auto& inlineLevelBox : lineBox.nonRootInlineLevelBoxes()) {
-            if (!inlineLevelBox->isInlineBox())
+            if (!inlineLevelBox.isInlineBox())
                 continue;
-            auto& layoutBox = inlineLevelBox->layoutBox();
+            auto& layoutBox = inlineLevelBox.layoutBox();
             auto& boxGeometry = formattingState.boxGeometry(layoutBox);
             // Inline boxes may or may not be wrapped and have runs on multiple lines (e.g. <span>first line<br>second line<br>third line</span>)
             auto inlineBoxBorderBox = lineBox.logicalBorderBoxForInlineBox(layoutBox, boxGeometry);

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp (273973 => 273974)


--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp	2021-03-05 16:33:15 UTC (rev 273973)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp	2021-03-05 17:16:10 UTC (rev 273974)
@@ -267,8 +267,8 @@
         // Construct the missing LineBox::InlineBoxes starting with the topmost layout box.
         for (auto* layoutBox : WTF::makeReversedRange(layoutBoxesWithoutInlineBoxes)) {
             auto inlineBox = LineBox::InlineLevelBox::createInlineBox(*layoutBox, rootInlineBox.logicalLeft(), lineBox.contentLogicalWidth());
-            setVerticalGeometryForInlineBox(*inlineBox);
-            simplifiedAlignVerticallyIfApplicable(*inlineBox, { });
+            setVerticalGeometryForInlineBox(inlineBox);
+            simplifiedAlignVerticallyIfApplicable(inlineBox, { });
             lineBox.addInlineLevelBox(WTFMove(inlineBox));
         }
     };
@@ -320,9 +320,9 @@
                 ascent = marginBoxHeight;
             logicalLeft += std::max(0_lu, inlineLevelBoxGeometry.marginStart());
             auto atomicInlineLevelBox = LineBox::InlineLevelBox::createAtomicInlineLevelBox(layoutBox, logicalLeft, { inlineLevelBoxGeometry.borderBoxWidth(), marginBoxHeight });
-            atomicInlineLevelBox->setBaseline(ascent);
-            atomicInlineLevelBox->setLayoutBounds(LineBox::InlineLevelBox::LayoutBounds { ascent, marginBoxHeight - ascent });
-            simplifiedAlignVerticallyIfApplicable(*atomicInlineLevelBox, inlineLevelBoxGeometry);
+            atomicInlineLevelBox.setBaseline(ascent);
+            atomicInlineLevelBox.setLayoutBounds(LineBox::InlineLevelBox::LayoutBounds { ascent, marginBoxHeight - ascent });
+            simplifiedAlignVerticallyIfApplicable(atomicInlineLevelBox, inlineLevelBoxGeometry);
             lineBox.addInlineLevelBox(WTFMove(atomicInlineLevelBox));
             continue;
         }
@@ -336,8 +336,8 @@
             logicalLeft += marginStart;
             initialLogicalWidth -= marginStart;
             auto inlineBox = LineBox::InlineLevelBox::createInlineBox(layoutBox, logicalLeft, initialLogicalWidth);
-            setVerticalGeometryForInlineBox(*inlineBox);
-            simplifiedAlignVerticallyIfApplicable(*inlineBox, { });
+            setVerticalGeometryForInlineBox(inlineBox);
+            simplifiedAlignVerticallyIfApplicable(inlineBox, { });
             lineBox.addInlineLevelBox(WTFMove(inlineBox));
             continue;
         }
@@ -359,8 +359,8 @@
         }
         if (run.isHardLineBreak()) {
             auto lineBreakBox = LineBox::InlineLevelBox::createLineBreakBox(layoutBox, logicalLeft);
-            setVerticalGeometryForInlineBox(*lineBreakBox);
-            simplifiedAlignVerticallyIfApplicable(*lineBreakBox, { });
+            setVerticalGeometryForInlineBox(lineBreakBox);
+            simplifiedAlignVerticallyIfApplicable(lineBreakBox, { });
             lineBox.addInlineLevelBox(WTFMove(lineBreakBox));
             continue;
         }
@@ -398,7 +398,7 @@
             InlineLayoutUnit top { 0 };
             InlineLayoutUnit bottom { 0 };
         };
-        HashMap<LineBox::InlineLevelBox*, AbsoluteTopAndBottom> inlineLevelBoxAbsoluteTopAndBottomMap;
+        HashMap<const LineBox::InlineLevelBox*, AbsoluteTopAndBottom> inlineLevelBoxAbsoluteTopAndBottomMap;
 
         auto minimumLogicalTop = Optional<InlineLayoutUnit> { };
         auto maximumLogicalBottom = Optional<InlineLayoutUnit> { };
@@ -411,9 +411,9 @@
 
         Vector<LineBox::InlineLevelBox*> lineBoxRelativeInlineLevelBoxes;
         for (auto& inlineLevelBox : lineBox.nonRootInlineLevelBoxes()) {
-            auto& layoutBox = inlineLevelBox->layoutBox();
-            if (inlineLevelBox->hasLineBoxRelativeAlignment()) {
-                lineBoxRelativeInlineLevelBoxes.append(inlineLevelBox.get());
+            auto& layoutBox = inlineLevelBox.layoutBox();
+            if (inlineLevelBox.hasLineBoxRelativeAlignment()) {
+                lineBoxRelativeInlineLevelBoxes.append(&inlineLevelBox);
                 continue;
             }
             auto& parentInlineBox = lineBox.inlineLevelBoxForLayoutBox(layoutBox.parent());
@@ -421,25 +421,25 @@
             // Note that this logical top is not the final logical top of the inline level box.
             // This is the logical top in the context of the layout bounds geometry which may be very different from the inline box's normal geometry.
             auto logicalTop = InlineLayoutUnit { };
-            switch (inlineLevelBox->verticalAlign()) {
+            switch (inlineLevelBox.verticalAlign()) {
             case VerticalAlign::Baseline: {
-                auto logicalTopOffsetFromParentBaseline = inlineLevelBox->layoutBounds().ascent;
+                auto logicalTopOffsetFromParentBaseline = inlineLevelBox.layoutBounds().ascent;
                 logicalTop = parentInlineBox.layoutBounds().ascent - logicalTopOffsetFromParentBaseline;
                 break;
             }
             case VerticalAlign::Middle: {
-                auto logicalTopOffsetFromParentBaseline = inlineLevelBox->layoutBounds().height() / 2 + parentInlineBox.style().fontMetrics().xHeight() / 2;
+                auto logicalTopOffsetFromParentBaseline = inlineLevelBox.layoutBounds().height() / 2 + parentInlineBox.style().fontMetrics().xHeight() / 2;
                 logicalTop = parentInlineBox.layoutBounds().ascent - logicalTopOffsetFromParentBaseline;
                 break;
             }
             case VerticalAlign::BaselineMiddle: {
-                auto logicalTopOffsetFromParentBaseline = inlineLevelBox->layoutBounds().height() / 2;
+                auto logicalTopOffsetFromParentBaseline = inlineLevelBox.layoutBounds().height() / 2;
                 logicalTop = parentInlineBox.layoutBounds().ascent - logicalTopOffsetFromParentBaseline;
                 break;
             }
             case VerticalAlign::Length: {
-                auto& style = inlineLevelBox->style();
-                auto logicalTopOffsetFromParentBaseline = floatValueForLength(style.verticalAlignLength(), style.computedLineHeight()) + inlineLevelBox->layoutBounds().ascent;
+                auto& style = inlineLevelBox.style();
+                auto logicalTopOffsetFromParentBaseline = floatValueForLength(style.verticalAlignLength(), style.computedLineHeight()) + inlineLevelBox.layoutBounds().ascent;
                 logicalTop = parentInlineBox.layoutBounds().ascent - logicalTopOffsetFromParentBaseline;
                 break;
             }
@@ -452,7 +452,7 @@
                 // Note that text-bottom aligns with the inline box's font metrics bottom (descent) and not the layout bounds bottom.
                 auto parentInlineBoxLayoutBounds = parentInlineBox.layoutBounds();
                 auto parentInlineBoxLogicalBottom = parentInlineBoxLayoutBounds.height() - parentInlineBoxLayoutBounds.descent + parentInlineBox.descent().valueOr(InlineLayoutUnit());
-                logicalTop = parentInlineBoxLogicalBottom - inlineLevelBox->layoutBounds().height();
+                logicalTop = parentInlineBoxLogicalBottom - inlineLevelBox.layoutBounds().height();
                 break;
             }
             default:
@@ -461,10 +461,10 @@
             }
             auto parentInlineBoxAbsoluteTopAndBottom = inlineLevelBoxAbsoluteTopAndBottomMap.get(&parentInlineBox);
             auto absoluteLogicalTop = parentInlineBoxAbsoluteTopAndBottom.top + logicalTop;
-            auto absoluteLogicalBottom = absoluteLogicalTop + inlineLevelBox->layoutBounds().height();
-            inlineLevelBoxAbsoluteTopAndBottomMap.add(inlineLevelBox.get(), AbsoluteTopAndBottom { absoluteLogicalTop, absoluteLogicalBottom });
+            auto absoluteLogicalBottom = absoluteLogicalTop + inlineLevelBox.layoutBounds().height();
+            inlineLevelBoxAbsoluteTopAndBottomMap.add(&inlineLevelBox, AbsoluteTopAndBottom { absoluteLogicalTop, absoluteLogicalBottom });
             // Stretch the min/max absolute values if applicable.
-            if (quirks.inlineLevelBoxAffectsLineBox(*inlineLevelBox, lineBox)) {
+            if (quirks.inlineLevelBoxAffectsLineBox(inlineLevelBox, lineBox)) {
                 minimumLogicalTop = std::min(minimumLogicalTop.valueOr(absoluteLogicalTop), absoluteLogicalTop);
                 maximumLogicalBottom = std::max(maximumLogicalBottom.valueOr(absoluteLogicalBottom), absoluteLogicalBottom);
             }
@@ -483,7 +483,7 @@
     computeLineBoxLogicalHeight();
 
     auto computeRootInlineBoxVerticalPosition = [&] {
-        HashMap<LineBox::InlineLevelBox*, InlineLayoutUnit> inlineLevelBoxAbsoluteBaselineOffsetMap;
+        HashMap<const LineBox::InlineLevelBox*, InlineLayoutUnit> inlineLevelBoxAbsoluteBaselineOffsetMap;
         inlineLevelBoxAbsoluteBaselineOffsetMap.add(&rootInlineBox, InlineLayoutUnit { });
 
         auto maximumTopOffsetFromRootInlineBoxBaseline = Optional<InlineLayoutUnit> { };
@@ -492,37 +492,37 @@
 
         for (auto& inlineLevelBox : lineBox.nonRootInlineLevelBoxes()) {
             auto absoluteBaselineOffset = InlineLayoutUnit { };
-            if (!inlineLevelBox->hasLineBoxRelativeAlignment()) {
-                auto& layoutBox = inlineLevelBox->layoutBox();
+            if (!inlineLevelBox.hasLineBoxRelativeAlignment()) {
+                auto& layoutBox = inlineLevelBox.layoutBox();
                 auto& parentInlineBox = lineBox.inlineLevelBoxForLayoutBox(layoutBox.parent());
                 auto baselineOffsetFromParentBaseline = InlineLayoutUnit { };
 
-                switch (inlineLevelBox->verticalAlign()) {
+                switch (inlineLevelBox.verticalAlign()) {
                 case VerticalAlign::Baseline:
                     baselineOffsetFromParentBaseline = { };
                     break;
                 case VerticalAlign::Middle: {
-                    auto logicalTopOffsetFromParentBaseline = (inlineLevelBox->layoutBounds().height() / 2 + parentInlineBox.style().fontMetrics().xHeight() / 2);
-                    baselineOffsetFromParentBaseline = logicalTopOffsetFromParentBaseline - inlineLevelBox->baseline();
+                    auto logicalTopOffsetFromParentBaseline = (inlineLevelBox.layoutBounds().height() / 2 + parentInlineBox.style().fontMetrics().xHeight() / 2);
+                    baselineOffsetFromParentBaseline = logicalTopOffsetFromParentBaseline - inlineLevelBox.baseline();
                     break;
                 }
                 case VerticalAlign::BaselineMiddle: {
-                    auto logicalTopOffsetFromParentBaseline = inlineLevelBox->layoutBounds().height() / 2;
-                    baselineOffsetFromParentBaseline = logicalTopOffsetFromParentBaseline - inlineLevelBox->baseline();
+                    auto logicalTopOffsetFromParentBaseline = inlineLevelBox.layoutBounds().height() / 2;
+                    baselineOffsetFromParentBaseline = logicalTopOffsetFromParentBaseline - inlineLevelBox.baseline();
                     break;
                 }
                 case VerticalAlign::Length: {
-                    auto& style = inlineLevelBox->style();
+                    auto& style = inlineLevelBox.style();
                     auto verticalAlignOffset = floatValueForLength(style.verticalAlignLength(), style.computedLineHeight());
-                    auto logicalTopOffsetFromParentBaseline = verticalAlignOffset + inlineLevelBox->baseline();
-                    baselineOffsetFromParentBaseline = logicalTopOffsetFromParentBaseline - inlineLevelBox->baseline();
+                    auto logicalTopOffsetFromParentBaseline = verticalAlignOffset + inlineLevelBox.baseline();
+                    baselineOffsetFromParentBaseline = logicalTopOffsetFromParentBaseline - inlineLevelBox.baseline();
                     break;
                 }
                 case VerticalAlign::TextTop:
-                    baselineOffsetFromParentBaseline = parentInlineBox.baseline() - inlineLevelBox->layoutBounds().ascent;
+                    baselineOffsetFromParentBaseline = parentInlineBox.baseline() - inlineLevelBox.layoutBounds().ascent;
                     break;
                 case VerticalAlign::TextBottom:
-                    baselineOffsetFromParentBaseline = inlineLevelBox->layoutBounds().descent - *parentInlineBox.descent();
+                    baselineOffsetFromParentBaseline = inlineLevelBox.layoutBounds().descent - *parentInlineBox.descent();
                     break;
                 default:
                     ASSERT_NOT_IMPLEMENTED_YET();
@@ -530,13 +530,13 @@
                 }
                 absoluteBaselineOffset = inlineLevelBoxAbsoluteBaselineOffsetMap.get(&parentInlineBox) + baselineOffsetFromParentBaseline;
             } else {
-                switch (inlineLevelBox->verticalAlign()) {
+                switch (inlineLevelBox.verticalAlign()) {
                 case VerticalAlign::Top: {
-                    absoluteBaselineOffset = rootInlineBox.layoutBounds().ascent - inlineLevelBox->layoutBounds().ascent;
+                    absoluteBaselineOffset = rootInlineBox.layoutBounds().ascent - inlineLevelBox.layoutBounds().ascent;
                     break;
                 }
                 case VerticalAlign::Bottom: {
-                    absoluteBaselineOffset = inlineLevelBox->layoutBounds().descent - rootInlineBox.layoutBounds().descent;
+                    absoluteBaselineOffset = inlineLevelBox.layoutBounds().descent - rootInlineBox.layoutBounds().descent;
                     break;
                 }
                 default:
@@ -544,16 +544,16 @@
                     break;
                 }
             }
-            inlineLevelBoxAbsoluteBaselineOffsetMap.add(inlineLevelBox.get(), absoluteBaselineOffset);
-            auto affectsRootInlineBoxVerticalPosition = quirks.inlineLevelBoxAffectsLineBox(*inlineLevelBox, lineBox);
+            inlineLevelBoxAbsoluteBaselineOffsetMap.add(&inlineLevelBox, absoluteBaselineOffset);
+            auto affectsRootInlineBoxVerticalPosition = quirks.inlineLevelBoxAffectsLineBox(inlineLevelBox, lineBox);
             if (affectsRootInlineBoxVerticalPosition) {
-                auto topOffsetFromRootInlineBoxBaseline = absoluteBaselineOffset + inlineLevelBox->layoutBounds().ascent;
+                auto topOffsetFromRootInlineBoxBaseline = absoluteBaselineOffset + inlineLevelBox.layoutBounds().ascent;
                 if (maximumTopOffsetFromRootInlineBoxBaseline)
                     maximumTopOffsetFromRootInlineBoxBaseline = std::max(*maximumTopOffsetFromRootInlineBoxBaseline, topOffsetFromRootInlineBoxBaseline);
                 else {
                     // We are is quirk mode and the root inline box has no content. The root inline box's baseline is anchored at 0.
                     // However negative ascent (e.g negative top margin) can "push" the root inline box upwards and have a negative value.
-                    maximumTopOffsetFromRootInlineBoxBaseline = inlineLevelBox->layoutBounds().ascent >= 0
+                    maximumTopOffsetFromRootInlineBoxBaseline = inlineLevelBox.layoutBounds().ascent >= 0
                         ? std::max(0.0f, topOffsetFromRootInlineBoxBaseline)
                         : topOffsetFromRootInlineBoxBaseline;
                 }
@@ -566,50 +566,50 @@
 
     auto alignInlineLevelBoxes = [&] {
         for (auto& inlineLevelBox : lineBox.nonRootInlineLevelBoxes()) {
-            auto& layoutBox = inlineLevelBox->layoutBox();
+            auto& layoutBox = inlineLevelBox.layoutBox();
             auto& parentInlineBox = lineBox.inlineLevelBoxForLayoutBox(layoutBox.parent());
             auto logicalTop = InlineLayoutUnit { };
-            switch (inlineLevelBox->verticalAlign()) {
+            switch (inlineLevelBox.verticalAlign()) {
             case VerticalAlign::Baseline:
-                logicalTop = parentInlineBox.baseline() - inlineLevelBox->baseline();
+                logicalTop = parentInlineBox.baseline() - inlineLevelBox.baseline();
                 break;
             case VerticalAlign::Middle: {
-                auto logicalTopOffsetFromParentBaseline = (inlineLevelBox->logicalHeight() / 2 + parentInlineBox.style().fontMetrics().xHeight() / 2);
+                auto logicalTopOffsetFromParentBaseline = (inlineLevelBox.logicalHeight() / 2 + parentInlineBox.style().fontMetrics().xHeight() / 2);
                 logicalTop = parentInlineBox.baseline() - logicalTopOffsetFromParentBaseline;
                 break;
             }
             case VerticalAlign::BaselineMiddle: {
-                auto logicalTopOffsetFromParentBaseline = inlineLevelBox->logicalHeight() / 2;
+                auto logicalTopOffsetFromParentBaseline = inlineLevelBox.logicalHeight() / 2;
                 logicalTop = parentInlineBox.baseline() - logicalTopOffsetFromParentBaseline;
                 break;
             }
             case VerticalAlign::Length: {
-                auto& style = inlineLevelBox->style();
+                auto& style = inlineLevelBox.style();
                 auto verticalAlignOffset = floatValueForLength(style.verticalAlignLength(), style.computedLineHeight());
-                auto logicalTopOffsetFromParentBaseline = verticalAlignOffset + inlineLevelBox->baseline();
+                auto logicalTopOffsetFromParentBaseline = verticalAlignOffset + inlineLevelBox.baseline();
                 logicalTop = parentInlineBox.baseline() - logicalTopOffsetFromParentBaseline;
                 break;
             }
             // Note that (text)top/bottom align their layout bounds.
             case VerticalAlign::TextTop:
-                logicalTop = inlineLevelBox->layoutBounds().ascent - inlineLevelBox->baseline();
+                logicalTop = inlineLevelBox.layoutBounds().ascent - inlineLevelBox.baseline();
                 break;
             case VerticalAlign::TextBottom:
-                logicalTop = parentInlineBox.logicalHeight() - inlineLevelBox->layoutBounds().descent - inlineLevelBox->baseline();
+                logicalTop = parentInlineBox.logicalHeight() - inlineLevelBox.layoutBounds().descent - inlineLevelBox.baseline();
                 break;
             case VerticalAlign::Top:
                 // Note that this logical top is not relative to the parent inline box.
-                logicalTop = inlineLevelBox->layoutBounds().ascent - inlineLevelBox->baseline();
+                logicalTop = inlineLevelBox.layoutBounds().ascent - inlineLevelBox.baseline();
                 break;
             case VerticalAlign::Bottom:
                 // Note that this logical top is not relative to the parent inline box.
-                logicalTop = lineBox.logicalHeight() - inlineLevelBox->layoutBounds().descent - inlineLevelBox->baseline();
+                logicalTop = lineBox.logicalHeight() - inlineLevelBox.layoutBounds().descent - inlineLevelBox.baseline();
                 break;
             default:
                 ASSERT_NOT_IMPLEMENTED_YET();
                 break;
             }
-            inlineLevelBox->setLogicalTop(logicalTop);
+            inlineLevelBox.setLogicalTop(logicalTop);
         }
     };
     alignInlineLevelBoxes();

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextQuirks.cpp (273973 => 273974)


--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextQuirks.cpp	2021-03-05 16:33:15 UTC (rev 273973)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextQuirks.cpp	2021-03-05 17:16:10 UTC (rev 273974)
@@ -62,7 +62,7 @@
             return true;
         for (auto& inlineLevelBox : lineBox.nonRootInlineLevelBoxes()) {
             // Filter out empty inline boxes e.g. <div><span></span><span></span><br></div>
-            if (inlineLevelBox->isInlineBox() && inlineLevelBox->hasContent())
+            if (inlineLevelBox.isInlineBox() && inlineLevelBox.hasContent())
                 return false;
         }
         return true;
@@ -82,9 +82,9 @@
                 if (!lineBox.hasInlineBox())
                     return false;
                 for (auto& inlineLevelBox : lineBox.nonRootInlineLevelBoxes()) {
-                    if (!inlineLevelBox->isInlineBox())
+                    if (!inlineLevelBox.isInlineBox())
                         continue;
-                    if (inlineLevelBox->hasContent())
+                    if (inlineLevelBox.hasContent())
                         return true;
                 }
                 return false;

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineLineBox.cpp (273973 => 273974)


--- trunk/Source/WebCore/layout/inlineformatting/InlineLineBox.cpp	2021-03-05 16:33:15 UTC (rev 273973)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineLineBox.cpp	2021-03-05 17:16:10 UTC (rev 273974)
@@ -92,10 +92,10 @@
     m_nonRootInlineLevelBoxMap.reserveInitialCapacity(numberOfRuns);
 }
 
-void LineBox::addInlineLevelBox(std::unique_ptr<InlineLevelBox>&& inlineLevelBox)
+void LineBox::addInlineLevelBox(InlineLevelBox&& inlineLevelBox)
 {
-    m_boxTypes.add(inlineLevelBox->type());
-    m_nonRootInlineLevelBoxMap.set(&inlineLevelBox->layoutBox(), inlineLevelBox.get());
+    m_boxTypes.add(inlineLevelBox.type());
+    m_nonRootInlineLevelBoxMap.set(&inlineLevelBox.layoutBox(), m_nonRootInlineLevelBoxList.size());
     m_nonRootInlineLevelBoxList.append(WTFMove(inlineLevelBox));
 }
 

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineLineBox.h (273973 => 273974)


--- trunk/Source/WebCore/layout/inlineformatting/InlineLineBox.h	2021-03-05 16:33:15 UTC (rev 273973)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineLineBox.h	2021-03-05 17:16:10 UTC (rev 273974)
@@ -60,12 +60,11 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     struct InlineLevelBox {
-        WTF_MAKE_ISO_ALLOCATED_INLINE(InlineLevelBox);
     public:
-        static std::unique_ptr<LineBox::InlineLevelBox> createInlineBox(const Box&, InlineLayoutUnit logicalLeft, InlineLayoutUnit logicalWidth);
-        static std::unique_ptr<LineBox::InlineLevelBox> createAtomicInlineLevelBox(const Box&, InlineLayoutUnit logicalLeft, InlineLayoutSize);
-        static std::unique_ptr<LineBox::InlineLevelBox> createLineBreakBox(const Box&, InlineLayoutUnit logicalLeft);
-        static std::unique_ptr<LineBox::InlineLevelBox> createGenericInlineLevelBox(const Box&, InlineLayoutUnit logicalLeft);
+        static LineBox::InlineLevelBox createInlineBox(const Box&, InlineLayoutUnit logicalLeft, InlineLayoutUnit logicalWidth);
+        static LineBox::InlineLevelBox createAtomicInlineLevelBox(const Box&, InlineLayoutUnit logicalLeft, InlineLayoutSize);
+        static LineBox::InlineLevelBox createLineBreakBox(const Box&, InlineLayoutUnit logicalLeft);
+        static LineBox::InlineLevelBox createGenericInlineLevelBox(const Box&, InlineLayoutUnit logicalLeft);
 
         InlineLayoutUnit baseline() const { return m_baseline; }
         Optional<InlineLayoutUnit> descent() const { return m_descent; }
@@ -158,7 +157,7 @@
     InlineRect logicalBorderBoxForInlineBox(const Box&, const BoxGeometry&) const;
 
     const InlineLevelBox& rootInlineBox() const { return m_rootInlineBox; }
-    using InlineLevelBoxList = Vector<std::unique_ptr<InlineLevelBox>>;
+    using InlineLevelBoxList = Vector<InlineLevelBox>;
     const InlineLevelBoxList& nonRootInlineLevelBoxes() const { return m_nonRootInlineLevelBoxList; }
 
     InlineLayoutUnit alignmentBaseline() const { return m_rootInlineBox.logicalTop() + m_rootInlineBox.baseline(); }
@@ -168,11 +167,12 @@
 
     void setLogicalHeight(InlineLayoutUnit logicalHeight) { m_logicalRect.setHeight(logicalHeight); }
 
-    void addInlineLevelBox(std::unique_ptr<InlineLevelBox>&&);
+    void addInlineLevelBox(InlineLevelBox&&);
+    InlineLevelBoxList& nonRootInlineLevelBoxes() { return m_nonRootInlineLevelBoxList; }
 
     InlineLevelBox& rootInlineBox() { return m_rootInlineBox; }
 
-    InlineLevelBox& inlineLevelBoxForLayoutBox(const Box& layoutBox) { return &layoutBox == &m_rootInlineBox.layoutBox() ? m_rootInlineBox : *m_nonRootInlineLevelBoxMap.get(&layoutBox); }
+    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 setHasContent(bool hasContent) { m_hasContent = hasContent; }
@@ -186,27 +186,27 @@
     InlineLevelBox m_rootInlineBox;
     InlineLevelBoxList m_nonRootInlineLevelBoxList;
 
-    HashMap<const Box*, InlineLevelBox*> m_nonRootInlineLevelBoxMap;
+    HashMap<const Box*, size_t> m_nonRootInlineLevelBoxMap;
 };
 
-inline std::unique_ptr<LineBox::InlineLevelBox> LineBox::InlineLevelBox::createAtomicInlineLevelBox(const Box& layoutBox, InlineLayoutUnit logicalLeft, InlineLayoutSize logicalSize)
+inline LineBox::InlineLevelBox LineBox::InlineLevelBox::createAtomicInlineLevelBox(const Box& layoutBox, InlineLayoutUnit logicalLeft, InlineLayoutSize logicalSize)
 {
-    return makeUnique<LineBox::InlineLevelBox>(layoutBox, logicalLeft, logicalSize, Type::AtomicInlineLevelBox);
+    return LineBox::InlineLevelBox { layoutBox, logicalLeft, logicalSize, Type::AtomicInlineLevelBox };
 }
 
-inline std::unique_ptr<LineBox::InlineLevelBox> LineBox::InlineLevelBox::createInlineBox(const Box& layoutBox, InlineLayoutUnit logicalLeft, InlineLayoutUnit logicalWidth)
+inline LineBox::InlineLevelBox LineBox::InlineLevelBox::createInlineBox(const Box& layoutBox, InlineLayoutUnit logicalLeft, InlineLayoutUnit logicalWidth)
 {
-    return makeUnique<LineBox::InlineLevelBox>(layoutBox, logicalLeft, InlineLayoutSize { logicalWidth, { } }, Type::InlineBox);
+    return LineBox::InlineLevelBox { layoutBox, logicalLeft, InlineLayoutSize { logicalWidth, { } }, Type::InlineBox };
 }
 
-inline std::unique_ptr<LineBox::InlineLevelBox> LineBox::InlineLevelBox::createLineBreakBox(const Box& layoutBox, InlineLayoutUnit logicalLeft)
+inline LineBox::InlineLevelBox LineBox::InlineLevelBox::createLineBreakBox(const Box& layoutBox, InlineLayoutUnit logicalLeft)
 {
-    return makeUnique<LineBox::InlineLevelBox>(layoutBox, logicalLeft, InlineLayoutSize { }, Type::LineBreakBox);
+    return LineBox::InlineLevelBox { layoutBox, logicalLeft, InlineLayoutSize { }, Type::LineBreakBox };
 }
 
-inline std::unique_ptr<LineBox::InlineLevelBox> LineBox::InlineLevelBox::createGenericInlineLevelBox(const Box& layoutBox, InlineLayoutUnit logicalLeft)
+inline LineBox::InlineLevelBox LineBox::InlineLevelBox::createGenericInlineLevelBox(const Box& layoutBox, InlineLayoutUnit logicalLeft)
 {
-    return makeUnique<LineBox::InlineLevelBox>(layoutBox, logicalLeft, InlineLayoutSize { }, Type::GenericInlineLevelBox);
+    return LineBox::InlineLevelBox { layoutBox, logicalLeft, InlineLayoutSize { }, Type::GenericInlineLevelBox };
 }
 
 }

Modified: trunk/Source/WebCore/layout/integration/LayoutIntegrationInlineContentBuilder.cpp (273973 => 273974)


--- trunk/Source/WebCore/layout/integration/LayoutIntegrationInlineContentBuilder.cpp	2021-03-05 16:33:15 UTC (rev 273973)
+++ trunk/Source/WebCore/layout/integration/LayoutIntegrationInlineContentBuilder.cpp	2021-03-05 17:16:10 UTC (rev 273974)
@@ -189,7 +189,7 @@
             }
             // Text + <br> (or just <br> or text<span></span><br>) behaves like text.
             for (auto& inlineLevelBox : nonRootInlineLevelBoxList) {
-                if (inlineLevelBox->isAtomicInlineLevelBox()) {
+                if (inlineLevelBox.isAtomicInlineLevelBox()) {
                     // Content like text<img> prevents legacy snapping.
                     return false;
                 }
@@ -374,14 +374,14 @@
 
         auto& lineBoxLogicalRect = lineBox.logicalRect();
         for (auto& inlineLevelBox : lineBox.nonRootInlineLevelBoxes()) {
-            if (!inlineLevelBox->isInlineBox())
+            if (!inlineLevelBox.isInlineBox())
                 continue;
-            auto& layoutBox = inlineLevelBox->layoutBox();
+            auto& layoutBox = inlineLevelBox.layoutBox();
             auto& boxGeometry = m_layoutState.geometryForBox(layoutBox);
             auto inlineBoxRect = lineBox.logicalBorderBoxForInlineBox(layoutBox, boxGeometry);
             inlineBoxRect.moveBy(lineBoxLogicalRect.topLeft());
 
-            inlineContent.nonRootInlineBoxes.append({ lineIndex, layoutBox, inlineBoxRect, inlineQuirks.inlineLevelBoxAffectsLineBox(*inlineLevelBox, lineBox) });
+            inlineContent.nonRootInlineBoxes.append({ lineIndex, layoutBox, inlineBoxRect, inlineQuirks.inlineLevelBoxAffectsLineBox(inlineLevelBox, lineBox) });
         }
     }
 }

Modified: trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp (273973 => 273974)


--- trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp	2021-03-05 16:33:15 UTC (rev 273973)
+++ trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp	2021-03-05 17:16:10 UTC (rev 273974)
@@ -432,7 +432,7 @@
         };
         outputInlineLevelBox(lineBox.rootInlineBox());
         for (auto& inlineLevelBox : lineBox.nonRootInlineLevelBoxes())
-            outputInlineLevelBox(*inlineLevelBox);
+            outputInlineLevelBox(inlineLevelBox);
 
         addSpacing();
         stream << "  Runs:";
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to