gioser

tawasuyu/taffy

A high performance rust-powered UI layout library

Rust 1115HTML 1041Markdown 12TOML 94777 Definiciones

code cleanup

4d27fa175c4e264ae0c449a58edee0d083c80de6 · por Emil Sjölander · (hace 7 años) · padre 4bf92fec4 · ver el árbol en este commit

Delta semántico · 1

src/algo.rs

1 archivos · +30 −43

diff --git a/src/algo.rs b/src/algo.rs
index 28fa46e3b..6efb6f46a 100644
--- a/src/algo.rs
+++ b/src/algo.rs
@@ -144,9 +144,16 @@ fn compute_internal(
         bottom: node.border.bottom.resolve(percent_calc_base).or_else(0.0),
     };
 
+    let padding_border = Rect {
+        start: padding.start + border.start,
+        end: padding.end + border.end,
+        top: padding.top + border.top,
+        bottom: padding.bottom + border.bottom,
+    };
+
     let node_inner_size = Size {
-        width: node_size.width - border.horizontal() - padding.horizontal(),
-        height: node_size.height - border.vertical() - padding.vertical(),
+        width: node_size.width - padding_border.horizontal(),
+        height: node_size.height - padding_border.vertical(),
     };
 
     let percent_calc_base_child = node_inner_size.width;
@@ -164,12 +171,8 @@ fn compute_internal(
     //    in that dimension and use that value. This might result in an infinite value.
 
     let available_space = Size {
-        width: node_size.width.or_else(parent_size.width - margin.horizontal())
-            - padding.horizontal()
-            - border.horizontal(),
-        height: node_size.height.or_else(parent_size.height - margin.vertical())
-            - padding.vertical()
-            - border.vertical(),
+        width: node_size.width.or_else(parent_size.width - margin.horizontal()) - padding_border.horizontal(),
+        height: node_size.height.or_else(parent_size.height - margin.vertical()) - padding_border.vertical(),
     };
 
     let mut flex_items: Vec<FlexItem> = node
@@ -601,15 +604,14 @@ fn compute_internal(
             acc.max(length)
         });
 
-        let size = longest_line + padding.main(node.flex_direction) + border.main(node.flex_direction);
+        let size = longest_line + padding_border.main(node.flex_direction);
         match available_space.main(node.flex_direction) {
             Defined(val) if flex_lines.len() > 1 && size < val => val,
             _ => size,
         }
     });
 
-    let inner_container_main_size =
-        container_main_size - padding.main(node.flex_direction) - border.main(node.flex_direction);
+    let inner_container_main_size = container_main_size - padding_border.main(node.flex_direction);
 
     // 9.4. Cross Size Determination
 
