From 39a3b948e525fe2b22b90e07df323ab77f6a81f6 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Fri, 19 Jan 2024 21:26:16 -0500 Subject: keep track of focused widget --- gui/widget/widget.go | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) (limited to 'gui') diff --git a/gui/widget/widget.go b/gui/widget/widget.go index 216b146..94d1915 100644 --- a/gui/widget/widget.go +++ b/gui/widget/widget.go @@ -28,7 +28,7 @@ func Label(text string, r image.Rectangle, env gui.Env) { close(env.Draw()) } -func Input(val chan<- uint, r image.Rectangle, env gui.Env) { +func Input(val chan<- uint, r image.Rectangle, focusChan <-chan bool, env gui.Env) { redraw := func(text []byte) func(draw.Image) image.Rectangle { return func(drw draw.Image) image.Rectangle { drawText(text, drw, r) @@ -40,27 +40,27 @@ func Input(val chan<- uint, r image.Rectangle, env gui.Env) { env.Draw() <- redraw(text) - for event := range env.Events() { - switch event := event.(type) { - case win.WiFocus: - if event.Focused { - env.Draw() <- redraw(text) - } - case win.MoDown: - if event.Point.In(r) { - focus = true - } - case win.KbType: - if focus && isDigit(event.Rune) { - text = fmt.Appendf(text, "%c", event.Rune) - env.Draw() <- redraw(text) - val <- atoi(text) - } - case win.KbDown: - if focus && event.Key == win.KeyBackspace && len(text) > 0 { - text = text[:len(text)-1] - env.Draw() <- redraw(text) - val <- atoi(text) + for { + select { + case focus = <-focusChan: + case event := <-env.Events(): + switch event := event.(type) { + case win.WiFocus: + if event.Focused { + env.Draw() <- redraw(text) + } + case win.KbType: + if focus && isDigit(event.Rune) { + text = fmt.Appendf(text, "%c", event.Rune) + env.Draw() <- redraw(text) + val <- atoi(text) + } + case win.KbDown: + if focus && event.Key == win.KeyBackspace && len(text) > 0 { + text = text[:len(text)-1] + env.Draw() <- redraw(text) + val <- atoi(text) + } } } } -- cgit v1.2.3