aboutsummaryrefslogtreecommitdiffstats
path: root/focus.go
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2024-01-19 21:26:16 -0500
committerSam Anthony <sam@samanthony.xyz>2024-01-19 21:26:16 -0500
commit39a3b948e525fe2b22b90e07df323ab77f6a81f6 (patch)
tree2054a4b5da06685b27a8346326aa286e0bed3634 /focus.go
parentb039cf83c33630396f245fbcba79383e0b2db383 (diff)
downloadvolute-39a3b948e525fe2b22b90e07df323ab77f6a81f6.zip
keep track of focused widget
Diffstat (limited to 'focus.go')
-rw-r--r--focus.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/focus.go b/focus.go
new file mode 100644
index 0000000..e6de390
--- /dev/null
+++ b/focus.go
@@ -0,0 +1,33 @@
+package main
+
+type Focus struct {
+ widgets []chan bool
+ i int // index of focused widget
+}
+
+func NewFocus(nWidgets int) Focus {
+ f := Focus{make([]chan bool, nWidgets), 0}
+ for i := range f.widgets {
+ f.widgets[i] = make(chan bool)
+ }
+ return f
+}
+
+func (f *Focus) Next() {
+ f.widgets[f.i] <- false
+ f.i = (f.i + 1) % len(f.widgets)
+ f.widgets[f.i] <- true
+}
+
+func (f *Focus) Prev() {
+ f.widgets[f.i] <- false
+ f.i = abs(f.i-1) % len(f.widgets)
+ f.widgets[f.i] <- true
+}
+
+func abs(n int) int {
+ if n < 0 {
+ return -n
+ }
+ return n
+}