tawasuyu

tawasuyu/taffy

A high performance rust-powered UI layout library

Rust 695HTML 648Markdown 12TOML 62320 Sutichaykuna

Fix absolute sizing

348ac760233c53cb615d2d28fa5a6a63565c9eae · ruwaq Emil Sjölander · (7 wata ñawpaq) · tayta 4f44c1c1f · kay commitpi sach'ata qhaway

Semántico sayk'uy · 1

src/algo.rs

1 qillqakuna · +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,
         );