summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-12-30 10:07:46 +0100
committerLaurenz <laurmaedje@gmail.com>2022-12-30 10:07:46 +0100
commitfe1f4400693690b68db5a7ec0976ba998624a740 (patch)
tree47f6fb388e70b93312dfe252c50aed637fe37556
parent94cf7005e99a9055799a641ae6f00669c5ec7a63 (diff)
Clamp shape radii
-rw-r--r--src/geom/rounded.rs5
-rw-r--r--tests/ref/visualize/shape-rounded.pngbin0 -> 769 bytes
-rw-r--r--tests/typ/visualize/shape-rounded.typ6
3 files changed, 9 insertions, 2 deletions
diff --git a/src/geom/rounded.rs b/src/geom/rounded.rs
index 7a58dae2..dbe21ac6 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 00000000..ae8df178
--- /dev/null
+++ b/tests/ref/visualize/shape-rounded.png
Binary files differ
diff --git a/tests/typ/visualize/shape-rounded.typ b/tests/typ/visualize/shape-rounded.typ
new file mode 100644
index 00000000..862141ba
--- /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)