[webkit-changes] [WebKit/WebKit] 85b11e: [IFC][Integration] Inline blocks should be represe...

Antti Koivisto noreply at github.com
Tue Sep 20 03:31:20 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 85b11ecf4984a52240fd2fcb15352bf41e7da77d
      https://github.com/WebKit/WebKit/commit/85b11ecf4984a52240fd2fcb15352bf41e7da77d
  Author: Antti Koivisto <antti at apple.com>
  Date:   2022-09-20 (Tue, 20 Sep 2022)

  Changed paths:
    M Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp
    M Source/WebCore/layout/integration/LayoutIntegrationBoxTree.cpp
    M Source/WebCore/layout/integration/LayoutIntegrationBoxTree.h
    M Source/WebCore/layout/integration/inline/LayoutIntegrationInlineContentBuilder.cpp
    M Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.cpp
    M Source/WebCore/layout/layouttree/LayoutBox.h
    M Source/WebCore/layout/layouttree/LayoutContainerBox.h
    M Source/WebCore/layout/layouttree/LayoutLineBreakBox.cpp
    M Source/WebCore/layout/layouttree/LayoutLineBreakBox.h
    M Source/WebCore/layout/layouttree/LayoutReplacedBox.cpp
    M Source/WebCore/layout/layouttree/LayoutReplacedBox.h

  Log Message:
  -----------
  [IFC][Integration] Inline blocks should be represented by ContainerBox instead of ReplacedBox
https://bugs.webkit.org/show_bug.cgi?id=245357
<rdar://100116780>

Reviewed by Alan Bujtas.

Inline block and replaced element are separate concepts though they behave quite similarly externally. This is needed
to make progress with integration.

* Source/WebCore/layout/formattingContexts/inline/InlineLineBoxBuilder.cpp:
(WebCore::Layout::LineBoxBuilder::constructInlineLevelBoxes):
(WebCore::Layout::LineBoxBuilder::adjustIdeographicBaselineIfApplicable):
* Source/WebCore/layout/integration/LayoutIntegrationBoxTree.cpp:
(WebCore::LayoutIntegration::BoxTree::BoxTree):
(WebCore::LayoutIntegration::BoxTree::buildTreeForInlineContent):

Make Layout::ContainerBox for RenderBlocks. Only RenderReplaced generates Layout::ReplacedBox.
In some cases we can have a RenderBlock with 'display:inline'. IFC requires it to be translated to inline-block.

(WebCore::LayoutIntegration::BoxTree::buildTreeForFlexContent):
(WebCore::LayoutIntegration::BoxTree::appendChild):
(WebCore::LayoutIntegration::BoxTree::updateStyle):
(WebCore::LayoutIntegration::BoxTree::layoutBoxForRenderer const):
(WebCore::LayoutIntegration::BoxTree::layoutBoxForRenderer):

Tighten typing by returning a ContainerBox.

* Source/WebCore/layout/integration/LayoutIntegrationBoxTree.h:
* Source/WebCore/layout/integration/inline/LayoutIntegrationInlineContentBuilder.cpp:
(WebCore::LayoutIntegration::InlineContentBuilder::createDisplayLines const):
* Source/WebCore/layout/integration/inline/LayoutIntegrationLineLayout.cpp:
(WebCore::LayoutIntegration::LineLayout::updateLayoutBoxDimensions):
(WebCore::LayoutIntegration::LineLayout::constructContent):
* Source/WebCore/layout/layouttree/LayoutBox.h:
(WebCore::Layout::Box::isIntegrationRoot const):
(WebCore::Layout::Box::isIntegrationBlockContainer const): Deleted.
(WebCore::Layout::Box::isIntegrationInlineBlock const): Deleted.

Remove unneeded IntegrationBlockContainer and IntegrationInlineBlock concepts.

* Source/WebCore/layout/layouttree/LayoutContainerBox.h:
(WebCore::Layout::ContainerBox::setBaselineForIntegration):
(WebCore::Layout::ContainerBox::baselineForIntegration const):

Move baseline field to ContainerBox and make it clear it is needed for integration only.

* Source/WebCore/layout/layouttree/LayoutLineBreakBox.cpp:
(WebCore::Layout::LineBreakBox::LineBreakBox):

Make LineBreakBox and ContainerBox. This way all layout boxes are either InlineTextBoxes or ContainerBoxes.

* Source/WebCore/layout/layouttree/LayoutLineBreakBox.h:
* Source/WebCore/layout/layouttree/LayoutReplacedBox.cpp:
(WebCore::Layout::ReplacedBox::ReplacedBox):

Make ReplacedBox a ContainerBox. This makes things easier and the hierarchy has no deeper meaning in any case.
Also with shadow trees replaced elements can have children.

* Source/WebCore/layout/layouttree/LayoutReplacedBox.h:
(WebCore::Layout::ReplacedBox::setBaseline): Deleted.
(WebCore::Layout::ReplacedBox::baseline const): Deleted.

Canonical link: https://commits.webkit.org/254666@main




More information about the webkit-changes mailing list