diff options
Diffstat (limited to 'examples/layout/blinker.go')
| -rw-r--r-- | examples/layout/blinker.go | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/examples/layout/blinker.go b/examples/layout/blinker.go index 8c380c3..65dce43 100644 --- a/examples/layout/blinker.go +++ b/examples/layout/blinker.go @@ -2,13 +2,15 @@ package main import ( "image" + "image/color" "image/draw" "log" + "math/rand" + "sync" "time" "github.com/faiface/gui" "github.com/faiface/gui/win" - "golang.org/x/image/colornames" ) func Blinker(env gui.Env) { @@ -17,23 +19,33 @@ func Blinker(env gui.Env) { log.Print("recovered blinker") } }() - - var r image.Rectangle - var visible bool = true - - redraw := func() func(draw.Image) image.Rectangle { + buf := make([]byte, 3) + rand.Read(buf) + defaultColor := image.NewUniform(color.RGBA{buf[0], buf[1], buf[2], 255}) + rand.Read(buf) + blinkColor := image.NewUniform(color.RGBA{buf[0], buf[1], buf[2], 255}) + redraw := func(r image.Rectangle, visible bool) func(draw.Image) image.Rectangle { return func(drw draw.Image) image.Rectangle { + if r == image.ZR { + return r + } if visible { - draw.Draw(drw, r, image.White, image.ZP, draw.Src) + draw.Draw(drw, r, defaultColor, image.ZP, draw.Src) } else { - draw.Draw(drw, r, &image.Uniform{colornames.Firebrick}, image.ZP, draw.Src) + draw.Draw(drw, r, blinkColor, image.ZP, draw.Src) } return r } } + var mu sync.Mutex + var ( + r image.Rectangle + visible bool = true + ) + // first we draw a white rectangle - env.Draw() <- redraw() + // env.Draw() <- redraw(b) func() { for event := range env.Events() { switch event := event.(type) { @@ -41,15 +53,18 @@ func Blinker(env gui.Env) { if event.Point.In(r) { go func() { for i := 0; i < 6; i++ { + mu.Lock() visible = !visible - env.Draw() <- redraw() + env.Draw() <- redraw(r, visible) + mu.Unlock() + time.Sleep(time.Second / 3) } }() } case gui.Resize: r = event.Rectangle - env.Draw() <- redraw() + env.Draw() <- redraw(r, visible) } } }() |