tawasuyu

tawasuyu/taffy

A high performance rust-powered UI layout library

Rust 583HTML 275Markdown 8TOML 41586 Definiciones

Use flexsize for flexitem sizes

afc7a6a777d50d58d1b3740dd7deeb5a60522676 · por Emil Sjölander · (hace 7 años) · padre 667c72011 · ver el árbol en este commit

Delta semántico · 2

src/algo.rs

1 archivos · +41 −49

diff --git a/src/algo.rs b/src/algo.rs
index 7484b80f8..15b43fb86 100644
--- a/src/algo.rs
+++ b/src/algo.rs
@@ -39,21 +39,9 @@ struct ComputeResult {
 struct FlexItem<'a> {
     node: &'a style::Node,
 
-    width: Number,
-    min_width: Number,
-    max_width: Number,
-
-    height: Number,
-    min_height: Number,
-    max_height: Number,
-
-    main: Number,
-    min_main: Number,
-    max_main: Number,
-
-    cross: Number,
-    min_cross: Number,
-    max_cross: Number,
+    size: FlexSize<Number>,
+    min_size: FlexSize<Number>,
+    max_size: FlexSize<Number>,
 
     main_start: Number,
     main_end: Number,
@@ -224,21 +212,20 @@ fn compute_internal(
         .map(|child| FlexItem {
             node: child,
 
-            width: child.width.resolve(percent_calc_base_child),
-            min_width: child.min_width.resolve(percent_calc_base_child),
-            max_width: child.max_width.resolve(percent_calc_base_child),
-
-            height: child.height.resolve(percent_calc_base_child),
-            min_height: child.min_height.resolve(percent_calc_base_child),
-            max_height: child.max_height.resolve(percent_calc_base_child),
+            size: FlexSize {
+                width: child.width.resolve(percent_calc_base_child),
+                height: child.height.resolve(percent_calc_base_child),
+            },
 
-            main: child.main_size(node.flex_direction).resolve(percent_calc_base_child),
-            min_main: child.min_main_size(node.flex_direction).resolve(percent_calc_base_child),
-            max_main: child.max_main_size(node.flex_direction).resolve(percent_calc_base_child),
+            min_size: FlexSize {
+                width: child.min_width.resolve(percent_calc_base_child),
+                height: child.min_height.resolve(percent_calc_base_child),
+            },
 
-            cross: child.cross_size(node.flex_direction).resolve(percent_calc_base_child),
-            min_cross: child.min_cross_size(node.flex_direction).resolve(percent_calc_base_child),
-            max_cross: child.max_cross_size(node.flex_direction).resolve(percent_calc_base_child),
+            max_size: FlexSize {
+                width: child.max_width.resolve(percent_calc_base_child),
+                height: child.max_height.resolve(percent_calc_base_child),
+            },
 
             main_start: child.main_start(node.flex_direction).resolve(percent_calc_base_child),
             main_end: child.main_end(node.flex_direction).resolve(percent_calc_base_child),
@@ -371,8 +358,8 @@ fn compute_internal(
         child.flex_basis = compute_internal(
             child.node,
             FlexSize {
-                width: child.width.maybe_max(child.min_width).maybe_min(child.max_width),
-                height: child.height.maybe_max(child.min_height).maybe_min(child.max_height),
+                width: child.size.width.maybe_max(child.min_size.width).maybe_min(child.max_size.width),
+                height: child.size.height.maybe_max(child.min_size.height).maybe_min(child.max_size.height),
             },
             FlexSize {
                 width: if is_row { available_main } else { available_cross },
@@ -382,8 +369,8 @@ fn compute_internal(
         )
         .size
         .main(node.flex_direction)
-        .maybe_max(child.min_main)
-        .maybe_min(child.max_main);
+        .maybe_max(child.min_size.main(node.flex_direction))
+        .maybe_min(child.max_size.main(node.flex_direction));
     });
 
     // The hypothetical main size is the item’s flex base size clamped according to its
@@ -409,14 +396,15 @@ fn compute_internal(
             )
             .size
             .width
-            .maybe_min(child.width)
-            .maybe_max(child.min_width)
+            .maybe_max(child.min_size.width)
+            .maybe_min(child.size.width)
             .to_number()
         } else {
-            child.min_main
+            child.min_size.main(node.flex_direction)
         };
 
-        child.hypothetical_inner_main_size = child.flex_basis.maybe_max(min_main).maybe_min(child.max_main);
+        child.hypothetical_inner_main_size =
+            child.flex_basis.maybe_max(min_main).maybe_min(child.max_size.main(node.flex_direction));
 
         child.hypothetical_outer_main_size =
             child.hypothetical_inner_main_size + child.margin_main_start + child.margin_main_end;
@@ -497,8 +485,8 @@ fn compute_internal(
                 child.target_main_size = compute_internal(
                     child.node,
                     FlexSize {
-                        width: child.width.maybe_max(child.min_width).maybe_min(child.max_width),
-                        height: child.height.maybe_max(child.min_height).maybe_min(child.max_height),
+                        width: child.size.width.maybe_max(child.min_size.width).maybe_min(child.max_size.width),
+                        height: child.size.height.maybe_max(child.min_size.height).maybe_min(child.max_size.height),
                     },
                     FlexSize {
                         width: if is_row { available_main } else { available_cross },
@@ -508,8 +496,8 @@ fn compute_internal(
                 )
                 .size
                 .main(node.flex_direction)
-                .maybe_max(child.min_main)
-                .maybe_min(child.max_main);
+                .maybe_max(child.min_size.main(node.flex_direction))
+                .maybe_min(child.max_size.main(node.flex_direction));
             } else {
                 child.target_main_size = child.hypothetical_inner_main_size;
             }
@@ -649,14 +637,14 @@ fn compute_internal(
                     )
                     .size
                     .width
-                    .maybe_min(child.width)
-                    .maybe_max(child.min_width)
+                    .maybe_min(child.size.width)
+                    .maybe_max(child.min_size.width)
                     .to_number()
                 } else {
-                    child.min_main
+                    child.min_size.main(node.flex_direction)
                 };
 
-                let max_main = child.max_main;
+                let max_main = child.max_size.main(node.flex_direction);
                 let clamped = child.target_main_size.maybe_min(max_main).maybe_max(min_main).max(0.0);
                 child.violation = clamped - child.target_main_size;
                 child.target_main_size = clamped;
@@ -707,7 +695,11 @@ fn compute_internal(
 
     flex_lines.iter_mut().for_each(|line| {
         line.items.iter_mut().for_each(|child| {
-            let child_cross = child.cross.maybe_max(child.min_cross).maybe_min(child.max_cross);
+            let child_cross = child
+                .size
+                .cross(node.flex_direction)
+                .maybe_max(child.min_size.cross(node.flex_direction))
+                .maybe_min(child.max_size.cross(node.flex_direction));
 
             child.hypothetical_inner_cross_size = compute_internal(
                 child.node,
@@ -723,8 +715,8 @@ fn compute_internal(
             )
             .size
             .cross(node.flex_direction)
-            .maybe_max(child.min_cross)
-            .maybe_min(child.max_cross);
+            .maybe_max(child.min_size.cross(node.flex_direction))
+            .maybe_min(child.max_size.cross(node.flex_direction));
 
             child.hypothetical_outer_cross_size =
                 child.hypothetical_inner_cross_size + child.margin_cross_start + child.margin_cross_end;
@@ -873,8 +865,8 @@ fn compute_internal(
                 && child.node.cross_size(node.flex_direction) == style::Dimension::Auto
             {
                 (line_cross_size - child.margin_cross_start - child.margin_cross_end)
-                    .maybe_max(child.min_cross)
-                    .maybe_min(child.max_cross)
+                    .maybe_max(child.min_size.cross(node.flex_direction))
+                    .maybe_min(child.max_size.cross(node.flex_direction))
             } else {
                 child.hypothetical_inner_cross_size
             };