From 7a1a2850c2ce679c45c5351285003ffeb1bfa54c Mon Sep 17 00:00:00 2001 From: treeform Date: Fri, 25 Jun 2021 22:10:53 -0700 Subject: [PATCH] More tests and docs. --- src/pixie/contexts.nim | 18 +++++++++++++----- tests/images/context/draw_image_rhino2.png | Bin 0 -> 36619 bytes tests/test_contexts.nim | 8 ++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 tests/images/context/draw_image_rhino2.png diff --git a/src/pixie/contexts.nim b/src/pixie/contexts.nim index 884f4df..c7f7d5a 100644 --- a/src/pixie/contexts.nim +++ b/src/pixie/contexts.nim @@ -591,7 +591,7 @@ proc strokePolygon*(ctx: Context, pos: Vec2, size: float32, sides: int) = ctx.stroke(path) proc drawImage*(ctx: Context, image: Image, dx, dy, dWidth, dHeight: float32) = - ## Draws an image onto the canvas. + ## Draws a source image onto the destination image. var path: Path var imageMat = ctx.mat * translate(vec2(dx, dy)) * scale(vec2( dWidth / image.width.float32, @@ -602,15 +602,15 @@ proc drawImage*(ctx: Context, image: Image, dx, dy, dWidth, dHeight: float32) = ctx.fill(path) proc drawImage*(ctx: Context, image: Image, dx, dy: float32) = - ## Draws an image onto the canvas. + ## Draws a source image onto the destination image. ctx.drawImage(image, dx, dx, image.width.float32, image.height.float32) proc drawImage*(ctx: Context, image: Image, pos: Vec2) = - ## Draws an image onto the canvas. + ## Draws a source image onto the destination image. ctx.drawImage(image, pos.x, pos.y) proc drawImage*(ctx: Context, image: Image, rect: Rect) = - ## Draws an image onto the canvas. + ## Draws a source image onto the destination image. ctx.drawImage(image, rect.x, rect.y, rect.w, rect.h) proc drawImage*( @@ -619,6 +619,14 @@ proc drawImage*( sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight: float32 ) = - ## Draws an image onto the canvas. + ## Draws a source image onto the destination image. var image = image.subImage(sx.int, sy.int, sWidth.int, sHeight.int) ctx.drawImage(image, dx, dx, image.width.float32, image.height.float32) + +proc drawImage*(ctx: Context, image: Image, src, dest: Rect) = + ## Draws a source image onto the destination image. + ctx.drawImage( + image, + src.x, src.y, src.w, src.h, + dest.x, dest.y, dest.w, dest.h + ) diff --git a/tests/images/context/draw_image_rhino2.png b/tests/images/context/draw_image_rhino2.png new file mode 100644 index 0000000000000000000000000000000000000000..2fcd692b08d8b30e605e5926574a9fd849c80de1 GIT binary patch literal 36619 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 literal 0 HcmV?d00001 diff --git a/tests/test_contexts.nim b/tests/test_contexts.nim index ee99c0d..bb27f31 100644 --- a/tests/test_contexts.nim +++ b/tests/test_contexts.nim @@ -594,3 +594,11 @@ block: rhino = readImage("tests/images/rhino.png") ctx.drawImage(rhino, 33, 71, 104, 124, 21, 20, 87, 104); image.writeFile("tests/images/context/draw_image_rhino.png") + +block: + let + image = newImage(300, 227) + ctx = newContext(image) + rhino = readImage("tests/images/rhino.png") + ctx.drawImage(rhino, rect(33, 71, 104, 124), rect(21, 20, 87, 104)); + image.writeFile("tests/images/context/draw_image_rhino2.png")