aboutsummaryrefslogtreecommitdiffstats
path: root/focus.go
diff options
context:
space:
mode:
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
+}