-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest.nim
76 lines (54 loc) · 1.46 KB
/
test.nim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import glib2
import gdk2
import gtk2
import cairo
const
lib = "libgdk-x11-2.0.dylib"
# proc cairo_destroy*(ctx: PContext) {.
# cdecl, dynlib: lib, importc: "gdk_cairo_destroy".}
var argc = 0
var argv: array[0,int]
gtk2.init(addr(argc), addr(argv))
let win = window_new(gtk2.WINDOW_TOPLEVEL)
# win.fullscreen()
var x = 0.0
var dx = 0.0
var ddx = 0.0
when true:
let area = drawing_area_new()
let win_draw =
proc (widget: PWidget) {.cdecl.} =
echo "draw"
var ctx = cairo_create(widget.window)
ctx.set_source_rgb(0, 0, 0)
ctx.set_font_size(16.0)
ctx.move_to(x, 200)
ctx.show_text("Hello World")
destroy(ctx)
discard area.signal_connect("expose-event", SIGNAL_FUNC(win_draw), nil)
win.add(area)
when false:
let btn = button_new("Test")
let on_pressed =
proc (widget: PWidget) {.cdecl.} =
echo "Pressed"
discard btn.signal_connect("pressed", SIGNAL_FUNC(on_pressed), nil)
win.add(btn)
let on_key_press =
proc (widget: PWidget, event: PEvent): gboolean =
echo "Yo"
ddx = 0.1
# win.queue_draw
false
let anim =
proc (): gboolean =
x += dx
dx += ddx
win.queue_draw
true
discard g_timeout_add(50, anim, nil)
discard win.signal_connect("key-press-event", SIGNAL_FUNC(on_key_press), nil)
win.set_title("Test")
win.set_default_size(100,100)
win.show_all
main()