aboutsummaryrefslogtreecommitdiff
path: root/kscurses/ui/parent.jai
diff options
context:
space:
mode:
Diffstat (limited to 'kscurses/ui/parent.jai')
-rw-r--r--kscurses/ui/parent.jai33
1 files changed, 33 insertions, 0 deletions
diff --git a/kscurses/ui/parent.jai b/kscurses/ui/parent.jai
new file mode 100644
index 0000000..af459de
--- /dev/null
+++ b/kscurses/ui/parent.jai
@@ -0,0 +1,33 @@
+UI_Parent :: struct {
+ #as using base : UI_Elem;
+ active_element : *UI_Elem;
+}
+
+__last_set : *UI_Elem;
+
+set_active_recursive :: (ui_elem : *UI_Elem) {
+ assert(!__last_set); __last_set = ui_elem;
+ assert(ui_elem.cursor_state == .OUTSIDE); ui_elem.cursor_state = .ON;
+
+ current := ui_elem;
+ while 1 {
+ parent := current.parent;
+ if !parent break;
+ assert(!parent.active_element);
+ parent.active_element = current;
+ current = xx parent;
+ }
+}
+unset_active_recursive :: (ui_elem : *UI_Elem) {
+ assert(__last_set == ui_elem); __last_set = null;
+ assert(ui_elem.cursor_state == .ON); ui_elem.cursor_state = .OUTSIDE;
+
+ current := ui_elem;
+ while 1 {
+ parent := current.parent;
+ if !parent break;
+ assert(parent.active_element == current);
+ parent.active_element = null;
+ current = xx parent;
+ }
+} \ No newline at end of file