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
|
link_lr :: (el : *UI_Elem, er : *UI_Elem) {
el.right = er;
er.left = el;
}
link_tb :: (et : *UI_Elem, eb : *UI_Elem) {
et.bottom = eb;
eb.top = et;
}
link_oi :: (eo : *UI_Elem, ei : *UI_Elem) {
eo.inner = ei;
ei.outer = eo;
}
link_grid :: (size : ivec2, elements : ..*UI_Elem) {
assert(size.x * size.y == elements.count);
for y : 0..size.y-1 {
for x : 0..size.x-2 {
i := x + size.x * y;
link_lr(elements[i], elements[i + 1]);
}
}
for y : 0..size.y-2 {
for x : 0..size.x-1 {
i := x + size.x * y;
link_tb(elements[i], elements[i + size.x]);
}
}
}
link_grid :: (size : ivec2, elements : []UI_Elem) {
assert(size.x * size.y == elements.count);
for y : 0..size.y-1 {
for x : 0..size.x-2 {
i := x + size.x * y;
link_lr(*elements[i], *elements[i + 1]);
}
}
for y : 0..size.y-2 {
for x : 0..size.x-1 {
i := x + size.x * y;
link_tb(*elements[i], *elements[i + size.x]);
}
}
}
link_row :: (elements : ..*UI_Elem) {
for i : 0..elements.count-2 {
link_lr(elements[i], elements[i + 1]);
}
}
link_column :: (elements : ..*UI_Elem) {
for i : 0..elements.count-2 {
link_tb(elements[i], elements[i + 1]);
}
}
link_to_outer :: (eo : *UI_Elem, ei : ..*UI_Elem) {
if ei.count > 0 {
for ei {
it.outer = eo;
}
eo.inner = ei[0];
}
}
link_to_bottom :: (eb : *UI_Elem, et : ..*UI_Elem) {
if et.count > 0 {
for et {
it.bottom = eb;
}
eb.top = et[0];
}
}
link_to_top :: (et : *UI_Elem, eb : ..*UI_Elem) {
if eb.count > 0 {
for eb {
it.top = et;
}
et.bottom = eb[0];
}
}
link_to_right :: (er : *UI_Elem, el : ..*UI_Elem) {
if el.count > 0 {
for el {
it.right = er;
}
er.left = el[0];
}
}
link_to_left :: (el : *UI_Elem, er : ..*UI_Elem) {
if er.count > 0 {
for er {
it.left = el;
}
el.right = er[0];
}
}
|