aboutsummaryrefslogtreecommitdiff
path: root/kscurses/ui/links.jai
diff options
context:
space:
mode:
authordam <dam@gudinoff>2023-08-17 20:28:47 +0100
committerdam <dam@gudinoff>2023-08-17 20:28:47 +0100
commit709879ee56d31fe543a0ad882713bd4e3d17d2d2 (patch)
tree12a35282bdd0f1f8a2159ade147944c89254db24 /kscurses/ui/links.jai
parentfa1b8ea54646f1a0f3eadef33e3a660b875cc1ff (diff)
downloadtask-time-tracker-709879ee56d31fe543a0ad882713bd4e3d17d2d2.tar.zst
task-time-tracker-709879ee56d31fe543a0ad882713bd4e3d17d2d2.zip
Added kscurses and testing program.
Diffstat (limited to 'kscurses/ui/links.jai')
-rw-r--r--kscurses/ui/links.jai94
1 files changed, 94 insertions, 0 deletions
diff --git a/kscurses/ui/links.jai b/kscurses/ui/links.jai
new file mode 100644
index 0000000..dc8c667
--- /dev/null
+++ b/kscurses/ui/links.jai
@@ -0,0 +1,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];
+ }
+} \ No newline at end of file