diff --git a/examples/blur.nim b/examples/blur.nim index ff6d364..53d48a1 100644 --- a/examples/blur.nim +++ b/examples/blur.nim @@ -1,4 +1,4 @@ -import chroma, pixie, vmath +import pixie let trees = readImage("examples/data/trees.png") diff --git a/examples/heart.nim b/examples/heart.nim index 79251c1..690e364 100644 --- a/examples/heart.nim +++ b/examples/heart.nim @@ -1,4 +1,4 @@ -import chroma, pixie, vmath +import pixie let image = newImage(200, 200) diff --git a/examples/heart.png b/examples/heart.png index b7ca705..968e975 100644 Binary files a/examples/heart.png and b/examples/heart.png differ diff --git a/examples/line.nim b/examples/line.nim index 8ab89da..84a14cd 100644 --- a/examples/line.nim +++ b/examples/line.nim @@ -1,4 +1,4 @@ -import chroma, pixie, vmath +import pixie let image = newImage(200, 200) diff --git a/examples/rounded_rectangle.nim b/examples/rounded_rectangle.nim index 598ea92..67f41f2 100644 --- a/examples/rounded_rectangle.nim +++ b/examples/rounded_rectangle.nim @@ -1,4 +1,4 @@ -import chroma, pixie, vmath +import pixie let image = newImage(200, 200) image.fill(rgba(255, 255, 255, 255)) diff --git a/examples/shadow.nim b/examples/shadow.nim index 8922f79..a85c0f1 100644 --- a/examples/shadow.nim +++ b/examples/shadow.nim @@ -1,4 +1,4 @@ -import chroma, pixie, vmath +import pixie let trees = readImage("examples/data/trees.png") diff --git a/examples/square.nim b/examples/square.nim index 43f2fe5..81796b8 100644 --- a/examples/square.nim +++ b/examples/square.nim @@ -1,4 +1,4 @@ -import chroma, pixie +import pixie var image = newImage(200, 200) image.fill(rgba(255, 255, 255, 255)) diff --git a/examples/tiger.nim b/examples/tiger.nim index 1d0e3a4..157647e 100644 --- a/examples/tiger.nim +++ b/examples/tiger.nim @@ -1,4 +1,4 @@ -import chroma, pixie, vmath +import pixie let image = newImage(200, 200) image.fill(rgba(255, 255, 255, 255)) diff --git a/examples/tiger.png b/examples/tiger.png index f32886d..9a63677 100644 Binary files a/examples/tiger.png and b/examples/tiger.png differ diff --git a/src/pixie.nim b/src/pixie.nim index 384cfe0..faada81 100644 --- a/src/pixie.nim +++ b/src/pixie.nim @@ -1,8 +1,9 @@ -import flatty/binny, os, pixie/blends, pixie/common, pixie/fileformats/bmp, - pixie/fileformats/jpg, pixie/fileformats/png, pixie/fileformats/svg, - pixie/images, pixie/masks, pixie/paths, pixie/gradients +import bumpy, chroma, flatty/binny, os, pixie/blends, pixie/common, + pixie/fileformats/bmp, pixie/fileformats/jpg, pixie/fileformats/png, + pixie/fileformats/svg, pixie/gradients, pixie/images, pixie/masks, + pixie/paths, vmath -export blends, common, images, masks, paths, gradients +export blends, bumpy, chroma, common, gradients, images, masks, paths, vmath type FileFormat* = enum @@ -48,3 +49,15 @@ proc writeFile*(image: Image, filePath: string) = else: raise newException(PixieError, "Unsupported image file extension") image.writeFile(filePath, fileformat) + +proc drawRect*( + image: Image, rect: Rect, color: ColorRGBA, blendMode = bmNormal +) = + var path: Path + path.rect(rect) + image.fillPath(path, color, wrNonZero, blendMode) + +proc drawRect*(mask: Mask, rect: Rect) = + var path: Path + path.rect(rect) + mask.fillPath(path) diff --git a/src/pixie/gradients.nim b/src/pixie/gradients.nim index e60989d..95b23f5 100644 --- a/src/pixie/gradients.nim +++ b/src/pixie/gradients.nim @@ -1,4 +1,4 @@ -import images, vmath, chroma, common +import chroma, common, images, vmath type ColorStop* = object ## Represents color on a gradient curve. diff --git a/src/pixie/paths.nim b/src/pixie/paths.nim index 76ad11d..acd5308 100644 --- a/src/pixie/paths.nim +++ b/src/pixie/paths.nim @@ -370,6 +370,9 @@ proc rect*(path: var Path, x, y, w, h: float32, clockwise = true) = proc rect*(path: var Path, pos: Vec2, wh: Vec2, clockwise = true) {.inline.} = path.rect(pos.x, pos.y, wh.x, wh.y, clockwise) +proc rect*(path: var Path, rect: Rect, clockwise = true) {.inline.} = + path.rect(rect.x, rect.y, rect.w, rect.h, clockwise) + const splineCircleK = 4.0 * (-1.0 + sqrt(2.0)) / 3 proc roundedRect*( diff --git a/tests/images/drawRect.png b/tests/images/drawRect.png new file mode 100644 index 0000000..e651170 Binary files /dev/null and b/tests/images/drawRect.png differ diff --git a/tests/images/masks/drawRect.png b/tests/images/masks/drawRect.png new file mode 100644 index 0000000..9afe3cc Binary files /dev/null and b/tests/images/masks/drawRect.png differ diff --git a/tests/test_images_draw.nim b/tests/test_images_draw.nim index 5e3f46f..3b3e945 100644 --- a/tests/test_images_draw.nim +++ b/tests/test_images_draw.nim @@ -1,4 +1,4 @@ -import chroma, pixie, vmath +import pixie block: let @@ -49,3 +49,9 @@ block: a.draw(b, translate(vec2(250, 250)) * rotationMat3(360 * PI / 180)) a.writeFile("tests/images/rotate360.png") + +block: + let image = newImage(100, 100) + image.fill(rgba(0, 255, 255, 255)) + image.drawRect(rect(vec2(10, 10), vec2(30, 30)), rgba(255, 255, 0, 255)) + image.writeFile("tests/images/drawRect.png") diff --git a/tests/test_masks.nim b/tests/test_masks.nim index e5b2647..b6171f8 100644 --- a/tests/test_masks.nim +++ b/tests/test_masks.nim @@ -1,4 +1,4 @@ -import chroma, pixie, pixie/fileformats/png, vmath +import pixie, pixie/fileformats/png block: let mask = newMask(100, 100) @@ -102,3 +102,8 @@ block: mask.ceil() writeFile("tests/images/masks/circleMaskSharpened.png", mask.encodePng()) + +block: + let mask = newMask(100, 100) + mask.drawRect(rect(vec2(10, 10), vec2(30, 30))) + writeFile("tests/images/masks/drawRect.png", mask.encodePng())