tawasuyu

tawasuyu/taffy

A high performance rust-powered UI layout library

Rust 499HTML 238Markdown 7TOML 31442 Definitions

Fix calling set_measure on a node that didn't previously have a measure func (#252)

* Fix calling set_measure on a node that didn't previously have a measure func

(fixes #250)

* cargo fmt

* Update to work with renamed Style struct

07a154db4c0fb4f714f397062dd2dc1dbf407470 · by Nico Burns · (3 years ago) · parent 49893a7d9 · browse the tree at this commit

Semantic delta · 2

src/node.rs

1 files · +13 −1

diff --git a/src/node.rs b/src/node.rs
index 8ce6bcc8c..9294cf066 100644
--- a/src/node.rs
+++ b/src/node.rs
@@ -204,7 +204,7 @@ impl Taffy {
     pub fn set_measure(&mut self, node: Node, measure: Option<MeasureFunc>) -> TaffyResult<()> {
         if let Some(measure) = measure {
             self.nodes[node].needs_measure = true;
-            self.measure_funcs[node] = measure
+            self.measure_funcs.insert(node, measure);
         } else {
             self.nodes[node].needs_measure = false;
             self.measure_funcs.remove(node);
@@ -482,6 +482,18 @@ mod tests {
         assert_eq!(taffy.layout(node).unwrap().size.width, 100.0);
     }
 
+    #[test]
+    fn set_measure_of_previously_unmeasured_node() {
+        let mut taffy = Taffy::new();
+        let node = taffy.new_leaf(Style::default()).unwrap();
+        taffy.compute_layout(node, Size::MAX_CONTENT).unwrap();
+        assert_eq!(taffy.layout(node).unwrap().size.width, 0.0);
+
+        taffy.set_measure(node, Some(MeasureFunc::Raw(|_, _| Size { width: 100.0, height: 100.0 }))).unwrap();
+        taffy.compute_layout(node, Size::MAX_CONTENT).unwrap();
+        assert_eq!(taffy.layout(node).unwrap().size.width, 100.0);
+    }
+
     /// Test that adding `add_child()` works
     #[test]
     fn add_child() {