Title: [289716] trunk/Source/WebCore
Revision
289716
Author
[email protected]
Date
2022-02-13 10:06:27 -0800 (Sun, 13 Feb 2022)

Log Message

[LFC][IFC] Not all atomic inline level boxes need ideographic baseline when in vertical writing mode
https://bugs.webkit.org/show_bug.cgi?id=236556

Reviewed by Antti Koivisto.

Replaced boxes and orthogonal inline-block containers should use ideographic type of baseline.
(e.g. can't sync baselines coming from orthogonal inline-blocks.)

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

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (289715 => 289716)


--- trunk/Source/WebCore/ChangeLog	2022-02-13 17:53:35 UTC (rev 289715)
+++ trunk/Source/WebCore/ChangeLog	2022-02-13 18:06:27 UTC (rev 289716)
@@ -1,3 +1,16 @@
+2022-02-13  Alan Bujtas  <[email protected]>
+
+        [LFC][IFC] Not all atomic inline level boxes need ideographic baseline when in vertical writing mode
+        https://bugs.webkit.org/show_bug.cgi?id=236556
+
+        Reviewed by Antti Koivisto.
+
+        Replaced boxes and orthogonal inline-block containers should use ideographic type of baseline.
+        (e.g. can't sync baselines coming from orthogonal inline-blocks.)
+
+        * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
+        (WebCore::Layout::LineBoxBuilder::adjustIdeographicBaselineIfApplicable):
+
 2022-02-13  Lauro Moura  <[email protected]>
 
         Unreviewed, gtk buildfix after r289706

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


--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp	2022-02-13 17:53:35 UTC (rev 289715)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp	2022-02-13 18:06:27 UTC (rev 289716)
@@ -349,6 +349,14 @@
     // 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();
@@ -364,8 +372,10 @@
         if (m_fallbackFontRequiresIdeographicBaseline || primaryFontRequiresIdeographicBaseline(rootInlineBoxStyle))
             return true;
         for (auto& inlineLevelBox : lineBox.nonRootInlineLevelBoxes()) {
-            if (primaryFontRequiresIdeographicBaseline(styleToUse(inlineLevelBox)))
+            if (inlineLevelBox.isInlineBox() && primaryFontRequiresIdeographicBaseline(styleToUse(inlineLevelBox)))
                 return true;
+            if (inlineLevelBox.isAtomicInlineLevelBox() && isAtomicInlineLevelBoxWithIdeographicBaseline(inlineLevelBox))
+                return true;
         }
         return false;
     };
@@ -381,7 +391,7 @@
         else if (inlineLevelBox.isLineBreakBox()) {
             auto& parentInlineBox = lineBox.inlineLevelBoxForLayoutBox(inlineLevelBox.layoutBox().parent());
             setBaselineAndLayoutBounds(inlineLevelBox, layoutBoundsMetricsForInlineBox(parentInlineBox, IdeographicBaseline));
-        } else if (inlineLevelBox.isAtomicInlineLevelBox()) {
+        } else if (inlineLevelBox.isAtomicInlineLevelBox() && isAtomicInlineLevelBoxWithIdeographicBaseline(inlineLevelBox)) {
             auto alphabeticBaseline = inlineLevelBox.ascent();
             InlineLayoutUnit ideographicBaseline = roundToInt(alphabeticBaseline / 2);
             // Move the baseline position but keep the same logical height.
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to