diff --git a/src/pixie/contexts.nim b/src/pixie/contexts.nim index 85c16a7..bb9e764 100644 --- a/src/pixie/contexts.nim +++ b/src/pixie/contexts.nim @@ -589,3 +589,26 @@ proc strokePolygon*(ctx: Context, pos: Vec2, size: float32, sides: int) = var path: Path path.polygon(pos, size, sides) ctx.stroke(path) + +# proc drawImage*(ctx: Context, image: Image, dx, dy, dWidth, dHeight: float32) = +# ## Draws an image onto the canvas. +# var path: Path +# var imageMat = ctx.mat * translate(vec2(dx, dy)) * scale(vec2( +# image.width.float32 / dWidth, +# image.height.float32 / dHeight +# )) +# ctx.fillStyle = Paint(kind: pkImage, image: image, imageMat: imageMat) +# path.rect(rect(dx, dy, image.width.float32, image.height.float32)) +# ctx.fill(path) + +proc drawImage*(ctx: Context, image: Image, dx, dy: float32) = + ## Draws an image onto the canvas. + var path: Path + var imageMat = ctx.mat * translate(vec2(dx, dy)) + ctx.fillStyle = Paint(kind: pkImage, image: image, imageMat: imageMat) + path.rect(rect(dx, dy, image.width.float32, image.height.float32)) + ctx.fill(path) + +proc drawImage*(ctx: Context, image: Image, pos: Vec2) = + ## Draws an image onto the canvas. + ctx.drawImage(image, pos.x, pos.y) diff --git a/tests/test_contexts.nim b/tests/test_contexts.nim index be0db11..fa382c5 100644 --- a/tests/test_contexts.nim +++ b/tests/test_contexts.nim @@ -548,3 +548,33 @@ block: ctx.fillRect(50, 50, 100, 100) image.writeFile("tests/images/context/globalAlpha_1.png") + +block: + let + image = newImage(100, 100) + ctx = newContext(image) + var testImage = readImage("tests/images/pip1.png") + ctx.drawImage(testImage, 0, 0) + ctx.drawImage(testImage, 30, 30) + image.writeFile("tests/images/context/draw_image.png") + +block: + let + image = newImage(100, 100) + ctx = newContext(image) + var testImage = readImage("tests/images/pip1.png") + ctx.translate(30, 30) + ctx.drawImage(testImage, -30, -30) + ctx.drawImage(testImage, 0, 0) + image.writeFile("tests/images/context/draw_image_translated.png") + +block: + let + image = newImage(100, 100) + ctx = newContext(image) + var testImage = readImage("tests/images/pip1.png") + ctx.scale(2, 2) + ctx.drawImage(testImage, 0, 0) + ctx.scale(0.25, 0.25) + ctx.drawImage(testImage, 0, 0) + image.writeFile("tests/images/context/draw_image_scaled.png")