diff --git a/crates/engine/src/cmd/arrange.rs b/crates/engine/src/cmd/arrange.rs index 7a731675..0180504c 100644 --- a/crates/engine/src/cmd/arrange.rs +++ b/crates/engine/src/cmd/arrange.rs @@ -501,6 +501,9 @@ pub fn scale_node(doc: &mut Document, id: NodeId, k: f64) -> Result<()> { } if let NodeKind::Vector { network } = &mut n.kind { network.scale(k, k); + for v in &mut network.vertices { + v.radius *= k; + } } n.width *= k; n.height *= k; diff --git a/crates/engine/src/scale_tool_tests.rs b/crates/engine/src/scale_tool_tests.rs index 647a7ce1..f61eba93 100644 --- a/crates/engine/src/scale_tool_tests.rs +++ b/crates/engine/src/scale_tool_tests.rs @@ -240,3 +240,17 @@ fn the_scale_tool_only_acts_on_handles() { assert_rect(bounds(&s, r), [10.0, 10.0, 110.0, 60.0]); assert!(near(s.doc().unwrap().node(r).unwrap().width, 100.0)); } + +#[test] +fn scale_node_scales_vector_point_corner_radius() { + let mut s = Session::new(); + let v = id_of(&ex(&mut s, "vector.create", json!({"points": [[0, 0], [100, 0], [100, 100], [0, 100]], "closed": true}))["id"]).unwrap(); + ex(&mut s, "node.set", json!({"id": v, "props": {"cornerRadius": 10}})); + ex(&mut s, "transform.scale", json!({"ids": [v], "factor": 2})); + let d = s.doc().unwrap(); + let NodeKind::Vector { network } = &d.node(v).unwrap().kind else { panic!("not a vector") }; + assert!(!network.vertices.is_empty()); + for vx in &network.vertices { + assert_eq!(vx.radius, 20.0, "corner radius scaled with the layer"); + } +}