Diff
Modified: trunk/LayoutTests/ChangeLog (290437 => 290438)
--- trunk/LayoutTests/ChangeLog 2022-02-24 17:19:25 UTC (rev 290437)
+++ trunk/LayoutTests/ChangeLog 2022-02-24 17:31:55 UTC (rev 290438)
@@ -1,3 +1,12 @@
+2022-02-24 Alan Bujtas <[email protected]>
+
+ [LFC][IFC] Non-orthogonal inline block boxes keep their baseline on ideographic lines
+ https://bugs.webkit.org/show_bug.cgi?id=236946
+
+ Reviewed by Antti Koivisto.
+
+ * platform/mac/fast/writing-mode/border-styles-vertical-lr-mixed-expected.txt: Progression
+
2022-02-24 Devin Rousso <[email protected]>
Web Inspector: merge WI.OverlayManager into WI.DOMNode
Modified: trunk/LayoutTests/platform/ios/fast/writing-mode/border-styles-vertical-lr-mixed-expected.txt (290437 => 290438)
--- trunk/LayoutTests/platform/ios/fast/writing-mode/border-styles-vertical-lr-mixed-expected.txt 2022-02-24 17:19:25 UTC (rev 290437)
+++ trunk/LayoutTests/platform/ios/fast/writing-mode/border-styles-vertical-lr-mixed-expected.txt 2022-02-24 17:31:55 UTC (rev 290438)
@@ -12,8 +12,8 @@
RenderText {#text} at (156,0) size 72x48
text run at (156,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,83) size 19x4
- text run at (119,83) width 4: " "
+ RenderText {#text} at (183,83) size 19x4
+ text run at (183,83) width 4: " "
RenderBlock {DIV} at (0,87) size 256x83
RenderInline {SPAN} at (0,0) size 240x83 [bgcolor=#DDDDDD] [border: (20px groove #808080)]
RenderText {#text} at (28,35) size 72x48
@@ -22,8 +22,8 @@
RenderText {#text} at (156,0) size 72x48
text run at (156,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,170) size 19x4
- text run at (119,170) width 4: " "
+ RenderText {#text} at (183,170) size 19x4
+ text run at (183,170) width 4: " "
RenderBlock {DIV} at (0,174) size 256x83
RenderInline {SPAN} at (0,0) size 240x83 [bgcolor=#DDDDDD] [border: (20px ridge #808080)]
RenderText {#text} at (28,35) size 72x48
@@ -32,8 +32,8 @@
RenderText {#text} at (156,0) size 72x48
text run at (156,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,257) size 19x4
- text run at (119,257) width 4: " "
+ RenderText {#text} at (183,257) size 19x4
+ text run at (183,257) width 4: " "
RenderBlock {DIV} at (0,261) size 256x83
RenderInline {SPAN} at (0,0) size 240x83 [bgcolor=#DDDDDD] [border: (20px outset #808080)]
RenderText {#text} at (28,35) size 72x48
@@ -42,8 +42,8 @@
RenderText {#text} at (156,0) size 72x48
text run at (156,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,344) size 19x4
- text run at (119,344) width 4: " "
+ RenderText {#text} at (183,344) size 19x4
+ text run at (183,344) width 4: " "
RenderBlock {DIV} at (0,348) size 256x83
RenderInline {SPAN} at (0,0) size 240x83 [bgcolor=#DDDDDD] [border: (20px inset #808080)]
RenderText {#text} at (28,35) size 72x48
@@ -52,8 +52,8 @@
RenderText {#text} at (156,0) size 72x48
text run at (156,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,431) size 19x4
- text run at (119,431) width 4: " "
+ RenderText {#text} at (183,431) size 19x4
+ text run at (183,431) width 4: " "
RenderBlock {DIV} at (0,435) size 256x83
RenderInline {SPAN} at (0,0) size 240x83 [bgcolor=#DDDDDD] [border: (20px double #808080)]
RenderText {#text} at (28,35) size 72x48
@@ -72,8 +72,8 @@
RenderText {#text} at (156,0) size 72x48
text run at (156,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,83) size 19x4
- text run at (119,83) width 4: " "
+ RenderText {#text} at (183,83) size 19x4
+ text run at (183,83) width 4: " "
RenderBlock {DIV} at (0,87) size 256x83
RenderInline {SPAN} at (0,0) size 240x83 [bgcolor=#DDDDDD] [border: (20px groove #808080)]
RenderText {#text} at (28,35) size 72x48
@@ -82,8 +82,8 @@
RenderText {#text} at (156,0) size 72x48
text run at (156,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,170) size 19x4
- text run at (119,170) width 4: " "
+ RenderText {#text} at (183,170) size 19x4
+ text run at (183,170) width 4: " "
RenderBlock {DIV} at (0,174) size 256x83
RenderInline {SPAN} at (0,0) size 240x83 [bgcolor=#DDDDDD] [border: (20px ridge #808080)]
RenderText {#text} at (28,35) size 72x48
@@ -92,8 +92,8 @@
RenderText {#text} at (156,0) size 72x48
text run at (156,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,257) size 19x4
- text run at (119,257) width 4: " "
+ RenderText {#text} at (183,257) size 19x4
+ text run at (183,257) width 4: " "
RenderBlock {DIV} at (0,261) size 256x83
RenderInline {SPAN} at (0,0) size 240x83 [bgcolor=#DDDDDD] [border: (20px outset #808080)]
RenderText {#text} at (28,35) size 72x48
@@ -102,8 +102,8 @@
RenderText {#text} at (156,0) size 72x48
text run at (156,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,344) size 19x4
- text run at (119,344) width 4: " "
+ RenderText {#text} at (183,344) size 19x4
+ text run at (183,344) width 4: " "
RenderBlock {DIV} at (0,348) size 256x83
RenderInline {SPAN} at (0,0) size 240x83 [bgcolor=#DDDDDD] [border: (20px inset #808080)]
RenderText {#text} at (28,35) size 72x48
@@ -112,8 +112,8 @@
RenderText {#text} at (156,0) size 72x48
text run at (156,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,431) size 19x4
- text run at (119,431) width 4: " "
+ RenderText {#text} at (183,431) size 19x4
+ text run at (183,431) width 4: " "
RenderBlock {DIV} at (0,435) size 256x83
RenderInline {SPAN} at (0,0) size 240x83 [bgcolor=#DDDDDD] [border: (20px double #808080)]
RenderText {#text} at (28,35) size 72x48
Modified: trunk/LayoutTests/platform/mac/fast/writing-mode/border-styles-vertical-lr-mixed-expected.txt (290437 => 290438)
--- trunk/LayoutTests/platform/mac/fast/writing-mode/border-styles-vertical-lr-mixed-expected.txt 2022-02-24 17:19:25 UTC (rev 290437)
+++ trunk/LayoutTests/platform/mac/fast/writing-mode/border-styles-vertical-lr-mixed-expected.txt 2022-02-24 17:31:55 UTC (rev 290438)
@@ -12,8 +12,8 @@
RenderText {#text} at (155,0) size 74x48
text run at (155,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,83) size 18x4
- text run at (119,83) width 4: " "
+ RenderText {#text} at (183,83) size 18x4
+ text run at (183,83) width 4: " "
RenderBlock {DIV} at (0,87) size 256x83
RenderInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px groove #808080)]
RenderText {#text} at (27,35) size 74x48
@@ -22,8 +22,8 @@
RenderText {#text} at (155,0) size 74x48
text run at (155,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,170) size 18x4
- text run at (119,170) width 4: " "
+ RenderText {#text} at (183,170) size 18x4
+ text run at (183,170) width 4: " "
RenderBlock {DIV} at (0,174) size 256x83
RenderInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px ridge #808080)]
RenderText {#text} at (27,35) size 74x48
@@ -32,8 +32,8 @@
RenderText {#text} at (155,0) size 74x48
text run at (155,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,257) size 18x4
- text run at (119,257) width 4: " "
+ RenderText {#text} at (183,257) size 18x4
+ text run at (183,257) width 4: " "
RenderBlock {DIV} at (0,261) size 256x83
RenderInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px outset #808080)]
RenderText {#text} at (27,35) size 74x48
@@ -42,8 +42,8 @@
RenderText {#text} at (155,0) size 74x48
text run at (155,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,344) size 18x4
- text run at (119,344) width 4: " "
+ RenderText {#text} at (183,344) size 18x4
+ text run at (183,344) width 4: " "
RenderBlock {DIV} at (0,348) size 256x83
RenderInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px inset #808080)]
RenderText {#text} at (27,35) size 74x48
@@ -52,8 +52,8 @@
RenderText {#text} at (155,0) size 74x48
text run at (155,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,431) size 18x4
- text run at (119,431) width 4: " "
+ RenderText {#text} at (183,431) size 18x4
+ text run at (183,431) width 4: " "
RenderBlock {DIV} at (0,435) size 256x83
RenderInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px double #808080)]
RenderText {#text} at (27,35) size 74x48
@@ -72,8 +72,8 @@
RenderText {#text} at (155,0) size 74x48
text run at (155,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,83) size 18x4
- text run at (119,83) width 4: " "
+ RenderText {#text} at (183,83) size 18x4
+ text run at (183,83) width 4: " "
RenderBlock {DIV} at (0,87) size 256x83
RenderInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px groove #808080)]
RenderText {#text} at (27,35) size 74x48
@@ -82,8 +82,8 @@
RenderText {#text} at (155,0) size 74x48
text run at (155,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,170) size 18x4
- text run at (119,170) width 4: " "
+ RenderText {#text} at (183,170) size 18x4
+ text run at (183,170) width 4: " "
RenderBlock {DIV} at (0,174) size 256x83
RenderInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px ridge #808080)]
RenderText {#text} at (27,35) size 74x48
@@ -92,8 +92,8 @@
RenderText {#text} at (155,0) size 74x48
text run at (155,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,257) size 18x4
- text run at (119,257) width 4: " "
+ RenderText {#text} at (183,257) size 18x4
+ text run at (183,257) width 4: " "
RenderBlock {DIV} at (0,261) size 256x83
RenderInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px outset #808080)]
RenderText {#text} at (27,35) size 74x48
@@ -102,8 +102,8 @@
RenderText {#text} at (155,0) size 74x48
text run at (155,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,344) size 18x4
- text run at (119,344) width 4: " "
+ RenderText {#text} at (183,344) size 18x4
+ text run at (183,344) width 4: " "
RenderBlock {DIV} at (0,348) size 256x83
RenderInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px inset #808080)]
RenderText {#text} at (27,35) size 74x48
@@ -112,8 +112,8 @@
RenderText {#text} at (155,0) size 74x48
text run at (155,0) width 48: " "
RenderText {#text} at (0,0) size 0x0
- RenderText {#text} at (119,431) size 18x4
- text run at (119,431) width 4: " "
+ RenderText {#text} at (183,431) size 18x4
+ text run at (183,431) width 4: " "
RenderBlock {DIV} at (0,435) size 256x83
RenderInline {SPAN} at (0,0) size 242x83 [bgcolor=#DDDDDD] [border: (20px double #808080)]
RenderText {#text} at (27,35) size 74x48
Modified: trunk/Source/WebCore/ChangeLog (290437 => 290438)
--- trunk/Source/WebCore/ChangeLog 2022-02-24 17:19:25 UTC (rev 290437)
+++ trunk/Source/WebCore/ChangeLog 2022-02-24 17:31:55 UTC (rev 290438)
@@ -1,5 +1,23 @@
2022-02-24 Alan Bujtas <[email protected]>
+ [LFC][IFC] Non-orthogonal inline block boxes keep their baseline on ideographic lines
+ https://bugs.webkit.org/show_bug.cgi?id=236946
+
+ Reviewed by Antti Koivisto.
+
+ This is similar to the logic in RenderBlock::baselinePosition for inline block boxes.
+
+ * layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
+ (WebCore::Layout::LineBoxBuilder::constructInlineLevelBoxes):
+ (WebCore::Layout::LineBoxBuilder::adjustIdeographicBaselineIfApplicable):
+ * layout/integration/LayoutIntegrationBoxTree.cpp:
+ (WebCore::LayoutIntegration::BoxTree::buildTree):
+ * layout/integration/LayoutIntegrationLineLayout.cpp:
+ (WebCore::LayoutIntegration::LineLayout::updateLayoutBoxDimensions):
+ * rendering/RenderBlock.h:
+
+2022-02-24 Alan Bujtas <[email protected]>
+
[IFC][Integration] verticalLogicalMargin returns incorrect values for vertical-rl
https://bugs.webkit.org/show_bug.cgi?id=237138
Modified: trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp (290437 => 290438)
--- trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp 2022-02-24 17:19:25 UTC (rev 290437)
+++ trunk/Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp 2022-02-24 17:31:55 UTC (rev 290438)
@@ -261,7 +261,7 @@
if (layoutState().shouldNotSynthesizeInlineBlockBaseline()) {
// Integration codepath constructs replaced boxes for inline-block content.
ASSERT(layoutBox.isReplacedBox());
- ascent = *downcast<ReplacedBox>(layoutBox).baseline();
+ ascent = downcast<ReplacedBox>(layoutBox).baseline().value_or(marginBoxHeight);
} else if (layoutBox.isInlineBlockBox()) {
// The baseline of an 'inline-block' is the baseline of its last line box in the normal flow, unless it has either no in-flow line boxes or
// if its 'overflow' property has a computed value other than 'visible', in which case the baseline is the bottom margin edge.
@@ -415,8 +415,19 @@
};
adjustLayoutBoundsWithIdeographicBaseline(rootInlineBox);
- for (auto& inlineLevelBox : lineBox.nonRootInlineLevelBoxes())
+ for (auto& inlineLevelBox : lineBox.nonRootInlineLevelBoxes()) {
+ if (inlineLevelBox.isAtomicInlineLevelBox()) {
+ auto& layoutBox = inlineLevelBox.layoutBox();
+ auto isInlineBlockWithNonSyntheticBaseline = layoutBox.isIntegrationInlineBlock() && downcast<ReplacedBox>(layoutBox).baseline().has_value();
+ // FIXME: While the layoutBox.isIntegrationInlineBlock check may seem redundant here, it's really just because currently
+ // the integration codepath turns inline-blocks into replaced type boxes.
+ auto isOrthogonalBlockFormattingRoot = (layoutBox.establishesBlockFormattingContext() || layoutBox.isIntegrationInlineBlock())
+ && layoutBox.style().isHorizontalWritingMode();
+ if (isInlineBlockWithNonSyntheticBaseline && !isOrthogonalBlockFormattingRoot)
+ continue;
+ }
adjustLayoutBoundsWithIdeographicBaseline(inlineLevelBox);
+ }
}
}
Modified: trunk/Source/WebCore/layout/integration/LayoutIntegrationBoxTree.cpp (290437 => 290438)
--- trunk/Source/WebCore/layout/integration/LayoutIntegrationBoxTree.cpp 2022-02-24 17:19:25 UTC (rev 290437)
+++ trunk/Source/WebCore/layout/integration/LayoutIntegrationBoxTree.cpp 2022-02-24 17:31:55 UTC (rev 290438)
@@ -35,6 +35,7 @@
#include "LayoutReplacedBox.h"
#include "RenderBlockFlow.h"
#include "RenderChildIterator.h"
+#include "RenderDetailsMarker.h"
#include "RenderImage.h"
#include "RenderLineBreak.h"
#include "TextUtil.h"
@@ -116,8 +117,14 @@
if (is<RenderReplaced>(childRenderer))
return makeUnique<Layout::ReplacedBox>(Layout::Box::ElementAttributes { is<RenderImage>(childRenderer) ? Layout::Box::ElementType::Image : Layout::Box::ElementType::GenericElement }, WTFMove(style), WTFMove(firstLineStyle));
- if (is<RenderBlock>(childRenderer))
- return makeUnique<Layout::ReplacedBox>(Layout::Box::ElementAttributes { Layout::Box::ElementType::IntegrationInlineBlock }, WTFMove(style), WTFMove(firstLineStyle));
+ if (is<RenderBlock>(childRenderer)) {
+ auto attributes = Layout::Box::ElementAttributes { Layout::Box::ElementType::IntegrationInlineBlock };
+ if (is<RenderDetailsMarker>(childRenderer)) {
+ // Details marker is not a real inline-block box.
+ attributes = Layout::Box::ElementAttributes { Layout::Box::ElementType::GenericElement };
+ }
+ return makeUnique<Layout::ReplacedBox>(attributes, WTFMove(style), WTFMove(firstLineStyle));
+ }
if (is<RenderInline>(childRenderer)) {
// This looks like continuation renderer.
Modified: trunk/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.cpp (290437 => 290438)
--- trunk/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.cpp 2022-02-24 17:19:25 UTC (rev 290437)
+++ trunk/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.cpp 2022-02-24 17:31:55 UTC (rev 290438)
@@ -45,12 +45,19 @@
#include "LayoutReplacedBox.h"
#include "LayoutTreeBuilder.h"
#include "PaintInfo.h"
+#include "RenderAttachment.h"
#include "RenderBlockFlow.h"
+#include "RenderButton.h"
#include "RenderChildIterator.h"
#include "RenderDescendantIterator.h"
#include "RenderImage.h"
#include "RenderInline.h"
#include "RenderLineBreak.h"
+#include "RenderListBox.h"
+#include "RenderListMarker.h"
+#include "RenderSlider.h"
+#include "RenderTextControlMultiLine.h"
+#include "RenderTheme.h"
#include "RenderView.h"
#include "RuntimeEnabledFeatures.h"
#include "Settings.h"
@@ -256,8 +263,27 @@
replacedBoxGeometry.setBorder(logicalBorder(replacedOrInlineBlock, isLeftToRightInlineDirection, writingMode));
replacedBoxGeometry.setPadding(logicalPadding(replacedOrInlineBlock, isLeftToRightInlineDirection, writingMode));
- auto baseline = replacedOrInlineBlock.baselinePosition(AlphabeticBaseline, false /* firstLine */, writingMode == WritingMode::TopToBottom ? HorizontalLine : VerticalLine, PositionOnContainingLine);
- replacedBox.setBaseline(roundToInt(baseline));
+ auto hasNonSyntheticBaseline = [&] {
+ if (is<RenderReplaced>(replacedOrInlineBlock)
+ || is<RenderListBox>(replacedOrInlineBlock)
+ || is<RenderSlider>(replacedOrInlineBlock)
+ || is<RenderTextControlMultiLine>(replacedOrInlineBlock)
+ || is<RenderListMarker>(replacedOrInlineBlock)
+#if ENABLE(ATTACHMENT_ELEMENT)
+ || is<RenderAttachment>(replacedOrInlineBlock)
+#endif
+ || is<RenderButton>(replacedOrInlineBlock)) {
+ // These are special RenderBlock renderers that override the default baseline position behavior of the inline block box.
+ return true;
+ }
+ auto& blockFlow = downcast<RenderBlockFlow>(replacedOrInlineBlock);
+ auto hasAppareance = blockFlow.style().hasEffectiveAppearance() && !blockFlow.theme().isControlContainer(blockFlow.style().effectiveAppearance());
+ return hasAppareance || !blockFlow.childrenInline() || blockFlow.hasLines() || blockFlow.hasLineIfEmpty();
+ }();
+ if (hasNonSyntheticBaseline) {
+ auto baseline = replacedOrInlineBlock.baselinePosition(AlphabeticBaseline, false /* firstLine */, writingMode == WritingMode::TopToBottom ? HorizontalLine : VerticalLine, PositionOnContainingLine);
+ replacedBox.setBaseline(roundToInt(baseline));
+ }
}
void LineLayout::updateLineBreakBoxDimensions(const RenderLineBreak& lineBreakBox)
Modified: trunk/Source/WebCore/rendering/RenderBlock.h (290437 => 290438)
--- trunk/Source/WebCore/rendering/RenderBlock.h 2022-02-24 17:19:25 UTC (rev 290437)
+++ trunk/Source/WebCore/rendering/RenderBlock.h 2022-02-24 17:31:55 UTC (rev 290438)
@@ -320,6 +320,8 @@
static String updateSecurityDiscCharacters(const RenderStyle&, String&&);
+ virtual bool hasLineIfEmpty() const;
+
protected:
RenderFragmentedFlow* locateEnclosingFragmentedFlow() const override;
void willBeDestroyed() override;
@@ -369,8 +371,6 @@
void styleWillChange(StyleDifference, const RenderStyle& newStyle) override;
void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override;
- virtual bool hasLineIfEmpty() const;
-
virtual bool canPerformSimplifiedLayout() const;
bool simplifiedLayout();
virtual void simplifiedNormalFlowLayout();