diff options
Diffstat (limited to 'gui/widget')
| -rw-r--r-- | gui/widget/text.go | 19 | ||||
| -rw-r--r-- | gui/widget/widget.go | 28 |
2 files changed, 29 insertions, 18 deletions
diff --git a/gui/widget/text.go b/gui/widget/text.go index 5e37d70..e336874 100644 --- a/gui/widget/text.go +++ b/gui/widget/text.go @@ -5,6 +5,7 @@ import ( "sync" "image" + "image/color" "image/draw" "golang.org/x/image/font" @@ -14,12 +15,10 @@ import ( ) var ( - FONT = goregular.TTF - FONT_SIZE = 15 - DPI = 72 - PADDING = 3 - BG_COLOR = image.White - TEXT_COLOR = image.Black + FONT = goregular.TTF + FONT_SIZE = 15 + DPI = 72 + PADDING = 3 ) var face *concurrentFace @@ -47,20 +46,20 @@ func TextHeight() int { return FONT_SIZE + 2*PADDING } -func drawText(text []byte, dst draw.Image, r image.Rectangle) { +func drawText(text []byte, dst draw.Image, r image.Rectangle, fg, bg color.Color) { drawer := font.Drawer{ - Src: TEXT_COLOR, + Src: &image.Uniform{fg}, Face: face, Dot: fixed.P(0, 0), } // background - draw.Draw(dst, r, BG_COLOR, image.ZP, draw.Src) + draw.Draw(dst, r, &image.Uniform{bg}, image.ZP, draw.Src) // text image bounds := textBounds(text, drawer) textImg := image.NewRGBA(bounds) - draw.Draw(textImg, bounds, BG_COLOR, image.ZP, draw.Src) + draw.Draw(textImg, bounds, &image.Uniform{bg}, image.ZP, draw.Src) drawer.Dst = textImg drawer.DrawBytes(text) diff --git a/gui/widget/widget.go b/gui/widget/widget.go index 94d1915..6da7aaf 100644 --- a/gui/widget/widget.go +++ b/gui/widget/widget.go @@ -5,15 +5,22 @@ import ( "fmt" "image" + "image/color" "image/draw" "volute/gui" "volute/gui/win" ) +var ( + FOCUS_COLOR = color.RGBA{179, 217, 255, 255} + BLACK = color.Gray{0} + WHITE = color.Gray{255} +) + func Label(text string, r image.Rectangle, env gui.Env) { redraw := func(drw draw.Image) image.Rectangle { - drawText([]byte(text), drw, r) + drawText([]byte(text), drw, r, BLACK, WHITE) return r } env.Draw() <- redraw @@ -29,36 +36,41 @@ func Label(text string, 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 { + redraw := func(text []byte, focus bool) func(draw.Image) image.Rectangle { return func(drw draw.Image) image.Rectangle { - drawText(text, drw, r) + if focus { + drawText(text, drw, r, BLACK, FOCUS_COLOR) + } else { + drawText(text, drw, r, BLACK, WHITE) + } return r } } text := []byte{'0'} focus := false - env.Draw() <- redraw(text) + env.Draw() <- redraw(text, focus) for { select { case focus = <-focusChan: + env.Draw() <- redraw(text, focus) case event := <-env.Events(): switch event := event.(type) { case win.WiFocus: if event.Focused { - env.Draw() <- redraw(text) + env.Draw() <- redraw(text, focus) } case win.KbType: if focus && isDigit(event.Rune) { text = fmt.Appendf(text, "%c", event.Rune) - env.Draw() <- redraw(text) + env.Draw() <- redraw(text, focus) val <- atoi(text) } case win.KbDown: if focus && event.Key == win.KeyBackspace && len(text) > 0 { text = text[:len(text)-1] - env.Draw() <- redraw(text) + env.Draw() <- redraw(text, focus) val <- atoi(text) } } @@ -70,7 +82,7 @@ func Input(val chan<- uint, r image.Rectangle, focusChan <-chan bool, env gui.En func Output(val <-chan uint, r image.Rectangle, env gui.Env) { redraw := func(n uint) func(draw.Image) image.Rectangle { return func(drw draw.Image) image.Rectangle { - drawText([]byte(fmt.Sprint(n)), drw, r) + drawText([]byte(fmt.Sprint(n)), drw, r, BLACK, WHITE) return r } } |