Changeset 256311 in webkit


Ignore:
Timestamp:
Feb 11, 2020 9:12:44 AM (4 years ago)
Author:
Alan Bujtas
Message:

[LFC] Introduce Layout::LineBreakBox
https://bugs.webkit.org/show_bug.cgi?id=207550
<rdar://problem/59348274>

Reviewed by Antti Koivisto.

This is in preparation for making Layout::Box an abstract box (so that it stops being a leaf type of box).

  • Sources.txt:
  • WebCore.xcodeproj/project.pbxproj:
  • layout/inlineformatting/InlineFormattingContext.cpp:

(WebCore::Layout::InlineFormattingContext::collectInlineContentIfNeeded):

  • layout/integration/LayoutIntegrationBoxTree.cpp:

(WebCore::LayoutIntegration::BoxTree::buildTree):

  • layout/layouttree/LayoutBox.h:

(WebCore::Layout::Box::isImage const):
(WebCore::Layout::Box::isLineBreakBox const):

  • layout/layouttree/LayoutTreeBuilder.cpp:

(WebCore::Layout::TreeBuilder::createLineBreakBox):
(WebCore::Layout::TreeBuilder::createLayoutBox):

  • layout/layouttree/LayoutTreeBuilder.h:
Location:
trunk/Source/WebCore
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r256304 r256311  
     12020-02-11  Zalan Bujtas  <zalan@apple.com>
     2
     3        [LFC] Introduce Layout::LineBreakBox
     4        https://bugs.webkit.org/show_bug.cgi?id=207550
     5        <rdar://problem/59348274>
     6
     7        Reviewed by Antti Koivisto.
     8
     9        This is in preparation for making Layout::Box an abstract box (so that it stops being a leaf type of box).
     10
     11        * Sources.txt:
     12        * WebCore.xcodeproj/project.pbxproj:
     13        * layout/inlineformatting/InlineFormattingContext.cpp:
     14        (WebCore::Layout::InlineFormattingContext::collectInlineContentIfNeeded):
     15        * layout/integration/LayoutIntegrationBoxTree.cpp:
     16        (WebCore::LayoutIntegration::BoxTree::buildTree):
     17        * layout/layouttree/LayoutBox.h:
     18        (WebCore::Layout::Box::isImage const):
     19        (WebCore::Layout::Box::isLineBreakBox const):
     20        * layout/layouttree/LayoutTreeBuilder.cpp:
     21        (WebCore::Layout::TreeBuilder::createLineBreakBox):
     22        (WebCore::Layout::TreeBuilder::createLayoutBox):
     23        * layout/layouttree/LayoutTreeBuilder.h:
     24
    1252020-02-11  Zalan Bujtas  <zalan@apple.com>
    226
  • trunk/Source/WebCore/Sources.txt

    r256304 r256311  
    14531453layout/layouttree/LayoutContainer.cpp
    14541454layout/layouttree/LayoutInlineTextBox.cpp
     1455layout/layouttree/LayoutLineBreakBox.cpp
    14551456layout/layouttree/LayoutReplaced.cpp
    14561457layout/layouttree/LayoutTreeBuilder.cpp
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r256304 r256311  
    20812081                6FE198172178397C00446F08 /* InlineLineBreaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE198152178397C00446F08 /* InlineLineBreaker.h */; settings = {ATTRIBUTES = (Private, ); }; };
    20822082                6FE7CFA22177EEF2005B1573 /* InlineItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE7CFA02177EEF1005B1573 /* InlineItem.h */; };
     2083                6FFA4C0123F2FED9007E4EBC /* LayoutLineBreakBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FFA4C0023F2FED9007E4EBC /* LayoutLineBreakBox.h */; settings = {ATTRIBUTES = (Private, ); }; };
    20832084                6FFDC442212EFF1700A9CA91 /* FloatAvoider.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FFDC440212EFF1600A9CA91 /* FloatAvoider.h */; settings = {ATTRIBUTES = (Private, ); }; };
    20842085                709A01FE1E3D0BDD006B0D4C /* ModuleFetchFailureKind.h in Headers */ = {isa = PBXBuildFile; fileRef = 709A01FD1E3D0BCC006B0D4C /* ModuleFetchFailureKind.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    93719372                6FE9F09222211035004C5082 /* ContentChangeObserver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ContentChangeObserver.cpp; sourceTree = "<group>"; };
    93729373                6FEFE81D22F9D22A00114927 /* LayoutPhase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LayoutPhase.h; sourceTree = "<group>"; };
     9374                6FFA4BFE23F2FECD007E4EBC /* LayoutLineBreakBox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = LayoutLineBreakBox.cpp; sourceTree = "<group>"; };
     9375                6FFA4C0023F2FED9007E4EBC /* LayoutLineBreakBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LayoutLineBreakBox.h; sourceTree = "<group>"; };
    93739376                6FFDC43E212EFF1600A9CA91 /* FloatAvoider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FloatAvoider.cpp; sourceTree = "<group>"; };
    93749377                6FFDC440212EFF1600A9CA91 /* FloatAvoider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FloatAvoider.h; sourceTree = "<group>"; };
     
    1674816751                                6F0B98B323F268EB00EEC2F2 /* LayoutInlineTextBox.h */,
    1674916752                                11100FC72092764C0081AA6C /* LayoutIterator.h */,
     16753                                6FFA4BFE23F2FECD007E4EBC /* LayoutLineBreakBox.cpp */,
     16754                                6FFA4C0023F2FED9007E4EBC /* LayoutLineBreakBox.h */,
    1675016755                                111C615720AD1AE1005B82FA /* LayoutReplaced.cpp */,
    1675116756                                111C615620AD1AE1005B82FA /* LayoutReplaced.h */,
     
    3130831313                                E4ABABDD236088FE00FA4345 /* LayoutIntegrationLineLayout.h in Headers */,
    3130931314                                11310CF420BA4A3D0065A8D0 /* LayoutIterator.h in Headers */,
     31315                                6FFA4C0123F2FED9007E4EBC /* LayoutLineBreakBox.h in Headers */,
    3131031316                                931D72F615FE695300C4C07E /* LayoutMilestone.h in Headers */,
    3131131317                                141DC051164834B900371E5A /* LayoutPoint.h in Headers */,
  • trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp

    r256304 r256311  
    333333        while (!layoutQueue.isEmpty()) {
    334334            auto& layoutBox = *layoutQueue.takeLast();
    335             if (layoutBox.isLineBreakBox())
     335            if (layoutBox.isLineBreakBox()) {
     336                // FIXME: Treat <wbr> as a word break opportunity instead.
    336337                formattingState.addInlineItem({ layoutBox, InlineItem::Type::HardLineBreak });
    337             else if (layoutBox.isFloatingPositioned())
     338            } else if (layoutBox.isFloatingPositioned())
    338339                formattingState.addInlineItem({ layoutBox, InlineItem::Type::Float });
    339340            else if (layoutBox.isAtomicInlineLevelBox())
  • trunk/Source/WebCore/layout/integration/LayoutIntegrationBoxTree.cpp

    r256304 r256311  
    2929#if ENABLE(LAYOUT_FORMATTING_CONTEXT)
    3030
     31#include "LayoutLineBreakBox.h"
    3132#include "RenderBlockFlow.h"
    3233#include "RenderChildIterator.h"
     34#include "RenderLineBreak.h"
    3335
    3436namespace WebCore {
     
    6466            clonedStyle.setDisplay(DisplayType::Inline);
    6567            clonedStyle.setFloating(Float::No);
    66             childBox = makeUnique<Layout::Box>(Layout::Box::ElementAttributes { Layout::Box::ElementType::HardLineBreak }, WTFMove(clonedStyle));
     68            childBox = makeUnique<Layout::LineBreakBox>(downcast<RenderLineBreak>(childRenderer).isWBR(), WTFMove(clonedStyle));
    6769        }
    6870        ASSERT(childBox);
  • trunk/Source/WebCore/layout/layouttree/LayoutBox.h

    r256304 r256311  
    5555        Image,
    5656        IFrame,
    57         HardLineBreak,
    5857        GenericElement
    5958    };
     
    6665        BoxFlag                = 1 << 0,
    6766        InlineTextBox          = 1 << 1,
    68         ContainerFlag          = 1 << 2
     67        LineBreakBox           = 1 << 2,
     68        ContainerFlag          = 1 << 3
    6969    };
    7070    typedef unsigned BaseTypeFlags;
     
    128128    bool isIFrame() const { return m_elementAttributes && m_elementAttributes.value().elementType == ElementType::IFrame; }
    129129    bool isImage() const { return m_elementAttributes && m_elementAttributes.value().elementType == ElementType::Image; }
    130     bool isLineBreakBox() const { return m_elementAttributes && m_elementAttributes.value().elementType == ElementType::HardLineBreak; }
    131130
    132131    const Container* parent() const { return m_parent; }
     
    143142    bool isContainer() const { return m_baseTypeFlags & ContainerFlag; }
    144143    bool isInlineTextBox() const { return m_baseTypeFlags & InlineTextBox; }
     144    bool isLineBreakBox() const { return m_baseTypeFlags & LineBreakBox; }
    145145
    146146    bool isPaddingApplicable() const;
  • trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp

    r256304 r256311  
    4444#include "LayoutDescendantIterator.h"
    4545#include "LayoutInlineTextBox.h"
     46#include "LayoutLineBreakBox.h"
    4647#include "LayoutPhase.h"
    4748#include "LayoutSize.h"
     
    160161}
    161162
     163Box& TreeBuilder::createLineBreakBox(bool isOptional, RenderStyle&& style)
     164{
     165    auto newBox = makeUnique<Layout::LineBreakBox>(isOptional, WTFMove(style));
     166    auto& box = *newBox;
     167    m_layoutTreeContent.addBox(WTFMove(newBox));
     168    return box;
     169}
     170
    162171Container& TreeBuilder::createContainer(Optional<Box::ElementAttributes> elementAttributes, RenderStyle&& style)
    163172{
     
    180189            if (element->hasTagName(HTMLNames::iframeTag))
    181190                return Box::ElementAttributes { Box::ElementType::IFrame };
    182             // FIXME wbr should not be considered as hard linebreak.
    183             if (element->hasTagName(HTMLNames::brTag) || element->hasTagName(HTMLNames::wbrTag))
    184                 return Box::ElementAttributes { Box::ElementType::HardLineBreak };
    185191            return Box::ElementAttributes { Box::ElementType::GenericElement };
    186192        }
     
    207213            clonedStyle.setDisplay(DisplayType::Inline);
    208214            clonedStyle.setFloating(Float::No);
    209             childLayoutBox = &createBox(elementAttributes(renderer), WTFMove(clonedStyle));
     215            createLineBreakBox(downcast<RenderLineBreak>(childRenderer).isWBR(), WTFMove(clonedStyle));
    210216        } else if (is<RenderTable>(renderer)) {
    211217            // Construct the principal table wrapper box (and not the table box itself).
  • trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.h

    r256304 r256311  
    9393    Box& createBox(Optional<Box::ElementAttributes>, RenderStyle&&);
    9494    Box& createTextBox(String text, bool canUseSimplifiedTextMeasuring, RenderStyle&&);
     95    Box& createLineBreakBox(bool isOptional, RenderStyle&&);
    9596    Container& createContainer(Optional<Box::ElementAttributes>, RenderStyle&&);
    9697
Note: See TracChangeset for help on using the changeset viewer.