Changeset 252865 in webkit
- Timestamp:
- Nov 25, 2019 10:33:52 AM (4 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 9 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r252864 r252865 1 2019-11-25 Zalan Bujtas <zalan@apple.com> 2 3 [LFC][IFC] Rename Line to LineBuilder 4 https://bugs.webkit.org/show_bug.cgi?id=204584 5 <rdar://problem/57474964> 6 7 Reviewed by Antti Koivisto. 8 9 It really is a line builder. 10 11 * Sources.txt: 12 * WebCore.xcodeproj/project.pbxproj: 13 * layout/inlineformatting/InlineFormattingContext.cpp: 14 (WebCore::Layout::InlineFormattingContext::lineLayout): 15 (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthForConstraint const): 16 (WebCore::Layout::InlineFormattingContext::constraintsForLine): 17 * layout/inlineformatting/InlineFormattingContext.h: 18 * layout/inlineformatting/InlineFormattingContextQuirks.cpp: 19 (WebCore::Layout::InlineFormattingContext::Quirks::lineDescentNeedsCollapsing const): 20 (WebCore::Layout::InlineFormattingContext::Quirks::lineHeightConstraints const): 21 * layout/inlineformatting/InlineLineBreaker.cpp: 22 * layout/inlineformatting/InlineLineBuilder.cpp: Renamed from Source/WebCore/layout/inlineformatting/InlineLine.cpp. 23 (WebCore::Layout::InlineItemRun::layoutBox const): 24 (WebCore::Layout::InlineItemRun::logicalRect const): 25 (WebCore::Layout::InlineItemRun::textContext const): 26 (WebCore::Layout::InlineItemRun::isText const): 27 (WebCore::Layout::InlineItemRun::isBox const): 28 (WebCore::Layout::InlineItemRun::isContainerStart const): 29 (WebCore::Layout::InlineItemRun::isContainerEnd const): 30 (WebCore::Layout::InlineItemRun::isForcedLineBreak const): 31 (WebCore::Layout::InlineItemRun::type const): 32 (WebCore::Layout::InlineItemRun::setIsCollapsed): 33 (WebCore::Layout::InlineItemRun::isCollapsed const): 34 (WebCore::Layout::InlineItemRun::isCollapsedToZeroAdvanceWidth const): 35 (WebCore::Layout::InlineItemRun::isCollapsible const): 36 (WebCore::Layout::InlineItemRun::isWhitespace const): 37 (WebCore::Layout::InlineItemRun::hasExpansionOpportunity const): 38 (WebCore::Layout::InlineItemRun::InlineItemRun): 39 (WebCore::Layout::InlineItemRun::setCollapsesToZeroAdvanceWidth): 40 (WebCore::Layout::ContinousContent::canBeExpanded): 41 (WebCore::Layout::ContinousContent::canBeMerged const): 42 (WebCore::Layout::ContinousContent::ContinousContent): 43 (WebCore::Layout::ContinousContent::append): 44 (WebCore::Layout::ContinousContent::close): 45 (WebCore::Layout::LineBuilder::Run::Run): 46 (WebCore::Layout::LineBuilder::Run::adjustExpansionBehavior): 47 (WebCore::Layout::LineBuilder::Run::expansionBehavior const): 48 (WebCore::Layout::LineBuilder::Run::setComputedHorizontalExpansion): 49 (WebCore::Layout::LineBuilder::LineBuilder): 50 (WebCore::Layout::LineBuilder::~LineBuilder): 51 (WebCore::Layout::LineBuilder::initialize): 52 (WebCore::Layout::shouldPreserveTrailingContent): 53 (WebCore::Layout::shouldPreserveLeadingContent): 54 (WebCore::Layout::LineBuilder::close): 55 (WebCore::Layout::LineBuilder::alignContentVertically): 56 (WebCore::Layout::LineBuilder::justifyRuns const): 57 (WebCore::Layout::LineBuilder::alignContentHorizontally const): 58 (WebCore::Layout::LineBuilder::removeTrailingTrimmableContent): 59 (WebCore::Layout::LineBuilder::moveLogicalLeft): 60 (WebCore::Layout::LineBuilder::moveLogicalRight): 61 (WebCore::Layout::LineBuilder::append): 62 (WebCore::Layout::LineBuilder::appendNonBreakableSpace): 63 (WebCore::Layout::LineBuilder::appendInlineContainerStart): 64 (WebCore::Layout::LineBuilder::appendInlineContainerEnd): 65 (WebCore::Layout::LineBuilder::appendTextContent): 66 (WebCore::Layout::LineBuilder::appendNonReplacedInlineBox): 67 (WebCore::Layout::LineBuilder::appendReplacedInlineBox): 68 (WebCore::Layout::LineBuilder::appendLineBreak): 69 (WebCore::Layout::LineBuilder::adjustBaselineAndLineHeight): 70 (WebCore::Layout::LineBuilder::runContentHeight const): 71 (WebCore::Layout::LineBuilder::TrimmableContent::append): 72 (WebCore::Layout::LineBuilder::halfLeadingMetrics): 73 (WebCore::Layout::LineBuilder::layoutState const): 74 (WebCore::Layout::LineBuilder::formattingContext const): 75 * layout/inlineformatting/InlineLineBuilder.h: Renamed from Source/WebCore/layout/inlineformatting/InlineLine.h. 76 (WebCore::Layout::LineBuilder::isVisuallyEmpty const): 77 (WebCore::Layout::LineBuilder::hasIntrusiveFloat const): 78 (WebCore::Layout::LineBuilder::availableWidth const): 79 (WebCore::Layout::LineBuilder::trailingTrimmableWidth const): 80 (WebCore::Layout::LineBuilder::lineBox const): 81 (WebCore::Layout::LineBuilder::setHasIntrusiveFloat): 82 (WebCore::Layout::LineBuilder::Run::isText const): 83 (WebCore::Layout::LineBuilder::Run::isBox const): 84 (WebCore::Layout::LineBuilder::Run::isForcedLineBreak const): 85 (WebCore::Layout::LineBuilder::Run::isContainerStart const): 86 (WebCore::Layout::LineBuilder::Run::isContainerEnd const): 87 (WebCore::Layout::LineBuilder::Run::layoutBox const): 88 (WebCore::Layout::LineBuilder::Run::logicalRect const): 89 (WebCore::Layout::LineBuilder::Run::textContext const): 90 (WebCore::Layout::LineBuilder::Run::isCollapsedToVisuallyEmpty const): 91 (WebCore::Layout::LineBuilder::Run::adjustLogicalTop): 92 (WebCore::Layout::LineBuilder::Run::moveHorizontally): 93 (WebCore::Layout::LineBuilder::Run::moveVertically): 94 (WebCore::Layout::LineBuilder::Run::setLogicalHeight): 95 (WebCore::Layout::LineBuilder::Run::hasExpansionOpportunity const): 96 (WebCore::Layout::LineBuilder::Run::expansionOpportunityCount const): 97 (WebCore::Layout::LineBuilder::logicalTop const): 98 (WebCore::Layout::LineBuilder::logicalBottom const): 99 (WebCore::Layout::LineBuilder::logicalLeft const): 100 (WebCore::Layout::LineBuilder::logicalRight const): 101 (WebCore::Layout::LineBuilder::logicalWidth const): 102 (WebCore::Layout::LineBuilder::logicalHeight const): 103 (WebCore::Layout::LineBuilder::contentLogicalWidth const): 104 (WebCore::Layout::LineBuilder::contentLogicalRight const): 105 (WebCore::Layout::LineBuilder::baselineOffset const): 106 (WebCore::Layout::LineBuilder::isTextAlignJustify const): 107 (WebCore::Layout::LineBuilder::TrimmableContent::width const): 108 (WebCore::Layout::LineBuilder::TrimmableContent::runs): 109 (WebCore::Layout::LineBuilder::TrimmableContent::isEmpty const): 110 (WebCore::Layout::LineBuilder::TrimmableContent::clear): 111 * layout/inlineformatting/LineLayoutContext.cpp: 112 (WebCore::Layout::LineLayoutContext::layoutLine): 113 (WebCore::Layout::LineLayoutContext::commitPendingContent): 114 (WebCore::Layout::LineLayoutContext::close): 115 (WebCore::Layout::LineLayoutContext::placeInlineItem): 116 (WebCore::Layout::LineLayoutContext::processUncommittedContent): 117 * layout/inlineformatting/LineLayoutContext.h: 118 1 119 2019-11-25 Zan Dobersek <zdobersek@igalia.com> 2 120 -
trunk/Source/WebCore/Sources.txt
r252863 r252865 1439 1439 layout/inlineformatting/InlineFormattingState.cpp 1440 1440 layout/inlineformatting/InlineItem.cpp 1441 layout/inlineformatting/InlineLine.cpp1442 1441 layout/inlineformatting/InlineLineBreaker.cpp 1442 layout/inlineformatting/InlineLineBuilder.cpp 1443 1443 layout/inlineformatting/InlineTextItem.cpp 1444 1444 layout/inlineformatting/LineLayoutContext.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r252863 r252865 2021 2021 6ED8C37A183BFF8C009E53BD /* BoxShape.h in Headers */ = {isa = PBXBuildFile; fileRef = 6ED8C378183BFF8C009E53BD /* BoxShape.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2022 2022 6EE8A77310F803F3005A4A24 /* JSWebGLContextAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EE8A77110F803F3005A4A24 /* JSWebGLContextAttributes.h */; }; 2023 6F0CD695229ED32700C5994E /* InlineLine .h in Headers */ = {isa = PBXBuildFile; fileRef = 6F0CD694229ED32700C5994E /* InlineLine.h */; };2023 6F0CD695229ED32700C5994E /* InlineLineBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F0CD694229ED32700C5994E /* InlineLineBuilder.h */; }; 2024 2024 6F1CC1DE225F8B4900720AD2 /* InlineTextItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F1CC1DD225F8B4200720AD2 /* InlineTextItem.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2025 2025 6F26BB6C23343E6F002F2BEA /* LayoutContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F26BB6B23343E5B002F2BEA /* LayoutContext.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 9246 9246 6EE8A77110F803F3005A4A24 /* JSWebGLContextAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebGLContextAttributes.h; sourceTree = "<group>"; }; 9247 9247 6F0830DF20B46951008A945B /* BlockFormattingContextGeometry.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BlockFormattingContextGeometry.cpp; sourceTree = "<group>"; }; 9248 6F0CD692229ED31900C5994E /* InlineLine .cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = InlineLine.cpp; sourceTree = "<group>"; };9249 6F0CD694229ED32700C5994E /* InlineLine .h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InlineLine.h; sourceTree = "<group>"; };9248 6F0CD692229ED31900C5994E /* InlineLineBuilder.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = InlineLineBuilder.cpp; sourceTree = "<group>"; }; 9249 6F0CD694229ED32700C5994E /* InlineLineBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InlineLineBuilder.h; sourceTree = "<group>"; }; 9250 9250 6F10B08622B8568D0090E69C /* InlineFormattingContextQuirks.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = InlineFormattingContextQuirks.cpp; sourceTree = "<group>"; }; 9251 9251 6F1CC1DC225F8B4100720AD2 /* InlineTextItem.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = InlineTextItem.cpp; sourceTree = "<group>"; }; … … 16687 16687 6F7B8CEC23626E6600C9FF15 /* InlineItem.cpp */, 16688 16688 6FE7CFA02177EEF1005B1573 /* InlineItem.h */, 16689 6F0CD692229ED31900C5994E /* InlineLine.cpp */,16690 6F0CD694229ED32700C5994E /* InlineLine.h */,16691 16689 6FB47E612277425A00C7BCB0 /* InlineLineBox.h */, 16692 16690 6FE198132178397B00446F08 /* InlineLineBreaker.cpp */, 16693 16691 6FE198152178397C00446F08 /* InlineLineBreaker.h */, 16692 6F0CD692229ED31900C5994E /* InlineLineBuilder.cpp */, 16693 6F0CD694229ED32700C5994E /* InlineLineBuilder.h */, 16694 16694 6F1CC1DC225F8B4100720AD2 /* InlineTextItem.cpp */, 16695 16695 6F1CC1DD225F8B4200720AD2 /* InlineTextItem.h */, … … 30174 30174 6FE7CFA22177EEF2005B1573 /* InlineItem.h in Headers */, 30175 30175 BCE789161120D6080060ECE5 /* InlineIterator.h in Headers */, 30176 6F0CD695229ED32700C5994E /* InlineLine.h in Headers */,30177 30176 6FB47E632277425A00C7BCB0 /* InlineLineBox.h in Headers */, 30178 30177 6FE198172178397C00446F08 /* InlineLineBreaker.h in Headers */, 30178 6F0CD695229ED32700C5994E /* InlineLineBuilder.h in Headers */, 30179 30179 AA4C3A770B2B1679002334A2 /* InlineStyleSheetOwner.h in Headers */, 30180 30180 BCEA485A097D93020094C9E4 /* InlineTextBox.h in Headers */, -
trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp
r252863 r252865 96 96 unsigned leadingInlineItemIndex = 0; 97 97 Optional<LineLayoutContext::PartialContent> leadingPartialContent; 98 auto line = Line { *this, root().style().textAlign(), Line::SkipAlignment::No };98 auto lineBuilder = LineBuilder { *this, root().style().textAlign(), LineBuilder::SkipAlignment::No }; 99 99 auto lineLayoutContext = LineLayoutContext { *this, inlineItems }; 100 100 101 101 while (leadingInlineItemIndex < inlineItems.size()) { 102 line .initialize(constraintsForLine(usedHorizontalValues, lineLogicalTop));103 auto lineContent = lineLayoutContext.layoutLine(line , leadingInlineItemIndex, leadingPartialContent);102 lineBuilder.initialize(constraintsForLine(usedHorizontalValues, lineLogicalTop)); 103 auto lineContent = lineLayoutContext.layoutLine(lineBuilder, leadingInlineItemIndex, leadingPartialContent); 104 104 setDisplayBoxesForLine(lineContent, usedHorizontalValues); 105 105 … … 117 117 } else { 118 118 // Floats prevented us placing any content on the line. 119 ASSERT(line .hasIntrusiveFloat());119 ASSERT(lineBuilder.hasIntrusiveFloat()); 120 120 // Move the next line below the intrusive float. 121 121 auto floatingContext = FloatingContext { root(), *this, formattingState().floatingState() }; … … 234 234 LayoutUnit maximumLineWidth; 235 235 unsigned leadingInlineItemIndex = 0; 236 auto line = Line { *this, root().style().textAlign(), Line::SkipAlignment::Yes };236 auto lineBuilder = LineBuilder { *this, root().style().textAlign(), LineBuilder::SkipAlignment::Yes }; 237 237 auto lineLayoutContext = LineLayoutContext { *this, inlineItems }; 238 238 while (leadingInlineItemIndex < inlineItems.size()) { 239 239 // Only the horiztonal available width is constrained when computing intrinsic width. 240 line .initialize(Line::Constraints { { }, usedHorizontalValues.constraints.width, false, { } });241 auto lineContent = lineLayoutContext.layoutLine(line , leadingInlineItemIndex, { });240 lineBuilder.initialize(LineBuilder::Constraints { { }, usedHorizontalValues.constraints.width, false, { } }); 241 auto lineContent = lineLayoutContext.layoutLine(lineBuilder, leadingInlineItemIndex, { }); 242 242 243 243 leadingInlineItemIndex = *lineContent.trailingInlineItemIndex + 1; … … 372 372 } 373 373 374 Line ::Constraints InlineFormattingContext::constraintsForLine(const UsedHorizontalValues& usedHorizontalValues, const LayoutUnit lineLogicalTop)374 LineBuilder::Constraints InlineFormattingContext::constraintsForLine(const UsedHorizontalValues& usedHorizontalValues, const LayoutUnit lineLogicalTop) 375 375 { 376 376 auto lineLogicalLeft = geometryForBox(root()).contentBoxLeft(); … … 405 405 } 406 406 } 407 return Line ::Constraints { { lineLogicalLeft, lineLogicalTop }, availableWidth, lineIsConstrainedByFloat, quirks().lineHeightConstraints(root()) };407 return LineBuilder::Constraints { { lineLogicalLeft, lineLogicalTop }, availableWidth, lineIsConstrainedByFloat, quirks().lineHeightConstraints(root()) }; 408 408 } 409 409 -
trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h
r252863 r252865 51 51 class Quirks : public FormattingContext::Quirks { 52 52 public: 53 bool lineDescentNeedsCollapsing(const Line ::RunList&) const;54 Line ::Constraints::HeightAndBaseline lineHeightConstraints(const Box& formattingRoot) const;53 bool lineDescentNeedsCollapsing(const LineBuilder::RunList&) const; 54 LineBuilder::Constraints::HeightAndBaseline lineHeightConstraints(const Box& formattingRoot) const; 55 55 56 56 private: … … 90 90 91 91 void collectInlineContentIfNeeded(); 92 Line ::Constraints constraintsForLine(const UsedHorizontalValues&, const LayoutUnit lineLogicalTop);92 LineBuilder::Constraints constraintsForLine(const UsedHorizontalValues&, const LayoutUnit lineLogicalTop); 93 93 void setDisplayBoxesForLine(const LineLayoutContext::LineContent&, const UsedHorizontalValues&); 94 94 void invalidateFormattingState(const InvalidationState&); … … 97 97 InlineFormattingState& formattingState() { return downcast<InlineFormattingState>(FormattingContext::formattingState()); } 98 98 // FIXME: Come up with a structure that requires no friending. 99 friend class Line ;99 friend class LineBuilder; 100 100 }; 101 101 -
trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextQuirks.cpp
r252859 r252865 29 29 #if ENABLE(LAYOUT_FORMATTING_CONTEXT) 30 30 31 #include "InlineLine .h"31 #include "InlineLineBuilder.h" 32 32 #include "LayoutState.h" 33 33 … … 35 35 namespace Layout { 36 36 37 bool InlineFormattingContext::Quirks::lineDescentNeedsCollapsing(const Line ::RunList& runList) const37 bool InlineFormattingContext::Quirks::lineDescentNeedsCollapsing(const LineBuilder::RunList& runList) const 38 38 { 39 39 // Collapse line descent in limited and full quirk mode when there's no baseline aligned content or … … 76 76 } 77 77 78 Line ::Constraints::HeightAndBaseline InlineFormattingContext::Quirks::lineHeightConstraints(const Box& formattingRoot) const78 LineBuilder::Constraints::HeightAndBaseline InlineFormattingContext::Quirks::lineHeightConstraints(const Box& formattingRoot) const 79 79 { 80 80 // computedLineHeight takes font-size into account when line-height is not set. 81 81 // Strut is the imaginary box that we put on every line. It sets the initial vertical constraints for each new line. 82 82 auto strutHeight = formattingRoot.style().computedLineHeight(); 83 auto strutBaselineOffset = Line ::halfLeadingMetrics(formattingRoot.style().fontMetrics(), strutHeight).ascent();83 auto strutBaselineOffset = LineBuilder::halfLeadingMetrics(formattingRoot.style().fontMetrics(), strutHeight).ascent(); 84 84 if (layoutState().inNoQuirksMode()) 85 85 return { strutHeight, strutBaselineOffset, { } }; … … 87 87 auto lineHeight = formattingRoot.style().lineHeight(); 88 88 if (lineHeight.isPercentOrCalculated()) { 89 auto initialBaselineOffset = Line ::halfLeadingMetrics(formattingRoot.style().fontMetrics(), { }).ascent();89 auto initialBaselineOffset = LineBuilder::halfLeadingMetrics(formattingRoot.style().fontMetrics(), { }).ascent(); 90 90 return { initialBaselineOffset, initialBaselineOffset, LineBox::Baseline { strutBaselineOffset, strutHeight - strutBaselineOffset } }; 91 91 } 92 92 // FIXME: The only reason why we use intValue() here is to match current inline tree (integral)behavior. 93 93 auto initialLineHeight = LayoutUnit { lineHeight.intValue() }; 94 auto initialBaselineOffset = Line ::halfLeadingMetrics(formattingRoot.style().fontMetrics(), initialLineHeight).ascent();94 auto initialBaselineOffset = LineBuilder::halfLeadingMetrics(formattingRoot.style().fontMetrics(), initialLineHeight).ascent(); 95 95 return { initialLineHeight, initialBaselineOffset, LineBox::Baseline { strutBaselineOffset, strutHeight - strutBaselineOffset } }; 96 96 } -
trunk/Source/WebCore/layout/inlineformatting/InlineLineBreaker.cpp
r252863 r252865 32 32 #include "InlineItem.h" 33 33 #include "InlineTextItem.h" 34 #include "TextUtil.h" 34 35 35 36 namespace WebCore { -
trunk/Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp
r252864 r252865 25 25 26 26 #include "config.h" 27 #include "InlineLine .h"27 #include "InlineLineBuilder.h" 28 28 29 29 #if ENABLE(LAYOUT_FORMATTING_CONTEXT) … … 35 35 namespace WebCore { 36 36 namespace Layout { 37 38 WTF_MAKE_ISO_ALLOCATED_IMPL(Line);39 37 40 38 class InlineItemRun { … … 91 89 92 90 bool append(const InlineItemRun&); 93 Line ::Run close();91 LineBuilder::Run close(); 94 92 95 93 private: … … 135 133 } 136 134 137 Line ::Run ContinousContent::close()135 LineBuilder::Run ContinousContent::close() 138 136 { 139 137 if (!m_expandedLength) … … 158 156 } 159 157 160 Line ::Run::Run(const InlineItemRun& inlineItemRun)158 LineBuilder::Run::Run(const InlineItemRun& inlineItemRun) 161 159 : m_layoutBox(&inlineItemRun.layoutBox()) 162 160 , m_type(inlineItemRun.type()) … … 172 170 } 173 171 174 Line ::Run::Run(const InlineItemRun& inlineItemRun, const Display::Rect& logicalRect, const Display::Run::TextContext& textContext, unsigned expansionOpportunityCount)172 LineBuilder::Run::Run(const InlineItemRun& inlineItemRun, const Display::Rect& logicalRect, const Display::Run::TextContext& textContext, unsigned expansionOpportunityCount) 175 173 : m_layoutBox(&inlineItemRun.layoutBox()) 176 174 , m_type(inlineItemRun.type()) … … 182 180 } 183 181 184 void Line ::Run::adjustExpansionBehavior(ExpansionBehavior expansionBehavior)182 void LineBuilder::Run::adjustExpansionBehavior(ExpansionBehavior expansionBehavior) 185 183 { 186 184 ASSERT(isText()); … … 189 187 } 190 188 191 inline Optional<ExpansionBehavior> Line ::Run::expansionBehavior() const189 inline Optional<ExpansionBehavior> LineBuilder::Run::expansionBehavior() const 192 190 { 193 191 ASSERT(isText()); … … 197 195 } 198 196 199 void Line ::Run::setComputedHorizontalExpansion(LayoutUnit logicalExpansion)197 void LineBuilder::Run::setComputedHorizontalExpansion(LayoutUnit logicalExpansion) 200 198 { 201 199 ASSERT(isText()); … … 205 203 } 206 204 207 Line ::Line(const InlineFormattingContext& inlineFormattingContext, Optional<TextAlignMode> horizontalAlignment, SkipAlignment skipAlignment)205 LineBuilder::LineBuilder(const InlineFormattingContext& inlineFormattingContext, Optional<TextAlignMode> horizontalAlignment, SkipAlignment skipAlignment) 208 206 : m_inlineFormattingContext(inlineFormattingContext) 209 207 , m_horizontalAlignment(horizontalAlignment) … … 212 210 } 213 211 214 Line ::~Line()215 { 216 } 217 218 void Line ::initialize(const Constraints& constraints)212 LineBuilder::~LineBuilder() 213 { 214 } 215 216 void LineBuilder::initialize(const Constraints& constraints) 219 217 { 220 218 ASSERT(m_skipAlignment || constraints.heightAndBaseline); … … 255 253 } 256 254 257 Line ::RunList Line::close(IsLastLineWithInlineContent isLastLineWithInlineContent)255 LineBuilder::RunList LineBuilder::close(IsLastLineWithInlineContent isLastLineWithInlineContent) 258 256 { 259 257 // 1. Remove trimmable trailing content. … … 289 287 } 290 288 291 void Line ::alignContentVertically(RunList& runList)289 void LineBuilder::alignContentVertically(RunList& runList) 292 290 { 293 291 ASSERT(!m_skipAlignment); … … 352 350 } 353 351 354 void Line ::justifyRuns(RunList& runList) const352 void LineBuilder::justifyRuns(RunList& runList) const 355 353 { 356 354 ASSERT(!runList.isEmpty()); … … 384 382 } 385 383 386 void Line ::alignContentHorizontally(RunList& runList, IsLastLineWithInlineContent lastLine) const384 void LineBuilder::alignContentHorizontally(RunList& runList, IsLastLineWithInlineContent lastLine) const 387 385 { 388 386 ASSERT(!m_skipAlignment); … … 426 424 } 427 425 428 void Line ::removeTrailingTrimmableContent()426 void LineBuilder::removeTrailingTrimmableContent() 429 427 { 430 428 if (m_trimmableContent.isEmpty() || m_inlineItemRuns.isEmpty()) … … 441 439 } 442 440 443 void Line ::moveLogicalLeft(LayoutUnit delta)441 void LineBuilder::moveLogicalLeft(LayoutUnit delta) 444 442 { 445 443 if (!delta) … … 450 448 } 451 449 452 void Line ::moveLogicalRight(LayoutUnit delta)450 void LineBuilder::moveLogicalRight(LayoutUnit delta) 453 451 { 454 452 ASSERT(delta > 0); … … 456 454 } 457 455 458 void Line ::append(const InlineItem& inlineItem, LayoutUnit logicalWidth)456 void LineBuilder::append(const InlineItem& inlineItem, LayoutUnit logicalWidth) 459 457 { 460 458 if (inlineItem.isText()) … … 471 469 } 472 470 473 void Line ::appendNonBreakableSpace(const InlineItem& inlineItem, const Display::Rect& logicalRect)471 void LineBuilder::appendNonBreakableSpace(const InlineItem& inlineItem, const Display::Rect& logicalRect) 474 472 { 475 473 m_inlineItemRuns.append(makeUnique<InlineItemRun>(inlineItem, logicalRect)); … … 479 477 } 480 478 481 void Line ::appendInlineContainerStart(const InlineItem& inlineItem, LayoutUnit logicalWidth)479 void LineBuilder::appendInlineContainerStart(const InlineItem& inlineItem, LayoutUnit logicalWidth) 482 480 { 483 481 // This is really just a placeholder to mark the start of the inline level container <span>. … … 485 483 } 486 484 487 void Line ::appendInlineContainerEnd(const InlineItem& inlineItem, LayoutUnit logicalWidth)485 void LineBuilder::appendInlineContainerEnd(const InlineItem& inlineItem, LayoutUnit logicalWidth) 488 486 { 489 487 // This is really just a placeholder to mark the end of the inline level container </span>. … … 491 489 } 492 490 493 void Line ::appendTextContent(const InlineTextItem& inlineItem, LayoutUnit logicalWidth)491 void LineBuilder::appendTextContent(const InlineTextItem& inlineItem, LayoutUnit logicalWidth) 494 492 { 495 493 auto isTrimmable = !shouldPreserveTrailingContent(inlineItem); … … 547 545 } 548 546 549 void Line ::appendNonReplacedInlineBox(const InlineItem& inlineItem, LayoutUnit logicalWidth)547 void LineBuilder::appendNonReplacedInlineBox(const InlineItem& inlineItem, LayoutUnit logicalWidth) 550 548 { 551 549 auto& layoutBox = inlineItem.layoutBox(); … … 560 558 } 561 559 562 void Line ::appendReplacedInlineBox(const InlineItem& inlineItem, LayoutUnit logicalWidth)560 void LineBuilder::appendReplacedInlineBox(const InlineItem& inlineItem, LayoutUnit logicalWidth) 563 561 { 564 562 ASSERT(inlineItem.layoutBox().isReplaced()); … … 568 566 } 569 567 570 void Line ::appendLineBreak(const InlineItem& inlineItem)568 void LineBuilder::appendLineBreak(const InlineItem& inlineItem) 571 569 { 572 570 m_lineBox.setIsConsideredNonEmpty(); … … 574 572 } 575 573 576 void Line ::adjustBaselineAndLineHeight(const Run& run)574 void LineBuilder::adjustBaselineAndLineHeight(const Run& run) 577 575 { 578 576 auto& baseline = m_lineBox.baseline(); … … 662 660 } 663 661 664 LayoutUnit Line ::runContentHeight(const Run& run) const662 LayoutUnit LineBuilder::runContentHeight(const Run& run) const 665 663 { 666 664 ASSERT(!m_skipAlignment); … … 681 679 } 682 680 683 void Line ::TrimmableContent::append(InlineItemRun& inlineItemRun)681 void LineBuilder::TrimmableContent::append(InlineItemRun& inlineItemRun) 684 682 { 685 683 ASSERT(inlineItemRun.logicalRect().width() >= 0); … … 688 686 } 689 687 690 LineBox::Baseline Line ::halfLeadingMetrics(const FontMetrics& fontMetrics, LayoutUnit lineLogicalHeight)688 LineBox::Baseline LineBuilder::halfLeadingMetrics(const FontMetrics& fontMetrics, LayoutUnit lineLogicalHeight) 691 689 { 692 690 auto ascent = fontMetrics.ascent(); … … 700 698 } 701 699 702 LayoutState& Line ::layoutState() const700 LayoutState& LineBuilder::layoutState() const 703 701 { 704 702 return formattingContext().layoutState(); 705 703 } 706 704 707 const InlineFormattingContext& Line ::formattingContext() const705 const InlineFormattingContext& LineBuilder::formattingContext() const 708 706 { 709 707 return m_inlineFormattingContext; -
trunk/Source/WebCore/layout/inlineformatting/InlineLineBuilder.h
r252864 r252865 32 32 #include "InlineLineBox.h" 33 33 #include "InlineTextItem.h" 34 #include <wtf/IsoMalloc.h>35 34 36 35 namespace WebCore { … … 41 40 class InlineItemRun; 42 41 43 class Line { 44 WTF_MAKE_ISO_ALLOCATED(Line); 42 class LineBuilder { 45 43 public: 46 44 struct Constraints { … … 56 54 }; 57 55 enum class SkipAlignment { No, Yes }; 58 Line (const InlineFormattingContext&, Optional<TextAlignMode>, SkipAlignment);59 ~Line ();56 LineBuilder(const InlineFormattingContext&, Optional<TextAlignMode>, SkipAlignment); 57 ~LineBuilder(); 60 58 61 59 void initialize(const Constraints&); … … 90 88 91 89 private: 92 friend class Line ;90 friend class LineBuilder; 93 91 94 92 void adjustLogicalTop(LayoutUnit logicalTop) { m_logicalRect.setTop(logicalTop); } … … 175 173 }; 176 174 177 inline void Line ::TrimmableContent::clear()175 inline void LineBuilder::TrimmableContent::clear() 178 176 { 179 177 m_inlineItemRuns.clear(); -
trunk/Source/WebCore/layout/inlineformatting/LineLayoutContext.cpp
r252863 r252865 86 86 } 87 87 88 LineLayoutContext::LineContent LineLayoutContext::layoutLine(Line & line, unsigned leadingInlineItemIndex, Optional<PartialContent> leadingPartialContent)88 LineLayoutContext::LineContent LineLayoutContext::layoutLine(LineBuilder& line, unsigned leadingInlineItemIndex, Optional<PartialContent> leadingPartialContent) 89 89 { 90 90 auto initialize = [&] { … … 122 122 } 123 123 124 void LineLayoutContext::commitPendingContent(Line & line)124 void LineLayoutContext::commitPendingContent(LineBuilder& line) 125 125 { 126 126 if (m_uncommittedContent.isEmpty()) … … 132 132 } 133 133 134 LineLayoutContext::LineContent LineLayoutContext::close(Line & line, unsigned leadingInlineItemIndex)134 LineLayoutContext::LineContent LineLayoutContext::close(LineBuilder& line, unsigned leadingInlineItemIndex) 135 135 { 136 136 ASSERT(m_committedInlineItemCount || line.hasIntrusiveFloat()); … … 146 146 auto isLastLineWithInlineContent = [&] { 147 147 if (overflowContent) 148 return Line ::IsLastLineWithInlineContent::No;148 return LineBuilder::IsLastLineWithInlineContent::No; 149 149 // Skip floats backwards to see if this is going to be the last line with inline content. 150 150 for (auto i = m_inlineItems.size(); i--;) { 151 151 if (!m_inlineItems[i]->isFloat()) 152 return i == trailingInlineItemIndex ? Line ::IsLastLineWithInlineContent::Yes : Line::IsLastLineWithInlineContent::No;152 return i == trailingInlineItemIndex ? LineBuilder::IsLastLineWithInlineContent::Yes : LineBuilder::IsLastLineWithInlineContent::No; 153 153 } 154 154 // There has to be at least one non-float item. 155 155 ASSERT_NOT_REACHED(); 156 return Line ::IsLastLineWithInlineContent::No;156 return LineBuilder::IsLastLineWithInlineContent::No; 157 157 }; 158 158 … … 160 160 } 161 161 162 LineLayoutContext::IsEndOfLine LineLayoutContext::placeInlineItem(Line & line, const InlineItem& inlineItem)162 LineLayoutContext::IsEndOfLine LineLayoutContext::placeInlineItem(LineBuilder& line, const InlineItem& inlineItem) 163 163 { 164 164 auto currentLogicalRight = line.lineBox().logicalRight(); … … 208 208 } 209 209 210 LineLayoutContext::IsEndOfLine LineLayoutContext::processUncommittedContent(Line & line)210 LineLayoutContext::IsEndOfLine LineLayoutContext::processUncommittedContent(LineBuilder& line) 211 211 { 212 212 // Check if the pending content fits. -
trunk/Source/WebCore/layout/inlineformatting/LineLayoutContext.h
r252863 r252865 28 28 #if ENABLE(LAYOUT_FORMATTING_CONTEXT) 29 29 30 #include "InlineLine .h"30 #include "InlineLineBuilder.h" 31 31 32 32 namespace WebCore { … … 45 45 Optional<PartialContent> trailingPartialContent; 46 46 Vector<WeakPtr<InlineItem>> floats; 47 const Line ::RunList runList;47 const LineBuilder::RunList runList; 48 48 const LineBox lineBox; 49 49 }; 50 LineContent layoutLine(Line &, unsigned leadingInlineItemIndex, Optional<PartialContent> leadingPartialContent);50 LineContent layoutLine(LineBuilder&, unsigned leadingInlineItemIndex, Optional<PartialContent> leadingPartialContent); 51 51 52 52 struct Run { … … 60 60 const InlineFormattingContext& formattingContext() const { return m_inlineFormattingContext; } 61 61 enum class IsEndOfLine { No, Yes }; 62 IsEndOfLine placeInlineItem(Line &, const InlineItem&);63 void commitPendingContent(Line &);64 LineContent close(Line &, unsigned leadingInlineItemIndex);62 IsEndOfLine placeInlineItem(LineBuilder&, const InlineItem&); 63 void commitPendingContent(LineBuilder&); 64 LineContent close(LineBuilder&, unsigned leadingInlineItemIndex); 65 65 bool shouldProcessUncommittedContent(const InlineItem&) const; 66 IsEndOfLine processUncommittedContent(Line &);66 IsEndOfLine processUncommittedContent(LineBuilder&); 67 67 68 68 struct UncommittedContent {
Note: See TracChangeset
for help on using the changeset viewer.