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 0000000..7f2ba6c Binary files /dev/null and b/tests/images/drawPolygon.png differ diff --git a/tests/images/masks/drawPolygon.png b/tests/images/masks/drawPolygon.png new file mode 100644 index 0000000..089d0d3 Binary files /dev/null and b/tests/images/masks/drawPolygon.png differ 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())