From 6ec8d2af518eab4ae2ae2fc3ff7df2e9c015daa0 Mon Sep 17 00:00:00 2001 From: Johannes Wolf Date: Mon, 13 Jul 2026 10:14:55 +0200 Subject: [PATCH 1/2] Fix Content Angle Calculation From Two Coordinates --- src/draw/shapes.typ | 3 ++- tests/content/angle/ref/1.png | Bin 0 -> 4293 bytes tests/content/angle/test.typ | 17 +++++++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 tests/content/angle/ref/1.png create mode 100644 tests/content/angle/test.typ diff --git a/src/draw/shapes.typ b/src/draw/shapes.typ index a3ba8acb..563fca70 100644 --- a/src/draw/shapes.typ +++ b/src/draw/shapes.typ @@ -1136,7 +1136,8 @@ let angle = if type(angle) != std.angle { let (_, c) = coordinate.resolve(ctx, angle) - vector.angle2(a, util.apply-transform(ctx.transform, c)) + vector.angle2(util.apply-transform(ctx.transform, a), + util.apply-transform(ctx.transform, c)) } else { angle } diff --git a/tests/content/angle/ref/1.png b/tests/content/angle/ref/1.png new file mode 100644 index 0000000000000000000000000000000000000000..9795ac16448b153b38ed7094c391d1c08b9c3355 GIT binary patch literal 4293 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 B!qET# literal 0 HcmV?d00001 diff --git a/tests/content/angle/test.typ b/tests/content/angle/test.typ new file mode 100644 index 00000000..9fbb0c7b --- /dev/null +++ b/tests/content/angle/test.typ @@ -0,0 +1,17 @@ +#import "/src/lib.typ": * +#import "/tests/helper.typ": * +#set page(width: auto, height: auto) + +// #1032 +#test-case({ + import draw: * + set-style(padding: 5pt) + + line((0, 0), (5, 5), name: "line1") + content("line1.50%", angle: "line1.end", anchor: "south", [Content]) + + rotate(15deg) + + line((5, 0), (10, 5), name: "line2") + content("line2.50%", angle: "line2.end", anchor: "south", [Content]) +}) From 4655ed67e8221958e503379c589f9894906e5303 Mon Sep 17 00:00:00 2001 From: Johannes Wolf Date: Mon, 13 Jul 2026 11:00:42 +0200 Subject: [PATCH 2/2] Update Test Ref Images for Tytanic 0.4 --- tests/style/fold-stroke/ref/1.png | Bin 3122 -> 3121 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/style/fold-stroke/ref/1.png b/tests/style/fold-stroke/ref/1.png index 42bef5fc9e7c6219d726e4f094d2e28be289aef9..4b226ad0676134cfd8228677cc2846066cfd4150 100644 GIT binary patch delta 2375 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 KWK(K&1^qXFj