tawasuyu

tawasuyu/taffy

A high performance rust-powered UI layout library

Rust 520HTML 244Markdown 7TOML 41339 Definiciones

Align items with outer child size in mind

8ad34999fac16b95c3623deb7d93f12d3241dad4 · por Emil Sjölander · (hace 7 años) · padre fd45f4e44 · ver el árbol en este commit

Delta semántico · 2

src/algo.rs

1 archivos · +8 −2

diff --git a/src/algo.rs b/src/algo.rs
index 12c087ea6..080e18d48 100644
--- a/src/algo.rs
+++ b/src/algo.rs
@@ -42,6 +42,7 @@ struct FlexItem<'a> {
     hypothetical_inner_cross_size: f32,
     hypothetical_outer_cross_size: f32,
     target_cross_size: f32,
+    outer_target_cross_size: f32,
 
     main_margin_start: f32,
     main_margin_end: f32,
@@ -217,6 +218,7 @@ fn compute_internal(
             hypothetical_inner_cross_size: 0.0,
             hypothetical_outer_cross_size: 0.0,
             target_cross_size: 0.0,
+            outer_target_cross_size: 0.0,
 
             main_margin_start: 0.0,
             main_margin_end: 0.0,
@@ -745,6 +747,10 @@ fn compute_internal(
                 ).size;
                 child.target_cross_size = size.cross(node.flex_direction);
             }
+
+            child.outer_target_cross_size = child.target_cross_size
+                + child.node.cross_margin_start(node.flex_direction).resolve(percent_calc_base_child, 0.0)
+                + child.node.cross_margin_end(node.flex_direction).resolve(percent_calc_base_child, 0.0);
         }
     }
 
@@ -845,8 +851,8 @@ fn compute_internal(
             child.cross_margin_end =
                 child.node.cross_margin_end(node.flex_direction).resolve(percent_calc_base_child, 0.0);
 
-            if child.target_cross_size < line.cross_size {
-                let free_space = line.cross_size - child.target_cross_size;
+            if child.outer_target_cross_size < line.cross_size {
+                let free_space = line.cross_size - child.outer_target_cross_size;
 
                 if child.node.cross_margin_start(node.flex_direction) == style::Dimension::Auto
                     && child.node.cross_margin_end(node.flex_direction) == style::Dimension::Auto