@@ -696,10 +698,8 @@ fn compute_internal(
     //    of min/max-width/height applied more generally, this behavior would fall out automatically.
 
     if flex_lines.len() == 1 && node_size.cross(node.flex_direction).is_defined() {
-        flex_lines[0].cross_size = (node_size.cross(node.flex_direction)
-            - padding.cross(node.flex_direction)
-            - border.cross(node.flex_direction))
-        .or_else(0.0);
+        flex_lines[0].cross_size =
+            (node_size.cross(node.flex_direction) - padding_border.cross(node.flex_direction)).or_else(0.0);
     } else {
         flex_lines.iter_mut().for_each(|line| {
             //    1. Collect all the flex items whose inline-axis is parallel to the main-axis, whose
@@ -741,10 +741,8 @@ fn compute_internal(
 
     if node.align_content == AlignContent::Stretch && node_size.cross(node.flex_direction).is_defined() {
         let total_cross: f32 = flex_lines.iter().map(|line| line.cross_size).sum();
-        let inner_cross = (node_size.cross(node.flex_direction)
-            - padding.cross(node.flex_direction)
-            - border.cross(node.flex_direction))
-        .or_else(0.0);
+        let inner_cross =
+            (node_size.cross(node.flex_direction) - padding_border.cross(node.flex_direction)).or_else(0.0);
 
         if total_cross < inner_cross {
             let remaining = inner_cross - total_cross;
@@ -988,11 +986,9 @@ fn compute_internal(
     //       min and max cross sizes of the flex container.
 
     let total_cross_size: f32 = flex_lines.iter().map(|line| line.cross_size).sum();
-    let container_cross_size = node_size
-        .cross(node.flex_direction)
-        .or_else(total_cross_size + padding.cross(node.flex_direction) + border.cross(node.flex_direction));
-    let inner_container_cross_size =
-        container_cross_size - padding.cross(node.flex_direction) - border.cross(node.flex_direction);
+    let container_cross_size =
+        node_size.cross(node.flex_direction).or_else(total_cross_size + padding_border.cross(node.flex_direction));
+    let inner_container_cross_size = container_cross_size - padding_border.cross(node.flex_direction);
 
     // 16. Align all flex lines per align-content.
 
@@ -1054,12 +1050,11 @@ fn compute_internal(
     // Do a final layout pass and gather the resulting layouts
     let mut children: Vec<layout::Node> = {
         let mut lines: Vec<Vec<layout::Node>> = vec![];
-        let mut total_offset_cross = padding.cross_start(node.flex_direction) + border.cross_start(node.flex_direction);
+        let mut total_offset_cross = padding_border.cross_start(node.flex_direction);
 
         let layout_line = |line: &mut FlexLine| {
             let mut children: Vec<layout::Node> = vec![];
-            let mut total_offset_main =
-                padding.main_start(node.flex_direction) + border.main_start(node.flex_direction);
+            let mut total_offset_main = padding_border.main_start(node.flex_direction);
             let line_offset_cross = line.offset_cross;
 
             let layout_item = |child: &mut FlexItem| {
@@ -1198,11 +1193,9 @@ fn compute_internal(
             } else {
                 match node.justify_content {
                     JustifyContent::SpaceBetween | JustifyContent::FlexStart => {
-                        padding.main_start(node.flex_direction) + border.main_start(node.flex_direction)
-                    }
-                    JustifyContent::FlexEnd => {
-                        free_main_space - padding.main_end(node.flex_direction) - border.main_end(node.flex_direction)
+                        padding_border.main_start(node.flex_direction)
                     }
+                    JustifyContent::FlexEnd => free_main_space - padding_border.main_end(node.flex_direction),
                     JustifyContent::SpaceEvenly | JustifyContent::SpaceAround | JustifyContent::Center => {
                         free_main_space / 2.0
                     }
@@ -1218,31 +1211,25 @@ fn compute_internal(
                     AlignSelf::Auto => 0.0, // Should never happen
                     AlignSelf::FlexStart => {
                         if is_wrap_reverse {
-                            free_cross_space
-                                - padding.cross_end(node.flex_direction)
-                                - border.cross_end(node.flex_direction)
+                            free_cross_space - padding_border.cross_end(node.flex_direction)
                         } else {
-                            padding.cross_start(node.flex_direction) + border.cross_start(node.flex_direction)
+                            padding_border.cross_start(node.flex_direction)
                         }
                     }
                     AlignSelf::FlexEnd => {
                         if is_wrap_reverse {
-                            padding.cross_start(node.flex_direction) + border.cross_start(node.flex_direction)
+                            padding_border.cross_start(node.flex_direction)
                         } else {
-                            free_cross_space
-                                - padding.cross_end(node.flex_direction)
-                                - border.cross_end(node.flex_direction)
+                            free_cross_space - padding_border.cross_end(node.flex_direction)
                         }
                     }
                     AlignSelf::Center => free_cross_space / 2.0,
                     AlignSelf::Baseline => free_cross_space / 2.0, // Treat as center for now until we have baseline support
                     AlignSelf::Stretch => {
                         if is_wrap_reverse {
-                            free_cross_space
-                                - padding.cross_end(node.flex_direction)
-                                - border.cross_end(node.flex_direction)
+                            free_cross_space - padding_border.cross_end(node.flex_direction)
                         } else {
-                            padding.cross_start(node.flex_direction) + border.cross_start(node.flex_direction)
+                            padding_border.cross_start(node.flex_direction)
                         }
                     }
                 }