Changeset 247562 in webkit
- Timestamp:
- Jul 18, 2019 6:37:07 AM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r247560 r247562 1 2019-07-18 Zalan Bujtas <zalan@apple.com> 2 3 [LFC][IFC] InlineFormattingContext::LineLayout::placeInlineItems is getting too complex. 4 https://bugs.webkit.org/show_bug.cgi?id=199898 5 <rdar://problem/53235958> 6 7 Reviewed by Antti Koivisto. 8 9 It's time to restructure LineLayout::placeInlineItems to be able to expand it further. 10 Introduce the LineLayout class. This class is responsible to place the inline items on the current line. 11 (Rename InlineFormattingContext::lineLayout -> InlineFormattingContext::InlineLayout and 12 use Line::InitialConstraints in LineInput) 13 14 * layout/inlineformatting/InlineFormattingContext.cpp: 15 (WebCore::Layout::InlineFormattingContext::layout const): 16 (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthConstraints const): 17 * layout/inlineformatting/InlineFormattingContext.h: 18 (WebCore::Layout::InlineFormattingContext::LineLayout::layoutState const): Deleted. 19 * layout/inlineformatting/InlineFormattingContextLineLayout.cpp: 20 (WebCore::Layout::inlineItemWidth): 21 (WebCore::Layout::LineLayout::layoutState const): 22 (WebCore::Layout::LineLayout::UncommittedContent::runs): 23 (WebCore::Layout::LineLayout::UncommittedContent::isEmpty const): 24 (WebCore::Layout::LineLayout::UncommittedContent::size const): 25 (WebCore::Layout::LineLayout::UncommittedContent::width const): 26 (WebCore::Layout::LineLayout::UncommittedContent::add): 27 (WebCore::Layout::LineLayout::UncommittedContent::reset): 28 (WebCore::Layout::LineLayout::LineLayout): 29 (WebCore::Layout::LineLayout::commitPendingContent): 30 (WebCore::Layout::LineLayout::close): 31 (WebCore::Layout::LineLayout::layout): 32 (WebCore::Layout::LineInput::LineInput): 33 (WebCore::Layout::InlineFormattingContext::InlineLayout::InlineLayout): 34 (WebCore::Layout::InlineFormattingContext::InlineLayout::layout const): 35 (WebCore::Layout::InlineFormattingContext::InlineLayout::computedIntrinsicWidth const): 36 (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns const): 37 (WebCore::Layout::InlineFormattingContext::InlineLayout::alignRuns const): 38 (WebCore::Layout::UncommittedContent::runs): Deleted. 39 (WebCore::Layout::UncommittedContent::isEmpty const): Deleted. 40 (WebCore::Layout::UncommittedContent::size const): Deleted. 41 (WebCore::Layout::UncommittedContent::width const): Deleted. 42 (WebCore::Layout::UncommittedContent::add): Deleted. 43 (WebCore::Layout::UncommittedContent::reset): Deleted. 44 (WebCore::Layout::LineInput::HorizontalConstraint::HorizontalConstraint): Deleted. 45 (WebCore::Layout::InlineFormattingContext::LineLayout::LineLayout): Deleted. 46 (WebCore::Layout::InlineFormattingContext::LineLayout::placeInlineItems const): Deleted. 47 (WebCore::Layout::InlineFormattingContext::LineLayout::layout const): Deleted. 48 (WebCore::Layout::InlineFormattingContext::LineLayout::computedIntrinsicWidth const): Deleted. 49 (WebCore::Layout::InlineFormattingContext::LineLayout::createDisplayRuns const): Deleted. 50 (WebCore::Layout::InlineFormattingContext::LineLayout::alignRuns const): Deleted. 51 * layout/inlineformatting/InlineLine.cpp: 52 (WebCore::Layout::Line::Line): 53 * layout/inlineformatting/InlineLine.h: 54 1 55 2019-07-18 Carlos Garcia Campos <cgarcia@igalia.com> 2 56 -
trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp
r247299 r247562 95 95 96 96 collectInlineContent(); 97 LineLayout(*this).layout(formattingState().inlineItems(), availableWidth);97 InlineLayout(*this).layout(formattingState().inlineItems(), availableWidth); 98 98 LOG_WITH_STREAM(FormattingContextLayout, stream << "[End] -> inline formatting context -> formatting root(" << &root << ")"); 99 99 } … … 141 141 layoutState.displayBoxForLayoutBox(*formattingRoot).setContentBoxWidth(availableWidth ? intrinsicWidths->maximum : intrinsicWidths->minimum); 142 142 } 143 return LineLayout(*this).computedIntrinsicWidth(formattingState().inlineItems(), availableWidth);143 return InlineLayout(*this).computedIntrinsicWidth(formattingState().inlineItems(), availableWidth); 144 144 }; 145 145 -
trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h
r247350 r247562 53 53 void computeIntrinsicWidthConstraints() const override; 54 54 55 class LineLayout {55 class InlineLayout { 56 56 public: 57 LineLayout(const InlineFormattingContext&);57 InlineLayout(const InlineFormattingContext&); 58 58 void layout(const InlineItems&, LayoutUnit widthConstraint) const; 59 59 LayoutUnit computedIntrinsicWidth(const InlineItems&, LayoutUnit widthConstraint) const; -
trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextLineLayout.cpp
r247350 r247562 42 42 namespace Layout { 43 43 44 static LayoutUnit inlineItemWidth(const LayoutState& layoutState, const InlineItem& inlineItem, LayoutUnit contentLogicalLeft) 45 { 46 if (inlineItem.isLineBreak()) 47 return 0; 48 49 if (is<InlineTextItem>(inlineItem)) { 50 auto& inlineTextItem = downcast<InlineTextItem>(inlineItem); 51 auto end = inlineTextItem.isCollapsed() ? inlineTextItem.start() + 1 : inlineTextItem.end(); 52 return TextUtil::width(downcast<InlineBox>(inlineTextItem.layoutBox()), inlineTextItem.start(), end, contentLogicalLeft); 53 } 54 55 auto& layoutBox = inlineItem.layoutBox(); 56 ASSERT(layoutState.hasDisplayBox(layoutBox)); 57 auto& displayBox = layoutState.displayBoxForLayoutBox(layoutBox); 58 59 if (layoutBox.isFloatingPositioned()) 60 return displayBox.marginBoxWidth(); 61 62 if (layoutBox.isReplaced()) 63 return displayBox.width(); 64 65 if (inlineItem.isContainerStart()) 66 return displayBox.marginStart() + displayBox.borderLeft() + displayBox.paddingLeft().valueOr(0); 67 68 if (inlineItem.isContainerEnd()) 69 return displayBox.marginEnd() + displayBox.borderRight() + displayBox.paddingRight().valueOr(0); 70 71 // Non-replaced inline box (e.g. inline-block) 72 return displayBox.width(); 73 } 74 44 75 struct InlineIndexAndSplitPosition { 45 76 unsigned index { 0 }; … … 48 79 49 80 struct LineInput { 50 LineInput(LayoutPoint logicalTopLeft, LayoutUnit availableLogicalWidth, Line::SkipVerticalAligment, InlineIndexAndSplitPosition firstToProcess, const InlineItems&); 51 struct HorizontalConstraint { 52 HorizontalConstraint(LayoutPoint logicalTopLeft, LayoutUnit availableLogicalWidth); 53 54 LayoutPoint logicalTopLeft; 55 LayoutUnit availableLogicalWidth; 56 }; 57 HorizontalConstraint horizontalConstraint; 81 LineInput(const Line::InitialConstraints& initialLineConstraints, Line::SkipVerticalAligment, InlineIndexAndSplitPosition firstToProcess, const InlineItems&); 82 83 Line::InitialConstraints initialConstraints; 58 84 // FIXME Alternatively we could just have a second pass with vertical positioning (preferred width computation opts out) 59 85 Line::SkipVerticalAligment skipVerticalAligment; … … 69 95 }; 70 96 71 struct UncommittedContent { 72 struct Run { 73 const InlineItem& inlineItem; 74 LayoutUnit logicalWidth; 75 // FIXME: add optional breaking context (start and end position) for split text content. 97 class LineLayout { 98 public: 99 LineLayout(const LayoutState&, const LineInput&); 100 101 LineContent layout(); 102 103 private: 104 const LayoutState& layoutState() const { return m_layoutState; } 105 void commitPendingContent(); 106 LineContent close(); 107 108 struct UncommittedContent { 109 struct Run { 110 const InlineItem& inlineItem; 111 LayoutUnit logicalWidth; 112 // FIXME: add optional breaking context (start and end position) for split text content. 113 }; 114 void add(const InlineItem&, LayoutUnit logicalWidth); 115 void reset(); 116 117 Vector<Run> runs() { return m_uncommittedRuns; } 118 bool isEmpty() const { return m_uncommittedRuns.isEmpty(); } 119 unsigned size() const { return m_uncommittedRuns.size(); } 120 LayoutUnit width() const { return m_width; } 121 122 private: 123 Vector<Run> m_uncommittedRuns; 124 LayoutUnit m_width; 76 125 }; 77 void add(const InlineItem&, LayoutUnit logicalWidth); 78 void reset(); 79 80 Vector<Run> runs() { return m_uncommittedRuns; } 81 bool isEmpty() const { return m_uncommittedRuns.isEmpty(); } 82 unsigned size() const { return m_uncommittedRuns.size(); } 83 LayoutUnit width() const { return m_width; } 84 85 private: 86 Vector<Run> m_uncommittedRuns; 87 LayoutUnit m_width; 126 127 const LayoutState& m_layoutState; 128 const LineInput& m_lineInput; 129 Line m_line; 130 LineBreaker m_lineBreaker; 131 bool m_lineHasFloatBox { false }; 132 UncommittedContent m_uncommittedContent; 133 unsigned m_committedInlineItemCount { 0 }; 134 Vector<WeakPtr<InlineItem>> m_floats; 135 Optional<unsigned> m_splitPosition; 88 136 }; 89 137 90 void UncommittedContent::add(const InlineItem& inlineItem, LayoutUnit logicalWidth)138 void LineLayout::UncommittedContent::add(const InlineItem& inlineItem, LayoutUnit logicalWidth) 91 139 { 92 140 m_uncommittedRuns.append({ inlineItem, logicalWidth }); … … 94 142 } 95 143 96 void UncommittedContent::reset()144 void LineLayout::UncommittedContent::reset() 97 145 { 98 146 m_uncommittedRuns.clear(); … … 100 148 } 101 149 102 LineInput::HorizontalConstraint::HorizontalConstraint(LayoutPoint logicalTopLeft, LayoutUnit availableLogicalWidth) 103 : logicalTopLeft(logicalTopLeft) 104 , availableLogicalWidth(availableLogicalWidth) 105 { 106 } 107 108 LineInput::LineInput(LayoutPoint logicalTopLeft, LayoutUnit availableLogicalWidth, Line::SkipVerticalAligment skipVerticalAligment, InlineIndexAndSplitPosition firstToProcess, const InlineItems& inlineItems) 109 : horizontalConstraint(logicalTopLeft, availableLogicalWidth) 110 , skipVerticalAligment(skipVerticalAligment) 111 , firstInlineItem(firstToProcess) 112 , inlineItems(inlineItems) 113 { 114 } 115 116 InlineFormattingContext::LineLayout::LineLayout(const InlineFormattingContext& inlineFormattingContext) 117 : m_layoutState(inlineFormattingContext.layoutState()) 118 , m_formattingRoot(downcast<Container>(inlineFormattingContext.root())) 119 { 120 } 121 122 static LayoutUnit inlineItemWidth(const LayoutState& layoutState, const InlineItem& inlineItem, LayoutUnit contentLogicalLeft) 123 { 124 if (inlineItem.isLineBreak()) 125 return 0; 126 127 if (is<InlineTextItem>(inlineItem)) { 128 auto& inlineTextItem = downcast<InlineTextItem>(inlineItem); 129 auto end = inlineTextItem.isCollapsed() ? inlineTextItem.start() + 1 : inlineTextItem.end(); 130 return TextUtil::width(downcast<InlineBox>(inlineTextItem.layoutBox()), inlineTextItem.start(), end, contentLogicalLeft); 131 } 132 133 auto& layoutBox = inlineItem.layoutBox(); 134 ASSERT(layoutState.hasDisplayBox(layoutBox)); 135 auto& displayBox = layoutState.displayBoxForLayoutBox(layoutBox); 136 137 if (layoutBox.isFloatingPositioned()) 138 return displayBox.marginBoxWidth(); 139 140 if (layoutBox.isReplaced()) 141 return displayBox.width(); 142 143 if (inlineItem.isContainerStart()) 144 return displayBox.marginStart() + displayBox.borderLeft() + displayBox.paddingLeft().valueOr(0); 145 146 if (inlineItem.isContainerEnd()) 147 return displayBox.marginEnd() + displayBox.borderRight() + displayBox.paddingRight().valueOr(0); 148 149 // Non-replaced inline box (e.g. inline-block) 150 return displayBox.width(); 151 } 152 153 LineContent InlineFormattingContext::LineLayout::placeInlineItems(const LineInput& lineInput) const 154 { 155 auto initialLineConstraints = Line::InitialConstraints { 156 lineInput.horizontalConstraint.logicalTopLeft, 157 lineInput.horizontalConstraint.availableLogicalWidth, 158 Quirks::lineHeightConstraints(layoutState(), m_formattingRoot) 159 }; 160 auto line = Line { layoutState(), initialLineConstraints, lineInput.skipVerticalAligment }; 161 162 Vector<WeakPtr<InlineItem>> floats; 163 unsigned committedInlineItemCount = 0; 164 Optional<unsigned> splitPosition; 165 166 UncommittedContent uncommittedContent; 167 auto commitPendingContent = [&] { 168 if (uncommittedContent.isEmpty()) 169 return; 170 committedInlineItemCount += uncommittedContent.size(); 171 for (auto& uncommittedRun : uncommittedContent.runs()) 172 line.append(uncommittedRun.inlineItem, uncommittedRun.logicalWidth); 173 uncommittedContent.reset(); 174 }; 175 176 auto lineHasFloatBox = lineInput.floatMinimumLogicalBottom.hasValue(); 177 auto closeLine = [&] { 178 ASSERT(committedInlineItemCount || lineHasFloatBox); 179 if (!committedInlineItemCount) 180 return LineContent { WTF::nullopt, WTFMove(floats), line.close() }; 181 auto lastCommitedItem = InlineIndexAndSplitPosition { lineInput.firstInlineItem.index + (committedInlineItemCount - 1), splitPosition }; 182 return LineContent { lastCommitedItem, WTFMove(floats), line.close() }; 183 }; 184 LineBreaker lineBreaker; 150 LineLayout::LineLayout(const LayoutState& layoutState, const LineInput& lineInput) 151 : m_layoutState(layoutState) 152 , m_lineInput(lineInput) 153 , m_line(layoutState, lineInput.initialConstraints, lineInput.skipVerticalAligment) 154 , m_lineHasFloatBox(lineInput.floatMinimumLogicalBottom.hasValue()) 155 { 156 } 157 158 void LineLayout::commitPendingContent() 159 { 160 if (m_uncommittedContent.isEmpty()) 161 return; 162 m_committedInlineItemCount += m_uncommittedContent.size(); 163 for (auto& uncommittedRun : m_uncommittedContent.runs()) 164 m_line.append(uncommittedRun.inlineItem, uncommittedRun.logicalWidth); 165 m_uncommittedContent.reset(); 166 } 167 168 LineContent LineLayout::close() 169 { 170 ASSERT(m_committedInlineItemCount || m_lineHasFloatBox); 171 if (!m_committedInlineItemCount) 172 return LineContent { WTF::nullopt, WTFMove(m_floats), m_line.close() }; 173 auto lastCommitedItem = InlineIndexAndSplitPosition { m_lineInput.firstInlineItem.index + (m_committedInlineItemCount - 1), m_splitPosition }; 174 return LineContent { lastCommitedItem, WTFMove(m_floats), m_line.close() }; 175 } 176 177 LineContent LineLayout::layout() 178 { 185 179 // Iterate through the inline content and place the inline boxes on the current line. 186 for (auto inlineItemIndex = lineInput.firstInlineItem.index; inlineItemIndex <lineInput.inlineItems.size(); ++inlineItemIndex) {187 auto availableWidth = line.availableWidth() -uncommittedContent.width();188 auto currentLogicalRight = line.contentLogicalRight() +uncommittedContent.width();189 auto& inlineItem = lineInput.inlineItems[inlineItemIndex];180 for (auto inlineItemIndex = m_lineInput.firstInlineItem.index; inlineItemIndex < m_lineInput.inlineItems.size(); ++inlineItemIndex) { 181 auto availableWidth = m_line.availableWidth() - m_uncommittedContent.width(); 182 auto currentLogicalRight = m_line.contentLogicalRight() + m_uncommittedContent.width(); 183 auto& inlineItem = m_lineInput.inlineItems[inlineItemIndex]; 190 184 auto itemLogicalWidth = inlineItemWidth(layoutState(), *inlineItem, currentLogicalRight); 191 185 192 186 // FIXME: Ensure LineContext::trimmableWidth includes uncommitted content if needed. 193 auto lineIsConsideredEmpty = ! line.hasContent() && !lineHasFloatBox;194 auto breakingContext = lineBreaker.breakingContext(*inlineItem, itemLogicalWidth, { availableWidth, currentLogicalRight,line.trailingTrimmableWidth(), lineIsConsideredEmpty });187 auto lineIsConsideredEmpty = !m_line.hasContent() && !m_lineHasFloatBox; 188 auto breakingContext = m_lineBreaker.breakingContext(*inlineItem, itemLogicalWidth, { availableWidth, currentLogicalRight, m_line.trailingTrimmableWidth(), lineIsConsideredEmpty }); 195 189 if (breakingContext.isAtBreakingOpportunity) 196 190 commitPendingContent(); … … 198 192 // Content does not fit the current line. 199 193 if (breakingContext.breakingBehavior == LineBreaker::BreakingBehavior::Wrap) 200 return close Line();194 return close(); 201 195 202 196 // Partial content stays on the current line. … … 205 199 206 200 ASSERT_NOT_IMPLEMENTED_YET(); 207 return close Line();201 return close(); 208 202 } 209 203 … … 214 208 // Shrink availble space for current line and move existing inline runs. 215 209 auto floatBoxWidth = layoutState().displayBoxForLayoutBox(floatBox).marginBoxWidth(); 216 floatBox.isLeftFloatingPositioned() ? line.moveLogicalLeft(floatBoxWidth) :line.moveLogicalRight(floatBoxWidth);217 floats.append(makeWeakPtr(*inlineItem));218 ++ committedInlineItemCount;219 lineHasFloatBox = true;210 floatBox.isLeftFloatingPositioned() ? m_line.moveLogicalLeft(floatBoxWidth) : m_line.moveLogicalRight(floatBoxWidth); 211 m_floats.append(makeWeakPtr(*inlineItem)); 212 ++m_committedInlineItemCount; 213 m_lineHasFloatBox = true; 220 214 continue; 221 215 } 222 216 223 uncommittedContent.add(*inlineItem, itemLogicalWidth);217 m_uncommittedContent.add(*inlineItem, itemLogicalWidth); 224 218 if (breakingContext.isAtBreakingOpportunity) 225 219 commitPendingContent(); 226 220 227 221 if (inlineItem->isHardLineBreak()) 228 return close Line();222 return close(); 229 223 } 230 224 commitPendingContent(); 231 return closeLine(); 232 } 233 234 void InlineFormattingContext::LineLayout::layout(const InlineItems& inlineItems, LayoutUnit widthConstraint) const 225 return close(); 226 } 227 228 LineInput::LineInput(const Line::InitialConstraints& initialLineConstraints, Line::SkipVerticalAligment skipVerticalAligment, InlineIndexAndSplitPosition firstToProcess, const InlineItems& inlineItems) 229 : initialConstraints(initialLineConstraints) 230 , skipVerticalAligment(skipVerticalAligment) 231 , firstInlineItem(firstToProcess) 232 , inlineItems(inlineItems) 233 { 234 } 235 236 InlineFormattingContext::InlineLayout::InlineLayout(const InlineFormattingContext& inlineFormattingContext) 237 : m_layoutState(inlineFormattingContext.layoutState()) 238 , m_formattingRoot(downcast<Container>(inlineFormattingContext.root())) 239 { 240 } 241 242 void InlineFormattingContext::InlineLayout::layout(const InlineItems& inlineItems, LayoutUnit widthConstraint) const 235 243 { 236 244 ASSERT(!inlineItems.isEmpty()); … … 246 254 if (floatingState.isEmpty()) 247 255 return; 248 auto availableWidth = lineInput. horizontalConstraint.availableLogicalWidth;249 auto lineLogicalLeft = lineInput. horizontalConstraint.logicalTopLeft.x();256 auto availableWidth = lineInput.initialConstraints.availableLogicalWidth; 257 auto lineLogicalLeft = lineInput.initialConstraints.logicalTopLeft.x(); 250 258 auto floatConstraints = floatingState.constraints({ lineLogicalTop }, m_formattingRoot); 251 259 // Check if these constraints actually put limitation on the line. … … 274 282 availableWidth = floatConstraints.right->x - lineLogicalLeft; 275 283 } 276 lineInput. horizontalConstraint.availableLogicalWidth = availableWidth;277 lineInput. horizontalConstraint.logicalTopLeft.setX(lineLogicalLeft);284 lineInput.initialConstraints.availableLogicalWidth = availableWidth; 285 lineInput.initialConstraints.logicalTopLeft.setX(lineLogicalLeft); 278 286 }; 279 287 280 288 InlineIndexAndSplitPosition currentInlineItem; 281 289 while (currentInlineItem.index < inlineItems.size()) { 282 auto lineInput = LineInput { { lineLogicalLeft, lineLogicalTop }, widthConstraint, Line::SkipVerticalAligment::No, currentInlineItem, inlineItems };290 auto lineInput = LineInput { { { lineLogicalLeft, lineLogicalTop }, widthConstraint, Quirks::lineHeightConstraints(layoutState(), m_formattingRoot) }, Line::SkipVerticalAligment::No, currentInlineItem, inlineItems }; 283 291 applyFloatConstraint(lineInput); 284 auto lineContent = placeInlineItems(lineInput);292 auto lineContent = LineLayout(layoutState(), lineInput).layout(); 285 293 createDisplayRuns(*lineContent.runs, lineContent.floats, widthConstraint); 286 294 if (!lineContent.lastCommitted) { … … 296 304 } 297 305 298 LayoutUnit InlineFormattingContext:: LineLayout::computedIntrinsicWidth(const InlineItems& inlineItems, LayoutUnit widthConstraint) const306 LayoutUnit InlineFormattingContext::InlineLayout::computedIntrinsicWidth(const InlineItems& inlineItems, LayoutUnit widthConstraint) const 299 307 { 300 308 LayoutUnit maximumLineWidth; 301 309 InlineIndexAndSplitPosition currentInlineItem; 302 310 while (currentInlineItem.index < inlineItems.size()) { 303 auto lineContent = placeInlineItems({ { }, widthConstraint, Line::SkipVerticalAligment::Yes, currentInlineItem, inlineItems });311 auto lineContent = LineLayout(layoutState(), { { { }, widthConstraint, Quirks::lineHeightConstraints(layoutState(), m_formattingRoot) }, Line::SkipVerticalAligment::Yes, currentInlineItem, inlineItems }).layout(); 304 312 currentInlineItem = { lineContent.lastCommitted->index + 1, WTF::nullopt }; 305 313 LayoutUnit floatsWidth; … … 311 319 } 312 320 313 void InlineFormattingContext:: LineLayout::createDisplayRuns(const Line::Content& lineContent, const Vector<WeakPtr<InlineItem>>& floats, LayoutUnit widthConstraint) const321 void InlineFormattingContext::InlineLayout::createDisplayRuns(const Line::Content& lineContent, const Vector<WeakPtr<InlineItem>>& floats, LayoutUnit widthConstraint) const 314 322 { 315 323 auto& formattingState = downcast<InlineFormattingState>(layoutState().establishedFormattingState(m_formattingRoot)); … … 446 454 } 447 455 448 void InlineFormattingContext:: LineLayout::alignRuns(TextAlignMode textAlign, InlineRuns& inlineDisplayRuns, unsigned firstRunIndex, LayoutUnit availableWidth) const456 void InlineFormattingContext::InlineLayout::alignRuns(TextAlignMode textAlign, InlineRuns& inlineDisplayRuns, unsigned firstRunIndex, LayoutUnit availableWidth) const 449 457 { 450 458 auto adjustment = horizontalAdjustmentForAlignment(textAlign, availableWidth); -
trunk/Source/WebCore/layout/inlineformatting/InlineLine.cpp
r247257 r247562 54 54 : m_layoutState(layoutState) 55 55 , m_content(std::make_unique<Line::Content>()) 56 , m_logicalTopLeft(initialConstraints. topLeft)56 , m_logicalTopLeft(initialConstraints.logicalTopLeft) 57 57 , m_baseline({ initialConstraints.heightAndBaseline.baselineOffset, initialConstraints.heightAndBaseline.height - initialConstraints.heightAndBaseline.baselineOffset }) 58 58 , m_initialStrut(initialConstraints.heightAndBaseline.strut) 59 59 , m_lineLogicalHeight(initialConstraints.heightAndBaseline.height) 60 , m_lineLogicalWidth(initialConstraints.available Width)60 , m_lineLogicalWidth(initialConstraints.availableLogicalWidth) 61 61 , m_skipVerticalAligment(skipVerticalAligment == SkipVerticalAligment::Yes) 62 62 { -
trunk/Source/WebCore/layout/inlineformatting/InlineLine.h
r247257 r247562 40 40 public: 41 41 struct InitialConstraints { 42 LayoutPoint topLeft;43 LayoutUnit available Width;42 LayoutPoint logicalTopLeft; 43 LayoutUnit availableLogicalWidth; 44 44 struct HeightAndBaseline { 45 45 LayoutUnit height;
Note: See TracChangeset
for help on using the changeset viewer.