From 8d7951569b69d747c68fd60ce2f6a63937b0a9f0 Mon Sep 17 00:00:00 2001 From: trustable-code Date: Tue, 3 Apr 2018 20:27:52 +0200 Subject: Add Image.beginPixelDataAccess() and endPixelDataAccess() for fast image manipulation --- src/nigui/private/gtk3/platform_impl.nim | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'src/nigui/private/gtk3/platform_impl.nim') diff --git a/src/nigui/private/gtk3/platform_impl.nim b/src/nigui/private/gtk3/platform_impl.nim index 0d0c420..09db57c 100755 --- a/src/nigui/private/gtk3/platform_impl.nim +++ b/src/nigui/private/gtk3/platform_impl.nim @@ -468,10 +468,10 @@ method setPixel(canvas: Canvas, x, y: int, color: Color) = raiseError("Pixel is out of range.") cairo_surface_flush(canvasImpl.fSurface) let i = y * canvasImpl.fStride + x * 4 - canvasImpl.fData[i + 0] = color.blue.chr - canvasImpl.fData[i + 1] = color.green.chr - canvasImpl.fData[i + 2] = color.red.chr - canvasImpl.fData[i + 3] = 255.chr + canvasImpl.fData[i + 0] = color.blue + canvasImpl.fData[i + 1] = color.green + canvasImpl.fData[i + 2] = color.red + canvasImpl.fData[i + 3] = 255 cairo_surface_mark_dirty(canvasImpl.fSurface) method `fontFamily=`(canvas: CanvasImpl, fontFamily: string) = @@ -555,6 +555,14 @@ method saveToJpegFile(image: Image, filePath: string, quality = 80) = if not gdk_pixbuf_save(pixbuf, filePath, "jpeg", error.addr, "quality", $quality, nil): pRaiseGError(error) +method beginPixelDataAccess(image: Image): ptr UncheckedArray[byte] = + let canvas = cast[CanvasImpl](image.canvas) + result = canvas.fData + +method endPixelDataAccess(image: Image) = + let canvas = cast[CanvasImpl](image.canvas) + cairo_surface_mark_dirty(canvas.fSurface) + # ---------------------------------------------------------------------------------------- # Window -- cgit v1.2.3