tawasuyu

tawasuyu/taffy

A high performance rust-powered UI layout library

Rust 1061HTML 997Markdown 12TOML 83120 Definiciones

Fix absolute sizing

fb1f6ed76ae7d6aab02af780e3f3a182202174ec · por Emil Sjölander · (hace 7 años) · padre 56ed03fd0 · ver el árbol en este commit

Delta semántico · 1

src/algo.rs

1 archivos · +34 −22

diff --git a/src/algo.rs b/src/algo.rs
index a888d5f8a..231b8538a 100644
--- a/src/algo.rs
+++ b/src/algo.rs
@@ -1002,44 +1002,56 @@ fn compute_internal(
         node.children.iter().filter(|child| child.position == style::Position::Absolute).collect();
 
     for child in absolute_children {
-        let start_main = child.main_start(node.flex_direction).resolve(container_main_size, f32::NAN)
-            + child.main_margin_start(node.flex_direction).resolve(container_main_size, f32::NAN);
+        let start = child.start.resolve(container_width, f32::NAN)
+            + child.margin.start.resolve(container_width, f32::NAN);
         
-        let end_main = child.main_end(node.flex_direction).resolve(container_main_size, f32::NAN)
-            + child.main_margin_end(node.flex_direction).resolve(container_main_size, f32::NAN);
+        let end = child.end.resolve(container_width, f32::NAN)
+            + child.margin.end.resolve(container_width, f32::NAN);
 
-        let main = if start_main.is_finite() && end_main.is_finite() {
-            container_main_size - start_main - end_main
-        } else {
-            f32::NAN
-        };
+        let top = child.top.resolve(container_height, f32::NAN)
+            + child.margin.top.resolve(container_height, f32::NAN);
 
-        let start_cross = child.cross_start(node.flex_direction).resolve(container_cross_size, f32::NAN)
-            + child.cross_margin_start(node.flex_direction).resolve(container_cross_size, f32::NAN);
+        let bottom = child.bottom.resolve(container_height, f32::NAN)
+            + child.margin.bottom.resolve(container_height, f32::NAN);
 
-        let end_cross = child.cross_end(node.flex_direction).resolve(container_cross_size, f32::NAN)
-            + child.cross_margin_end(node.flex_direction).resolve(container_cross_size, f32::NAN);
+        let (start_main, end_main) = if node.flex_direction.is_row() {
+            (start, end)
+        } else {
+            (top, bottom)
+        };
 
-        let cross = if start_cross.is_finite() && end_cross.is_finite() {
-            container_cross_size - start_cross - end_cross
+        let (start_cross, end_cross) = if node.flex_direction.is_row() {
+            (top, bottom)
         } else {
-            f32::NAN
+            (start, end)
         };
 
-        let result = compute_internal(
-            child,
+        let width = if start.is_finite() && end.is_finite() {
+            container_width - start - end
+        } else {
             child
                 .width
                 .resolve(container_width, f32::NAN)
                 .max(child.min_width.resolve(container_width, f32::NAN))
-                .min(child.max_width.resolve(container_width, f32::NAN)),
+                .min(child.max_width.resolve(container_width, f32::NAN))
+        };
+
+        let height = if top.is_finite() && bottom.is_finite() {
+            container_height - top - bottom
+        } else {
             child
                 .height
                 .resolve(container_height, f32::NAN)
                 .max(child.min_height.resolve(container_height, f32::NAN))
-                .min(child.max_height.resolve(container_height, f32::NAN)),
-            if node.flex_direction.is_row() { main } else { cross },
-            if node.flex_direction.is_row() { cross } else { main },
+                .min(child.max_height.resolve(container_height, f32::NAN))
+        };
+
+        let result = compute_internal(
+            child,
+            width,
+            height,
+            if node.flex_direction.is_row() { container_main_size } else { container_cross_size },
+            if node.flex_direction.is_row() { container_cross_size } else { container_main_size },
             container_main_size,
         );