Title: [290170] trunk/Source/WebCore
Revision
290170
Author
za...@apple.com
Date
2022-02-18 14:32:31 -0800 (Fri, 18 Feb 2022)

Log Message

[LFC][IFC] Fix ideographic baseline for atomic inline level boxes with non-zero descent
https://bugs.webkit.org/show_bug.cgi?id=236841

Reviewed by Antti Koivisto.

In most cases atomic inline level boxes have zero descent values. However the ideographic should
include the descent value (see RenderBox::baselinePosition)
This patch also removes the check for orthogonal content since it is already covered at LineLayout::updateLayoutBoxDimensions
(getting the correct baseline value that is).

* layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
(WebCore::Layout::LineBoxBuilder::adjustIdeographicBaselineIfApplicable):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (290169 => 290170)


--- trunk/Source/WebCore/ChangeLog	2022-02-18 22:19:43 UTC (rev 290169)
+++ trunk/Source/WebCore/ChangeLog	2022-02-18 22:32:31 UTC (rev 290170)
@@ -1,3 +1,18 @@
+2022-02-18  Alan Bujtas  <za...@apple.com>
+
+        [LFC][IFC] Fix ideographic baseline for atomic inline level boxes with non-zero descent
+        https://bugs.webkit.org/show_bug.cgi?id=236841
+
+        Reviewed by Antti Koivisto.
+
+        In most cases atomic inline level boxes have zero descent values. However the ideographic should
+        include the descent value (see RenderBox::baselinePosition)
+        This patch also removes the check for orthogonal content since it is already covered at LineLayout::updateLayoutBoxDimensions
+        (getting the correct baseline value that is).
+
+        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
+        (WebCore::Layout::LineBoxBuilder::adjustIdeographicBaselineIfApplicable):
+
 2022-02-18  Youenn Fablet  <you...@apple.com>
 
         REGRESSION (r288201): ASSERTION FAILED: !allScriptExecutionContextsMap().contains(m_identifier)

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


--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp	2022-02-18 22:19:43 UTC (rev 290169)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp	2022-02-18 22:32:31 UTC (rev 290170)
@@ -349,14 +349,6 @@
     // when the style/content needs ideographic baseline setup in vertical writing mode.
     auto& rootInlineBox = lineBox.rootInlineBox();
 
-    auto isAtomicInlineLevelBoxWithIdeographicBaseline = [&](auto& atomicInlineLevelBox) {
-        ASSERT(atomicInlineLevelBox.isAtomicInlineLevelBox());
-        auto& layoutBox = atomicInlineLevelBox.layoutBox();
-        auto isReplaced = is<ReplacedBox>(layoutBox) && !layoutBox.isIntegrationInlineBlock();
-        auto isOrthogonalFormattingContextRoot = layoutBox.establishesBlockFormattingContext() && layoutBox.style().isHorizontalWritingMode();
-        return isReplaced || isOrthogonalFormattingContextRoot;
-    };
-
     auto lineNeedsIdeographicBaseline = [&] {
         auto styleToUse = [&] (auto& inlineLevelBox) -> const RenderStyle& {
             return !lineIndex ? inlineLevelBox.layoutBox().firstLineStyle() : inlineLevelBox.layoutBox().style();
@@ -374,8 +366,6 @@
         for (auto& inlineLevelBox : lineBox.nonRootInlineLevelBoxes()) {
             if (inlineLevelBox.isInlineBox() && primaryFontRequiresIdeographicBaseline(styleToUse(inlineLevelBox)))
                 return true;
-            if (inlineLevelBox.isAtomicInlineLevelBox() && isAtomicInlineLevelBoxWithIdeographicBaseline(inlineLevelBox))
-                return true;
         }
         return false;
     };
@@ -391,11 +381,11 @@
         else if (inlineLevelBox.isLineBreakBox()) {
             auto& parentInlineBox = lineBox.inlineLevelBoxForLayoutBox(inlineLevelBox.layoutBox().parent());
             setBaselineAndLayoutBounds(inlineLevelBox, layoutBoundsMetricsForInlineBox(parentInlineBox, IdeographicBaseline));
-        } else if (inlineLevelBox.isAtomicInlineLevelBox() && isAtomicInlineLevelBoxWithIdeographicBaseline(inlineLevelBox)) {
-            auto alphabeticBaseline = inlineLevelBox.ascent();
-            InlineLayoutUnit ideographicBaseline = roundToInt(alphabeticBaseline / 2);
+        } else if (inlineLevelBox.isAtomicInlineLevelBox()) {
+            auto inlineLevelBoxHeight = inlineLevelBox.layoutBounds().height();
+            InlineLayoutUnit ideographicBaseline = roundToInt(inlineLevelBoxHeight / 2);
             // Move the baseline position but keep the same logical height.
-            setBaselineAndLayoutBounds(inlineLevelBox, { ideographicBaseline, inlineLevelBox.layoutBounds().descent + (alphabeticBaseline - ideographicBaseline) });
+            setBaselineAndLayoutBounds(inlineLevelBox, { ideographicBaseline, inlineLevelBoxHeight - ideographicBaseline });
         }
     }
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to