diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2024-01-19 21:26:16 -0500 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2024-01-19 21:26:16 -0500 |
| commit | 39a3b948e525fe2b22b90e07df323ab77f6a81f6 (patch) | |
| tree | 2054a4b5da06685b27a8346326aa286e0bed3634 /focus.go | |
| parent | b039cf83c33630396f245fbcba79383e0b2db383 (diff) | |
| download | volute-39a3b948e525fe2b22b90e07df323ab77f6a81f6.zip | |
keep track of focused widget
Diffstat (limited to 'focus.go')
| -rw-r--r-- | focus.go | 33 |
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 +} |