gioser

tawasuyu/taffy

A high performance rust-powered UI layout library

HTML 231Rust 8TOML 3CSS 1317 Definiciones

Fix wrap sizing by inspecting how webkit does it

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

Delta semántico · 1

src/algo.rs

2 archivos · +12 −20

diff --git a/src/algo.rs b/src/algo.rs
index 080e18d48..273ee2bef 100644
--- a/src/algo.rs
+++ b/src/algo.rs
@@ -603,7 +603,12 @@ fn compute_internal(
             longest_line = if length > longest_line { length } else { longest_line };
         }
 
-        (longest_line + padding_main + border_main)
+        let size = longest_line + padding_main + border_main;
+        if available_main.is_finite() && flex_lines.len() > 1 && size < available_main {
+            available_main
+        } else {
+            size
+        }
     };
 
     let inner_container_main_size = container_main_size - padding_main - border_main;
@@ -723,30 +728,17 @@ fn compute_internal(
         for child in &mut line.items {
             let is_stretch = child.node.align_self(node) == style::AlignSelf::Stretch;
 
-            if is_stretch
+            child.target_cross_size = if is_stretch
                 && child.node.cross_margin_start(node.flex_direction) != style::Dimension::Auto
                 && child.node.cross_margin_end(node.flex_direction) != style::Dimension::Auto
                 && child.node.cross_size(node.flex_direction) == style::Dimension::Auto
             {
-                child.target_cross_size = line
-                    .cross_size
+                line.cross_size
                     .max(child.node.min_cross_size(node.flex_direction).resolve(percent_calc_base_child, f32::MIN))
-                    .min(child.node.max_cross_size(node.flex_direction).resolve(percent_calc_base_child, f32::MAX));
+                    .min(child.node.max_cross_size(node.flex_direction).resolve(percent_calc_base_child, f32::MAX))
             } else {
-                child.target_cross_size = child.hypothetical_inner_cross_size;
-            }
-
-            if is_stretch {
-                let size = compute_internal(
-                    child.node,
-                    if node.flex_direction.is_row() { child.target_main_size } else { child.target_cross_size },
-                    if node.flex_direction.is_row() { child.target_cross_size } else { child.target_main_size },
-                    if node.flex_direction.is_row() { container_main_size } else { available_cross },
-                    if node.flex_direction.is_row() { available_cross } else { container_main_size },
-                    percent_calc_base_child,
-                ).size;
-                child.target_cross_size = size.cross(node.flex_direction);
-            }
+                child.hypothetical_inner_cross_size
+            };
 
             child.outer_target_cross_size = child.target_cross_size
                 + child.node.cross_margin_start(node.flex_direction).resolve(percent_calc_base_child, 0.0)
diff --git a/test_fixtures/flex_basis_unconstraint_row.html b/test_fixtures/flex_basis_unconstraint_row.html
index f84a636be..611f4b2fd 100644
--- a/test_fixtures/flex_basis_unconstraint_row.html
+++ b/test_fixtures/flex_basis_unconstraint_row.html
@@ -10,7 +10,7 @@
 <body>
 
 <div id="test-root" style="flex-direction: row;">
-  <div style="flex-basis: 50px; height: 100px"></div>
+  <div style="flex-basis: 50px; height: 100px;"></div>
 </div>
 
 </body>