From 44c9fb7448abfa7a12e1e547e269fe8618b0bec6 Mon Sep 17 00:00:00 2001 From: Andy Balholm Date: Fri, 4 Feb 2022 15:22:05 -0800 Subject: [PATCH] internal/stroke: don't draw round join if angle is NaN References: https://todo.sr.ht/~eliasnaur/gio/331 Signed-off-by: Andy Balholm --- gpu/internal/rendertest/clip_test.go | 26 ++++++++++++++++++ .../refs/TestStrokedPathBalloon.png | Bin 0 -> 1977 bytes internal/stroke/stroke.go | 8 ++++-- 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 gpu/internal/rendertest/refs/TestStrokedPathBalloon.png diff --git a/gpu/internal/rendertest/clip_test.go b/gpu/internal/rendertest/clip_test.go index 4275a7cf..3a147312 100644 --- a/gpu/internal/rendertest/clip_test.go +++ b/gpu/internal/rendertest/clip_test.go @@ -207,6 +207,32 @@ func TestStrokedPathCoincidentControlPoint(t *testing.T) { }) } +func TestStrokedPathBalloon(t *testing.T) { + run(t, func(o *op.Ops) { + // This shape is based on the one drawn by the Bubble function in + // github.com/llgcode/draw2d/samples/geometry/geometry.go. + p := new(clip.Path) + p.Begin(o) + p.MoveTo(f32.Pt(42.69375, 10.5)) + p.CubeTo(f32.Pt(42.69375, 10.5), f32.Pt(14.85, 10.5), f32.Pt(14.85, 31.5)) + p.CubeTo(f32.Pt(14.85, 31.5), f32.Pt(14.85, 52.5), f32.Pt(28.771875, 52.5)) + p.CubeTo(f32.Pt(28.771875, 52.5), f32.Pt(28.771875, 63.7), f32.Pt(17.634375, 66.5)) + p.CubeTo(f32.Pt(17.634375, 66.5), f32.Pt(34.340626, 63.7), f32.Pt(37.125, 52.5)) + p.CubeTo(f32.Pt(37.125, 52.5), f32.Pt(70.5375, 52.5), f32.Pt(70.5375, 31.5)) + p.CubeTo(f32.Pt(70.5375, 31.5), f32.Pt(70.5375, 10.5), f32.Pt(42.69375, 10.5)) + cl := clip.Stroke{ + Path: p.End(), + Width: 2.83, + }.Op().Push(o) + paint.Fill(o, black) + cl.Pop() + }, func(r result) { + r.expect(0, 0, transparent) + r.expect(70, 52, colornames.Black) + r.expect(70, 90, transparent) + }) +} + func TestPathReuse(t *testing.T) { run(t, func(o *op.Ops) { var path clip.Path diff --git a/gpu/internal/rendertest/refs/TestStrokedPathBalloon.png b/gpu/internal/rendertest/refs/TestStrokedPathBalloon.png new file mode 100644 index 0000000000000000000000000000000000000000..a9a57b28ebb26dd6331071820e07c7d09cefa9c0 GIT binary patch literal 1977 zcmd6oYc$&l8pi+sza;85NUJV&zl;*XP)f9Dn<6O@gbw49c0`LRQC4W1Myu)24k}_) zFkzxa6|0I}m!!018Y3$Noz`9Hic9FttA$hnSbJLg$@=-aELS zJNvYKn$jw|=XiObzpGN^YR^uq0PRml3<0v9xc8V=01 z0WYZFo%aoOW?UVh89Jx%0JK!F6|4#Nkn^vs?vYtGYLCHppbH2(Fami{t{B`jJq02l zZQvJB8(IKQ97vj27W4{~r;bjwB1(s1HKx&gBn=!>NRez_0>-S;cIe#41ALXqZH+dy z4gV4CU%gAVtV)SlB5)qG4BjO4y>SY>b4~pML@#pNYHU7jZ9UObm7$~H3mYg1jK&|2 zNyFh}2W8D9GlGY`4ozd@==91Fn2q8*zHHLqqx1JCewa?4qLLqG1qV!j-4i|}lqN4u zg~jGScl>Hb-Y?@DmfQK|S&&>E8S2QHwZI$~msE|Ft%b8`5!JV&6b6=0K4G;8|1|d) z$`p}Gt;Ltl`=v)(W)24CNzZ=XTf;GHLKQ7S>rM>mk*zbABq`XD3)-i^FRs&VW7jqo+S54D_m= z9aqaa6**?YBCI)krXp%*dv<;K#)-&V6#YDR%SV90V%r^-?Qbdn>~k@^N(ci#)y~Qf zA4I2{@P7X;IlN_Y*@&k_ZpXM+9HaiOvR9Ik{pml)$qzAxueoh=H)|GY5zMuB+G6EK zoWU;%fp1k)J1{-8xsn(sb@J^iAx!V5W>qR5+$WeH;`oNQ@9S7*@|-DR~)9=9vz(N z|3;I{dC4_ZmSvSFHv0XclmgajSoAAvax0mH+vc9MtJv|)vZgDYt-JMr?l(0sn%SrJ z4iyc(%XSalJUS+JKQAgjcm^SS7do7T=`@CXp{@X3Bl?Q;er?h|49h6+`9f2viha0q zwoB!_qhaCOMI7}KSj%-x&r&VHzHSNE-X=WZFI#nL8b|La#KDQArNn%;P{K>yE$y|5 z?jOf9BGzdx>X0v@9QNtC^DP(C+a65waDTIzu#6cfYxJ{ZT!L1?#(zohukmKYgtB++ zWeIh;dAXBCw~nkyeR4P|#G7qEpUxJ7JysFc)|r`IVlFV&?QHip9AEJnQ@(HdxTvVw z0AEY#a0SJYWS05G!eXs-1C$66COH=+WOX~g;?{_7#Lg*T>jE5B$)z^aacm{dqqwCm z)O5xO{)OG$g!w}ef0h2DVNIHH)|?Fto-^s0U^^ePXgN*1^`@#JVW2feqU#6p9v zZ)#ktGU9V4P4|_sd@ieQ?NFQL^VWzdE?nZOt)k;f}#4Z1_%lk zUVXeZV9}(CS~Tbo`&G6Bt`!fUx)8{wP&D7S_wUuhR=ge^?Fqii25ytSZ56)cP!>%B zPX0y1XvB{>1I^vafEU-qsKP;acIr*<;CZ{Eaj%(sL8$OA6YxGp2CNO`yjFQC^?mM3 zg>tvy$u5VrLFHURV~e$}+%+lwLS~f;5t(xR50bnro=<|G2#%3rQ$T%7{|%2k n=l=qd|4EqtpWvDz0LbM)>6@0kG@JfiBm=mU1Z@3r^7VfK