Changeset 294240 in webkit
- Timestamp:
- May 16, 2022 10:35:40 AM (2 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r294237 r294240 1 2022-05-16 Alan Bujtas <zalan@apple.com> 2 3 [LFC][FFC] Add support for logical ordering 4 https://bugs.webkit.org/show_bug.cgi?id=240442 5 6 Reviewed by Antti Koivisto. 7 8 Let's reorder the logicalFlexItemList when the 'order' property has a non-initial value. 9 10 * layout/formattingContexts/flex/FlexFormattingContext.cpp: 11 (WebCore::Layout::FlexFormattingContext::layoutInFlowContentForIntegration): 12 1 13 2022-05-16 Alan Bujtas <zalan@apple.com> 2 14 -
trunk/Source/WebCore/layout/formattingContexts/flex/FlexFormattingContext.cpp
r294237 r294240 122 122 struct FlexItemLogicalBox { 123 123 FlexRect rect; 124 const ContainerBox& flexItem; 124 int logicalOrder { 0 }; 125 CheckedPtr<const ContainerBox> flexItem; 125 126 }; 126 127 … … 129 130 auto& formattingState = this->formattingState(); 130 131 Vector<FlexItemLogicalBox> logicalFlexItemList; 131 132 auto flexItemsNeedReordering = false; 132 133 133 134 auto convertVisualToLogical = [&] { 134 135 // FIXME: Convert visual (row/column) direction to logical. 135 136 auto direction = root().style().flexDirection(); 137 auto previousLogicalOrder = std::optional<int> { }; 136 138 137 139 for (auto& flexItem : childrenOfType<ContainerBox>(root())) { … … 152 154 break; 153 155 } 154 logicalFlexItemList.append({ { logicalSize }, flexItem }); 156 auto flexItemOrder = flexItem.style().order(); 157 flexItemsNeedReordering = flexItemsNeedReordering || flexItemOrder != previousLogicalOrder.value_or(0); 158 previousLogicalOrder = flexItemOrder; 159 160 logicalFlexItemList.append({ { logicalSize }, flexItemOrder, &flexItem }); 161 155 162 } 156 163 }; 157 164 convertVisualToLogical(); 165 166 auto reorderFlexItemsIfApplicable = [&] { 167 if (!flexItemsNeedReordering) 168 return; 169 170 std::stable_sort(logicalFlexItemList.begin(), logicalFlexItemList.end(), [&] (auto& a, auto& b) { 171 return a.logicalOrder < b.logicalOrder; 172 }); 173 }; 174 reorderFlexItemsIfApplicable(); 158 175 159 176 auto logicalLeft = LayoutUnit { }; … … 170 187 auto direction = root().style().flexDirection(); 171 188 for (auto& logicalFlexItem : logicalFlexItemList) { 172 auto& flexItemGeometry = formattingState.boxGeometry( logicalFlexItem.flexItem);189 auto& flexItemGeometry = formattingState.boxGeometry(*logicalFlexItem.flexItem); 173 190 auto topLeft = LayoutPoint { }; 174 191
Note: See TracChangeset
for help on using the changeset viewer.