summaryrefslogtreecommitdiff
path: root/src/nigui/private/gtk3/platform_impl.nim
diff options
context:
space:
mode:
authortrustable-code <krauter.simon@arcor.de>2018-04-03 20:27:52 +0200
committertrustable-code <krauter.simon@arcor.de>2018-04-03 20:27:52 +0200
commit8d7951569b69d747c68fd60ce2f6a63937b0a9f0 (patch)
treeaa518877141743f76ac5d98560dc83cf67933fed /src/nigui/private/gtk3/platform_impl.nim
parentb4c3624a1015b6552d8a267dd515181bc361e1b3 (diff)
downloadNiGui-8d7951569b69d747c68fd60ce2f6a63937b0a9f0.tar.gz
NiGui-8d7951569b69d747c68fd60ce2f6a63937b0a9f0.zip
Add Image.beginPixelDataAccess() and endPixelDataAccess() for fast image manipulation
Diffstat (limited to 'src/nigui/private/gtk3/platform_impl.nim')
-rwxr-xr-xsrc/nigui/private/gtk3/platform_impl.nim16
1 files changed, 12 insertions, 4 deletions
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