summary refs log tree commit diff stats
path: root/tests/niminaction/Chapter8/sdl
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@gmail.com>2017-10-01 17:17:40 +0100
committerDominik Picheta <dominikpicheta@gmail.com>2017-10-01 17:17:40 +0100
commit7889c03cbc50afaa67e1e0eedb4fdcc577913bcd (patch)
tree96f310842e9313166e69a0a4ccdd74645f1a9098 /tests/niminaction/Chapter8/sdl
parenta585748f2747bfa9f5e9d5585a74928a9fd13dc5 (diff)
downloadNim-7889c03cbc50afaa67e1e0eedb4fdcc577913bcd.tar.gz
Add tests for examples from Nim in Action.
Diffstat (limited to 'tests/niminaction/Chapter8/sdl')
-rw-r--r--tests/niminaction/Chapter8/sdl/sdl.nim34
-rw-r--r--tests/niminaction/Chapter8/sdl/sdl_test.nim25
2 files changed, 59 insertions, 0 deletions
diff --git a/tests/niminaction/Chapter8/sdl/sdl.nim b/tests/niminaction/Chapter8/sdl/sdl.nim
new file mode 100644
index 000000000..a1b30281b
--- /dev/null
+++ b/tests/niminaction/Chapter8/sdl/sdl.nim
@@ -0,0 +1,34 @@
+when defined(Windows):
+  const libName* = "SDL2.dll"
+elif defined(Linux):
+  const libName* = "libSDL2.so"
+elif defined(MacOsX):
+  const libName* = "libSDL2.dylib"
+
+type
+  SdlWindow = object
+  SdlWindowPtr* = ptr SdlWindow
+  SdlRenderer = object
+  SdlRendererPtr* = ptr SdlRenderer
+
+const INIT_VIDEO* = 0x00000020
+
+{.push dynlib: libName.}
+proc init*(flags: uint32): cint {.importc: "SDL_Init".}
+
+proc createWindowAndRenderer*(width, height: cint, window_flags: cuint,
+    window: var SdlWindowPtr, renderer: var SdlRendererPtr): cint
+    {.importc: "SDL_CreateWindowAndRenderer".}
+
+proc pollEvent*(event: pointer): cint {.importc: "SDL_PollEvent".}
+
+proc setDrawColor*(renderer: SdlRendererPtr, r, g, b, a: uint8): cint
+    {.importc: "SDL_SetRenderDrawColor", discardable.}
+
+proc present*(renderer: SdlRendererPtr) {.importc: "SDL_RenderPresent".}
+
+proc clear*(renderer: SdlRendererPtr) {.importc: "SDL_RenderClear".}
+
+proc drawLines*(renderer: SdlRendererPtr, points: ptr tuple[x, y: cint],
+    count: cint): cint {.importc: "SDL_RenderDrawLines", discardable.}
+{.pop.}
diff --git a/tests/niminaction/Chapter8/sdl/sdl_test.nim b/tests/niminaction/Chapter8/sdl/sdl_test.nim
new file mode 100644
index 000000000..a572d5231
--- /dev/null
+++ b/tests/niminaction/Chapter8/sdl/sdl_test.nim
@@ -0,0 +1,25 @@
+import os
+import sdl
+
+if sdl.init(INIT_VIDEO) == -1:
+  quit("Couldn't initialise SDL")
+
+var window: SdlWindowPtr
+var renderer: SdlRendererPtr
+if createWindowAndRenderer(640, 480, 0, window, renderer) == -1:
+  quit("Couldn't create a window or renderer")
+
+discard pollEvent(nil)
+renderer.setDrawColor 29, 64, 153, 255
+renderer.clear
+renderer.setDrawColor 255, 255, 255, 255
+var points = [
+  (260'i32, 320'i32),
+  (260'i32, 110'i32),
+  (360'i32, 320'i32),
+  (360'i32, 110'i32)
+]
+renderer.drawLines(addr points[0], points.len.cint)
+
+renderer.present
+sleep(5000)