Skip to content

Commit d48666e

Browse files
committed
feat: skip sort by flex order
1 parent 43960e8 commit d48666e

1 file changed

Lines changed: 13 additions & 2 deletions

File tree

float-pigment-layout/src/algo/flex_box.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1412,13 +1412,22 @@ fn generate_anonymous_flex_items<T: LayoutTreeNode>(
14121412
dir: AxisDirection,
14131413
) -> Vec<FlexItem<T>> {
14141414
let mut flex_items: Vec<FlexItem<T>> = Vec::with_capacity(node.tree_visitor().children_len());
1415+
let mut needs_sort = false;
1416+
let mut prev_order = i32::MIN;
14151417
node.tree_visitor()
14161418
.for_each_child(|child_node, child_index| {
14171419
if is_independent_positioning(child_node) {
14181420
return;
14191421
}
14201422
let child_layout_unit = child_node.layout_node().unit();
14211423
let child_style = child_node.style();
1424+
1425+
let order = child_style.order();
1426+
if order < prev_order {
1427+
needs_sort = true;
1428+
}
1429+
prev_order = order;
1430+
14221431
let (margin, border, padding_border) =
14231432
child_layout_unit.margin_border_padding(child_node, **inner_size);
14241433
let size = child_layout_unit.css_border_box_size(
@@ -1431,7 +1440,7 @@ fn generate_anonymous_flex_items<T: LayoutTreeNode>(
14311440

14321441
let flex_item = FlexItem {
14331442
child_index,
1434-
order: child_style.order(),
1443+
order,
14351444
size,
14361445
margin,
14371446
border,
@@ -1492,7 +1501,9 @@ fn generate_anonymous_flex_items<T: LayoutTreeNode>(
14921501
};
14931502
flex_items.push(flex_item);
14941503
});
1495-
flex_items.sort_by(|a, b| a.order.cmp(&b.order));
1504+
if needs_sort {
1505+
flex_items.sort_by(|a, b| a.order.cmp(&b.order));
1506+
}
14961507
flex_items
14971508
}
14981509

0 commit comments

Comments
 (0)