-
Notifications
You must be signed in to change notification settings - Fork 1
/
Draggable_Boxes01_no.nim
98 lines (84 loc) · 3.45 KB
/
Draggable_Boxes01_no.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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import random
import strUtils
import fltk_main
proc `\` (x: long; y: long): long = long(x.float / y.float)
proc `\=` (x: var long; y: long) =
x = long(x.float / y.float)
var cat_xpm0 = [
"50 34 4 1",
" c #000000",
"o c #ff8800",
"@ c #ffffff",
"# c none",
"##################################################",
"### ############################## ####",
"### ooooo ########################### ooooo ####",
"### oo oo ######################### oo oo ####",
"### oo oo ####################### oo oo ####",
"### oo oo ##################### oo oo ####",
"### oo oo ################### oo oo ####",
"### oo oo oo oo ####",
"### oo oo ooooooooooooooo oo oo ####",
"### oo ooooooooooooooooooooo oo ####",
"### oo ooooooooooooooooooooooooooo ooo ####",
"#### oo ooooooo ooooooooooooo ooooooo oo #####",
"#### oo oooooooo ooooooooooooo oooooooo oo #####",
"##### oo oooooooo ooooooooooooo oooooooo oo ######",
"##### o ooooooooooooooooooooooooooooooo o ######",
"###### ooooooooooooooooooooooooooooooooooo #######",
"##### ooooooooo ooooooooo ooooooooo ######",
"##### oooooooo @@@ ooooooo @@@ oooooooo ######",
"##### oooooooo @@@@@ ooooooo @@@@@ oooooooo ######",
"##### oooooooo @@@@@ ooooooo @@@@@ oooooooo ######",
"##### oooooooo @@@ ooooooo @@@ oooooooo ######",
"##### ooooooooo ooooooooo ooooooooo ######",
"###### oooooooooooooo oooooooooooooo #######",
"###### oooooooo@@@@@@@ @@@@@@@oooooooo #######",
"###### ooooooo@@@@@@@@@ @@@@@@@@@ooooooo #######",
"####### ooooo@@@@@@@@@@@ @@@@@@@@@@@ooooo ########",
"######### oo@@@@@@@@@@@@ @@@@@@@@@@@@oo ##########",
"########## o@@@@@@ @@@@@ @@@@@ @@@@@@o ###########",
"########### @@@@@@@ @ @@@@@@@ ############",
"############ @@@@@@@@@@@@@@@@@@@@@ #############",
"############## @@@@@@@@@@@@@@@@@ ###############",
"################ @@@@@@@@@ #################",
"#################### #####################",
"##################################################"]
var cat_xpm = cat_xpm0.join("")
proc HandleCB(self: pointer, event: Fl_Event): long {.cdecl.}=
var xStart{.global.}, yStart{.global.}: long
case int(event) :
of FL_EVENT_PUSH :
# save where dragging begins
xStart = Fl_WidgetGetX(self)-Fl_EventX()
yStart = Fl_WidgetGetY(self)-Fl_EventY()
of FL_EVENT_DRAG :
# handle dragging
Fl_WidgetPosition self,xStart+Fl_EventX(), yStart+Fl_EventY()
Fl_WidgetRedraw Fl_WidgetWindow(self)
of FL_EVENT_RELEASE :
Fl_WidgetRedraw Fl_WidgetWindow(self)
else:
# all other events should be handle by FLTK
return 0
return 1 # we handle FL_EVENT_PUSH,FL_EVENT_DRAG and FL_EVENT_RELEASE
#
# main
#
var w = Fl_GetW() \ 2
var h = Fl_GetH() \ 2
var cat = Fl_PixmapNew(cat_xpm)
var win = Fl_Double_WindowNew(w, h, "dragable boxes")
w \= 50
h \= 34
echo w
echo h
var x, y: integer
for y in 0 .. h:
for x in 0 .. w:
if rand(1.0) > 0.5 :
var box = Fl_BoxExNew(x*50, y*34, 50, 34)
Fl_BoxExSetHandleCB box, HandleCB
Fl_WidgetSetImage box, cat
Fl_WindowShow win
Fl_Run()