aboutsummaryrefslogtreecommitdiff
path: root/kscurses/ui/links.jai
blob: dc8c667ae3d3c13e749794be66ca1fc2abc29ea5 (plain)
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];
	}
}