Changeset 286534 in webkit
- Timestamp:
- Dec 4, 2021, 8:51:39 AM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
-
ChangeLog (modified) (1 diff)
-
layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp (modified) (2 diffs)
-
layout/formattingContexts/inline/InlineDisplayContentBuilder.h (modified) (1 diff)
-
layout/formattingContexts/inline/InlineFormattingContext.cpp (modified) (2 diffs)
-
layout/formattingContexts/inline/display/InlineDisplayBox.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r286532 r286534 1 2021-12-04 Alan Bujtas <zalan@apple.com> 2 3 [LFC][IFC] Compute isFirstBox/isLastBox for text content 4 https://bugs.webkit.org/show_bug.cgi?id=233850 5 6 Reviewed by Antti Koivisto. 7 8 This is in preparation for helping the iterator interface to compute renderer (layout box) boundaries for text content. 9 10 * layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp: 11 (WebCore::Layout::InlineDisplayContentBuilder::appendTextDisplayBox): 12 (WebCore::Layout::InlineDisplayContentBuilder::computeIsFirstIsLastBoxForInlineContent): 13 * layout/formattingContexts/inline/InlineDisplayContentBuilder.h: 14 * layout/formattingContexts/inline/InlineFormattingContext.cpp: 15 (WebCore::Layout::InlineFormattingContext::layoutInFlowContent): 16 (WebCore::Layout::InlineFormattingContext::lineLayoutForIntergration): 17 * layout/formattingContexts/inline/display/InlineDisplayBox.h: 18 (WebCore::InlineDisplay::Box::setIsFirstBox): 19 1 20 2021-12-04 Antoine Quint <graouts@webkit.org> 2 21 -
trunk/Source/WebCore/layout/formattingContexts/inline/InlineDisplayContentBuilder.cpp
r286529 r286534 124 124 , inkOverflow() 125 125 , lineRun.expansion() 126 , InlineDisplay::Box::Text { text->start, text->length, content, adjustedContentToRender(), text->needsHyphen } }); 126 , InlineDisplay::Box::Text { text->start, text->length, content, adjustedContentToRender(), text->needsHyphen } 127 , true 128 , { } }); 127 129 } 128 130 … … 650 652 } 651 653 654 void InlineDisplayContentBuilder::computeIsFirstIsLastBoxForInlineContent(DisplayBoxes& boxes) 655 { 656 HashMap<const Box*, size_t> lastDisplayBoxForInlineTextBoxIndexes; 657 ASSERT(boxes[0].isRootInlineBox()); 658 for (size_t index = 1; index < boxes.size(); ++index) { 659 auto& displayBox = boxes[index]; 660 // FIXME: Transition the inline box isFirst/isLast computation here as well. 661 if (!displayBox.isText()) 662 continue; 663 auto& layoutBox = displayBox.layoutBox(); 664 if (!lastDisplayBoxForInlineTextBoxIndexes.contains(&layoutBox)) 665 displayBox.setIsFirstBox(true); 666 lastDisplayBoxForInlineTextBoxIndexes.set(&layoutBox, index); 667 } 668 for (auto lastDisplayBoxForInlineTextBoxIndex : lastDisplayBoxForInlineTextBoxIndexes) 669 boxes[lastDisplayBoxForInlineTextBoxIndex.value].setIsLastBox(true); 670 } 671 652 672 } 653 673 } -
trunk/Source/WebCore/layout/formattingContexts/inline/InlineDisplayContentBuilder.h
r286500 r286534 44 44 DisplayBoxes build(const LineBuilder::LineContent&, const LineBox&, const InlineRect& lineBoxLogicalRect, const size_t lineIndex); 45 45 46 static void computeIsFirstIsLastBoxForInlineContent(DisplayBoxes&); 47 46 48 private: 47 49 void processNonBidiContent(const LineBuilder::LineContent&, const LineBox&, const InlineLayoutPoint& lineBoxLogicalTopLeft, DisplayBoxes&); -
trunk/Source/WebCore/layout/formattingContexts/inline/InlineFormattingContext.cpp
r286178 r286534 146 146 lineLayout(inlineItems, { 0, inlineItems.size() }, constraints); 147 147 computeStaticPositionForOutOfFlowContent(formattingState().outOfFlowBoxes()); 148 InlineDisplayContentBuilder::computeIsFirstIsLastBoxForInlineContent(formattingState().boxes()); 148 149 LOG_WITH_STREAM(FormattingContextLayout, stream << "[End] -> inline formatting context -> formatting root(" << &root() << ")"); 149 150 } … … 156 157 lineLayout(inlineItems, { 0, inlineItems.size() }, constraints); 157 158 computeStaticPositionForOutOfFlowContent(formattingState().outOfFlowBoxes()); 159 InlineDisplayContentBuilder::computeIsFirstIsLastBoxForInlineContent(formattingState().boxes()); 158 160 } 159 161 -
trunk/Source/WebCore/layout/formattingContexts/inline/display/InlineDisplayBox.h
r286518 r286534 131 131 132 132 void setIsLastBox(bool isLastBox) { m_isLastWithinInlineLevelBox = isLastBox; } 133 void setIsFirstBox(bool isFirstBox) { m_isFirstWithinInlineLevelBox = isFirstBox; } 133 134 134 135 private:
Note:
See TracChangeset
for help on using the changeset viewer.