Changeset 291548 in webkit
- Timestamp:
- Mar 20, 2022, 5:59:06 PM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 31 edited
- 3 moved
-
ChangeLog (modified) (1 diff)
-
Headers.cmake (modified) (1 diff)
-
WebCore.xcodeproj/project.pbxproj (modified) (4 diffs)
-
dom/Position.cpp (modified) (4 diffs)
-
editing/RenderedPosition.h (modified) (2 diffs)
-
editing/VisiblePosition.cpp (modified) (6 diffs)
-
editing/VisibleUnits.cpp (modified) (17 diffs)
-
html/HTMLTextFormControlElement.cpp (modified) (3 diffs)
-
layout/integration/InlineIteratorBox.cpp (modified) (3 diffs)
-
layout/integration/InlineIteratorBox.h (modified) (2 diffs)
-
layout/integration/InlineIteratorLine.cpp (modified) (7 diffs)
-
layout/integration/InlineIteratorLineBox.h (moved) (moved from trunk/Source/WebCore/layout/integration/InlineIteratorLine.h ) (13 diffs)
-
layout/integration/InlineIteratorLineBoxLegacyPath.h (moved) (moved from trunk/Source/WebCore/layout/integration/InlineIteratorLineLegacyPath.h ) (2 diffs)
-
layout/integration/InlineIteratorLineBoxModernPath.h (moved) (moved from trunk/Source/WebCore/layout/integration/InlineIteratorLineModernPath.h ) (3 diffs)
-
layout/integration/InlineIteratorLogicalOrderTraversal.cpp (modified) (7 diffs)
-
layout/integration/InlineIteratorLogicalOrderTraversal.h (modified) (5 diffs)
-
layout/integration/InlineIteratorTextBox.cpp (modified) (2 diffs)
-
layout/integration/LayoutIntegrationLineLayout.cpp (modified) (1 diff)
-
layout/integration/LayoutIntegrationLineLayout.h (modified) (2 diffs)
-
layout/integration/LineSelection.h (modified) (2 diffs)
-
rendering/CaretRectComputation.cpp (modified) (5 diffs)
-
rendering/InlineBoxPainter.cpp (modified) (5 diffs)
-
rendering/InlineBoxPainter.h (modified) (1 diff)
-
rendering/RenderBlockFlow.cpp (modified) (14 diffs)
-
rendering/RenderBox.cpp (modified) (1 diff)
-
rendering/RenderElement.cpp (modified) (2 diffs)
-
rendering/RenderImage.cpp (modified) (2 diffs)
-
rendering/RenderInline.cpp (modified) (2 diffs)
-
rendering/RenderLineBreak.cpp (modified) (2 diffs)
-
rendering/RenderReplaced.cpp (modified) (2 diffs)
-
rendering/RenderText.cpp (modified) (3 diffs)
-
rendering/TextBoxPainter.cpp (modified) (5 diffs)
-
rendering/svg/SVGRootInlineBox.cpp (modified) (1 diff)
-
style/InlineTextBoxStyle.cpp (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r291546 r291548 1 2022-03-20 Alan Bujtas <zalan@apple.com> 2 3 [IFC][Integration] Rename InlineIterator::Line to LineBox 4 https://bugs.webkit.org/show_bug.cgi?id=238128 5 6 Reviewed by Antti Koivisto. 7 8 * dom/Position.cpp: 9 (WebCore::Position::upstream const): 10 (WebCore::Position::downstream const): 11 (WebCore::Position::rendersInDifferentPosition const): 12 * editing/RenderedPosition.h: 13 (WebCore::RenderedPosition::lineBox const): 14 (WebCore::RenderedPosition::line const): Deleted. 15 * editing/VisiblePosition.cpp: 16 (WebCore::VisiblePosition::leftVisuallyDistinctCandidate const): 17 (WebCore::VisiblePosition::rightVisuallyDistinctCandidate const): 18 (WebCore::VisiblePosition::absoluteSelectionBoundsForLine const): 19 * editing/VisibleUnits.cpp: 20 (WebCore::startTextOrLineBreakBox): 21 (WebCore::endTextOrLineBreakBox): 22 (WebCore::logicallyPreviousBox): 23 (WebCore::logicallyNextBox): 24 (WebCore::startPositionForLine): 25 (WebCore::endPositionForLine): 26 (WebCore::absoluteLineDirectionPointToLocalPointInBlock): 27 (WebCore::previousLinePosition): 28 (WebCore::nextLinePosition): 29 * html/HTMLTextFormControlElement.cpp: 30 (WebCore::HTMLTextFormControlElement::valueWithHardLineBreaks const): 31 * layout/integration/InlineIteratorBox.cpp: 32 (WebCore::InlineIterator::Box::lineBox const): 33 (WebCore::InlineIterator::Box::style const): 34 (WebCore::InlineIterator::Box::line const): Deleted. 35 * layout/integration/InlineIteratorBox.h: 36 * layout/integration/InlineIteratorLine.cpp: 37 (WebCore::InlineIterator::LineBoxIterator::LineBoxIterator): 38 (WebCore::InlineIterator::LineBoxIterator::atEnd const): 39 (WebCore::InlineIterator::LineBoxIterator::traverseNext): 40 (WebCore::InlineIterator::LineBoxIterator::traversePrevious): 41 (WebCore::InlineIterator::LineBoxIterator::operator== const): 42 (WebCore::InlineIterator::firstLineBoxFor): 43 (WebCore::InlineIterator::lastLineBoxFor): 44 (WebCore::InlineIterator::LineBox::next const): 45 (WebCore::InlineIterator::LineBox::previous const): 46 (WebCore::InlineIterator::LineBox::firstLeafBox const): 47 (WebCore::InlineIterator::LineBox::lastLeafBox const): 48 (WebCore::InlineIterator::closestBoxForHorizontalPosition): 49 (WebCore::InlineIterator::LineIterator::LineIterator): Deleted. 50 (WebCore::InlineIterator::LineIterator::atEnd const): Deleted. 51 (WebCore::InlineIterator::LineIterator::traverseNext): Deleted. 52 (WebCore::InlineIterator::LineIterator::traversePrevious): Deleted. 53 (WebCore::InlineIterator::LineIterator::operator== const): Deleted. 54 (WebCore::InlineIterator::firstLineFor): Deleted. 55 (WebCore::InlineIterator::lastLineFor): Deleted. 56 (WebCore::InlineIterator::Line::next const): Deleted. 57 (WebCore::InlineIterator::Line::previous const): Deleted. 58 (WebCore::InlineIterator::Line::firstLeafBox const): Deleted. 59 (WebCore::InlineIterator::Line::lastLeafBox const): Deleted. 60 * layout/integration/InlineIteratorLine.h: 61 (WebCore::InlineIterator::LineBox::height const): 62 (WebCore::InlineIterator::LineBoxIterator::LineBoxIterator): 63 (WebCore::InlineIterator::LineBoxIterator::operator++): 64 (WebCore::InlineIterator::LineBoxIterator::operator!= const): 65 (WebCore::InlineIterator::LineBoxIterator::operator== const): 66 (WebCore::InlineIterator::LineBoxIterator::operator* const): 67 (WebCore::InlineIterator::LineBoxIterator::operator-> const): 68 (WebCore::InlineIterator::previousLineBoxContentBottomOrBorderAndPadding): 69 (WebCore::InlineIterator::contentStartInBlockDirection): 70 (WebCore::InlineIterator::LineBox::LineBox): 71 (WebCore::InlineIterator::LineBox::contentLogicalTop const): 72 (WebCore::InlineIterator::LineBox::contentLogicalBottom const): 73 (WebCore::InlineIterator::LineBox::contentLogicalTopAdjustedForPrecedingLineBox const): 74 (WebCore::InlineIterator::LineBox::contentLogicalBottomAdjustedForFollowingLineBox const): 75 (WebCore::InlineIterator::LineBox::top const): 76 (WebCore::InlineIterator::LineBox::bottom const): 77 (WebCore::InlineIterator::LineBox::contentLogicalLeft const): 78 (WebCore::InlineIterator::LineBox::contentLogicalRight const): 79 (WebCore::InlineIterator::LineBox::contentLogicalWidth const): 80 (WebCore::InlineIterator::LineBox::isHorizontal const): 81 (WebCore::InlineIterator::LineBox::baselineType const): 82 (WebCore::InlineIterator::LineBox::containingBlock const): 83 (WebCore::InlineIterator::LineBox::containingFragment const): 84 (WebCore::InlineIterator::LineBox::isFirstAfterPageBreak const): 85 (WebCore::InlineIterator::LineBox::isFirst const): 86 (WebCore::InlineIterator::Line::lineBoxHeight const): Deleted. 87 (WebCore::InlineIterator::LineIterator::LineIterator): Deleted. 88 (WebCore::InlineIterator::LineIterator::operator++): Deleted. 89 (WebCore::InlineIterator::LineIterator::operator bool const): Deleted. 90 (WebCore::InlineIterator::LineIterator::operator!= const): Deleted. 91 (WebCore::InlineIterator::LineIterator::operator== const): Deleted. 92 (WebCore::InlineIterator::LineIterator::operator* const): Deleted. 93 (WebCore::InlineIterator::LineIterator::operator-> const): Deleted. 94 (WebCore::InlineIterator::previousLineContentBottomOrBorderAndPadding): Deleted. 95 (WebCore::InlineIterator::Line::Line): Deleted. 96 (WebCore::InlineIterator::Line::contentLogicalTop const): Deleted. 97 (WebCore::InlineIterator::Line::contentLogicalBottom const): Deleted. 98 (WebCore::InlineIterator::Line::contentLogicalTopAdjustedForPrecedingLine const): Deleted. 99 (WebCore::InlineIterator::Line::contentLogicalBottomAdjustedForFollowingLine const): Deleted. 100 (WebCore::InlineIterator::Line::lineBoxTop const): Deleted. 101 (WebCore::InlineIterator::Line::lineBoxBottom const): Deleted. 102 (WebCore::InlineIterator::Line::contentLogicalLeft const): Deleted. 103 (WebCore::InlineIterator::Line::contentLogicalRight const): Deleted. 104 (WebCore::InlineIterator::Line::contentLogicalWidth const): Deleted. 105 (WebCore::InlineIterator::Line::isHorizontal const): Deleted. 106 (WebCore::InlineIterator::Line::baselineType const): Deleted. 107 (WebCore::InlineIterator::Line::containingBlock const): Deleted. 108 (WebCore::InlineIterator::Line::containingFragment const): Deleted. 109 (WebCore::InlineIterator::Line::isFirstAfterPageBreak const): Deleted. 110 (WebCore::InlineIterator::Line::isFirst const): Deleted. 111 * layout/integration/InlineIteratorLineLegacyPath.h: 112 (WebCore::InlineIterator::LineBoxIteratorLegacyPath::LineBoxIteratorLegacyPath): 113 (WebCore::InlineIterator::LineBoxIteratorLegacyPath::contentLogicalTopAdjustedForPrecedingLineBox const): 114 (WebCore::InlineIterator::LineBoxIteratorLegacyPath::contentLogicalBottomAdjustedForFollowingLineBox const): 115 (WebCore::InlineIterator::LineBoxIteratorLegacyPath::top const): 116 (WebCore::InlineIterator::LineBoxIteratorLegacyPath::bottom const): 117 (WebCore::InlineIterator::LineBoxIteratorLegacyPath::operator== const): 118 (WebCore::InlineIterator::LineIteratorLegacyPath::LineIteratorLegacyPath): Deleted. 119 (WebCore::InlineIterator::LineIteratorLegacyPath::contentLogicalTop const): Deleted. 120 (WebCore::InlineIterator::LineIteratorLegacyPath::contentLogicalBottom const): Deleted. 121 (WebCore::InlineIterator::LineIteratorLegacyPath::contentLogicalTopAdjustedForPrecedingLine const): Deleted. 122 (WebCore::InlineIterator::LineIteratorLegacyPath::contentLogicalBottomAdjustedForFollowingLine const): Deleted. 123 (WebCore::InlineIterator::LineIteratorLegacyPath::lineBoxTop const): Deleted. 124 (WebCore::InlineIterator::LineIteratorLegacyPath::lineBoxBottom const): Deleted. 125 (WebCore::InlineIterator::LineIteratorLegacyPath::contentLogicalLeft const): Deleted. 126 (WebCore::InlineIterator::LineIteratorLegacyPath::contentLogicalRight const): Deleted. 127 (WebCore::InlineIterator::LineIteratorLegacyPath::isHorizontal const): Deleted. 128 (WebCore::InlineIterator::LineIteratorLegacyPath::baselineType const): Deleted. 129 (WebCore::InlineIterator::LineIteratorLegacyPath::containingBlock const): Deleted. 130 (WebCore::InlineIterator::LineIteratorLegacyPath::containingFragment const): Deleted. 131 (WebCore::InlineIterator::LineIteratorLegacyPath::isFirstAfterPageBreak const): Deleted. 132 (WebCore::InlineIterator::LineIteratorLegacyPath::traverseNext): Deleted. 133 (WebCore::InlineIterator::LineIteratorLegacyPath::traversePrevious): Deleted. 134 (WebCore::InlineIterator::LineIteratorLegacyPath::operator== const): Deleted. 135 (WebCore::InlineIterator::LineIteratorLegacyPath::atEnd const): Deleted. 136 (WebCore::InlineIterator::LineIteratorLegacyPath::firstLeafBox const): Deleted. 137 (WebCore::InlineIterator::LineIteratorLegacyPath::lastLeafBox const): Deleted. 138 * layout/integration/InlineIteratorLineModernPath.h: 139 (WebCore::InlineIterator::LineBoxIteratorModernPath::LineBoxIteratorModernPath): 140 (WebCore::InlineIterator::LineBoxIteratorModernPath::top const): 141 (WebCore::InlineIterator::LineBoxIteratorModernPath::bottom const): 142 (WebCore::InlineIterator::LineBoxIteratorModernPath::contentLogicalTopAdjustedForPrecedingLineBox const): 143 (WebCore::InlineIterator::LineBoxIteratorModernPath::contentLogicalBottomAdjustedForFollowingLineBox const): 144 (WebCore::InlineIterator::LineBoxIteratorModernPath::operator== const): 145 (WebCore::InlineIterator::LineIteratorModernPath::LineIteratorModernPath): Deleted. 146 (WebCore::InlineIterator::LineIteratorModernPath::contentLogicalTop const): Deleted. 147 (WebCore::InlineIterator::LineIteratorModernPath::contentLogicalBottom const): Deleted. 148 (WebCore::InlineIterator::LineIteratorModernPath::lineBoxTop const): Deleted. 149 (WebCore::InlineIterator::LineIteratorModernPath::lineBoxBottom const): Deleted. 150 (WebCore::InlineIterator::LineIteratorModernPath::contentLogicalTopAdjustedForPrecedingLine const): Deleted. 151 (WebCore::InlineIterator::LineIteratorModernPath::contentLogicalBottomAdjustedForFollowingLine const): Deleted. 152 (WebCore::InlineIterator::LineIteratorModernPath::contentLogicalLeft const): Deleted. 153 (WebCore::InlineIterator::LineIteratorModernPath::contentLogicalRight const): Deleted. 154 (WebCore::InlineIterator::LineIteratorModernPath::isHorizontal const): Deleted. 155 (WebCore::InlineIterator::LineIteratorModernPath::baselineType const): Deleted. 156 (WebCore::InlineIterator::LineIteratorModernPath::containingBlock const): Deleted. 157 (WebCore::InlineIterator::LineIteratorModernPath::containingFragment const): Deleted. 158 (WebCore::InlineIterator::LineIteratorModernPath::isFirstAfterPageBreak const): Deleted. 159 (WebCore::InlineIterator::LineIteratorModernPath::traverseNext): Deleted. 160 (WebCore::InlineIterator::LineIteratorModernPath::traversePrevious): Deleted. 161 (WebCore::InlineIterator::LineIteratorModernPath::operator== const): Deleted. 162 (WebCore::InlineIterator::LineIteratorModernPath::atEnd const): Deleted. 163 (WebCore::InlineIterator::LineIteratorModernPath::firstLeafBox const): Deleted. 164 (WebCore::InlineIterator::LineIteratorModernPath::lastLeafBox const): Deleted. 165 (WebCore::InlineIterator::LineIteratorModernPath::setAtEnd): Deleted. 166 (WebCore::InlineIterator::LineIteratorModernPath::lines const): Deleted. 167 (WebCore::InlineIterator::LineIteratorModernPath::line const): Deleted. 168 * layout/integration/InlineIteratorLogicalOrderTraversal.cpp: 169 (WebCore::InlineIterator::makeLineLogicalOrderCache): 170 (WebCore::InlineIterator::updateLineLogicalOrderCacheIfNeeded): 171 (WebCore::InlineIterator::firstLeafOnLineInLogicalOrder): 172 (WebCore::InlineIterator::lastLeafOnLineInLogicalOrder): 173 (WebCore::InlineIterator::firstLeafOnLineInLogicalOrderWithNode): 174 (WebCore::InlineIterator::lastLeafOnLineInLogicalOrderWithNode): 175 * layout/integration/InlineIteratorLogicalOrderTraversal.h: 176 (WebCore::InlineIterator::leafBoxesInLogicalOrder): 177 * layout/integration/InlineIteratorTextBox.cpp: 178 (WebCore::InlineIterator::TextBox::selectionRect const): 179 * layout/integration/LayoutIntegrationLineLayout.cpp: 180 (WebCore::LayoutIntegration::LineLayout::firstLineBox const): 181 (WebCore::LayoutIntegration::LineLayout::lastLineBox const): 182 (WebCore::LayoutIntegration::LineLayout::firstLine const): Deleted. 183 (WebCore::LayoutIntegration::LineLayout::lastLine const): Deleted. 184 * layout/integration/LayoutIntegrationLineLayout.h: 185 * layout/integration/LineSelection.h: 186 (WebCore::LineSelection::logicalTop): 187 (WebCore::LineSelection::logicalBottom): 188 (WebCore::LineSelection::logicalRect): 189 (WebCore::LineSelection::physicalRect): 190 (WebCore::LineSelection::logicalTopAdjustedForPrecedingBlock): 191 (WebCore::LineSelection::selectionState): 192 * rendering/CaretRectComputation.cpp: 193 (WebCore::computeCaretRectForLinePosition): 194 (WebCore::computeCaretRectForText): 195 (WebCore::computeCaretRectForLineBreak): 196 (WebCore::computeCaretRectForBox): 197 * rendering/InlineBoxPainter.cpp: 198 (WebCore::InlineBoxPainter::InlineBoxPainter): 199 (WebCore::InlineBoxPainter::paintMask): 200 (WebCore::InlineBoxPainter::paintDecorations): 201 (WebCore::InlineBoxPainter::style const): 202 * rendering/InlineBoxPainter.h: 203 * rendering/RenderBlockFlow.cpp: 204 (WebCore::RenderBlockFlow::adjustEnclosingTopForPrecedingBlock const): 205 (WebCore::RenderBlockFlow::inlineSelectionGaps): 206 (WebCore::RenderBlockFlow::containsNonZeroBidiLevel const): 207 (WebCore::RenderBlockFlow::findClosestTextAtAbsolutePoint): 208 (WebCore::RenderBlockFlow::positionForPointWithInlineChildren): 209 (WebCore::RenderBlockFlow::addFocusRingRectsForInlineChildren): 210 * rendering/RenderElement.cpp: 211 (WebCore::RenderElement::getLeadingCorner const): 212 * rendering/RenderInline.cpp: 213 (WebCore::RenderInline::paintOutline): 214 * rendering/RenderReplaced.cpp: 215 (WebCore::RenderReplaced::positionForPoint): 216 * rendering/RenderText.cpp: 217 (WebCore::RenderText::positionForPoint): 218 * rendering/TextBoxPainter.cpp: 219 (WebCore::TextBoxPainter::TextBoxPainter): 220 (WebCore::TextBoxPainter::paintBackground): 221 (WebCore::textPosition): 222 (WebCore::TextBoxPainter::computePaintRect): 223 * rendering/svg/SVGRootInlineBox.cpp: 224 (WebCore::SVGRootInlineBox::reorderValueListsToLogicalOrder): 225 * style/InlineTextBoxStyle.cpp: 226 (WebCore::minLogicalTopForTextDecorationLine): 227 (WebCore::maxLogicalBottomForTextDecorationLine): 228 (WebCore::computeUnderlineOffset): 229 1 230 2022-03-20 Oriol Brufau <obrufau@igalia.com> 2 231 -
trunk/Source/WebCore/Headers.cmake
r291364 r291548 977 977 layout/integration/InlineIteratorBoxLegacyPath.h 978 978 layout/integration/InlineIteratorBoxModernPath.h 979 layout/integration/InlineIteratorLine .h980 layout/integration/InlineIteratorLine LegacyPath.h981 layout/integration/InlineIteratorLine ModernPath.h979 layout/integration/InlineIteratorLineBox.h 980 layout/integration/InlineIteratorLineBoxLegacyPath.h 981 layout/integration/InlineIteratorLineBoxModernPath.h 982 982 layout/integration/InlineIteratorLogicalOrderTraversal.h 983 983 layout/integration/InlineIteratorTextBox.h -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r291499 r291548 5431 5431 E4C91A16180999F100A17F6D /* RenderTextLineBoxes.h in Headers */ = {isa = PBXBuildFile; fileRef = E4C91A15180999F100A17F6D /* RenderTextLineBoxes.h */; settings = {ATTRIBUTES = (Private, ); }; }; 5432 5432 E4D33F3B252AEECD00837D05 /* InlineRunAndOffset.h in Headers */ = {isa = PBXBuildFile; fileRef = E4D33F39252AEECC00837D05 /* InlineRunAndOffset.h */; }; 5433 E4D33F41252C4B8300837D05 /* InlineIteratorLine .h in Headers */ = {isa = PBXBuildFile; fileRef = E4D33F3F252C4B8200837D05 /* InlineIteratorLine.h */; settings = {ATTRIBUTES = (Private, ); }; };5434 E4D33F44252C50E200837D05 /* InlineIteratorLine LegacyPath.h in Headers */ = {isa = PBXBuildFile; fileRef = E4D33F43252C50E200837D05 /* InlineIteratorLineLegacyPath.h */; settings = {ATTRIBUTES = (Private, ); }; };5435 E4D33F46252C50FC00837D05 /* InlineIteratorLine ModernPath.h in Headers */ = {isa = PBXBuildFile; fileRef = E4D33F45252C50FB00837D05 /* InlineIteratorLineModernPath.h */; settings = {ATTRIBUTES = (Private, ); }; };5433 E4D33F41252C4B8300837D05 /* InlineIteratorLineBox.h in Headers */ = {isa = PBXBuildFile; fileRef = E4D33F3F252C4B8200837D05 /* InlineIteratorLineBox.h */; settings = {ATTRIBUTES = (Private, ); }; }; 5434 E4D33F44252C50E200837D05 /* InlineIteratorLineBoxLegacyPath.h in Headers */ = {isa = PBXBuildFile; fileRef = E4D33F43252C50E200837D05 /* InlineIteratorLineBoxLegacyPath.h */; settings = {ATTRIBUTES = (Private, ); }; }; 5435 E4D33F46252C50FC00837D05 /* InlineIteratorLineBoxModernPath.h in Headers */ = {isa = PBXBuildFile; fileRef = E4D33F45252C50FB00837D05 /* InlineIteratorLineBoxModernPath.h */; settings = {ATTRIBUTES = (Private, ); }; }; 5436 5436 E4D58EB517B4DBDC00CBDCA8 /* StyleResolveForDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = E4D58EB317B4DBDC00CBDCA8 /* StyleResolveForDocument.h */; }; 5437 5437 E4D58EB917B4ED8900CBDCA8 /* StyleFontSizeFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = E4D58EB717B4ED8900CBDCA8 /* StyleFontSizeFunctions.h */; }; … … 17614 17614 E4C91A17180999FB00A17F6D /* RenderTextLineBoxes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTextLineBoxes.cpp; sourceTree = "<group>"; }; 17615 17615 E4D33F39252AEECC00837D05 /* InlineRunAndOffset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InlineRunAndOffset.h; sourceTree = "<group>"; }; 17616 E4D33F3F252C4B8200837D05 /* InlineIteratorLine .h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InlineIteratorLine.h; sourceTree = "<group>"; };17616 E4D33F3F252C4B8200837D05 /* InlineIteratorLineBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InlineIteratorLineBox.h; sourceTree = "<group>"; }; 17617 17617 E4D33F42252C50A800837D05 /* InlineIteratorLine.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = InlineIteratorLine.cpp; sourceTree = "<group>"; }; 17618 E4D33F43252C50E200837D05 /* InlineIteratorLine LegacyPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InlineIteratorLineLegacyPath.h; sourceTree = "<group>"; };17619 E4D33F45252C50FB00837D05 /* InlineIteratorLine ModernPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InlineIteratorLineModernPath.h; sourceTree = "<group>"; };17618 E4D33F43252C50E200837D05 /* InlineIteratorLineBoxLegacyPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InlineIteratorLineBoxLegacyPath.h; sourceTree = "<group>"; }; 17619 E4D33F45252C50FB00837D05 /* InlineIteratorLineBoxModernPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InlineIteratorLineBoxModernPath.h; sourceTree = "<group>"; }; 17620 17620 E4D58EB217B4DBDC00CBDCA8 /* StyleResolveForDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StyleResolveForDocument.cpp; sourceTree = "<group>"; }; 17621 17621 E4D58EB317B4DBDC00CBDCA8 /* StyleResolveForDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StyleResolveForDocument.h; sourceTree = "<group>"; }; … … 31527 31527 E415EB11270C351200E8DA1B /* InlineIteratorInlineBox.h */, 31528 31528 E4D33F42252C50A800837D05 /* InlineIteratorLine.cpp */, 31529 E4D33F3F252C4B8200837D05 /* InlineIteratorLine .h */,31530 E4D33F43252C50E200837D05 /* InlineIteratorLine LegacyPath.h */,31531 E4D33F45252C50FB00837D05 /* InlineIteratorLine ModernPath.h */,31529 E4D33F3F252C4B8200837D05 /* InlineIteratorLineBox.h */, 31530 E4D33F43252C50E200837D05 /* InlineIteratorLineBoxLegacyPath.h */, 31531 E4D33F45252C50FB00837D05 /* InlineIteratorLineBoxModernPath.h */, 31532 31532 E41ACC12271733F3003E9157 /* InlineIteratorLogicalOrderTraversal.cpp */, 31533 31533 E41ACC1527173402003E9157 /* InlineIteratorLogicalOrderTraversal.h */, … … 35123 35123 E4A664CE2521D4C9007081DC /* InlineIteratorBoxModernPath.h in Headers */, 35124 35124 E415EB13270C351300E8DA1B /* InlineIteratorInlineBox.h in Headers */, 35125 E4D33F41252C4B8300837D05 /* InlineIteratorLine .h in Headers */,35126 E4D33F44252C50E200837D05 /* InlineIteratorLine LegacyPath.h in Headers */,35127 E4D33F46252C50FC00837D05 /* InlineIteratorLine ModernPath.h in Headers */,35125 E4D33F41252C4B8300837D05 /* InlineIteratorLineBox.h in Headers */, 35126 E4D33F44252C50E200837D05 /* InlineIteratorLineBoxLegacyPath.h in Headers */, 35127 E4D33F46252C50FC00837D05 /* InlineIteratorLineBoxModernPath.h in Headers */, 35128 35128 E41ACC1627173402003E9157 /* InlineIteratorLogicalOrderTraversal.h in Headers */, 35129 35129 E47CEBE12709916D00B8D8F5 /* InlineIteratorTextBox.h in Headers */, -
trunk/Source/WebCore/dom/Position.cpp
r291481 r291548 37 37 #include "HTMLParserIdioms.h" 38 38 #include "HTMLTableElement.h" 39 #include "InlineIteratorLine .h"39 #include "InlineIteratorLineBox.h" 40 40 #include "InlineIteratorLogicalOrderTraversal.h" 41 41 #include "InlineIteratorTextBox.h" … … 761 761 762 762 auto nextBox = InlineIterator::nextTextBoxInLogicalOrder(box, orderCache); 763 if (textOffset == box->end() + 1 && nextBox && box->line () != nextBox->line())763 if (textOffset == box->end() + 1 && nextBox && box->lineBox() != nextBox->lineBox()) 764 764 return currentPosition; 765 765 … … 867 867 868 868 auto nextBox = InlineIterator::nextTextBoxInLogicalOrder(box, orderCache); 869 if (textOffset == box->end() && nextBox && box->line () != nextBox->line())869 if (textOffset == box->end() && nextBox && box->lineBox() != nextBox->lineBox()) 870 870 return currentPosition; 871 871 … … 1096 1096 return false; 1097 1097 1098 if (box1->line () != box2->line())1098 if (box1->lineBox() != box2->lineBox()) 1099 1099 return true; 1100 1100 -
trunk/Source/WebCore/editing/RenderedPosition.h
r291481 r291548 33 33 #include "CaretRectComputation.h" 34 34 #include "InlineIteratorBox.h" 35 #include "InlineIteratorLine .h"35 #include "InlineIteratorLineBox.h" 36 36 #include "TextAffinity.h" 37 37 … … 51 51 52 52 bool isNull() const { return !m_renderer; } 53 InlineIterator::Line Iterator line() const { return m_box ? m_box->line() : InlineIterator::LineIterator(); }53 InlineIterator::LineBoxIterator lineBox() const { return m_box ? m_box->lineBox() : InlineIterator::LineBoxIterator(); } 54 54 55 55 unsigned char bidiLevelOnLeft() const; -
trunk/Source/WebCore/editing/VisiblePosition.cpp
r291481 r291548 37 37 #include "HTMLNames.h" 38 38 #include "InlineIteratorBox.h" 39 #include "InlineIteratorLine .h"39 #include "InlineIteratorLineBox.h" 40 40 #include "InlineRunAndOffset.h" 41 41 #include "LineSelection.h" … … 161 161 Position positionOnLeft = primaryDirection == TextDirection::LTR ? previousVisuallyDistinctCandidate(m_deepPosition) : nextVisuallyDistinctCandidate(m_deepPosition); 162 162 auto boxOnLeft = positionOnLeft.inlineBoxAndOffset(m_affinity, primaryDirection).box; 163 if (boxOnLeft && boxOnLeft->line () == box->line())163 if (boxOnLeft && boxOnLeft->lineBox() == box->lineBox()) 164 164 return Position(); 165 165 return positionOnLeft; … … 179 179 if (!previousBox) { 180 180 auto logicalStart = primaryDirection == TextDirection::LTR 181 ? InlineIterator::firstLeafOnLineInLogicalOrderWithNode(box->line (), orderCache)182 : InlineIterator::lastLeafOnLineInLogicalOrderWithNode(box->line (), orderCache);181 ? InlineIterator::firstLeafOnLineInLogicalOrderWithNode(box->lineBox(), orderCache) 182 : InlineIterator::lastLeafOnLineInLogicalOrderWithNode(box->lineBox(), orderCache); 183 183 if (logicalStart) { 184 184 box = logicalStart; … … 327 327 Position positionOnRight = primaryDirection == TextDirection::LTR ? nextVisuallyDistinctCandidate(m_deepPosition) : previousVisuallyDistinctCandidate(m_deepPosition); 328 328 auto boxOnRight = positionOnRight.inlineBoxAndOffset(m_affinity, primaryDirection).box; 329 if (boxOnRight && boxOnRight->line () == box->line())329 if (boxOnRight && boxOnRight->lineBox() == box->lineBox()) 330 330 return Position(); 331 331 return positionOnRight; … … 345 345 if (!nextBox) { 346 346 auto logicalEnd = primaryDirection == TextDirection::LTR 347 ? InlineIterator::lastLeafOnLineInLogicalOrderWithNode(box->line (), orderCache)348 : InlineIterator::firstLeafOnLineInLogicalOrderWithNode(box->line (), orderCache);347 ? InlineIterator::lastLeafOnLineInLogicalOrderWithNode(box->lineBox(), orderCache) 348 : InlineIterator::firstLeafOnLineInLogicalOrderWithNode(box->lineBox(), orderCache); 349 349 350 350 if (logicalEnd) { … … 670 670 return { }; 671 671 672 auto line = box->line ();672 auto line = box->lineBox(); 673 673 return line->containingBlock().localToAbsoluteQuad(FloatRect { LineSelection::physicalRect(*line) }).boundingBox(); 674 674 } -
trunk/Source/WebCore/editing/VisibleUnits.cpp
r291533 r291548 33 33 #include "HTMLNames.h" 34 34 #include "InlineIteratorBox.h" 35 #include "InlineIteratorLine .h"35 #include "InlineIteratorLineBox.h" 36 36 #include "InlineIteratorLogicalOrderTraversal.h" 37 37 #include "InlineRunAndOffset.h" … … 151 151 } 152 152 153 static InlineIterator::LeafBoxIterator startTextOrLineBreakBox(InlineIterator::Line Iterator line, InlineIterator::LineLogicalOrderCache& orderCache)154 { 155 auto box = InlineIterator::firstLeafOnLineInLogicalOrder(line , orderCache);153 static InlineIterator::LeafBoxIterator startTextOrLineBreakBox(InlineIterator::LineBoxIterator lineBox, InlineIterator::LineLogicalOrderCache& orderCache) 154 { 155 auto box = InlineIterator::firstLeafOnLineInLogicalOrder(lineBox, orderCache); 156 156 if (isTextOrLineBreakBox(box)) 157 157 return box; … … 159 159 } 160 160 161 static InlineIterator::LeafBoxIterator endTextOrLineBreakBox(InlineIterator::Line Iterator line, InlineIterator::LineLogicalOrderCache& orderCache)162 { 163 auto box = InlineIterator::lastLeafOnLineInLogicalOrder(line , orderCache);161 static InlineIterator::LeafBoxIterator endTextOrLineBreakBox(InlineIterator::LineBoxIterator lineBox, InlineIterator::LineLogicalOrderCache& orderCache) 162 { 163 auto box = InlineIterator::lastLeafOnLineInLogicalOrder(lineBox, orderCache); 164 164 if (isTextOrLineBreakBox(box)) 165 165 return box; … … 172 172 return previousBox; 173 173 174 if (auto previousLine = startBox->line()->previous()) {174 if (auto previousLineBox = startBox->lineBox()->previous()) { 175 175 // FIXME: Why isn't previousBoxInDifferentLine set here? 176 if (auto previousBox = endTextOrLineBreakBox(previousLine , orderCache))176 if (auto previousBox = endTextOrLineBreakBox(previousLineBox, orderCache)) 177 177 return previousBox; 178 178 } … … 188 188 189 189 RenderedPosition renderedPosition(position, Affinity::Downstream); 190 auto previousLine = renderedPosition.line();191 if (!previousLine )192 break; 193 194 if (previousLine != startBox->line()) {195 if (auto previousBox = endTextOrLineBreakBox(previousLine , orderCache)) {190 auto previousLineBox = renderedPosition.lineBox(); 191 if (!previousLineBox) 192 break; 193 194 if (previousLineBox != startBox->lineBox()) { 195 if (auto previousBox = endTextOrLineBreakBox(previousLineBox, orderCache)) { 196 196 previousBoxInDifferentLine = true; 197 197 return previousBox; … … 199 199 } 200 200 201 startBox = InlineIterator::firstLeafOnLineInLogicalOrder(previousLine , orderCache);201 startBox = InlineIterator::firstLeafOnLineInLogicalOrder(previousLineBox, orderCache); 202 202 } 203 203 return { }; … … 210 210 return nextBox; 211 211 212 if (auto nextLine = startBox->line()->next()) {212 if (auto nextLineBox = startBox->lineBox()->next()) { 213 213 // FIXME: Why isn't previousBoxInDifferentLine set here? 214 if (auto nextBox = startTextOrLineBreakBox(nextLine , orderCache))214 if (auto nextBox = startTextOrLineBreakBox(nextLineBox, orderCache)) 215 215 return nextBox; 216 216 } … … 226 226 227 227 RenderedPosition renderedPosition(position, Affinity::Downstream); 228 auto nextLine = renderedPosition.line();229 if (!nextLine )230 break; 231 232 if (nextLine != startBox->line()) {233 if (auto nextBox = startTextOrLineBreakBox(nextLine , orderCache)) {228 auto nextLineBox = renderedPosition.lineBox(); 229 if (!nextLineBox) 230 break; 231 232 if (nextLineBox != startBox->lineBox()) { 233 if (auto nextBox = startTextOrLineBreakBox(nextLineBox, orderCache)) { 234 234 nextBoxInDifferentLine = true; 235 235 return nextBox; … … 237 237 } 238 238 239 startBox = InlineIterator::lastLeafOnLineInLogicalOrderWithNode(nextLine , orderCache);239 startBox = InlineIterator::lastLeafOnLineInLogicalOrderWithNode(nextLineBox, orderCache); 240 240 } 241 241 return { }; … … 739 739 return VisiblePosition(); 740 740 741 auto line = RenderedPosition(c).line();742 if (!line ) {741 auto lineBox = RenderedPosition(c).lineBox(); 742 if (!lineBox) { 743 743 // There are VisiblePositions at offset 0 in blocks without 744 744 // RootInlineBoxes, like empty editable blocks and bordered blocks. … … 753 753 754 754 Node* startNode = nullptr; 755 auto startBox = mode == UseLogicalOrdering ? InlineIterator::firstLeafOnLineInLogicalOrderWithNode(line , orderCache) : line->firstLeafBox();755 auto startBox = mode == UseLogicalOrdering ? InlineIterator::firstLeafOnLineInLogicalOrderWithNode(lineBox, orderCache) : lineBox->firstLeafBox(); 756 756 // Generated content (e.g. list markers and CSS :before and :after pseudoelements) have no corresponding DOM element, 757 757 // and so cannot be represented by a VisiblePosition. Use whatever follows instead. … … 812 812 return VisiblePosition(); 813 813 814 auto line = RenderedPosition(c).line();815 if (!line ) {814 auto lineBox = RenderedPosition(c).lineBox(); 815 if (!lineBox) { 816 816 // There are VisiblePositions at offset 0 in blocks without 817 817 // RootInlineBoxes, like empty editable blocks and bordered blocks. … … 825 825 826 826 Node* endNode = nullptr; 827 auto endBox = mode == UseLogicalOrdering ? InlineIterator::lastLeafOnLineInLogicalOrder(line , orderCache) : line->lastLeafBox();827 auto endBox = mode == UseLogicalOrdering ? InlineIterator::lastLeafOnLineInLogicalOrder(lineBox, orderCache) : lineBox->lastLeafBox(); 828 828 // Generated content (e.g. list markers and CSS :before and :after pseudoelements) have no corresponding DOM element, 829 829 // and so cannot be represented by a VisiblePosition. Use whatever precedes instead. … … 937 937 } 938 938 939 static inline IntPoint absoluteLineDirectionPointToLocalPointInBlock(InlineIterator::Line Iterator& line, int lineDirectionPoint)940 { 941 auto& containingBlock = line ->containingBlock();939 static inline IntPoint absoluteLineDirectionPointToLocalPointInBlock(InlineIterator::LineBoxIterator& lineBox, int lineDirectionPoint) 940 { 941 auto& containingBlock = lineBox->containingBlock(); 942 942 FloatPoint absoluteBlockPoint = containingBlock.localToAbsolute(FloatPoint()) - toFloatSize(containingBlock.scrollPosition()); 943 943 944 944 if (containingBlock.isHorizontalWritingMode()) 945 return IntPoint(lineDirectionPoint - absoluteBlockPoint.x(), contentStartInBlockDirection(*line ));946 947 return IntPoint(contentStartInBlockDirection(*line ), lineDirectionPoint - absoluteBlockPoint.y());945 return IntPoint(lineDirectionPoint - absoluteBlockPoint.x(), contentStartInBlockDirection(*lineBox)); 946 947 return IntPoint(contentStartInBlockDirection(*lineBox), lineDirectionPoint - absoluteBlockPoint.y()); 948 948 } 949 949 … … 969 969 return VisiblePosition(); 970 970 971 InlineIterator::Line Iterator line;971 InlineIterator::LineBoxIterator lineBox; 972 972 if (auto box = visiblePosition.inlineBoxAndOffset().box) { 973 line = box->line()->previous();973 lineBox = box->lineBox()->previous(); 974 974 // We want to skip zero height boxes. 975 975 // This could happen in case it is a LegacyRootInlineBox with trailing floats. 976 if (!line || !line->lineBoxHeight() || !line->firstLeafBox())977 line = { };978 } 979 980 if (!line ) {976 if (!lineBox || !lineBox->height() || !lineBox->firstLeafBox()) 977 lineBox = { }; 978 } 979 980 if (!lineBox) { 981 981 Position position = previousLineCandidatePosition(node, visiblePosition, editableType); 982 982 if (position.isNotNull()) { 983 983 RenderedPosition renderedPosition(position); 984 line = renderedPosition.line();985 if (!line )984 lineBox = renderedPosition.lineBox(); 985 if (!lineBox) 986 986 return position; 987 987 } 988 988 } 989 989 990 if (line ) {990 if (lineBox) { 991 991 // FIXME: Can be wrong for multi-column layout and with transforms. 992 auto pointInLine = absoluteLineDirectionPointToLocalPointInBlock(line , lineDirectionPoint);993 auto box = closestBoxForHorizontalPosition(*line , line->isHorizontal() ? pointInLine.x() : pointInLine.y(), isEditablePosition(p));992 auto pointInLine = absoluteLineDirectionPointToLocalPointInBlock(lineBox, lineDirectionPoint); 993 auto box = closestBoxForHorizontalPosition(*lineBox, lineBox->isHorizontal() ? pointInLine.x() : pointInLine.y(), isEditablePosition(p)); 994 994 if (!box) 995 995 return VisiblePosition(); … … 1022 1022 return VisiblePosition(); 1023 1023 1024 InlineIterator::Line Iterator line;1024 InlineIterator::LineBoxIterator lineBox; 1025 1025 if (auto box = visiblePosition.inlineBoxAndOffset().box) { 1026 line = box->line()->next();1026 lineBox = box->lineBox()->next(); 1027 1027 // We want to skip zero height boxes. 1028 1028 // This could happen in case it is a LegacyRootInlineBox with trailing floats. 1029 if (!line || !line->lineBoxHeight() || !line->firstLeafBox())1030 line = { };1031 } 1032 1033 if (!line ) {1029 if (!lineBox || !lineBox->height() || !lineBox->firstLeafBox()) 1030 lineBox = { }; 1031 } 1032 1033 if (!lineBox) { 1034 1034 // FIXME: We need do the same in previousLinePosition. 1035 1035 Node* child = node->traverseToChildAt(p.deprecatedEditingOffset()); … … 1038 1038 if (position.isNotNull()) { 1039 1039 RenderedPosition renderedPosition(position); 1040 line = renderedPosition.line();1041 if (!line )1040 lineBox = renderedPosition.lineBox(); 1041 if (!lineBox) 1042 1042 return position; 1043 1043 } 1044 1044 } 1045 1045 1046 if (line ) {1046 if (lineBox) { 1047 1047 // FIXME: Can be wrong for multi-column layout and with transforms. 1048 auto pointInLine = absoluteLineDirectionPointToLocalPointInBlock(line , lineDirectionPoint);1049 auto box = closestBoxForHorizontalPosition(*line , line->isHorizontal() ? pointInLine.x() : pointInLine.y(), isEditablePosition(p));1048 auto pointInLine = absoluteLineDirectionPointToLocalPointInBlock(lineBox, lineDirectionPoint); 1049 auto box = closestBoxForHorizontalPosition(*lineBox, lineBox->isHorizontal() ? pointInLine.x() : pointInLine.y(), isEditablePosition(p)); 1050 1050 if (!box) 1051 1051 return VisiblePosition(); -
trunk/Source/WebCore/html/HTMLTextFormControlElement.cpp
r291408 r291548 43 43 #include "HTMLParserIdioms.h" 44 44 #include "InlineIteratorBox.h" 45 #include "InlineIteratorLine .h"45 #include "InlineIteratorLineBox.h" 46 46 #include "LayoutDisallowedScope.h" 47 47 #include "Logging.h" … … 728 728 Node* softLineBreakNode = nullptr; 729 729 unsigned softLineBreakOffset = 0; 730 auto currentLine = InlineIterator::firstLineFor(*renderer);731 if (!currentLine )730 auto currentLineBox = InlineIterator::firstLineBoxFor(*renderer); 731 if (!currentLineBox) 732 732 return value(); 733 733 734 734 auto skipToNextSoftLineBreakPosition = [&] { 735 for (; currentLine ; currentLine.traverseNext()) {736 auto lastRun = currentLine ->lastLeafBox();735 for (; currentLineBox; currentLineBox.traverseNext()) { 736 auto lastRun = currentLineBox->lastLeafBox(); 737 737 ASSERT(lastRun); 738 738 auto& renderer = lastRun->renderer(); … … 741 741 softLineBreakNode = renderer.node(); 742 742 softLineBreakOffset = lastRun->maximumCaretOffset(); 743 currentLine .traverseNext();743 currentLineBox.traverseNext(); 744 744 return; 745 745 } -
trunk/Source/WebCore/layout/integration/InlineIteratorBox.cpp
r284665 r291548 27 27 #include "InlineIteratorBox.h" 28 28 29 #include "InlineIteratorLine .h"29 #include "InlineIteratorLineBox.h" 30 30 #include "InlineIteratorTextBox.h" 31 31 #include "LayoutIntegrationLineLayout.h" … … 82 82 } 83 83 84 Line Iterator Box::line() const84 LineBoxIterator Box::lineBox() const 85 85 { 86 86 return WTF::switchOn(m_pathVariant, [](const BoxLegacyPath& path) { 87 return Line Iterator(LineIteratorLegacyPath(&path.rootInlineBox()));87 return LineBoxIterator(LineBoxIteratorLegacyPath(&path.rootInlineBox())); 88 88 } 89 89 #if ENABLE(LAYOUT_FORMATTING_CONTEXT) 90 90 , [](const BoxModernPath& path) { 91 return Line Iterator(LineIteratorModernPath(path.inlineContent(), path.box().lineIndex()));91 return LineBoxIterator(LineBoxIteratorModernPath(path.inlineContent(), path.box().lineIndex())); 92 92 } 93 93 #endif … … 97 97 const RenderStyle& Box::style() const 98 98 { 99 return line ()->isFirst() ? renderer().firstLineStyle() : renderer().style();99 return lineBox()->isFirst() ? renderer().firstLineStyle() : renderer().style(); 100 100 } 101 101 -
trunk/Source/WebCore/layout/integration/InlineIteratorBox.h
r290672 r291548 39 39 namespace InlineIterator { 40 40 41 class Line Iterator;41 class LineBoxIterator; 42 42 class BoxIterator; 43 43 class LeafBoxIterator; … … 99 99 LeafBoxIterator previousOnLineIgnoringLineBreak() const; 100 100 101 Line Iterator line() const;101 LineBoxIterator lineBox() const; 102 102 103 103 protected: -
trunk/Source/WebCore/layout/integration/InlineIteratorLine.cpp
r291533 r291548 25 25 26 26 #include "config.h" 27 #include "InlineIteratorLine .h"27 #include "InlineIteratorLineBox.h" 28 28 29 29 #include "InlineIteratorBox.h" … … 34 34 namespace InlineIterator { 35 35 36 Line Iterator::LineIterator(Line::PathVariant&& pathVariant)37 : m_line (WTFMove(pathVariant))36 LineBoxIterator::LineBoxIterator(LineBox::PathVariant&& pathVariant) 37 : m_lineBox(WTFMove(pathVariant)) 38 38 { 39 39 } 40 40 41 Line Iterator::LineIterator(const Line& line)42 : m_line (line)41 LineBoxIterator::LineBoxIterator(const LineBox& lineBox) 42 : m_lineBox(lineBox) 43 43 { 44 44 } 45 45 46 bool Line Iterator::atEnd() const46 bool LineBoxIterator::atEnd() const 47 47 { 48 return WTF::switchOn(m_line .m_pathVariant, [](auto& path) {48 return WTF::switchOn(m_lineBox.m_pathVariant, [](auto& path) { 49 49 return path.atEnd(); 50 50 }); 51 51 } 52 52 53 Line Iterator& LineIterator::traverseNext()53 LineBoxIterator& LineBoxIterator::traverseNext() 54 54 { 55 WTF::switchOn(m_line .m_pathVariant, [](auto& path) {55 WTF::switchOn(m_lineBox.m_pathVariant, [](auto& path) { 56 56 return path.traverseNext(); 57 57 }); … … 59 59 } 60 60 61 Line Iterator& LineIterator::traversePrevious()61 LineBoxIterator& LineBoxIterator::traversePrevious() 62 62 { 63 WTF::switchOn(m_line .m_pathVariant, [](auto& path) {63 WTF::switchOn(m_lineBox.m_pathVariant, [](auto& path) { 64 64 return path.traversePrevious(); 65 65 }); … … 67 67 } 68 68 69 bool Line Iterator::operator==(const LineIterator& other) const69 bool LineBoxIterator::operator==(const LineBoxIterator& other) const 70 70 { 71 return m_line .m_pathVariant == other.m_line.m_pathVariant;71 return m_lineBox.m_pathVariant == other.m_lineBox.m_pathVariant; 72 72 } 73 73 74 Line Iterator firstLineFor(const RenderBlockFlow& flow)74 LineBoxIterator firstLineBoxFor(const RenderBlockFlow& flow) 75 75 { 76 76 #if ENABLE(LAYOUT_FORMATTING_CONTEXT) 77 77 if (auto* lineLayout = flow.modernLineLayout()) 78 return lineLayout->firstLine ();78 return lineLayout->firstLineBox(); 79 79 #endif 80 80 81 return { Line IteratorLegacyPath { flow.firstRootBox() } };81 return { LineBoxIteratorLegacyPath { flow.firstRootBox() } }; 82 82 } 83 83 84 Line Iterator lastLineFor(const RenderBlockFlow& flow)84 LineBoxIterator lastLineBoxFor(const RenderBlockFlow& flow) 85 85 { 86 86 #if ENABLE(LAYOUT_FORMATTING_CONTEXT) 87 87 if (auto* lineLayout = flow.modernLineLayout()) 88 return lineLayout->lastLine ();88 return lineLayout->lastLineBox(); 89 89 #endif 90 90 91 return { Line IteratorLegacyPath { flow.lastRootBox() } };91 return { LineBoxIteratorLegacyPath { flow.lastRootBox() } }; 92 92 } 93 93 94 Line Iterator Line::next() const94 LineBoxIterator LineBox::next() const 95 95 { 96 return Line Iterator(*this).traverseNext();96 return LineBoxIterator(*this).traverseNext(); 97 97 } 98 98 99 Line Iterator Line::previous() const99 LineBoxIterator LineBox::previous() const 100 100 { 101 return Line Iterator(*this).traversePrevious();101 return LineBoxIterator(*this).traversePrevious(); 102 102 } 103 103 104 LeafBoxIterator Line ::firstLeafBox() const104 LeafBoxIterator LineBox::firstLeafBox() const 105 105 { 106 106 return WTF::switchOn(m_pathVariant, [](auto& path) -> LeafBoxIterator { … … 109 109 } 110 110 111 LeafBoxIterator Line ::lastLeafBox() const111 LeafBoxIterator LineBox::lastLeafBox() const 112 112 { 113 113 return WTF::switchOn(m_pathVariant, [](auto& path) -> LeafBoxIterator { … … 116 116 } 117 117 118 LeafBoxIterator closestBoxForHorizontalPosition(const Line & line, float horizontalPosition, bool editableOnly)118 LeafBoxIterator closestBoxForHorizontalPosition(const LineBox& lineBox, float horizontalPosition, bool editableOnly) 119 119 { 120 120 auto isEditable = [&](auto box) { … … 122 122 }; 123 123 124 auto firstBox = line .firstLeafBox();125 auto lastBox = line .lastLeafBox();124 auto firstBox = lineBox.firstLeafBox(); 125 auto lastBox = lineBox.lastLeafBox(); 126 126 127 127 if (firstBox != lastBox) { -
trunk/Source/WebCore/layout/integration/InlineIteratorLineBox.h
r291547 r291548 27 27 28 28 #include "FontBaseline.h" 29 #include "InlineIteratorLine LegacyPath.h"30 #include "InlineIteratorLine ModernPath.h"29 #include "InlineIteratorLineBoxLegacyPath.h" 30 #include "InlineIteratorLineBoxModernPath.h" 31 31 #include "RenderBlockFlow.h" 32 32 #include <variant> … … 38 38 namespace InlineIterator { 39 39 40 class Line Iterator;40 class LineBoxIterator; 41 41 class PathIterator; 42 42 class LeafBoxIterator; 43 43 44 struct EndLine Iterator { };45 46 class Line {44 struct EndLineBoxIterator { }; 45 46 class LineBox { 47 47 public: 48 48 using PathVariant = std::variant< 49 49 #if ENABLE(LAYOUT_FORMATTING_CONTEXT) 50 Line IteratorModernPath,50 LineBoxIteratorModernPath, 51 51 #endif 52 Line IteratorLegacyPath52 LineBoxIteratorLegacyPath 53 53 >; 54 54 55 Line (PathVariant&&);56 57 float lineBoxTop() const;58 float lineBoxBottom() const;59 float lineBoxHeight() const { return lineBoxBottom() - lineBoxTop(); }55 LineBox(PathVariant&&); 56 57 float top() const; 58 float bottom() const; 59 float height() const { return bottom() - top(); } 60 60 61 61 float contentLogicalTop() const; … … 65 65 float contentLogicalWidth() const; 66 66 67 float contentLogicalTopAdjustedForPrecedingLine () const;68 float contentLogicalBottomAdjustedForFollowingLine () const;67 float contentLogicalTopAdjustedForPrecedingLineBox() const; 68 float contentLogicalBottomAdjustedForFollowingLineBox() const; 69 69 70 70 const RenderBlockFlow& containingBlock() const; … … 80 80 LeafBoxIterator lastLeafBox() const; 81 81 82 Line Iterator next() const;83 Line Iterator previous() const;82 LineBoxIterator next() const; 83 LineBoxIterator previous() const; 84 84 85 85 private: 86 friend class Line Iterator;86 friend class LineBoxIterator; 87 87 88 88 PathVariant m_pathVariant; 89 89 }; 90 90 91 class Line Iterator {91 class LineBoxIterator { 92 92 public: 93 Line Iterator() : m_line(LineIteratorLegacyPath { nullptr }) { };94 Line Iterator(const LegacyRootInlineBox* rootInlineBox) : m_line(LineIteratorLegacyPath { rootInlineBox }) { };95 Line Iterator(Line::PathVariant&&);96 Line Iterator(const Line&);97 98 Line Iterator& operator++() { return traverseNext(); }99 Line Iterator& traverseNext();100 Line Iterator& traversePrevious();93 LineBoxIterator() : m_lineBox(LineBoxIteratorLegacyPath { nullptr }) { }; 94 LineBoxIterator(const LegacyRootInlineBox* rootInlineBox) : m_lineBox(LineBoxIteratorLegacyPath { rootInlineBox }) { }; 95 LineBoxIterator(LineBox::PathVariant&&); 96 LineBoxIterator(const LineBox&); 97 98 LineBoxIterator& operator++() { return traverseNext(); } 99 LineBoxIterator& traverseNext(); 100 LineBoxIterator& traversePrevious(); 101 101 102 102 explicit operator bool() const { return !atEnd(); } 103 103 104 bool operator==(const Line Iterator&) const;105 bool operator!=(const Line Iterator& other) const { return !(*this == other); }106 107 bool operator==(EndLine Iterator) const { return atEnd(); }108 bool operator!=(EndLine Iterator) const { return !atEnd(); }109 110 const Line & operator*() const { return m_line; }111 const Line * operator->() const { return &m_line; }104 bool operator==(const LineBoxIterator&) const; 105 bool operator!=(const LineBoxIterator& other) const { return !(*this == other); } 106 107 bool operator==(EndLineBoxIterator) const { return atEnd(); } 108 bool operator!=(EndLineBoxIterator) const { return !atEnd(); } 109 110 const LineBox& operator*() const { return m_lineBox; } 111 const LineBox* operator->() const { return &m_lineBox; } 112 112 113 113 bool atEnd() const; 114 114 115 115 private: 116 Line m_line;116 LineBox m_lineBox; 117 117 }; 118 118 119 Line Iterator firstLineFor(const RenderBlockFlow&);120 Line Iterator lastLineFor(const RenderBlockFlow&);121 LeafBoxIterator closestBoxForHorizontalPosition(const Line &, float horizontalPosition, bool editableOnly = false);119 LineBoxIterator firstLineBoxFor(const RenderBlockFlow&); 120 LineBoxIterator lastLineBoxFor(const RenderBlockFlow&); 121 LeafBoxIterator closestBoxForHorizontalPosition(const LineBox&, float horizontalPosition, bool editableOnly = false); 122 122 123 123 // ----------------------------------------------- 124 inline float previousLine ContentBottomOrBorderAndPadding(const Line& line)125 { 126 return line .isFirst() ? line.containingBlock().borderAndPaddingBefore().toFloat() : line.contentLogicalTopAdjustedForPrecedingLine();127 } 128 129 inline float contentStartInBlockDirection(const Line & line)130 { 131 if (!line .containingBlock().style().isFlippedBlocksWritingMode())132 return std::max(line .contentLogicalTop(), previousLineContentBottomOrBorderAndPadding(line));133 return std::min(line .contentLogicalBottom(), line.contentLogicalBottomAdjustedForFollowingLine());134 } 135 136 inline Line ::Line(PathVariant&& path)124 inline float previousLineBoxContentBottomOrBorderAndPadding(const LineBox& lineBox) 125 { 126 return lineBox.isFirst() ? lineBox.containingBlock().borderAndPaddingBefore().toFloat() : lineBox.contentLogicalTopAdjustedForPrecedingLineBox(); 127 } 128 129 inline float contentStartInBlockDirection(const LineBox& lineBox) 130 { 131 if (!lineBox.containingBlock().style().isFlippedBlocksWritingMode()) 132 return std::max(lineBox.contentLogicalTop(), previousLineBoxContentBottomOrBorderAndPadding(lineBox)); 133 return std::min(lineBox.contentLogicalBottom(), lineBox.contentLogicalBottomAdjustedForFollowingLineBox()); 134 } 135 136 inline LineBox::LineBox(PathVariant&& path) 137 137 : m_pathVariant(WTFMove(path)) 138 138 { 139 139 } 140 140 141 inline float Line ::contentLogicalTop() const141 inline float LineBox::contentLogicalTop() const 142 142 { 143 143 return WTF::switchOn(m_pathVariant, [](const auto& path) { … … 146 146 } 147 147 148 inline float Line ::contentLogicalBottom() const148 inline float LineBox::contentLogicalBottom() const 149 149 { 150 150 return WTF::switchOn(m_pathVariant, [](const auto& path) { … … 153 153 } 154 154 155 inline float Line ::contentLogicalTopAdjustedForPrecedingLine() const156 { 157 return WTF::switchOn(m_pathVariant, [](const auto& path) { 158 return path.contentLogicalTopAdjustedForPrecedingLine ();159 }); 160 } 161 162 inline float Line ::contentLogicalBottomAdjustedForFollowingLine() const163 { 164 return WTF::switchOn(m_pathVariant, [](const auto& path) { 165 return path.contentLogicalBottomAdjustedForFollowingLine ();166 }); 167 } 168 169 inline float Line ::lineBoxTop() const170 { 171 return WTF::switchOn(m_pathVariant, [](const auto& path) { 172 return path. lineBoxTop();173 }); 174 } 175 176 inline float Line ::lineBoxBottom() const177 { 178 return WTF::switchOn(m_pathVariant, [](const auto& path) { 179 return path. lineBoxBottom();180 }); 181 } 182 183 inline float Line ::contentLogicalLeft() const155 inline float LineBox::contentLogicalTopAdjustedForPrecedingLineBox() const 156 { 157 return WTF::switchOn(m_pathVariant, [](const auto& path) { 158 return path.contentLogicalTopAdjustedForPrecedingLineBox(); 159 }); 160 } 161 162 inline float LineBox::contentLogicalBottomAdjustedForFollowingLineBox() const 163 { 164 return WTF::switchOn(m_pathVariant, [](const auto& path) { 165 return path.contentLogicalBottomAdjustedForFollowingLineBox(); 166 }); 167 } 168 169 inline float LineBox::top() const 170 { 171 return WTF::switchOn(m_pathVariant, [](const auto& path) { 172 return path.top(); 173 }); 174 } 175 176 inline float LineBox::bottom() const 177 { 178 return WTF::switchOn(m_pathVariant, [](const auto& path) { 179 return path.bottom(); 180 }); 181 } 182 183 inline float LineBox::contentLogicalLeft() const 184 184 { 185 185 return WTF::switchOn(m_pathVariant, [](const auto& path) { … … 188 188 } 189 189 190 inline float Line ::contentLogicalRight() const190 inline float LineBox::contentLogicalRight() const 191 191 { 192 192 return WTF::switchOn(m_pathVariant, [](const auto& path) { … … 195 195 } 196 196 197 inline float Line ::contentLogicalWidth() const197 inline float LineBox::contentLogicalWidth() const 198 198 { 199 199 return contentLogicalRight() - contentLogicalLeft(); 200 200 } 201 201 202 inline bool Line ::isHorizontal() const202 inline bool LineBox::isHorizontal() const 203 203 { 204 204 return WTF::switchOn(m_pathVariant, [](const auto& path) { … … 207 207 } 208 208 209 inline FontBaseline Line ::baselineType() const209 inline FontBaseline LineBox::baselineType() const 210 210 { 211 211 return WTF::switchOn(m_pathVariant, [](const auto& path) { … … 214 214 } 215 215 216 inline const RenderBlockFlow& Line ::containingBlock() const216 inline const RenderBlockFlow& LineBox::containingBlock() const 217 217 { 218 218 return WTF::switchOn(m_pathVariant, [](const auto& path) -> const RenderBlockFlow& { … … 221 221 } 222 222 223 inline RenderFragmentContainer* Line ::containingFragment() const223 inline RenderFragmentContainer* LineBox::containingFragment() const 224 224 { 225 225 return WTF::switchOn(m_pathVariant, [](const auto& path) { … … 228 228 } 229 229 230 inline bool Line ::isFirstAfterPageBreak() const230 inline bool LineBox::isFirstAfterPageBreak() const 231 231 { 232 232 return WTF::switchOn(m_pathVariant, [](const auto& path) { … … 235 235 } 236 236 237 inline bool Line ::isFirst() const237 inline bool LineBox::isFirst() const 238 238 { 239 239 return !previous(); -
trunk/Source/WebCore/layout/integration/InlineIteratorLineBoxLegacyPath.h
r291547 r291548 33 33 namespace InlineIterator { 34 34 35 class Line IteratorLegacyPath {35 class LineBoxIteratorLegacyPath { 36 36 public: 37 Line IteratorLegacyPath(const LegacyRootInlineBox* rootInlineBox)37 LineBoxIteratorLegacyPath(const LegacyRootInlineBox* rootInlineBox) 38 38 : m_rootInlineBox(rootInlineBox) 39 39 { 40 40 } 41 Line IteratorLegacyPath(LineIteratorLegacyPath&&) = default;42 Line IteratorLegacyPath(const LineIteratorLegacyPath&) = default;43 Line IteratorLegacyPath& operator=(const LineIteratorLegacyPath&) = default;44 Line IteratorLegacyPath& operator=(LineIteratorLegacyPath&&) = default;41 LineBoxIteratorLegacyPath(LineBoxIteratorLegacyPath&&) = default; 42 LineBoxIteratorLegacyPath(const LineBoxIteratorLegacyPath&) = default; 43 LineBoxIteratorLegacyPath& operator=(const LineBoxIteratorLegacyPath&) = default; 44 LineBoxIteratorLegacyPath& operator=(LineBoxIteratorLegacyPath&&) = default; 45 45 46 46 float contentLogicalTop() const { return m_rootInlineBox->lineTop().toFloat(); } 47 47 float contentLogicalBottom() const { return m_rootInlineBox->lineBottom().toFloat(); } 48 float contentLogicalTopAdjustedForPrecedingLine () const { return m_rootInlineBox->selectionTop().toFloat(); }49 float contentLogicalBottomAdjustedForFollowingLine () const { return m_rootInlineBox->selectionBottom().toFloat(); }50 float lineBoxTop() const { return m_rootInlineBox->lineBoxTop().toFloat(); }51 float lineBoxBottom() const { return m_rootInlineBox->lineBoxBottom().toFloat(); }48 float contentLogicalTopAdjustedForPrecedingLineBox() const { return m_rootInlineBox->selectionTop().toFloat(); } 49 float contentLogicalBottomAdjustedForFollowingLineBox() const { return m_rootInlineBox->selectionBottom().toFloat(); } 50 float top() const { return m_rootInlineBox->lineBoxTop().toFloat(); } 51 float bottom() const { return m_rootInlineBox->lineBoxBottom().toFloat(); } 52 52 53 53 float contentLogicalLeft() const { return m_rootInlineBox->logicalLeft(); } … … 71 71 } 72 72 73 bool operator==(const Line IteratorLegacyPath& other) const { return m_rootInlineBox == other.m_rootInlineBox; }73 bool operator==(const LineBoxIteratorLegacyPath& other) const { return m_rootInlineBox == other.m_rootInlineBox; } 74 74 75 75 bool atEnd() const { return !m_rootInlineBox; } -
trunk/Source/WebCore/layout/integration/InlineIteratorLineBoxModernPath.h
r291547 r291548 37 37 class BoxModernPath; 38 38 39 class Line IteratorModernPath {39 class LineBoxIteratorModernPath { 40 40 public: 41 Line IteratorModernPath(const LayoutIntegration::InlineContent& inlineContent, size_t lineIndex)41 LineBoxIteratorModernPath(const LayoutIntegration::InlineContent& inlineContent, size_t lineIndex) 42 42 : m_inlineContent(&inlineContent) 43 43 , m_lineIndex(lineIndex) … … 45 45 ASSERT(lineIndex <= lines().size()); 46 46 } 47 Line IteratorModernPath(LineIteratorModernPath&&) = default;48 Line IteratorModernPath(const LineIteratorModernPath&) = default;49 Line IteratorModernPath& operator=(const LineIteratorModernPath&) = default;50 Line IteratorModernPath& operator=(LineIteratorModernPath&&) = default;47 LineBoxIteratorModernPath(LineBoxIteratorModernPath&&) = default; 48 LineBoxIteratorModernPath(const LineBoxIteratorModernPath&) = default; 49 LineBoxIteratorModernPath& operator=(const LineBoxIteratorModernPath&) = default; 50 LineBoxIteratorModernPath& operator=(LineBoxIteratorModernPath&&) = default; 51 51 52 52 float contentLogicalTop() const { return line().enclosingContentTop(); } 53 53 float contentLogicalBottom() const { return line().enclosingContentBottom(); } 54 float lineBoxTop() const { return line().lineBoxTop(); }55 float lineBoxBottom() const { return line().lineBoxBottom(); }54 float top() const { return line().lineBoxTop(); } 55 float bottom() const { return line().lineBoxBottom(); } 56 56 57 float contentLogicalTopAdjustedForPrecedingLine () const { return !m_lineIndex ? contentLogicalTop() : LineIteratorModernPath(*m_inlineContent, m_lineIndex - 1).contentLogicalBottomAdjustedForFollowingLine(); }57 float contentLogicalTopAdjustedForPrecedingLineBox() const { return !m_lineIndex ? contentLogicalTop() : LineBoxIteratorModernPath(*m_inlineContent, m_lineIndex - 1).contentLogicalBottomAdjustedForFollowingLineBox(); } 58 58 // FIXME: Implement. 59 float contentLogicalBottomAdjustedForFollowingLine () const { return contentLogicalBottom(); }59 float contentLogicalBottomAdjustedForFollowingLineBox() const { return contentLogicalBottom(); } 60 60 61 61 float contentLogicalLeft() const { return line().lineBoxLeft() + line().contentLogicalOffset(); } … … 88 88 } 89 89 90 bool operator==(const Line IteratorModernPath& other) const { return m_inlineContent == other.m_inlineContent && m_lineIndex == other.m_lineIndex; }90 bool operator==(const LineBoxIteratorModernPath& other) const { return m_inlineContent == other.m_inlineContent && m_lineIndex == other.m_lineIndex; } 91 91 92 92 bool atEnd() const { return m_lineIndex == lines().size(); } -
trunk/Source/WebCore/layout/integration/InlineIteratorLogicalOrderTraversal.cpp
r287444 r291548 27 27 #include "InlineIteratorLogicalOrderTraversal.h" 28 28 29 #include "InlineIteratorLine .h"29 #include "InlineIteratorLineBox.h" 30 30 31 31 namespace WebCore { … … 90 90 } 91 91 92 static LineLogicalOrderCache makeLineLogicalOrderCache(const Line Iterator& line)92 static LineLogicalOrderCache makeLineLogicalOrderCache(const LineBoxIterator& lineBox) 93 93 { 94 94 auto cache = makeUnique<LineLogicalOrderCacheData>(); 95 95 96 cache->line = line;97 cache->boxes = leafBoxesInLogicalOrder(line , [](auto first, auto last) {96 cache->lineBox = lineBox; 97 cache->boxes = leafBoxesInLogicalOrder(lineBox, [](auto first, auto last) { 98 98 std::reverse(first, last); 99 99 }); … … 104 104 static void updateLineLogicalOrderCacheIfNeeded(const LeafBoxIterator& box, LineLogicalOrderCache& cache) 105 105 { 106 auto line = box->line();107 if (!cache || cache->line != line)108 cache = makeLineLogicalOrderCache(line );106 auto lineBox = box->lineBox(); 107 if (!cache || cache->lineBox != lineBox) 108 cache = makeLineLogicalOrderCache(lineBox); 109 109 110 110 if (cache->index < cache->boxes.size() && cache->boxes[cache->index] == box) … … 116 116 } 117 117 118 LeafBoxIterator firstLeafOnLineInLogicalOrder(const Line Iterator& line, LineLogicalOrderCache& cache)118 LeafBoxIterator firstLeafOnLineInLogicalOrder(const LineBoxIterator& lineBox, LineLogicalOrderCache& cache) 119 119 { 120 cache = makeLineLogicalOrderCache(line );120 cache = makeLineLogicalOrderCache(lineBox); 121 121 122 122 if (cache->boxes.isEmpty()) … … 127 127 } 128 128 129 LeafBoxIterator lastLeafOnLineInLogicalOrder(const Line Iterator& line, LineLogicalOrderCache& cache)129 LeafBoxIterator lastLeafOnLineInLogicalOrder(const LineBoxIterator& lineBox, LineLogicalOrderCache& cache) 130 130 { 131 cache = makeLineLogicalOrderCache(line );131 cache = makeLineLogicalOrderCache(lineBox); 132 132 133 133 if (cache->boxes.isEmpty()) … … 162 162 } 163 163 164 LeafBoxIterator firstLeafOnLineInLogicalOrderWithNode(const Line Iterator& line, LineLogicalOrderCache& cache)164 LeafBoxIterator firstLeafOnLineInLogicalOrderWithNode(const LineBoxIterator& lineBox, LineLogicalOrderCache& cache) 165 165 { 166 auto box = firstLeafOnLineInLogicalOrder(line , cache);166 auto box = firstLeafOnLineInLogicalOrder(lineBox, cache); 167 167 while (box && !box->renderer().node()) 168 168 box = nextLeafOnLineInLogicalOrder(box, cache); … … 170 170 } 171 171 172 LeafBoxIterator lastLeafOnLineInLogicalOrderWithNode(const Line Iterator& line, LineLogicalOrderCache& cache)172 LeafBoxIterator lastLeafOnLineInLogicalOrderWithNode(const LineBoxIterator& lineBox, LineLogicalOrderCache& cache) 173 173 { 174 auto box = lastLeafOnLineInLogicalOrder(line , cache);174 auto box = lastLeafOnLineInLogicalOrder(lineBox, cache); 175 175 while (box && !box->renderer().node()) 176 176 box = previousLeafOnLineInLogicalOrder(box, cache); -
trunk/Source/WebCore/layout/integration/InlineIteratorLogicalOrderTraversal.h
r287520 r291548 26 26 #pragma once 27 27 28 #include "InlineIteratorLine .h"28 #include "InlineIteratorLineBox.h" 29 29 #include "InlineIteratorTextBox.h" 30 30 #include "RenderBlockFlow.h" … … 47 47 WTF_MAKE_STRUCT_FAST_ALLOCATED; 48 48 49 Line Iterator line;49 LineBoxIterator lineBox; 50 50 Vector<LeafBoxIterator> boxes; 51 51 size_t index { 0 }; … … 53 53 using LineLogicalOrderCache = std::unique_ptr<LineLogicalOrderCacheData>; 54 54 55 LeafBoxIterator firstLeafOnLineInLogicalOrder(const Line Iterator&, LineLogicalOrderCache&);56 LeafBoxIterator lastLeafOnLineInLogicalOrder(const Line Iterator&, LineLogicalOrderCache&);55 LeafBoxIterator firstLeafOnLineInLogicalOrder(const LineBoxIterator&, LineLogicalOrderCache&); 56 LeafBoxIterator lastLeafOnLineInLogicalOrder(const LineBoxIterator&, LineLogicalOrderCache&); 57 57 LeafBoxIterator nextLeafOnLineInLogicalOrder(const LeafBoxIterator&, LineLogicalOrderCache&); 58 58 LeafBoxIterator previousLeafOnLineInLogicalOrder(const LeafBoxIterator&, LineLogicalOrderCache&); 59 59 60 LeafBoxIterator firstLeafOnLineInLogicalOrderWithNode(const Line Iterator&, LineLogicalOrderCache&);61 LeafBoxIterator lastLeafOnLineInLogicalOrderWithNode(const Line Iterator&, LineLogicalOrderCache&);60 LeafBoxIterator firstLeafOnLineInLogicalOrderWithNode(const LineBoxIterator&, LineLogicalOrderCache&); 61 LeafBoxIterator lastLeafOnLineInLogicalOrderWithNode(const LineBoxIterator&, LineLogicalOrderCache&); 62 62 63 63 template<typename ReverseFunction> 64 Vector<LeafBoxIterator> leafBoxesInLogicalOrder(const Line Iterator& line, ReverseFunction&& reverseFunction)64 Vector<LeafBoxIterator> leafBoxesInLogicalOrder(const LineBoxIterator& lineBox, ReverseFunction&& reverseFunction) 65 65 { 66 66 Vector<LeafBoxIterator> boxes; … … 69 69 unsigned char maxLevel = 0; 70 70 71 for (auto box = line ->firstLeafBox(); box; box = box.traverseNextOnLine()) {71 for (auto box = lineBox->firstLeafBox(); box; box = box.traverseNextOnLine()) { 72 72 minLevel = std::min(minLevel, box->bidiLevel()); 73 73 maxLevel = std::max(maxLevel, box->bidiLevel()); … … 75 75 } 76 76 77 if (line ->containingBlock().style().rtlOrdering() == Order::Visual)77 if (lineBox->containingBlock().style().rtlOrdering() == Order::Visual) 78 78 return boxes; 79 79 -
trunk/Source/WebCore/layout/integration/InlineIteratorTextBox.cpp
r291463 r291548 27 27 #include "InlineIteratorTextBox.h" 28 28 29 #include "InlineIteratorLine .h"29 #include "InlineIteratorLineBox.h" 30 30 #include "LayoutIntegrationLineLayout.h" 31 31 #include "LineSelection.h" … … 47 47 return { }; 48 48 49 auto lineSelectionRect = LineSelection::logicalRect(*line ());49 auto lineSelectionRect = LineSelection::logicalRect(*lineBox()); 50 50 auto selectionRect = LayoutRect { logicalLeft(), lineSelectionRect.y(), logicalWidth(), lineSelectionRect.height() }; 51 51 -
trunk/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.cpp
r291169 r291548 621 621 } 622 622 623 InlineIterator::Line Iterator LineLayout::firstLine() const624 { 625 if (!m_inlineContent) 626 return { }; 627 628 return { InlineIterator::Line IteratorModernPath(*m_inlineContent, 0) };629 } 630 631 InlineIterator::Line Iterator LineLayout::lastLine() const632 { 633 if (!m_inlineContent) 634 return { }; 635 636 return { InlineIterator::Line IteratorModernPath(*m_inlineContent, m_inlineContent->lines.isEmpty() ? 0 : m_inlineContent->lines.size() - 1) };623 InlineIterator::LineBoxIterator LineLayout::firstLineBox() const 624 { 625 if (!m_inlineContent) 626 return { }; 627 628 return { InlineIterator::LineBoxIteratorModernPath(*m_inlineContent, 0) }; 629 } 630 631 InlineIterator::LineBoxIterator LineLayout::lastLineBox() const 632 { 633 if (!m_inlineContent) 634 return { }; 635 636 return { InlineIterator::LineBoxIteratorModernPath(*m_inlineContent, m_inlineContent->lines.isEmpty() ? 0 : m_inlineContent->lines.size() - 1) }; 637 637 } 638 638 -
trunk/Source/WebCore/layout/integration/LayoutIntegrationLineLayout.h
r291169 r291548 30 30 #include "FloatRect.h" 31 31 #include "InlineIteratorInlineBox.h" 32 #include "InlineIteratorLine .h"32 #include "InlineIteratorLineBox.h" 33 33 #include "InlineIteratorTextBox.h" 34 34 #include "LayoutIntegrationBoxTree.h" … … 112 112 InlineIterator::InlineBoxIterator firstInlineBoxFor(const RenderInline&) const; 113 113 InlineIterator::InlineBoxIterator firstRootInlineBox() const; 114 InlineIterator::Line Iterator firstLine() const;115 InlineIterator::Line Iterator lastLine() const;114 InlineIterator::LineBoxIterator firstLineBox() const; 115 InlineIterator::LineBoxIterator lastLineBox() const; 116 116 117 117 LayoutRect firstInlineBoxRect(const RenderInline&) const; -
trunk/Source/WebCore/layout/integration/LineSelection.h
r291535 r291548 26 26 #pragma once 27 27 28 #include "InlineIteratorLine .h"28 #include "InlineIteratorLineBox.h" 29 29 #include "RenderBlockFlow.h" 30 30 … … 33 33 class LineSelection { 34 34 public: 35 static float logicalTop(const InlineIterator::Line & line) { return line.contentLogicalTopAdjustedForPrecedingLine(); }36 static float logicalBottom(const InlineIterator::Line & line) { return line.contentLogicalBottomAdjustedForFollowingLine(); }35 static float logicalTop(const InlineIterator::LineBox& lineBox) { return lineBox.contentLogicalTopAdjustedForPrecedingLineBox(); } 36 static float logicalBottom(const InlineIterator::LineBox& lineBox) { return lineBox.contentLogicalBottomAdjustedForFollowingLineBox(); } 37 37 38 static FloatRect logicalRect(const InlineIterator::Line & line)38 static FloatRect logicalRect(const InlineIterator::LineBox& lineBox) 39 39 { 40 return { FloatPoint { line .contentLogicalLeft(), line.contentLogicalTopAdjustedForPrecedingLine() }, FloatPoint { line.contentLogicalRight(), line.contentLogicalBottomAdjustedForFollowingLine() } };40 return { FloatPoint { lineBox.contentLogicalLeft(), lineBox.contentLogicalTopAdjustedForPrecedingLineBox() }, FloatPoint { lineBox.contentLogicalRight(), lineBox.contentLogicalBottomAdjustedForFollowingLineBox() } }; 41 41 } 42 42 43 static FloatRect physicalRect(const InlineIterator::Line & line)43 static FloatRect physicalRect(const InlineIterator::LineBox& lineBox) 44 44 { 45 auto physicalRect = logicalRect(line );46 if (!line .isHorizontal())45 auto physicalRect = logicalRect(lineBox); 46 if (!lineBox.isHorizontal()) 47 47 physicalRect = physicalRect.transposedRect(); 48 line .containingBlock().flipForWritingMode(physicalRect);48 lineBox.containingBlock().flipForWritingMode(physicalRect); 49 49 return physicalRect; 50 50 } 51 51 52 static float logicalTopAdjustedForPrecedingBlock(const InlineIterator::Line & line)52 static float logicalTopAdjustedForPrecedingBlock(const InlineIterator::LineBox& lineBox) 53 53 { 54 54 // FIXME: Move adjustEnclosingTopForPrecedingBlock from RenderBlockFlow to here. 55 return line .containingBlock().adjustEnclosingTopForPrecedingBlock(LayoutUnit { line.contentLogicalTopAdjustedForPrecedingLine() });55 return lineBox.containingBlock().adjustEnclosingTopForPrecedingBlock(LayoutUnit { lineBox.contentLogicalTopAdjustedForPrecedingLineBox() }); 56 56 } 57 57 58 static RenderObject::HighlightState selectionState(const InlineIterator::Line & line)58 static RenderObject::HighlightState selectionState(const InlineIterator::LineBox& lineBox) 59 59 { 60 auto& block = line .containingBlock();60 auto& block = lineBox.containingBlock(); 61 61 if (block.selectionState() == RenderObject::HighlightState::None) 62 62 return RenderObject::HighlightState::None; 63 63 64 64 auto lineState = RenderObject::HighlightState::None; 65 for (auto box = line .firstLeafBox(); box; box.traverseNextOnLine()) {65 for (auto box = lineBox.firstLeafBox(); box; box.traverseNextOnLine()) { 66 66 auto boxState = box->selectionState(); 67 67 if (lineState == RenderObject::HighlightState::None) -
trunk/Source/WebCore/rendering/CaretRectComputation.cpp
r291530 r291548 28 28 29 29 #include "Editing.h" 30 #include "InlineIteratorLine .h"30 #include "InlineIteratorLineBox.h" 31 31 #include "InlineIteratorTextBox.h" 32 32 #include "LineSelection.h" … … 111 111 } 112 112 113 static LayoutRect computeCaretRectForLinePosition(const InlineIterator::Line Iterator& line, float logicalLeftPosition, CaretRectMode caretRectMode)114 { 115 auto& containingBlock = line ->containingBlock();116 auto lineSelectionRect = LineSelection::logicalRect(*line );113 static LayoutRect computeCaretRectForLinePosition(const InlineIterator::LineBoxIterator& lineBox, float logicalLeftPosition, CaretRectMode caretRectMode) 114 { 115 auto& containingBlock = lineBox->containingBlock(); 116 auto lineSelectionRect = LineSelection::logicalRect(*lineBox); 117 117 118 118 int height = lineSelectionRect.height(); … … 174 174 175 175 auto& textBox = downcast<InlineIterator::TextBoxIterator>(boxAndOffset.box); 176 auto line = textBox->line();176 auto lineBox = textBox->lineBox(); 177 177 178 178 float position = textBox->positionForOffset(boxAndOffset.offset); 179 return computeCaretRectForLinePosition(line , position, caretRectMode);179 return computeCaretRectForLinePosition(lineBox, position, caretRectMode); 180 180 } 181 181 … … 187 187 return { }; 188 188 189 auto line = boxAndOffset.box->line();190 return computeCaretRectForLinePosition(line , line->contentLogicalLeft(), caretRectMode);189 auto lineBox = boxAndOffset.box->lineBox(); 190 return computeCaretRectForLinePosition(lineBox, lineBox->contentLogicalLeft(), caretRectMode); 191 191 } 192 192 … … 229 229 230 230 if (boxAndOffset.box) { 231 auto line = boxAndOffset.box->line();232 auto top = line ->contentLogicalTop();231 auto lineBox = boxAndOffset.box->lineBox(); 232 auto top = lineBox->contentLogicalTop(); 233 233 rect.setY(top); 234 rect.setHeight(line ->contentLogicalBottom() - top);234 rect.setHeight(lineBox->contentLogicalBottom() - top); 235 235 } 236 236 -
trunk/Source/WebCore/rendering/InlineBoxPainter.cpp
r290672 r291548 27 27 28 28 #include "GraphicsContext.h" 29 #include "InlineIteratorLine .h"29 #include "InlineIteratorLineBox.h" 30 30 #include "LegacyInlineFlowBox.h" 31 31 #include "PaintInfo.h" … … 54 54 , m_paintOffset(paintOffset) 55 55 , m_renderer(m_inlineBox.renderer()) 56 , m_isFirstLine (m_inlineBox.line()->isFirst())56 , m_isFirstLineBox(m_inlineBox.lineBox()->isFirst()) 57 57 , m_isRootInlineBox(m_inlineBox.isRootInlineBox()) 58 58 , m_isHorizontal(m_inlineBox.isHorizontal()) … … 142 142 143 143 // Move x/y to our coordinates. 144 auto localRect = LayoutRect { m_inlineBox.visualRect(m_inlineBox.line ()->containingBlock().logicalHeight()) };144 auto localRect = LayoutRect { m_inlineBox.visualRect(m_inlineBox.lineBox()->containingBlock().logicalHeight()) }; 145 145 LayoutPoint adjustedPaintOffset = m_paintOffset + localRect.location(); 146 146 … … 214 214 // You can use p::first-line to specify a background. If so, the root inline boxes for 215 215 // a line may actually have to paint a background. 216 if (m_isRootInlineBox && (!m_isFirstLine || &style == &renderer().style()))216 if (m_isRootInlineBox && (!m_isFirstLineBox || &style == &renderer().style())) 217 217 return; 218 218 219 219 // Move x/y to our coordinates. 220 auto localRect = LayoutRect { m_inlineBox.visualRect(m_inlineBox.line ()->containingBlock().logicalHeight()) };220 auto localRect = LayoutRect { m_inlineBox.visualRect(m_inlineBox.lineBox()->containingBlock().logicalHeight()) }; 221 221 LayoutPoint adjustedPaintoffset = m_paintOffset + localRect.location(); 222 222 GraphicsContext& context = m_paintInfo.context(); … … 358 358 const RenderStyle& InlineBoxPainter::style() const 359 359 { 360 return m_isFirstLine ? renderer().firstLineStyle() : renderer().style();361 } 362 363 } 360 return m_isFirstLineBox ? renderer().firstLineStyle() : renderer().style(); 361 } 362 363 } -
trunk/Source/WebCore/rendering/InlineBoxPainter.h
r283981 r291548 68 68 const LayoutPoint m_paintOffset; 69 69 const RenderBoxModelObject& m_renderer; 70 const bool m_isFirstLine ;70 const bool m_isFirstLineBox; 71 71 const bool m_isRootInlineBox; 72 72 const bool m_isHorizontal; -
trunk/Source/WebCore/rendering/RenderBlockFlow.cpp
r291545 r291548 37 37 #include "InlineIteratorBox.h" 38 38 #include "InlineIteratorInlineBox.h" 39 #include "InlineIteratorLine .h"39 #include "InlineIteratorLineBox.h" 40 40 #include "InlineIteratorLogicalOrderTraversal.h" 41 41 #include "InlineIteratorTextBox.h" … … 3062 3062 return top; 3063 3063 3064 if (auto lastLine = InlineIterator::lastLineFor(*blockBefore)) {3065 auto lastLineSelectionState = LineSelection::selectionState(*lastLine );3064 if (auto lastLineBox = InlineIterator::lastLineBoxFor(*blockBefore)) { 3065 auto lastLineSelectionState = LineSelection::selectionState(*lastLineBox); 3066 3066 if (lastLineSelectionState != RenderObject::HighlightState::Inside && lastLineSelectionState != RenderObject::HighlightState::Start) 3067 3067 return top; 3068 3068 3069 auto lastLineSelectionBottom = LineSelection::logicalBottom(*lastLine ) + offsetToBlockBefore.height();3069 auto lastLineSelectionBottom = LineSelection::logicalBottom(*lastLineBox) + offsetToBlockBefore.height(); 3070 3070 top = std::max(top, LayoutUnit { lastLineSelectionBottom }); 3071 3071 } … … 3088 3088 } 3089 3089 3090 auto hasSelectedChildren = [&](const InlineIterator::Line Iterator& line) {3091 return LineSelection::selectionState(*line ) != RenderObject::HighlightState::None;3090 auto hasSelectedChildren = [&](const InlineIterator::LineBoxIterator& lineBox) { 3091 return LineSelection::selectionState(*lineBox) != RenderObject::HighlightState::None; 3092 3092 }; 3093 3093 3094 auto lineSelectionGap = [&](const InlineIterator::Line Iterator& line, LayoutUnit selTop, LayoutUnit selHeight) -> GapRects {3095 auto lineState = LineSelection::selectionState(*line );3094 auto lineSelectionGap = [&](const InlineIterator::LineBoxIterator& lineBox, LayoutUnit selTop, LayoutUnit selHeight) -> GapRects { 3095 auto lineState = LineSelection::selectionState(*lineBox); 3096 3096 3097 3097 bool leftGap, rightGap; … … 3101 3101 3102 3102 auto firstSelectedBox = [&]() -> InlineIterator::LeafBoxIterator { 3103 for (auto box = line ->firstLeafBox(); box; box.traverseNextOnLine()) {3103 for (auto box = lineBox->firstLeafBox(); box; box.traverseNextOnLine()) { 3104 3104 if (box->selectionState() != RenderObject::HighlightState::None) 3105 3105 return box; … … 3109 3109 3110 3110 auto lastSelectedBox = [&]() -> InlineIterator::LeafBoxIterator { 3111 for (auto box = line ->lastLeafBox(); box; box.traversePreviousOnLine()) {3111 for (auto box = lineBox->lastLeafBox(); box; box.traversePreviousOnLine()) { 3112 3112 if (box->selectionState() != RenderObject::HighlightState::None) 3113 3113 return box; … … 3158 3158 }; 3159 3159 3160 InlineIterator::Line Iterator lastSelectedLine;3161 InlineIterator::LineIterator line = InlineIterator::firstLineFor(*this);3162 for (; line && !hasSelectedChildren(line); line.traverseNext()) { }3160 InlineIterator::LineBoxIterator lastSelectedLineBox; 3161 auto lineBox = InlineIterator::firstLineBoxFor(*this); 3162 for (; lineBox && !hasSelectedChildren(lineBox); lineBox.traverseNext()) { } 3163 3163 3164 3164 GapRects result; 3165 3165 3166 3166 // Now paint the gaps for the lines. 3167 for (; line && hasSelectedChildren(line); line.traverseNext()) { 3168 auto selectionTop = LayoutUnit { LineSelection::logicalTopAdjustedForPrecedingBlock(*line) }; 3169 auto selectionHeight = LayoutUnit { std::max(0.f, LineSelection::logicalBottom(*line) - selectionTop) }; 3170 3171 if (!containsStart && !lastSelectedLine && 3172 selectionState() != HighlightState::Start && selectionState() != HighlightState::Both && !isRubyBase()) 3167 for (; lineBox && hasSelectedChildren(lineBox); lineBox.traverseNext()) { 3168 auto selectionTop = LayoutUnit { LineSelection::logicalTopAdjustedForPrecedingBlock(*lineBox) }; 3169 auto selectionHeight = LayoutUnit { std::max(0.f, LineSelection::logicalBottom(*lineBox) - selectionTop) }; 3170 3171 if (!containsStart && !lastSelectedLineBox 3172 && selectionState() != HighlightState::Start 3173 && selectionState() != HighlightState::Both && !isRubyBase()) 3173 3174 result.uniteCenter(blockSelectionGap(rootBlock, rootBlockPhysicalPosition, offsetFromRootBlock, lastLogicalTop, lastLogicalLeft, lastLogicalRight, selectionTop, cache, paintInfo)); 3174 3175 3175 LayoutRect logicalRect { LayoutUnit(line ->contentLogicalLeft()), selectionTop, LayoutUnit(line->contentLogicalWidth()), selectionTop + selectionHeight };3176 LayoutRect logicalRect { LayoutUnit(lineBox->contentLogicalLeft()), selectionTop, LayoutUnit(lineBox->contentLogicalWidth()), selectionTop + selectionHeight }; 3176 3177 logicalRect.move(isHorizontalWritingMode() ? offsetFromRootBlock : offsetFromRootBlock.transposedSize()); 3177 3178 LayoutRect physicalRect = rootBlock.logicalRectToPhysicalRect(rootBlockPhysicalPosition, logicalRect); 3178 3179 if (!paintInfo || (isHorizontalWritingMode() && physicalRect.y() < paintInfo->rect.maxY() && physicalRect.maxY() > paintInfo->rect.y()) 3179 3180 || (!isHorizontalWritingMode() && physicalRect.x() < paintInfo->rect.maxX() && physicalRect.maxX() > paintInfo->rect.x())) 3180 result.unite(lineSelectionGap(line , selectionTop, selectionHeight));3181 3182 lastSelectedLine = line;3183 } 3184 3185 if (containsStart && !lastSelectedLine )3181 result.unite(lineSelectionGap(lineBox, selectionTop, selectionHeight)); 3182 3183 lastSelectedLineBox = lineBox; 3184 } 3185 3186 if (containsStart && !lastSelectedLineBox) { 3186 3187 // VisibleSelection must start just after our last line. 3187 lastSelectedLine = InlineIterator::lastLineFor(*this); 3188 3189 if (lastSelectedLine && selectionState() != HighlightState::End && selectionState() != HighlightState::Both) { 3188 lastSelectedLineBox = InlineIterator::lastLineBoxFor(*this); 3189 } 3190 3191 if (lastSelectedLineBox && selectionState() != HighlightState::End && selectionState() != HighlightState::Both) { 3190 3192 // Update our lastY to be the bottom of the last selected line. 3191 auto lastLineSelectionBottom = LayoutUnit { LineSelection::logicalBottom(*lastSelectedLine ) };3193 auto lastLineSelectionBottom = LayoutUnit { LineSelection::logicalBottom(*lastSelectedLineBox) }; 3192 3194 lastLogicalTop = blockDirectionOffset(rootBlock, offsetFromRootBlock) + lastLineSelectionBottom; 3193 3195 lastLogicalLeft = logicalLeftSelectionOffset(rootBlock, lastLineSelectionBottom, cache); … … 3274 3276 bool RenderBlockFlow::containsNonZeroBidiLevel() const 3275 3277 { 3276 for (auto line = InlineIterator::firstLineFor(*this); line; line.traverseNext()) {3277 for (auto box = line ->firstLeafBox(); box; box = box.traverseNextOnLine()) {3278 for (auto lineBox = InlineIterator::firstLineBoxFor(*this); lineBox; lineBox.traverseNext()) { 3279 for (auto box = lineBox->firstLeafBox(); box; box = box.traverseNextOnLine()) { 3278 3280 if (box->bidiLevel()) 3279 3281 return true; … … 3354 3356 3355 3357 if (localPoint.y() > *previousRootInlineBoxBottom && localPoint.y() < box->logicalTop()) { 3356 auto closestBox = closestBoxForHorizontalPosition(*box->line (), localPoint.x());3358 auto closestBox = closestBoxForHorizontalPosition(*box->lineBox(), localPoint.x()); 3357 3359 if (closestBox && is<RenderText>(closestBox->renderer())) 3358 3360 return const_cast<RenderText*>(&downcast<RenderText>(closestBox->renderer())); … … 3368 3370 ASSERT(childrenInline()); 3369 3371 3370 auto firstLine = InlineIterator::firstLineFor(*this);3371 3372 if (!firstLine )3372 auto firstLineBox = InlineIterator::firstLineBoxFor(*this); 3373 3374 if (!firstLineBox) 3373 3375 return createVisiblePosition(0, Affinity::Downstream); 3374 3376 … … 3378 3380 // look for the closest line box in the root box which is at the passed-in y coordinate 3379 3381 InlineIterator::LeafBoxIterator closestBox; 3380 InlineIterator::Line Iterator firstLineWithChildren;3381 InlineIterator::Line Iterator lastLineWithChildren;3382 for (auto line = firstLine; line; line.traverseNext()) {3383 if (fragment && line ->containingFragment() != fragment)3382 InlineIterator::LineBoxIterator firstLineBoxWithChildren; 3383 InlineIterator::LineBoxIterator lastLineBoxWithChildren; 3384 for (auto lineBox = firstLineBox; lineBox; lineBox.traverseNext()) { 3385 if (fragment && lineBox->containingFragment() != fragment) 3384 3386 continue; 3385 3387 3386 if (!line ->firstLeafBox())3388 if (!lineBox->firstLeafBox()) 3387 3389 continue; 3388 if (!firstLine WithChildren)3389 firstLine WithChildren = line;3390 3391 if (!linesAreFlipped && line ->isFirstAfterPageBreak()3392 && (pointInLogicalContents.y() < line ->lineBoxTop() || (blocksAreFlipped && pointInLogicalContents.y() == line->lineBoxTop())))3390 if (!firstLineBoxWithChildren) 3391 firstLineBoxWithChildren = lineBox; 3392 3393 if (!linesAreFlipped && lineBox->isFirstAfterPageBreak() 3394 && (pointInLogicalContents.y() < lineBox->top() || (blocksAreFlipped && pointInLogicalContents.y() == lineBox->top()))) 3393 3395 break; 3394 3396 3395 lastLine WithChildren = line;3397 lastLineBoxWithChildren = lineBox; 3396 3398 3397 3399 // check if this root line box is located at this y coordinate 3398 auto selectionBottom = LineSelection::logicalBottom(*line );3400 auto selectionBottom = LineSelection::logicalBottom(*lineBox); 3399 3401 if (pointInLogicalContents.y() < selectionBottom || (blocksAreFlipped && pointInLogicalContents.y() == selectionBottom)) { 3400 3402 if (linesAreFlipped) { 3401 auto nextLine WithChildren = line->next();3402 while (nextLine WithChildren && !nextLineWithChildren->firstLeafBox())3403 nextLine WithChildren.traverseNext();3404 3405 if (nextLine WithChildren && nextLineWithChildren->isFirstAfterPageBreak()3406 && (pointInLogicalContents.y() > nextLine WithChildren->lineBoxTop() || (!blocksAreFlipped && pointInLogicalContents.y() == nextLineWithChildren->lineBoxTop())))3403 auto nextLineBoxWithChildren = lineBox->next(); 3404 while (nextLineBoxWithChildren && !nextLineBoxWithChildren->firstLeafBox()) 3405 nextLineBoxWithChildren.traverseNext(); 3406 3407 if (nextLineBoxWithChildren && nextLineBoxWithChildren->isFirstAfterPageBreak() 3408 && (pointInLogicalContents.y() > nextLineBoxWithChildren->top() || (!blocksAreFlipped && pointInLogicalContents.y() == nextLineBoxWithChildren->top()))) 3407 3409 continue; 3408 3410 } 3409 closestBox = closestBoxForHorizontalPosition(*line , pointInLogicalContents.x());3411 closestBox = closestBoxForHorizontalPosition(*lineBox, pointInLogicalContents.x()); 3410 3412 if (closestBox) 3411 3413 break; … … 3415 3417 bool moveCaretToBoundary = frame().editor().behavior().shouldMoveCaretToHorizontalBoundaryWhenPastTopOrBottom(); 3416 3418 3417 if (!moveCaretToBoundary && !closestBox && lastLine WithChildren) {3419 if (!moveCaretToBoundary && !closestBox && lastLineBoxWithChildren) { 3418 3420 // y coordinate is below last root line box, pretend we hit it 3419 closestBox = closestBoxForHorizontalPosition(*lastLine WithChildren, pointInLogicalContents.x());3421 closestBox = closestBoxForHorizontalPosition(*lastLineBoxWithChildren, pointInLogicalContents.x()); 3420 3422 } 3421 3423 3422 3424 if (closestBox) { 3423 3425 if (moveCaretToBoundary) { 3424 auto firstLineWithChildrenTop = LayoutUnit { std::min(previousLine ContentBottomOrBorderAndPadding(*firstLineWithChildren), firstLineWithChildren->contentLogicalTop()) };3426 auto firstLineWithChildrenTop = LayoutUnit { std::min(previousLineBoxContentBottomOrBorderAndPadding(*firstLineBoxWithChildren), firstLineBoxWithChildren->contentLogicalTop()) }; 3425 3427 if (pointInLogicalContents.y() < firstLineWithChildrenTop 3426 3428 || (blocksAreFlipped && pointInLogicalContents.y() == firstLineWithChildrenTop)) { 3427 auto box = firstLine WithChildren->firstLeafBox();3429 auto box = firstLineBoxWithChildren->firstLeafBox(); 3428 3430 if (box->isLineBreak()) { 3429 3431 if (auto next = box->nextOnLineIgnoringLineBreak()) … … 3436 3438 3437 3439 // pass the box a top position that is inside it 3438 auto point = LayoutPoint { pointInLogicalContents.x(), contentStartInBlockDirection(*closestBox->line ()) };3440 auto point = LayoutPoint { pointInLogicalContents.x(), contentStartInBlockDirection(*closestBox->lineBox()) }; 3439 3441 if (!isHorizontalWritingMode()) 3440 3442 point = point.transposedPoint(); … … 3444 3446 } 3445 3447 3446 if (lastLine WithChildren) {3448 if (lastLineBoxWithChildren) { 3447 3449 // We hit this case for Mac behavior when the Y coordinate is below the last box. 3448 3450 ASSERT(moveCaretToBoundary); 3449 3451 InlineIterator::LineLogicalOrderCache orderCache; 3450 if (auto logicallyLastBox = InlineIterator::lastLeafOnLineInLogicalOrderWithNode(lastLine WithChildren, orderCache))3452 if (auto logicallyLastBox = InlineIterator::lastLeafOnLineInLogicalOrderWithNode(lastLineBoxWithChildren, orderCache)) 3451 3453 return positionForRun(*this, logicallyLastBox, false); 3452 3454 } … … 3472 3474 ASSERT(childrenInline()); 3473 3475 for (auto box = InlineIterator::firstRootInlineBoxFor(*this); box; box.traverseNextInlineBox()) { 3474 auto line = box->line();3476 auto lineBox = box->lineBox(); 3475 3477 // FIXME: This is mixing physical and logical coordinates. 3476 3478 auto unflippedVisualRect = box->visualRectIgnoringBlockDirection(); 3477 auto top = std::max(line ->contentLogicalTop(), unflippedVisualRect.y());3478 auto bottom = std::min(line ->contentLogicalBottom(), unflippedVisualRect.maxY());3479 auto top = std::max(lineBox->contentLogicalTop(), unflippedVisualRect.y()); 3480 auto bottom = std::min(lineBox->contentLogicalBottom(), unflippedVisualRect.maxY()); 3479 3481 auto rect = LayoutRect { LayoutUnit { additionalOffset.x() + unflippedVisualRect.x() } 3480 3482 , additionalOffset.y() + top -
trunk/Source/WebCore/rendering/RenderBox.cpp
r291464 r291548 48 48 #include "HitTestResult.h" 49 49 #include "InlineIteratorInlineBox.h" 50 #include "InlineIteratorLine .h"50 #include "InlineIteratorLineBox.h" 51 51 #include "InlineRunAndOffset.h" 52 52 #include "LayoutIntegrationLineLayout.h" -
trunk/Source/WebCore/rendering/RenderElement.cpp
r291530 r291548 41 41 #include "HTMLImageElement.h" 42 42 #include "HTMLNames.h" 43 #include "InlineIteratorLine .h"43 #include "InlineIteratorLineBox.h" 44 44 #include "InlineIteratorTextBox.h" 45 45 #include "LengthFunctions.h" … … 1592 1592 auto& textRenderer = downcast<RenderText>(*o); 1593 1593 if (auto run = InlineIterator::firstTextBoxFor(textRenderer)) 1594 point.move(textRenderer.linesBoundingBox().x(), run->line ()->contentLogicalTop());1594 point.move(textRenderer.linesBoundingBox().x(), run->lineBox()->contentLogicalTop()); 1595 1595 } else if (is<RenderBox>(*o)) 1596 1596 point.moveBy(downcast<RenderBox>(*o).location()); -
trunk/Source/WebCore/rendering/RenderImage.cpp
r291535 r291548 48 48 #include "ImageOverlay.h" 49 49 #include "InlineIteratorInlineBox.h" 50 #include "InlineIteratorLine .h"50 #include "InlineIteratorLineBox.h" 51 51 #include "LineSelection.h" 52 52 #include "Page.h" … … 111 111 } 112 112 } else { 113 auto selectionLogicalRect = LineSelection::logicalRect(*run->line ());113 auto selectionLogicalRect = LineSelection::logicalRect(*run->lineBox()); 114 114 int selectionTop = !containingBlock->style().isFlippedBlocksWritingMode() ? selectionLogicalRect.y() - logicalTop() : logicalBottom() - selectionLogicalRect.maxY(); 115 115 int selectionHeight = selectionLogicalRect.height(); -
trunk/Source/WebCore/rendering/RenderInline.cpp
r291535 r291548 30 30 #include "HitTestResult.h" 31 31 #include "InlineIteratorInlineBox.h" 32 #include "InlineIteratorLine .h"32 #include "InlineIteratorLineBox.h" 33 33 #include "LayoutIntegrationLineLayout.h" 34 34 #include "LegacyInlineElementBox.h" … … 974 974 975 975 for (auto box = InlineIterator::firstInlineBoxFor(*this); box; box.traverseNextInlineBox()) { 976 auto line = box->line();977 auto top = LayoutUnit { std::max(line ->contentLogicalTop(), box->logicalTop()) };978 auto bottom = LayoutUnit { std::min(line ->contentLogicalBottom(), box->logicalBottom()) };976 auto lineBox = box->lineBox(); 977 auto top = LayoutUnit { std::max(lineBox->contentLogicalTop(), box->logicalTop()) }; 978 auto bottom = LayoutUnit { std::min(lineBox->contentLogicalBottom(), box->logicalBottom()) }; 979 979 // FIXME: This is mixing physical and logical coordinates. 980 980 rects.append({ LayoutUnit(box->visualRectIgnoringBlockDirection().x()), top, LayoutUnit(box->logicalWidth()), bottom - top }); -
trunk/Source/WebCore/rendering/RenderLineBreak.cpp
r291463 r291548 28 28 #include "HTMLWBRElement.h" 29 29 #include "InlineIteratorBox.h" 30 #include "InlineIteratorLine .h"30 #include "InlineIteratorLineBox.h" 31 31 #include "InlineRunAndOffset.h" 32 32 #include "LegacyInlineElementBox.h" … … 187 187 if (!run) 188 188 return; 189 auto line = run->line();190 191 auto lineSelectionRect = LineSelection::logicalRect(*line );189 auto lineBox = run->lineBox(); 190 191 auto lineSelectionRect = LineSelection::logicalRect(*lineBox); 192 192 LayoutRect rect = IntRect(run->logicalLeft(), lineSelectionRect.y(), 0, lineSelectionRect.height()); 193 if (!line ->isHorizontal())193 if (!lineBox->isHorizontal()) 194 194 rect = rect.transposedRect(); 195 195 196 if (line ->isFirstAfterPageBreak()) {196 if (lineBox->isFirstAfterPageBreak()) { 197 197 if (run->isHorizontal()) 198 rect.shiftYEdgeTo(line ->lineBoxTop());198 rect.shiftYEdgeTo(lineBox->top()); 199 199 else 200 rect.shiftXEdgeTo(line ->lineBoxTop());200 rect.shiftXEdgeTo(lineBox->top()); 201 201 } 202 202 -
trunk/Source/WebCore/rendering/RenderReplaced.cpp
r291545 r291548 36 36 #include "HighlightRegister.h" 37 37 #include "InlineIteratorBox.h" 38 #include "InlineIteratorLine .h"38 #include "InlineIteratorLineBox.h" 39 39 #include "LayoutRepainter.h" 40 40 #include "LineSelection.h" … … 722 722 auto [top, bottom] = [&]() -> std::pair<float, float> { 723 723 if (auto run = InlineIterator::boxFor(*this)) { 724 auto line = run->line();725 auto lineContentTop = LayoutUnit { std::min(previousLine ContentBottomOrBorderAndPadding(*line), line->contentLogicalTop()) };726 return std::make_pair(lineContentTop, LineSelection::logicalBottom(*line ));724 auto lineBox = run->lineBox(); 725 auto lineContentTop = LayoutUnit { std::min(previousLineBoxContentBottomOrBorderAndPadding(*lineBox), lineBox->contentLogicalTop()) }; 726 return std::make_pair(lineContentTop, LineSelection::logicalBottom(*lineBox)); 727 727 } 728 728 return std::make_pair(logicalTop(), logicalBottom()); -
trunk/Source/WebCore/rendering/RenderText.cpp
r291545 r291548 37 37 #include "HTMLParserIdioms.h" 38 38 #include "Hyphenation.h" 39 #include "InlineIteratorLine .h"39 #include "InlineIteratorLineBox.h" 40 40 #include "InlineIteratorLogicalOrderTraversal.h" 41 41 #include "InlineIteratorTextBox.h" … … 343 343 } 344 344 345 if (run->line ()->isFirstAfterPageBreak()) {345 if (run->lineBox()->isFirstAfterPageBreak()) { 346 346 if (run->isHorizontal()) 347 rect.shiftYEdgeTo(run->line ()->lineBoxTop());347 rect.shiftYEdgeTo(run->lineBox()->top()); 348 348 else 349 rect.shiftXEdgeTo(run->line ()->lineBoxTop());349 rect.shiftXEdgeTo(run->lineBox()->top()); 350 350 } 351 351 … … 674 674 run.traverseNextTextBox(); 675 675 676 auto line = run->line();677 auto top = LayoutUnit { std::min(previousLine ContentBottomOrBorderAndPadding(*line), line->contentLogicalTop()) };676 auto lineBox = run->lineBox(); 677 auto top = LayoutUnit { std::min(previousLineBoxContentBottomOrBorderAndPadding(*lineBox), lineBox->contentLogicalTop()) }; 678 678 if (pointBlockDirection > top || (!blocksAreFlipped && pointBlockDirection == top)) { 679 auto bottom = LineSelection::logicalBottom(*line );680 if (auto nextLine = line->next())681 bottom = std::min(bottom, nextLine ->contentLogicalTop());679 auto bottom = LineSelection::logicalBottom(*lineBox); 680 if (auto nextLineBox = lineBox->next()) 681 bottom = std::min(bottom, nextLineBox->contentLogicalTop()); 682 682 683 683 if (pointBlockDirection < bottom || (blocksAreFlipped && pointBlockDirection == bottom)) { -
trunk/Source/WebCore/rendering/TextBoxPainter.cpp
r291535 r291548 30 30 #include "EventRegion.h" 31 31 #include "GraphicsContext.h" 32 #include "InlineIteratorLine .h"32 #include "InlineIteratorLineBox.h" 33 33 #include "LegacyInlineTextBox.h" 34 34 #include "LineSelection.h" … … 67 67 , m_selectableRange(m_textBox->selectableRange()) 68 68 , m_paintRect(computePaintRect(paintOffset)) 69 , m_isFirstLine(m_textBox->line ()->isFirst())69 , m_isFirstLine(m_textBox->lineBox()->isFirst()) 70 70 , m_isPrinting(m_document.printing()) 71 71 , m_haveSelection(computeHaveSelection()) … … 290 290 // Note that if the text is truncated, we let the thing being painted in the truncation 291 291 // draw its own highlight. 292 auto line = textBox().line();293 auto selectionBottom = LineSelection::logicalBottom(*line );294 auto selectionTop = LineSelection::logicalTopAdjustedForPrecedingBlock(*line );292 auto lineBox = textBox().lineBox(); 293 auto selectionBottom = LineSelection::logicalBottom(*lineBox); 294 auto selectionTop = LineSelection::logicalTopAdjustedForPrecedingBlock(*lineBox); 295 295 // Use same y positioning and height as for selection, so that when the selection and this subrange are on 296 296 // the same word there are no pieces sticking out. … … 447 447 if (!textBox->logicalLeft()) 448 448 return 0; 449 return textBox->logicalLeft() - textBox->line ()->contentLogicalLeft();449 return textBox->logicalLeft() - textBox->lineBox()->contentLogicalLeft(); 450 450 } 451 451 … … 571 571 localPaintOffset.move(0, m_style.isHorizontalWritingMode() ? 0 : -textBox().logicalHeight()); 572 572 573 auto boxOrigin = textBox().visualRect(textBox().line ()->containingBlock().logicalHeight()).location();573 auto boxOrigin = textBox().visualRect(textBox().lineBox()->containingBlock().logicalHeight()).location(); 574 574 boxOrigin.moveBy(localPaintOffset); 575 575 return { boxOrigin, FloatSize(textBox().logicalWidth(), textBox().logicalHeight()) }; -
trunk/Source/WebCore/rendering/svg/SVGRootInlineBox.cpp
r285195 r291548 312 312 void SVGRootInlineBox::reorderValueListsToLogicalOrder(Vector<SVGTextLayoutAttributes*>& attributes) 313 313 { 314 auto line = InlineIterator::LineIterator(this);315 316 InlineIterator::leafBoxesInLogicalOrder(line , [&](auto first, auto last) {314 auto lineBox = InlineIterator::LineBoxIterator(this); 315 316 InlineIterator::leafBoxesInLogicalOrder(lineBox, [&](auto first, auto last) { 317 317 reverseInlineBoxRangeAndValueListsIfNeeded(attributes, first, last); 318 318 }); -
trunk/Source/WebCore/style/InlineTextBoxStyle.cpp
r291257 r291548 30 30 #include "HTMLAnchorElement.h" 31 31 #include "HTMLNames.h" 32 #include "InlineIteratorLine .h"32 #include "InlineIteratorLineBox.h" 33 33 #include "InlineIteratorTextBox.h" 34 34 #include "LegacyInlineTextBox.h" … … 50 50 } 51 51 52 static void minLogicalTopForTextDecorationLine(const InlineIterator::Line Iterator& line, float& minLogicalTop, const RenderElement* decorationRenderer, OptionSet<TextDecorationLine> textDecorationLine)53 { 54 for (auto run = line ->firstLeafBox(); run; run.traverseNextOnLine()) {52 static void minLogicalTopForTextDecorationLine(const InlineIterator::LineBoxIterator& lineBox, float& minLogicalTop, const RenderElement* decorationRenderer, OptionSet<TextDecorationLine> textDecorationLine) 53 { 54 for (auto run = lineBox->firstLeafBox(); run; run.traverseNextOnLine()) { 55 55 if (run->renderer().isOutOfFlowPositioned()) 56 56 continue; // Positioned placeholders don't affect calculations. … … 67 67 } 68 68 69 static void maxLogicalBottomForTextDecorationLine(const InlineIterator::Line Iterator& line, float& maxLogicalBottom, const RenderElement* decorationRenderer, OptionSet<TextDecorationLine> textDecorationLine)70 { 71 for (auto run = line ->firstLeafBox(); run; run.traverseNextOnLine()) {69 static void maxLogicalBottomForTextDecorationLine(const InlineIterator::LineBoxIterator& lineBox, float& maxLogicalBottom, const RenderElement* decorationRenderer, OptionSet<TextDecorationLine> textDecorationLine) 70 { 71 for (auto run = lineBox->firstLeafBox(); run; run.traverseNextOnLine()) { 72 72 if (run->renderer().isOutOfFlowPositioned()) 73 73 continue; // Positioned placeholders don't affect calculations. … … 120 120 if (resolvedUnderlinePosition == TextUnderlinePosition::Auto && underlineOffset.isAuto()) { 121 121 if (textRun) 122 resolvedUnderlinePosition = textRun->line ()->baselineType() == IdeographicBaseline ? TextUnderlinePosition::Under : TextUnderlinePosition::Auto;122 resolvedUnderlinePosition = textRun->lineBox()->baselineType() == IdeographicBaseline ? TextUnderlinePosition::Under : TextUnderlinePosition::Auto; 123 123 else 124 124 resolvedUnderlinePosition = TextUnderlinePosition::Auto; … … 135 135 ASSERT(textRun); 136 136 // Position underline relative to the bottom edge of the lowest element's content box. 137 auto line = textRun->line();138 auto* decorationRenderer = enclosingRendererWithTextDecoration(textRun->renderer(), TextDecorationLine::Underline, line ->isFirst());137 auto lineBox = textRun->lineBox(); 138 auto* decorationRenderer = enclosingRendererWithTextDecoration(textRun->renderer(), TextDecorationLine::Underline, lineBox->isFirst()); 139 139 140 140 float offset; 141 141 if (textRun->renderer().style().isFlippedLinesWritingMode()) { 142 142 offset = textRun->logicalTop(); 143 minLogicalTopForTextDecorationLine(line , offset, decorationRenderer, TextDecorationLine::Underline);143 minLogicalTopForTextDecorationLine(lineBox, offset, decorationRenderer, TextDecorationLine::Underline); 144 144 offset = textRun->logicalTop() - offset; 145 145 } else { 146 146 offset = textRun->logicalBottom(); 147 maxLogicalBottomForTextDecorationLine(line , offset, decorationRenderer, TextDecorationLine::Underline);147 maxLogicalBottomForTextDecorationLine(lineBox, offset, decorationRenderer, TextDecorationLine::Underline); 148 148 offset -= textRun->logicalBottom(); 149 149 }
Note:
See TracChangeset
for help on using the changeset viewer.