diff --git a/src/geom/rounded.rs b/src/geom/rounded.rs index 7a58dae2b..dbe21ac6f 100644 --- a/src/geom/rounded.rs +++ b/src/geom/rounded.rs @@ -52,6 +52,7 @@ fn stroke_segments( let mut connection = Connection::default(); let mut path = Path::new(); let mut always_continuous = true; + let max_radius = size.x.min(size.y) / 2.0; for side in [Side::Top, Side::Right, Side::Bottom, Side::Left] { let continuous = stroke.get(side) == stroke.get(side.next_cw()); @@ -62,8 +63,8 @@ fn stroke_segments( &mut path, side, size, - radius.get(side.start_corner()), - radius.get(side.end_corner()), + radius.get(side.start_corner()).clamp(Abs::zero(), max_radius), + radius.get(side.end_corner()).clamp(Abs::zero(), max_radius), connection, ); diff --git a/tests/ref/visualize/shape-rounded.png b/tests/ref/visualize/shape-rounded.png new file mode 100644 index 000000000..ae8df178c Binary files /dev/null and b/tests/ref/visualize/shape-rounded.png differ diff --git a/tests/typ/visualize/shape-rounded.typ b/tests/typ/visualize/shape-rounded.typ new file mode 100644 index 000000000..862141ba6 --- /dev/null +++ b/tests/typ/visualize/shape-rounded.typ @@ -0,0 +1,6 @@ +// Test rounded rectangles and squares. + +--- +// Ensure that radius is clamped. +#rect(radius: -20pt) +#square(radius: 30pt)