From 318d90e5097f33a3dc515ce1928b81aa55b3d604 Mon Sep 17 00:00:00 2001 From: Ryan Oldenburg Date: Thu, 18 Feb 2021 16:23:54 -0600 Subject: [PATCH 1/3] drawRoundedRect + updated example --- README.md | 17 ----------------- examples/rounded_rectangle.nim | 13 +++---------- src/pixie.nim | 32 ++++++++++++++++++++++++++++++++ src/pixie/paths.nim | 16 +++++++++++----- tests/test_images_draw.nim | 10 ++++++++++ tests/test_masks.nim | 5 +++++ 6 files changed, 61 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 9a3de71..ec98a8a 100644 --- a/README.md +++ b/README.md @@ -46,23 +46,6 @@ image.drawSegment(segment(start, stop), color, strokeWidth = 10) ``` ![example output](examples/line.png) -### Rounded rectangle -[examples/rounded_rectangle.nim](examples/rounded_rectangle.nim) -```nim -let - x = 50.0 - y = 50.0 - w = 100.0 - h = 100.0 - r = 25.0 - -var path: Path -path.roundedRect(vec2(x, y), vec2(w, h), r, r, r, r) - -image.fillPath(path, rgba(0, 255, 0, 255)) -``` -![example output](examples/rounded_rectangle.png) - ### Heart [examples/heart.nim](examples/heart.nim) ```nim diff --git a/examples/rounded_rectangle.nim b/examples/rounded_rectangle.nim index 67f41f2..8b6f41b 100644 --- a/examples/rounded_rectangle.nim +++ b/examples/rounded_rectangle.nim @@ -4,15 +4,8 @@ let image = newImage(200, 200) image.fill(rgba(255, 255, 255, 255)) let - x = 50.0 - y = 50.0 - w = 100.0 - h = 100.0 + pos = vec2(50, 50) + wh = vec2(100, 100) r = 25.0 -var path: Path -path.roundedRect(vec2(x, y), vec2(w, h), r, r, r, r) - -image.fillPath(path, rgba(0, 255, 0, 255)) - -image.writeFile("examples/rounded_rectangle.png") +image.drawRoundedRect(rect(pos, wh), r, rgba(0, 255, 0, 255)) diff --git a/src/pixie.nim b/src/pixie.nim index 5305e4b..ba91f48 100644 --- a/src/pixie.nim +++ b/src/pixie.nim @@ -62,6 +62,38 @@ proc drawRect*(mask: Mask, rect: Rect) = path.rect(rect) mask.fillPath(path) +proc drawRoundedRect*( + image: Image, + rect: Rect, + nw, ne, se, sw: float32, + color: ColorRGBA, + blendMode = bmNormal +) = + var path: Path + path.roundedRect(rect, nw, ne, se, sw) + image.fillPath(path, color, wrNonZero, blendMode) + +proc drawRoundedRect*( + image: Image, + rect: Rect, + radius: float32, + color: ColorRGBA, + blendMode = bmNormal +) = + var path: Path + path.roundedRect(rect, radius, radius, radius, radius) + image.fillPath(path, color, wrNonZero, blendMode) + +proc drawRoundedRect*(mask: Mask, rect: Rect, nw, ne, se, sw: float32) = + var path: Path + path.roundedRect(rect, nw, ne, se, sw) + mask.fillPath(path) + +proc drawRoundedRect*(mask: Mask, rect: Rect, radius: float32) = + var path: Path + path.roundedRect(rect, radius, radius, radius, radius) + mask.fillPath(path) + proc drawSegment*( image: Image, segment: Segment, diff --git a/src/pixie/paths.nim b/src/pixie/paths.nim index acd5308..d040cf6 100644 --- a/src/pixie/paths.nim +++ b/src/pixie/paths.nim @@ -376,13 +376,9 @@ proc rect*(path: var Path, rect: Rect, clockwise = true) {.inline.} = const splineCircleK = 4.0 * (-1.0 + sqrt(2.0)) / 3 proc roundedRect*( - path: var Path, pos, wh: Vec2, nw, ne, se, sw: float32, clockwise = true + path: var Path, x, y, w, h, nw, ne, se, sw: float32, clockwise = true ) = let - x = pos.x - y = pos.y - w = wh.x - h = wh.y s = splineCircleK maxRadius = min(w / 2, h / 2) @@ -432,6 +428,16 @@ proc roundedRect*( path.closePath() +proc roundedRect*( + path: var Path, pos, wh: Vec2, nw, ne, se, sw: float32, clockwise = true +) {.inline.} = + path.roundedRect(pos.x, pos.y, wh.x, wh.y, nw, ne, se, sw, clockwise) + +proc roundedRect*( + path: var Path, rect: Rect, nw, ne, se, sw: float32, clockwise = true +) {.inline.} = + path.roundedRect(rect.x, rect.y, rect.w, rect.h, nw, ne, se, sw, clockwise) + proc ellipse*(path: var Path, cx, cy, rx, ry: float32) = let magicX = splineCircleK * rx diff --git a/tests/test_images_draw.nim b/tests/test_images_draw.nim index 274c369..cbebcb5 100644 --- a/tests/test_images_draw.nim +++ b/tests/test_images_draw.nim @@ -56,6 +56,16 @@ block: image.drawRect(rect(vec2(10, 10), vec2(30, 30)), rgba(255, 255, 0, 255)) image.writeFile("tests/images/drawRect.png") +block: + let image = newImage(100, 100) + image.fill(rgba(0, 255, 255, 255)) + image.drawRoundedRect( + rect(vec2(10, 10), vec2(30, 30)), + 10, + rgba(255, 255, 0, 255) + ) + image.writeFile("tests/images/drawRoundedRect.png") + block: let image = newImage(100, 100) image.fill(rgba(0, 255, 255, 255)) diff --git a/tests/test_masks.nim b/tests/test_masks.nim index 48d163f..2338bec 100644 --- a/tests/test_masks.nim +++ b/tests/test_masks.nim @@ -108,6 +108,11 @@ block: mask.drawRect(rect(vec2(10, 10), vec2(30, 30))) writeFile("tests/images/masks/drawRect.png", mask.encodePng()) +block: + let mask = newMask(100, 100) + mask.drawRoundedRect(rect(vec2(10, 10), vec2(30, 30)), 10) + writeFile("tests/images/masks/drawRoundedRect.png", mask.encodePng()) + block: let mask = newMask(100, 100) mask.drawSegment( From 0362d03b0b05e65e1a54423b60b926823f3fb1af Mon Sep 17 00:00:00 2001 From: Ryan Oldenburg Date: Thu, 18 Feb 2021 16:30:47 -0600 Subject: [PATCH 2/3] drawEllipse, drawCircle --- README.md | 12 ++++++++ examples/rounded_rectangle.nim | 2 ++ src/pixie.nim | 40 +++++++++++++++++++++++++ src/pixie/paths.nim | 3 ++ tests/images/drawEllipse.png | Bin 0 -> 1544 bytes tests/images/drawRoundedRect.png | Bin 0 -> 917 bytes tests/images/masks/drawEllipse.png | Bin 0 -> 561 bytes tests/images/masks/drawRoundedRect.png | Bin 0 -> 491 bytes tests/test_images_draw.nim | 11 +++++++ tests/test_masks.nim | 5 ++++ 10 files changed, 73 insertions(+) create mode 100644 tests/images/drawEllipse.png create mode 100644 tests/images/drawRoundedRect.png create mode 100644 tests/images/masks/drawEllipse.png create mode 100644 tests/images/masks/drawRoundedRect.png diff --git a/README.md b/README.md index ec98a8a..3b81851 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,18 @@ image.drawSegment(segment(start, stop), color, strokeWidth = 10) ``` ![example output](examples/line.png) +### Rounded rectangle +[examples/rounded_rectangle.nim](examples/rounded_rectangle.nim) +```nim +let + pos = vec2(50, 50) + wh = vec2(100, 100) + r = 25.0 + +image.drawRoundedRect(rect(pos, wh), r, rgba(0, 255, 0, 255)) +``` +![example output](examples/rounded_rectangle.png) + ### Heart [examples/heart.nim](examples/heart.nim) ```nim diff --git a/examples/rounded_rectangle.nim b/examples/rounded_rectangle.nim index 8b6f41b..776fb6d 100644 --- a/examples/rounded_rectangle.nim +++ b/examples/rounded_rectangle.nim @@ -9,3 +9,5 @@ let r = 25.0 image.drawRoundedRect(rect(pos, wh), r, rgba(0, 255, 0, 255)) + +image.writeFile("examples/rounded_rectangle.png") diff --git a/src/pixie.nim b/src/pixie.nim index ba91f48..a757b2e 100644 --- a/src/pixie.nim +++ b/src/pixie.nim @@ -111,3 +111,43 @@ proc drawSegment*(mask: Mask, segment: Segment, strokeWidth: float32) = path.moveTo(segment.at) path.lineTo(segment.to) mask.strokePath(path, strokeWidth) + +proc drawEllipse*( + image: Image, + center: Vec2, + rx, ry: float32, + color: ColorRGBA, + blendMode = bmNormal +) = + var path: Path + path.ellipse(center, rx, ry) + image.fillPath(path, color, wrNonZero, blendMode) + +proc drawEllipse*( + mask: Mask, + center: Vec2, + rx, ry: float32 +) = + var path: Path + path.ellipse(center, rx, ry) + mask.fillPath(path) + +proc drawCircle*( + image: Image, + center: Vec2, + radius: float32, + color: ColorRGBA, + blendMode = bmNormal +) = + var path: Path + path.ellipse(center, radius, radius) + image.fillPath(path, color, wrNonZero, blendMode) + +proc drawCircle*( + mask: Mask, + center: Vec2, + radius: float32 +) = + var path: Path + path.ellipse(center, radius, radius) + mask.fillPath(path) diff --git a/src/pixie/paths.nim b/src/pixie/paths.nim index d040cf6..e6737a5 100644 --- a/src/pixie/paths.nim +++ b/src/pixie/paths.nim @@ -450,6 +450,9 @@ proc ellipse*(path: var Path, cx, cy, rx, ry: float32) = path.bezierCurveTo(cx + magicX, cy - ry, cx + rx, cy - magicY, cx + rx, cy) path.closePath() +proc ellipse*(path: var Path, center: Vec2, rx, ry: float32) {.inline.} = + path.ellipse(center.x, center.y, rx, ry) + proc polygon*(path: var Path, x, y, size: float32, sides: int) = ## Draws a n sided regular polygon at (x, y) with size. path.moveTo(x + size * cos(0.0), y + size * sin(0.0)) diff --git a/tests/images/drawEllipse.png b/tests/images/drawEllipse.png new file mode 100644 index 0000000000000000000000000000000000000000..a816ac3b6c3f17060aeaea5d226e7e96e395fea1 GIT binary patch literal 1544 zcmbW1SzOWw0LLvaK&>P^@W_GSndU`mrrBQ*QZrDzQ1e0yEi-W`Wi1s{yuttt*X5bH zqKQXpmX;@8HLonYRPtyl(^=`pZ0>Q7+r#hod-y&4KEIbQo9K;KgXloy1N&^SG+~%WN3DI6KI9`?CWl&vRAFg^WyFSw7 zb~?yIg9pUH3@)d$U#oP2OwidSjsBGiM6BxwUX>_O&L>f@;1ZLQYUwgLsOw2x3(N_q zj#^qp<%KVc(N83^@80w*4_tDhCl3w0!cu~R*| zOsz=OeVy9Jv#ncqMg7MDiLTHxhU3w7L0u_kDfwLzU%*-sCgPkWbMSD%XrUYCEp6KB zuaidNiHJ6bS=QP|(3QGO9LxuB;lBE?BSq=++6?I823H|rC&NN2J|P%gvC?G}+Bb6_ zG#7F8st(;*NQ)kTEc8U=TujxoL?N&hsBZTBwxUliPr+NzqRT4OuG)t7U zz)n}__QyEMJGx?`*0Y4Kaq9-9kOg;J47FKkc1o%4O5q|^-Rvw2n#H`;Vl9o>|(!H+1P1%D>9UAu7j>#K-b6>cN?J4%l zQynOCRl4wol@%lNY+%8xdsuE|>DL_|JKz*&#&Yf%VJSU2Rn6gHye7WX)bQASel=Lo zcfdYO9fP8zUQQb=yz7&MLF6*VSWn9d0hBvnNW`Cb8+xK(R6NtG{NQS+zdUVaB>E_oF8Mb4^{l5%cK1ZB^J?+qhP>=s{qG_c z3uNuYB9Is&xJ}ydl@5Z9R)Su959av|6x@0tMkqD0hM>E1kWezOUYW5&hp&m$fP0^& zc1S11=lVl1M0I3uEZsAA`gKR*Z1;Nwe#Q8~=N|U*T4)L(X+edeqCZN>CKHU#qYfE* z^ybJud-<7*N_Lgr^txF#(Zwoj54tL7k4d(nm6~BGV$Ag^%X73bsVF6vkvb$_+>rmJ z%nZvJ(`E3Q`DsOt?hx+AsGmO<4mUbs>e-ox&(-E)rP$}FXV=VWMC6?p&5$PTo zqR9~0uV)*(nNmyu1@L$!{YA(NlIVvyQAmz9q!g@PBaT3YH4mUw2-9ibX(3sitqSa8Dcq3W<26|`$DsE{^u3a^4ihi4($B+*l}nT6EvLFKM>+L z@)o%?IWb9_(SV1gwyPS6*cJ!pzeKCifg!`>UkeA&;_<)ux&(lw48+S5bp)+6nqsNF|7-nUp5YyKi+>~Rgj8*V&2Av7D5xz uAN~csUi9G`*vQ&ze;jw#>iRz{>~71*XMfsuGnlhQc)24uZ>$gqPyZWUk-J;~ literal 0 HcmV?d00001 diff --git a/tests/images/drawRoundedRect.png b/tests/images/drawRoundedRect.png new file mode 100644 index 0000000000000000000000000000000000000000..c3050ad5eaa1bc864cba4c872919e26d6f494228 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^DIm`wBkzjUcp>YzxF)8*Je$Cw=#1q`Dm&Gx$NkbT>CA;;2^^zNWc z?%Z3h3pM|GE=V*FHZtcjxzz z6=ADWBA@L(X13ypfZAclBNiPJ?1GOKl4M+ZnmY;w4EdDOJRPM^`p3hYH`;iQxsUKN z*+&w!a}wLW{_%0=E&lm`rKJaVsN0Rh*K?LmmVdR)bzbts?-oa#rxnjM6_`BL|Ey!% z&C_{q5y#$_-j7P0x4yWq+U9Hclus))f#%DkYUJ&3dzIRjFQN1FdiXa2EN zJs}o&BRKA{RD0#}682w*9LB@!G!)B^8YQDmrP$?`%2}!S)Ypi&WdjFnj*vV zT4|H#*V&(qw);D8`Be9uhY|Nq^L}Ja-sdniy;1L8idEc6?}u8ef3)1)*D_n3CvEmZ zbH1yb*Y`-j6rb1ecuU=*nQnS+K@a029VL!@(|)_>;LQ(P5)VCnWUydSPZpO@Orq)c z%1Na$YktoY`qp!P<`eHW+kkaD#Pl|r_04{jXx3-3raiLiMe;1+9If1*1ItclpO!}Hp(Rti c_Iy@<^8NnuLk~~!0ka!}r>mdKI;Vst0F5r4jQ{`u literal 0 HcmV?d00001 diff --git a/tests/images/masks/drawEllipse.png b/tests/images/masks/drawEllipse.png new file mode 100644 index 0000000000000000000000000000000000000000..1bd4af34d8a775bcef6c3b702b556df6e9b30e0f GIT binary patch literal 561 zcmeAS@N?(olHy`uVBq!ia0vp^DIm-NBp5ZI3G8*4d@;iHFmA6;6g0s*hWsaxInguwH@bQ(N zxWrf1)!5|B&m>lIVQGMiZjnmI^84TSN?1+#KJ(r4-}~CD-<@as&oF7hf*1`AajsLX zO+^c_GX>74eqW!XKKbM1l3%eJa^KGTUA?_X&9Srk`PxmQpH5CnVcg&`=?(YMviNgX zrJdviJ9TSjaPL}k_;qCL!SKfW_Em?EpXKnFwqD5ZvkP;2%3n8gGsyx~|2}@%o}Ujo zJdg5aGcbfF?Z5MaKlx#8;lWClitt72HeNHIAbzg5x3EBEb@gL4zDGa9Wbc?BoLEyb zJFVx@O0!olm}O43r}HaE-r$c&ubebx#uC$sDhkt9n*^>4n{xBvyelr|`*yw98Q;

L&RLYM)LNpEz>g@0v6Row-;|2*<r+uQ~G%fYO4etDnm{r-UW|p1=9z literal 0 HcmV?d00001 diff --git a/tests/images/masks/drawRoundedRect.png b/tests/images/masks/drawRoundedRect.png new file mode 100644 index 0000000000000000000000000000000000000000..13bb852d997ec143bf84dc6d73654f1df281a86c GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^DIm-NBp5#q&c3y~na|4Vi+IFF0hZfJbqy9=mzJ(}>P}!S=dR;z(rfj5H_6c@ zD^_V~LjI)L=9NBgzRdf0Z+7(w&mEpVJdD#E3iLS6u_m4ujlOr$-+RBv^k-+balTz~ zK+QA$sd49tgjkh{k*Cdi4<4Am!9yuJ{qecjNju+LKi6n--Bh_`<+`iS?3*G}Jb%T! z6mU9ojY)K}%Eq=uq4K$#q@KL=o;0AO-$*FU#6ylw& z6qc`C{LgC1V!K^lE%$g|F1{M)volJLOR=`@Y}&cE?u#bZ7JvQiP_?_| Date: Thu, 18 Feb 2021 16:40:35 -0600 Subject: [PATCH 3/3] drawPolygon --- README.md | 23 ++++++++++------------- examples/blur.nim | 6 +----- examples/shadow.nim | 22 ++++++++++------------ src/pixie.nim | 22 ++++++++++++++++++++++ src/pixie/paths.nim | 3 +++ tests/images/drawPolygon.png | Bin 0 -> 1446 bytes tests/images/masks/drawPolygon.png | Bin 0 -> 854 bytes tests/test_images_draw.nim | 11 +++++++++++ tests/test_masks.nim | 5 +++++ 9 files changed, 62 insertions(+), 30 deletions(-) create mode 100644 tests/images/drawPolygon.png create mode 100644 tests/images/masks/drawPolygon.png diff --git a/README.md b/README.md index 3b81851..53be7ab 100644 --- a/README.md +++ b/README.md @@ -78,32 +78,29 @@ image.fillPath( ### Shadow [examples/shadow.nim](examples/shadow.nim) ```nim -var p: Path -p.polygon(100, 100, 70, sides = 8) -p.closePath() +let polygonImage = newImage(200, 200) +polygonImage.drawPolygon( + vec2(100, 100), + 70, + sides = 8, + rgba(255, 255, 255, 255) +) -var polyImage = newImage(200, 200) -polyImage.fillPath(p, rgba(255, 255, 255, 255)) - -image.draw(polyImage.shadow( +image.draw(polygonImage.shadow( offset = vec2(2, 2), spread = 2, blur = 10, color = rgba(0, 0, 0, 200) )) -image.draw(polyImage) +image.draw(polygonImage) ``` ![example output](examples/shadow.png) ### Blur [examples/blur.nim](examples/blur.nim) ```nim -var p: Path -p.polygon(100, 100, 70, sides = 6) -p.closePath() - let mask = newMask(200, 200) -mask.fillPath(p) +mask.drawPolygon(vec2(100, 100), 70, sides = 6) blur.blur(20) blur.draw(mask, blendMode = bmMask) diff --git a/examples/blur.nim b/examples/blur.nim index 53d48a1..e9889fd 100644 --- a/examples/blur.nim +++ b/examples/blur.nim @@ -7,12 +7,8 @@ let image.fill(rgba(255, 255, 255, 255)) -var p: Path -p.polygon(100, 100, 70, sides = 6) -p.closePath() - let mask = newMask(200, 200) -mask.fillPath(p) +mask.drawPolygon(vec2(100, 100), 70, sides = 6) blur.blur(20) blur.draw(mask, blendMode = bmMask) diff --git a/examples/shadow.nim b/examples/shadow.nim index a85c0f1..52c0d33 100644 --- a/examples/shadow.nim +++ b/examples/shadow.nim @@ -1,24 +1,22 @@ import pixie -let - trees = readImage("examples/data/trees.png") - image = newImage(200, 200) - +let image = newImage(200, 200) image.fill(rgba(255, 255, 255, 255)) -var p: Path -p.polygon(100, 100, 70, sides = 8) -p.closePath() +let polygonImage = newImage(200, 200) +polygonImage.drawPolygon( + vec2(100, 100), + 70, + sides = 8, + rgba(255, 255, 255, 255) +) -var polyImage = newImage(200, 200) -polyImage.fillPath(p, rgba(255, 255, 255, 255)) - -image.draw(polyImage.shadow( +image.draw(polygonImage.shadow( offset = vec2(2, 2), spread = 2, blur = 10, color = rgba(0, 0, 0, 200) )) -image.draw(polyImage) +image.draw(polygonImage) image.writeFile("examples/shadow.png") diff --git a/src/pixie.nim b/src/pixie.nim index a757b2e..f8b4caf 100644 --- a/src/pixie.nim +++ b/src/pixie.nim @@ -151,3 +151,25 @@ proc drawCircle*( var path: Path path.ellipse(center, radius, radius) mask.fillPath(path) + +proc drawPolygon*( + image: Image, + pos: Vec2, + size: float32, + sides: int, + color: ColorRGBA, + blendMode = bmNormal +) = + var path: Path + path.polygon(pos, size, sides) + image.fillPath(path, color, wrNonZero, blendMode) + +proc drawPolygon*( + mask: Mask, + pos: Vec2, + size: float32, + sides: int +) = + var path: Path + path.polygon(pos, size, sides) + mask.fillPath(path) diff --git a/src/pixie/paths.nim b/src/pixie/paths.nim index e6737a5..e5ae49f 100644 --- a/src/pixie/paths.nim +++ b/src/pixie/paths.nim @@ -462,6 +462,9 @@ proc polygon*(path: var Path, x, y, size: float32, sides: int) = y + size * sin(side.float32 * 2.0 * PI / sides.float32) ) +proc polygon*(path: var Path, pos: Vec2, size: float32, sides: int) {.inline.} = + path.polygon(pos.x, pos.y, size, sides) + proc commandsToShapes*(path: Path): seq[seq[Vec2]] = ## Converts SVG-like commands to line segments. diff --git a/tests/images/drawPolygon.png b/tests/images/drawPolygon.png new file mode 100644 index 0000000000000000000000000000000000000000..7f2ba6c914f02ab2b8270bc64e956982dd239fc7 GIT binary patch literal 1446 zcmb8veK->c90zd1VsT^gwnKZltjx*grB+>+wV0Qd#;U0lF%~8-$L8gFjCsq;yc?q= z(IJP7o|ZxwhMRX_BM!CnjR4V5d1oP{XwN+|*?#6|Xp`9(xF(e8EQjK{6Dt zXPtmyse38Hx|DHQ8s9LKYhdCPzV!M?E5pA2=5FMzTZ&5o!nPZUT9k)k*{lP%1>Geq zD{OM>da0#_OB%(0cY@wCyPu|zyf) zIYnEjb~^V01DFC8%4y5$m7Ip8u#Q8$A5oduw#KCi53M6Oz(>%KiP_PR6vr7It2Ouz zIM}f7F2_>P3J%3qFD$|lFDq21k<_;Yue7{)$vof9h zv6mhBs+%gRHlUep+~!7!!XQJBIW+z0Gj0z+21L}@6{A32HG{QJGWo_qf+n&TsAvQ> ztOFJWQ}f=V=7$)eD0<^^YBI@!<;wNX$>oQvMzYt@{Hn(@1q{20r23 zvTXVVRw^^+hF4_Yj1SdbeSZN8v1iQB3 z;)2Dlj029vMVQsO`)S$IDwR$z)aNW$l|@b3jXP$n632RQYZ9l}qQIRFyi^tYSBl9- z4(T*X0g>i$RtOkI#|I!l6-qQ81)rJk-`N-*4uX}?WSSSj&b21K`}6>J+DWG7CjD@@ z4jj`SXxz_%qyvx@cTZ5XX#ycz$Q!y$w1tpRn2u7n1V1a33^BmU(BqC|%tJr@OaYr^ zqeN3qn63MHLoOKxOasJDC-_&Rn5%rQn1JcWL(bPB1LIy`PVL-%&NPnpW<+>swdqU6 zMHBtLmFw!oMV&SYU+T^orJ~t5dvL&?_;=wD-M+O*p5v*@E%e^i`}M~uA7Cs|(kW2@ zHOE44v<*Blqg6q!F~*nQJg$_L|0x##h}|smzAioD)CqiZ?P*3QC~+aCfjQ)uH{Ko& z(zwO#weRW~4}k|2X?Qx*zN(J5C#rwGw1wQLO?bioaFY$UudKQgvRh6oYI3{f>-r9- zm%9Th4u@)wan+}fWiq0xsJ1uY(6S(%8YHtJqswqC{+RD@sb=(|%n4UKP)>|UfF9k9 z>=G>n^;no^v0acmfr{7wvGsK->bf*4=2K+POz)fIHAA?*QDLb|ex^Ny=4pXCw6mj6 z%dCrduV-g<&v)IOZ`OH|2NJBSTN9u4K5Vaa@RiC1U+w?|qzhCuJdLl=Kh}0%P#BrF z)h1KryL8;x!mcZjT#>wkn%{#20~sSlN=|Tc05JW~eUO#J1tpgy50tSCWBFapnWQu6*&rgOd7Z>HUfK0w^{fS^J$XCocOKBW3E-lvA>+m` z-QzQ6RMJR%?LlP~3G{!N2x(J1-4%v}`8b-c@@+c(=h?~uF_*P8J{C>h^;gdBED`?% HcZ2m01Ll_! literal 0 HcmV?d00001 diff --git a/tests/images/masks/drawPolygon.png b/tests/images/masks/drawPolygon.png new file mode 100644 index 0000000000000000000000000000000000000000..089d0d30c701a6ec650263ef27db4164dbef2948 GIT binary patch literal 854 zcmV-c1F8IpP)eJ0-ZRll`+J!=YyIo|d#yRlIcI0G ze}FboLXS%cJuW5mxRlW2QbLbQ2|X?){;P47eLh3cJt7>Pcw9?@F7hm%)+m{0Ov0q` zprONYeecDSF@&8sALhoCD89BCG#5i?a$#Fch?8r7f+rUdnH0C#7IhSxf)Oe${!Kay z>3RcO;Vt6>N6^Xc6L_hK`@@iV06?2$hnzr-m6GOpYtV!?IaX~dDV)DvQ)$vnAn1Ou%5)zx&Y=86Mq0y3&{K02P$Bb4|5rFSO)6?nFeb%0WeO!pl?2b$Eb1(b3OOPlmIfZh_!l}nFn!m(N6 zgb&Hcu$}{I4-#WFDLhEbeXEKu zMTSQBUSfcE!UlHa8wyFfkK#hYgnc|L|Ck!BO7Ssue6He zlk%&>)WY_}1reNnN+jt{*t>mluXEwLG+yWC$7-k*#_O~tk6P0Oi;LJ?#Oj?zdyp>Su|LcOtcW{dBWFp(TaYp)=_Aoe`e+j+^thDJ<5EJ8O9?$L gCG@zI(Bo3#4`1M|fS(Lm^#A|>07*qoM6N<$g4tq+QUCw| literal 0 HcmV?d00001 diff --git a/tests/test_images_draw.nim b/tests/test_images_draw.nim index 216b74b..a553d84 100644 --- a/tests/test_images_draw.nim +++ b/tests/test_images_draw.nim @@ -86,3 +86,14 @@ block: rgba(255, 255, 0, 255) ) image.writeFile("tests/images/drawEllipse.png") + +block: + let image = newImage(100, 100) + image.fill(rgba(0, 255, 255, 255)) + image.drawPolygon( + vec2(50, 50), + 30, + 6, + rgba(255, 255, 0, 255) + ) + image.writeFile("tests/images/drawPolygon.png") diff --git a/tests/test_masks.nim b/tests/test_masks.nim index 24a391a..5818291 100644 --- a/tests/test_masks.nim +++ b/tests/test_masks.nim @@ -125,3 +125,8 @@ block: let mask = newMask(100, 100) mask.drawEllipse(vec2(50, 50), 20, 10) writeFile("tests/images/masks/drawEllipse.png", mask.encodePng()) + +block: + let mask = newMask(100, 100) + mask.drawPolygon(vec2(50, 50), 30, 6) + writeFile("tests/images/masks/drawPolygon.png", mask.encodePng())