Title: [283040] trunk/Source/WebCore
Revision
283040
Author
[email protected]
Date
2021-09-24 06:44:17 -0700 (Fri, 24 Sep 2021)

Log Message

[IFC][LFC] InlineLevelBox needs to retain only a small set of style properties
https://bugs.webkit.org/show_bug.cgi?id=230718

Reviewed by Antti Koivisto.

Let's not expose all the style properties in here. InlineLevelBoxes only need certain font and alignment related properties values.
It also enables us to map certain property values to proper names.

e.g. RenderStyle::computeLineHeight() -> preferredLineHeight() (spec term)
  or RenderStyle::lineHeight().isNegative() -> isPreferredLineHeightFontMetricsBased()

  Now code like this

  LineBoxBuilder::adjustVerticalGeometryForInlineBoxWithFallbackFonts(const InlineBox&)
  {
      if (!inlineBox.isPreferredLineHeightFontMetricsBased())
          return;
  ...
  start making sense.

This patch is also in preparation for supporting first-line style.

* layout/formattingContexts/inline/InlineLevelBox.h:
(WebCore::Layout::InlineLevelBox::isPreferredLineHeightFontMetricsBased const):
(WebCore::Layout::InlineLevelBox::primaryFontMetrics const):
(WebCore::Layout::InlineLevelBox::fontSize const):
(WebCore::Layout::InlineLevelBox::layoutBox const):
(WebCore::Layout::InlineLevelBox::preferredLineHeight const):
(WebCore::Layout::InlineLevelBox::verticalAlign const):
(WebCore::Layout::InlineLevelBox::style const): Deleted.
* layout/formattingContexts/inline/InlineLineBox.cpp:
(WebCore::Layout::LineBox::logicalRectForTextRun const):
* layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
(WebCore::Layout::LineBoxBuilder::adjustVerticalGeometryForInlineBoxWithFallbackFonts const):
(WebCore::Layout::LineBoxBuilder::setInitialVerticalGeometryForInlineBox const):
(WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
* layout/formattingContexts/inline/InlineLineBoxVerticalAligner.cpp:
(WebCore::Layout::LineBoxVerticalAligner::canUseSimplifiedAlignmentForInlineLevelBox):
(WebCore::Layout::LineBoxVerticalAligner::computeLineBoxLogicalHeight const):
(WebCore::Layout::LineBoxVerticalAligner::computeRootInlineBoxVerticalPosition const):
(WebCore::Layout::LineBoxVerticalAligner::alignInlineLevelBoxes const):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (283039 => 283040)


--- trunk/Source/WebCore/ChangeLog	2021-09-24 13:31:03 UTC (rev 283039)
+++ trunk/Source/WebCore/ChangeLog	2021-09-24 13:44:17 UTC (rev 283040)
@@ -1,5 +1,49 @@
 2021-09-24  Alan Bujtas  <[email protected]>
 
+        [IFC][LFC] InlineLevelBox needs to retain only a small set of style properties
+        https://bugs.webkit.org/show_bug.cgi?id=230718
+
+        Reviewed by Antti Koivisto.
+
+        Let's not expose all the style properties in here. InlineLevelBoxes only need certain font and alignment related properties values.
+        It also enables us to map certain property values to proper names.
+
+        e.g. RenderStyle::computeLineHeight() -> preferredLineHeight() (spec term)
+          or RenderStyle::lineHeight().isNegative() -> isPreferredLineHeightFontMetricsBased()
+
+          Now code like this
+
+          LineBoxBuilder::adjustVerticalGeometryForInlineBoxWithFallbackFonts(const InlineBox&)
+          {
+              if (!inlineBox.isPreferredLineHeightFontMetricsBased())
+                  return;
+          ...
+          start making sense.
+
+        This patch is also in preparation for supporting first-line style.
+
+        * layout/formattingContexts/inline/InlineLevelBox.h:
+        (WebCore::Layout::InlineLevelBox::isPreferredLineHeightFontMetricsBased const):
+        (WebCore::Layout::InlineLevelBox::primaryFontMetrics const):
+        (WebCore::Layout::InlineLevelBox::fontSize const):
+        (WebCore::Layout::InlineLevelBox::layoutBox const):
+        (WebCore::Layout::InlineLevelBox::preferredLineHeight const):
+        (WebCore::Layout::InlineLevelBox::verticalAlign const):
+        (WebCore::Layout::InlineLevelBox::style const): Deleted.
+        * layout/formattingContexts/inline/InlineLineBox.cpp:
+        (WebCore::Layout::LineBox::logicalRectForTextRun const):
+        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
+        (WebCore::Layout::LineBoxBuilder::adjustVerticalGeometryForInlineBoxWithFallbackFonts const):
+        (WebCore::Layout::LineBoxBuilder::setInitialVerticalGeometryForInlineBox const):
+        (WebCore::Layout::LineBoxBuilder::constructAndAlignInlineLevelBoxes):
+        * layout/formattingContexts/inline/InlineLineBoxVerticalAligner.cpp:
+        (WebCore::Layout::LineBoxVerticalAligner::canUseSimplifiedAlignmentForInlineLevelBox):
+        (WebCore::Layout::LineBoxVerticalAligner::computeLineBoxLogicalHeight const):
+        (WebCore::Layout::LineBoxVerticalAligner::computeRootInlineBoxVerticalPosition const):
+        (WebCore::Layout::LineBoxVerticalAligner::alignInlineLevelBoxes const):
+
+2021-09-24  Alan Bujtas  <[email protected]>
+
         [LFC][IFC] InlineDisplay::Box should be able to provide first-line style when applicable
         https://bugs.webkit.org/show_bug.cgi?id=230709
 

Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineLevelBox.h (283039 => 283040)


--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineLevelBox.h	2021-09-24 13:31:03 UTC (rev 283039)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineLevelBox.h	2021-09-24 13:44:17 UTC (rev 283040)
@@ -27,6 +27,7 @@
 
 #if ENABLE(LAYOUT_FORMATTING_CONTEXT)
 
+#include "FontCascade.h"
 #include "InlineRect.h"
 #include "LayoutBox.h"
 #include "LayoutUnits.h"
@@ -62,9 +63,15 @@
     bool hasContent() const { return m_hasContent; }
     void setHasContent();
 
-    VerticalAlign verticalAlign() const { return layoutBox().style().verticalAlign(); }
-    const Box& layoutBox() const { return *m_layoutBox; }
-    const RenderStyle& style() const { return m_layoutBox->style(); }
+    struct VerticalAlignment {
+        VerticalAlign type { VerticalAlign::Baseline };
+        std::optional<InlineLayoutUnit> baselineOffset;
+    };
+    VerticalAlignment verticalAlign() const;
+    InlineLayoutUnit preferredLineHeight() const;
+    bool isPreferredLineHeightFontMetricsBased() const { return layoutBox().style().lineHeight().isNegative(); }
+    const FontMetrics& primaryFontMetrics() const { return layoutBox().style().fontCascade().primaryFont().fontMetrics(); }
+    InlineLayoutUnit fontSize() const { return layoutBox().style().fontCascade().fontDescription().computedPixelSize(); }
 
     bool isInlineBox() const { return m_type == Type::InlineBox || isRootInlineBox() || isLineSpanningInlineBox(); }
     bool isRootInlineBox() const { return m_type == Type::RootInlineBox; }
@@ -83,6 +90,8 @@
     };
     Type type() const { return m_type; }
 
+    const Box& layoutBox() const { return *m_layoutBox; }
+
     InlineLevelBox(const Box&, InlineLayoutUnit logicalLeft, InlineLayoutSize, Type);
     InlineLevelBox() = default;
 
@@ -130,6 +139,27 @@
     m_hasContent = true;
 }
 
+inline InlineLayoutUnit InlineLevelBox::preferredLineHeight() const
+{
+    // FIXME: Remove integral flooring when legacy line layout stops using it.
+    if (isPreferredLineHeightFontMetricsBased())
+        return primaryFontMetrics().lineSpacing();
+
+    auto& lineHeight = layoutBox().style().lineHeight();
+    if (lineHeight.isPercentOrCalculated())
+        return floorf(minimumValueForLength(lineHeight, fontSize()));
+    return floorf(lineHeight.value());
+}
+
+inline InlineLevelBox::VerticalAlignment InlineLevelBox::verticalAlign() const
+{
+    auto& style = layoutBox().style();
+    auto verticalAlign = style.verticalAlign();
+    if (verticalAlign != VerticalAlign::Length)
+        return { verticalAlign, { } };
+    return { verticalAlign, floatValueForLength(style.verticalAlignLength(), preferredLineHeight()) };
+}
+
 inline bool InlineLevelBox::hasLineBoxRelativeAlignment() const
 {
     auto verticalAlignment = layoutBox().style().verticalAlign();

Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBox.cpp (283039 => 283040)


--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBox.cpp	2021-09-24 13:31:03 UTC (rev 283039)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBox.cpp	2021-09-24 13:44:17 UTC (rev 283040)
@@ -53,7 +53,7 @@
     ASSERT(run.isText() || run.isSoftLineBreak());
     auto* parentInlineBox = &inlineLevelBoxForLayoutBox(run.layoutBox().parent());
     ASSERT(parentInlineBox->isInlineBox());
-    auto& fontMetrics = parentInlineBox->style().fontMetrics();
+    auto& fontMetrics = parentInlineBox->primaryFontMetrics();
     auto runlogicalTop = parentInlineBox->logicalTop() + parentInlineBox->baseline() - fontMetrics.ascent();
 
     while (parentInlineBox != &m_rootInlineBox && !parentInlineBox->hasLineBoxRelativeAlignment()) {

Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp (283039 => 283040)


--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp	2021-09-24 13:31:03 UTC (rev 283039)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp	2021-09-24 13:44:17 UTC (rev 283040)
@@ -162,8 +162,7 @@
 {
     ASSERT(!fallbackFontsForContent.isEmpty());
     ASSERT(inlineBox.isInlineBox());
-    auto& style = inlineBox.style();
-    if (!style.lineHeight().isNegative())
+    if (!inlineBox.isPreferredLineHeightFontMetricsBased())
         return;
 
     // https://www.w3.org/TR/css-inline-3/#inline-height
@@ -195,9 +194,9 @@
 void LineBoxBuilder::setInitialVerticalGeometryForInlineBox(InlineLevelBox& inlineLevelBox) const
 {
     ASSERT(inlineLevelBox.isInlineBox() || inlineLevelBox.isLineBreakBox());
-    auto& fontMetrics = inlineLevelBox.style().fontMetrics();
-    InlineLayoutUnit ascent = fontMetrics.ascent();
-    InlineLayoutUnit descent = fontMetrics.descent();
+    auto& primaryFontMetrics = inlineLevelBox.primaryFontMetrics();
+    InlineLayoutUnit ascent = primaryFontMetrics.ascent();
+    InlineLayoutUnit descent = primaryFontMetrics.descent();
     auto logicalHeight = ascent + descent;
     // We need floor/ceil to match legacy layout integral positioning.
     inlineLevelBox.setBaseline(floorf(ascent));
@@ -204,21 +203,18 @@
     inlineLevelBox.setDescent(ceilf(descent));
     inlineLevelBox.setLogicalHeight(logicalHeight);
 
-    // FIXME: Adjust layout bounds with fallback font when applicable.
-    auto& style = inlineLevelBox.layoutBox().style();
-    auto lineHeight = style.lineHeight();
-    if (lineHeight.isNegative()) {
+    if (inlineLevelBox.isPreferredLineHeightFontMetricsBased()) {
         // If line-height computes to normal and either text-edge is leading or this is the root inline box,
         // the font’s line gap metric may also be incorporated into A and D by adding half to each side as half-leading.
         // https://www.w3.org/TR/css-inline-3/#inline-height
         // Since text-edge is not supported yet and the initial value is leading, we should just apply it to
         // all inline boxes.
-        auto halfLineGap = (fontMetrics.lineSpacing() - logicalHeight) / 2;
+        auto halfLineGap = (primaryFontMetrics.lineSpacing() - logicalHeight) / 2;
         ascent += halfLineGap;
         descent += halfLineGap;
     } else {
-        InlineLayoutUnit lineHeight = style.computedLineHeight();
-        InlineLayoutUnit halfLeading = (lineHeight - (ascent + descent)) / 2;
+        auto preferredLineHeight = inlineLevelBox.preferredLineHeight();
+        InlineLayoutUnit halfLeading = (preferredLineHeight - (ascent + descent)) / 2;
         ascent += halfLeading;
         descent += halfLeading;
     }
@@ -233,7 +229,7 @@
 
     // FIXME: Add fast path support for line-height content.
     // FIXME: We should always be able to exercise the fast path when the line has no content at all, even in non-standards mode or with line-height set.
-    auto canUseSimplifiedAlignment = layoutState().inStandardsMode() && rootBox().style().lineHeight().isNegative();
+    auto canUseSimplifiedAlignment = layoutState().inStandardsMode() && rootInlineBox.isPreferredLineHeightFontMetricsBased();
     auto updateCanUseSimplifiedAlignment = [&](auto& inlineLevelBox, std::optional<const BoxGeometry> boxGeometry = std::nullopt) {
         if (!canUseSimplifiedAlignment)
             return;

Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxVerticalAligner.cpp (283039 => 283040)


--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxVerticalAligner.cpp	2021-09-24 13:31:03 UTC (rev 283039)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxVerticalAligner.cpp	2021-09-24 13:44:17 UTC (rev 283040)
@@ -28,7 +28,6 @@
 
 #if ENABLE(LAYOUT_FORMATTING_CONTEXT)
 
-#include "FontCascade.h"
 #include "InlineFormattingContext.h"
 #include "LayoutBoxGeometry.h"
 
@@ -47,7 +46,7 @@
         // Baseline aligned, non-stretchy direct children are considered to be simple for now.
         auto& layoutBox = inlineLevelBox.layoutBox();
         return &layoutBox.parent() == &rootInlineBox.layoutBox()
-            && layoutBox.style().verticalAlign() == VerticalAlign::Baseline
+            && inlineLevelBox.verticalAlign().type == VerticalAlign::Baseline
             && !inlineLevelBoxGeometry->marginBefore()
             && !inlineLevelBoxGeometry->marginAfter()
             && inlineLevelBoxGeometry->marginBoxHeight() <= rootInlineBox.baseline();
@@ -54,11 +53,11 @@
     }
     if (inlineLevelBox.isLineBreakBox()) {
         // Baseline aligned, non-stretchy line breaks e.g. <div><span><br></span></div> but not <div><span style="font-size: 100px;"><br></span></div>.
-        return inlineLevelBox.layoutBox().style().verticalAlign() == VerticalAlign::Baseline && inlineLevelBox.baseline() <= rootInlineBox.baseline();
+        return inlineLevelBox.verticalAlign().type == VerticalAlign::Baseline && inlineLevelBox.baseline() <= rootInlineBox.baseline();
     }
     if (inlineLevelBox.isInlineBox()) {
         // Baseline aligned, non-stretchy inline boxes e.g. <div><span></span></div> but not <div><span style="font-size: 100px;"></span></div>.
-        return inlineLevelBox.layoutBox().style().verticalAlign() == VerticalAlign::Baseline && inlineLevelBox.layoutBounds() == rootInlineBox.layoutBounds();
+        return inlineLevelBox.verticalAlign().type == VerticalAlign::Baseline && inlineLevelBox.layoutBounds() == rootInlineBox.layoutBounds();
     }
     return false;
 }
@@ -148,7 +147,8 @@
         // 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()) {
+        auto verticalAlign = inlineLevelBox.verticalAlign();
+        switch (verticalAlign.type) {
         case VerticalAlign::Baseline: {
             auto logicalTopOffsetFromParentBaseline = inlineLevelBox.layoutBounds().ascent;
             logicalTop = parentInlineBox.layoutBounds().ascent - logicalTopOffsetFromParentBaseline;
@@ -155,7 +155,7 @@
             break;
         }
         case VerticalAlign::Middle: {
-            auto logicalTopOffsetFromParentBaseline = inlineLevelBox.layoutBounds().height() / 2 + parentInlineBox.style().fontMetrics().xHeight() / 2;
+            auto logicalTopOffsetFromParentBaseline = inlineLevelBox.layoutBounds().height() / 2 + parentInlineBox.primaryFontMetrics().xHeight() / 2;
             logicalTop = parentInlineBox.layoutBounds().ascent - logicalTopOffsetFromParentBaseline;
             break;
         }
@@ -165,8 +165,7 @@
             break;
         }
         case VerticalAlign::Length: {
-            auto& style = inlineLevelBox.style();
-            auto logicalTopOffsetFromParentBaseline = floatValueForLength(style.verticalAlignLength(), style.computedLineHeight()) + inlineLevelBox.layoutBounds().ascent;
+            auto logicalTopOffsetFromParentBaseline = *verticalAlign.baselineOffset + inlineLevelBox.layoutBounds().ascent;
             logicalTop = parentInlineBox.layoutBounds().ascent - logicalTopOffsetFromParentBaseline;
             break;
         }
@@ -183,12 +182,12 @@
             break;
         }
         case VerticalAlign::Sub: {
-            auto logicalTopOffsetFromParentBaseline = inlineLevelBox.layoutBounds().ascent - (parentInlineBox.style().fontCascade().size() / 5 + 1);
+            auto logicalTopOffsetFromParentBaseline = inlineLevelBox.layoutBounds().ascent - (parentInlineBox.fontSize() / 5 + 1);
             logicalTop = parentInlineBox.layoutBounds().ascent - logicalTopOffsetFromParentBaseline;
             break;
         }
         case VerticalAlign::Super: {
-            auto logicalTopOffsetFromParentBaseline = inlineLevelBox.layoutBounds().ascent + parentInlineBox.style().fontCascade().size() / 3 + 1;
+            auto logicalTopOffsetFromParentBaseline = inlineLevelBox.layoutBounds().ascent + parentInlineBox.fontSize() / 3 + 1;
             logicalTop = parentInlineBox.layoutBounds().ascent - logicalTopOffsetFromParentBaseline;
             break;
         }
@@ -237,12 +236,13 @@
             auto& parentInlineBox = lineBox.inlineLevelBoxForLayoutBox(layoutBox.parent());
             auto baselineOffsetFromParentBaseline = InlineLayoutUnit { };
 
-            switch (inlineLevelBox.verticalAlign()) {
+            auto verticalAlign = inlineLevelBox.verticalAlign();
+            switch (verticalAlign.type) {
             case VerticalAlign::Baseline:
                 baselineOffsetFromParentBaseline = { };
                 break;
             case VerticalAlign::Middle: {
-                auto logicalTopOffsetFromParentBaseline = (inlineLevelBox.layoutBounds().height() / 2 + parentInlineBox.style().fontMetrics().xHeight() / 2);
+                auto logicalTopOffsetFromParentBaseline = (inlineLevelBox.layoutBounds().height() / 2 + parentInlineBox.primaryFontMetrics().xHeight() / 2);
                 baselineOffsetFromParentBaseline = logicalTopOffsetFromParentBaseline - inlineLevelBox.layoutBounds().ascent;
                 break;
             }
@@ -252,9 +252,7 @@
                 break;
             }
             case VerticalAlign::Length: {
-                auto& style = inlineLevelBox.style();
-                auto verticalAlignOffset = floatValueForLength(style.verticalAlignLength(), style.computedLineHeight());
-                auto logicalTopOffsetFromParentBaseline = verticalAlignOffset + inlineLevelBox.baseline();
+                auto logicalTopOffsetFromParentBaseline = *verticalAlign.baselineOffset + inlineLevelBox.baseline();
                 baselineOffsetFromParentBaseline = logicalTopOffsetFromParentBaseline - inlineLevelBox.baseline();
                 break;
             }
@@ -265,10 +263,10 @@
                 baselineOffsetFromParentBaseline = inlineLevelBox.layoutBounds().descent - *parentInlineBox.descent();
                 break;
             case VerticalAlign::Sub:
-                baselineOffsetFromParentBaseline = -(parentInlineBox.style().fontCascade().size() / 5 + 1);
+                baselineOffsetFromParentBaseline = -(parentInlineBox.fontSize() / 5 + 1);
                 break;
             case VerticalAlign::Super:
-                baselineOffsetFromParentBaseline = parentInlineBox.style().fontCascade().size() / 3 + 1;
+                baselineOffsetFromParentBaseline = parentInlineBox.fontSize() / 3 + 1;
                 break;
             default:
                 ASSERT_NOT_IMPLEMENTED_YET();
@@ -276,7 +274,7 @@
             }
             absoluteBaselineOffset = inlineLevelBoxAbsoluteBaselineOffsetMap.get(&parentInlineBox) + baselineOffsetFromParentBaseline;
         } else {
-            switch (inlineLevelBox.verticalAlign()) {
+            switch (inlineLevelBox.verticalAlign().type) {
             case VerticalAlign::Top: {
                 absoluteBaselineOffset = rootInlineBox.layoutBounds().ascent - inlineLevelBox.layoutBounds().ascent;
                 break;
@@ -315,12 +313,13 @@
         auto& layoutBox = inlineLevelBox.layoutBox();
         auto& parentInlineBox = lineBox.inlineLevelBoxForLayoutBox(layoutBox.parent());
         auto logicalTop = InlineLayoutUnit { };
-        switch (inlineLevelBox.verticalAlign()) {
+        auto verticalAlign = inlineLevelBox.verticalAlign();
+        switch (verticalAlign.type) {
         case VerticalAlign::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.primaryFontMetrics().xHeight() / 2);
             logicalTop = parentInlineBox.baseline() - logicalTopOffsetFromParentBaseline;
             break;
         }
@@ -330,19 +329,17 @@
             break;
         }
         case VerticalAlign::Length: {
-            auto& style = inlineLevelBox.style();
-            auto verticalAlignOffset = floatValueForLength(style.verticalAlignLength(), style.computedLineHeight());
-            auto logicalTopOffsetFromParentBaseline = verticalAlignOffset + inlineLevelBox.baseline();
+            auto logicalTopOffsetFromParentBaseline = *verticalAlign.baselineOffset + inlineLevelBox.baseline();
             logicalTop = parentInlineBox.baseline() - logicalTopOffsetFromParentBaseline;
             break;
         }
         case VerticalAlign::Sub: {
-            auto logicalTopOffsetFromParentBaseline = inlineLevelBox.baseline() - (parentInlineBox.style().fontCascade().size() / 5 + 1);
+            auto logicalTopOffsetFromParentBaseline = inlineLevelBox.baseline() - (parentInlineBox.fontSize() / 5 + 1);
             logicalTop = parentInlineBox.baseline() - logicalTopOffsetFromParentBaseline;
             break;
         }
         case VerticalAlign::Super: {
-            auto logicalTopOffsetFromParentBaseline = inlineLevelBox.baseline() + parentInlineBox.style().fontCascade().size() / 3 + 1;
+            auto logicalTopOffsetFromParentBaseline = inlineLevelBox.baseline() + parentInlineBox.fontSize() / 3 + 1;
             logicalTop = parentInlineBox.baseline() - logicalTopOffsetFromParentBaseline;
             break;
         }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to