Changeset 256311 in webkit
- Timestamp:
- Feb 11, 2020 9:12:44 AM (4 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r256304 r256311 1 2020-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 1 25 2020-02-11 Zalan Bujtas <zalan@apple.com> 2 26 -
trunk/Source/WebCore/Sources.txt
r256304 r256311 1453 1453 layout/layouttree/LayoutContainer.cpp 1454 1454 layout/layouttree/LayoutInlineTextBox.cpp 1455 layout/layouttree/LayoutLineBreakBox.cpp 1455 1456 layout/layouttree/LayoutReplaced.cpp 1456 1457 layout/layouttree/LayoutTreeBuilder.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r256304 r256311 2081 2081 6FE198172178397C00446F08 /* InlineLineBreaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE198152178397C00446F08 /* InlineLineBreaker.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2082 2082 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, ); }; }; 2083 2084 6FFDC442212EFF1700A9CA91 /* FloatAvoider.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FFDC440212EFF1600A9CA91 /* FloatAvoider.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2084 2085 709A01FE1E3D0BDD006B0D4C /* ModuleFetchFailureKind.h in Headers */ = {isa = PBXBuildFile; fileRef = 709A01FD1E3D0BCC006B0D4C /* ModuleFetchFailureKind.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 9371 9372 6FE9F09222211035004C5082 /* ContentChangeObserver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ContentChangeObserver.cpp; sourceTree = "<group>"; }; 9372 9373 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>"; }; 9373 9376 6FFDC43E212EFF1600A9CA91 /* FloatAvoider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FloatAvoider.cpp; sourceTree = "<group>"; }; 9374 9377 6FFDC440212EFF1600A9CA91 /* FloatAvoider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FloatAvoider.h; sourceTree = "<group>"; }; … … 16748 16751 6F0B98B323F268EB00EEC2F2 /* LayoutInlineTextBox.h */, 16749 16752 11100FC72092764C0081AA6C /* LayoutIterator.h */, 16753 6FFA4BFE23F2FECD007E4EBC /* LayoutLineBreakBox.cpp */, 16754 6FFA4C0023F2FED9007E4EBC /* LayoutLineBreakBox.h */, 16750 16755 111C615720AD1AE1005B82FA /* LayoutReplaced.cpp */, 16751 16756 111C615620AD1AE1005B82FA /* LayoutReplaced.h */, … … 31308 31313 E4ABABDD236088FE00FA4345 /* LayoutIntegrationLineLayout.h in Headers */, 31309 31314 11310CF420BA4A3D0065A8D0 /* LayoutIterator.h in Headers */, 31315 6FFA4C0123F2FED9007E4EBC /* LayoutLineBreakBox.h in Headers */, 31310 31316 931D72F615FE695300C4C07E /* LayoutMilestone.h in Headers */, 31311 31317 141DC051164834B900371E5A /* LayoutPoint.h in Headers */, -
trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp
r256304 r256311 333 333 while (!layoutQueue.isEmpty()) { 334 334 auto& layoutBox = *layoutQueue.takeLast(); 335 if (layoutBox.isLineBreakBox()) 335 if (layoutBox.isLineBreakBox()) { 336 // FIXME: Treat <wbr> as a word break opportunity instead. 336 337 formattingState.addInlineItem({ layoutBox, InlineItem::Type::HardLineBreak }); 337 else if (layoutBox.isFloatingPositioned())338 } else if (layoutBox.isFloatingPositioned()) 338 339 formattingState.addInlineItem({ layoutBox, InlineItem::Type::Float }); 339 340 else if (layoutBox.isAtomicInlineLevelBox()) -
trunk/Source/WebCore/layout/integration/LayoutIntegrationBoxTree.cpp
r256304 r256311 29 29 #if ENABLE(LAYOUT_FORMATTING_CONTEXT) 30 30 31 #include "LayoutLineBreakBox.h" 31 32 #include "RenderBlockFlow.h" 32 33 #include "RenderChildIterator.h" 34 #include "RenderLineBreak.h" 33 35 34 36 namespace WebCore { … … 64 66 clonedStyle.setDisplay(DisplayType::Inline); 65 67 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)); 67 69 } 68 70 ASSERT(childBox); -
trunk/Source/WebCore/layout/layouttree/LayoutBox.h
r256304 r256311 55 55 Image, 56 56 IFrame, 57 HardLineBreak,58 57 GenericElement 59 58 }; … … 66 65 BoxFlag = 1 << 0, 67 66 InlineTextBox = 1 << 1, 68 ContainerFlag = 1 << 2 67 LineBreakBox = 1 << 2, 68 ContainerFlag = 1 << 3 69 69 }; 70 70 typedef unsigned BaseTypeFlags; … … 128 128 bool isIFrame() const { return m_elementAttributes && m_elementAttributes.value().elementType == ElementType::IFrame; } 129 129 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; }131 130 132 131 const Container* parent() const { return m_parent; } … … 143 142 bool isContainer() const { return m_baseTypeFlags & ContainerFlag; } 144 143 bool isInlineTextBox() const { return m_baseTypeFlags & InlineTextBox; } 144 bool isLineBreakBox() const { return m_baseTypeFlags & LineBreakBox; } 145 145 146 146 bool isPaddingApplicable() const; -
trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.cpp
r256304 r256311 44 44 #include "LayoutDescendantIterator.h" 45 45 #include "LayoutInlineTextBox.h" 46 #include "LayoutLineBreakBox.h" 46 47 #include "LayoutPhase.h" 47 48 #include "LayoutSize.h" … … 160 161 } 161 162 163 Box& 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 162 171 Container& TreeBuilder::createContainer(Optional<Box::ElementAttributes> elementAttributes, RenderStyle&& style) 163 172 { … … 180 189 if (element->hasTagName(HTMLNames::iframeTag)) 181 190 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 };185 191 return Box::ElementAttributes { Box::ElementType::GenericElement }; 186 192 } … … 207 213 clonedStyle.setDisplay(DisplayType::Inline); 208 214 clonedStyle.setFloating(Float::No); 209 c hildLayoutBox = &createBox(elementAttributes(renderer), WTFMove(clonedStyle));215 createLineBreakBox(downcast<RenderLineBreak>(childRenderer).isWBR(), WTFMove(clonedStyle)); 210 216 } else if (is<RenderTable>(renderer)) { 211 217 // Construct the principal table wrapper box (and not the table box itself). -
trunk/Source/WebCore/layout/layouttree/LayoutTreeBuilder.h
r256304 r256311 93 93 Box& createBox(Optional<Box::ElementAttributes>, RenderStyle&&); 94 94 Box& createTextBox(String text, bool canUseSimplifiedTextMeasuring, RenderStyle&&); 95 Box& createLineBreakBox(bool isOptional, RenderStyle&&); 95 96 Container& createContainer(Optional<Box::ElementAttributes>, RenderStyle&&); 96 97
Note: See TracChangeset
for help on using the changeset viewer.