diff options
Diffstat (limited to 'gui/widget/widget.go')
| -rw-r--r-- | gui/widget/widget.go | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/gui/widget/widget.go b/gui/widget/widget.go index 41fb621..53be0b5 100644 --- a/gui/widget/widget.go +++ b/gui/widget/widget.go @@ -46,20 +46,10 @@ func Input(val chan<- uint, r image.Rectangle, focus FocusSlave, env gui.Env, wg defer close(env.Draw()) defer close(val) - redraw := func(text []byte, focused bool) func(draw.Image) image.Rectangle { - return func(drw draw.Image) image.Rectangle { - if focused { - drawText(text, drw, r, GREEN, FOCUS_COLOR) - } else { - drawText(text, drw, r, GREEN, WHITE) - } - return r - } - } text := []byte{'0'} focused := false - env.Draw() <- redraw(text, focused) + env.Draw() <- inputDraw(text, focused, r) Loop: for { select { @@ -68,14 +58,14 @@ Loop: break Loop } focused = true - env.Draw() <- redraw(text, focused) + env.Draw() <- inputDraw(text, focused, r) case dir, ok := <-focus.lose: if !ok { break Loop } focus.yield <- dir focused = false - env.Draw() <- redraw(text, focused) + env.Draw() <- inputDraw(text, focused, r) case event, ok := <-env.Events(): if !ok { // channel closed break Loop @@ -83,18 +73,18 @@ Loop: switch event := event.(type) { case win.WiFocus: if event.Focused { - env.Draw() <- redraw(text, focused) + env.Draw() <- inputDraw(text, focused, r) } case win.KbType: if focused && isDigit(event.Rune) { text = fmt.Appendf(text, "%c", event.Rune) - env.Draw() <- redraw(text, focused) + env.Draw() <- inputDraw(text, focused, r) val <- atoi(text) } case win.KbDown: if focused && event.Key == win.KeyBackspace && len(text) > 0 { text = text[:len(text)-1] - env.Draw() <- redraw(text, focused) + env.Draw() <- inputDraw(text, focused, r) val <- atoi(text) } } @@ -102,6 +92,17 @@ Loop: } } +func inputDraw(text []byte, focused bool, r image.Rectangle) func(draw.Image) image.Rectangle { + return func(drw draw.Image) image.Rectangle { + if focused { + drawText(text, drw, r, GREEN, FOCUS_COLOR) + } else { + drawText(text, drw, r, GREEN, WHITE) + } + return r + } +} + func Output(val <-chan float64, r image.Rectangle, env gui.Env, wg *sync.WaitGroup) { defer wg.Done() defer close(env.Draw()) |