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