Title: [294240] trunk/Source/WebCore
- Revision
- 294240
- Author
- za...@apple.com
- Date
- 2022-05-16 10:35:40 -0700 (Mon, 16 May 2022)
Log Message
[LFC][FFC] Add support for logical ordering
https://bugs.webkit.org/show_bug.cgi?id=240442
Reviewed by Antti Koivisto.
Let's reorder the logicalFlexItemList when the 'order' property has a non-initial value.
* layout/formattingContexts/flex/FlexFormattingContext.cpp:
(WebCore::Layout::FlexFormattingContext::layoutInFlowContentForIntegration):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (294239 => 294240)
--- trunk/Source/WebCore/ChangeLog 2022-05-16 17:30:34 UTC (rev 294239)
+++ trunk/Source/WebCore/ChangeLog 2022-05-16 17:35:40 UTC (rev 294240)
@@ -1,5 +1,17 @@
2022-05-16 Alan Bujtas <za...@apple.com>
+ [LFC][FFC] Add support for logical ordering
+ https://bugs.webkit.org/show_bug.cgi?id=240442
+
+ Reviewed by Antti Koivisto.
+
+ Let's reorder the logicalFlexItemList when the 'order' property has a non-initial value.
+
+ * layout/formattingContexts/flex/FlexFormattingContext.cpp:
+ (WebCore::Layout::FlexFormattingContext::layoutInFlowContentForIntegration):
+
+2022-05-16 Alan Bujtas <za...@apple.com>
+
[LFC][FFC] Add "flex-direction: column-reverse" basic visual/logical conversion
https://bugs.webkit.org/show_bug.cgi?id=240434
Modified: trunk/Source/WebCore/layout/formattingContexts/flex/FlexFormattingContext.cpp (294239 => 294240)
--- trunk/Source/WebCore/layout/formattingContexts/flex/FlexFormattingContext.cpp 2022-05-16 17:30:34 UTC (rev 294239)
+++ trunk/Source/WebCore/layout/formattingContexts/flex/FlexFormattingContext.cpp 2022-05-16 17:35:40 UTC (rev 294240)
@@ -121,7 +121,8 @@
struct FlexItemLogicalBox {
FlexRect rect;
- const ContainerBox& flexItem;
+ int logicalOrder { 0 };
+ CheckedPtr<const ContainerBox> flexItem;
};
void FlexFormattingContext::layoutInFlowContentForIntegration(const ConstraintsForInFlowContent& constraints)
@@ -128,11 +129,12 @@
{
auto& formattingState = this->formattingState();
Vector<FlexItemLogicalBox> logicalFlexItemList;
+ auto flexItemsNeedReordering = false;
-
auto convertVisualToLogical = [&] {
// FIXME: Convert visual (row/column) direction to logical.
auto direction = root().style().flexDirection();
+ auto previousLogicalOrder = std::optional<int> { };
for (auto& flexItem : childrenOfType<ContainerBox>(root())) {
auto& flexItemGeometry = formattingState.boxGeometry(flexItem);
@@ -151,11 +153,26 @@
ASSERT_NOT_REACHED();
break;
}
- logicalFlexItemList.append({ { logicalSize }, flexItem });
+ auto flexItemOrder = flexItem.style().order();
+ flexItemsNeedReordering = flexItemsNeedReordering || flexItemOrder != previousLogicalOrder.value_or(0);
+ previousLogicalOrder = flexItemOrder;
+
+ logicalFlexItemList.append({ { logicalSize }, flexItemOrder, &flexItem });
+
}
};
convertVisualToLogical();
+ auto reorderFlexItemsIfApplicable = [&] {
+ if (!flexItemsNeedReordering)
+ return;
+
+ std::stable_sort(logicalFlexItemList.begin(), logicalFlexItemList.end(), [&] (auto& a, auto& b) {
+ return a.logicalOrder < b.logicalOrder;
+ });
+ };
+ reorderFlexItemsIfApplicable();
+
auto logicalLeft = LayoutUnit { };
auto logicalTop = LayoutUnit { };
@@ -169,7 +186,7 @@
auto logicalWidth = logicalFlexItemList.last().rect.right() - logicalFlexItemList.first().rect.left();
auto direction = root().style().flexDirection();
for (auto& logicalFlexItem : logicalFlexItemList) {
- auto& flexItemGeometry = formattingState.boxGeometry(logicalFlexItem.flexItem);
+ auto& flexItemGeometry = formattingState.boxGeometry(*logicalFlexItem.flexItem);
auto topLeft = LayoutPoint { };
switch (direction) {
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes