aboutsummaryrefslogtreecommitdiffstats
path: root/examples/layout/blinker.go
diff options
context:
space:
mode:
Diffstat (limited to 'examples/layout/blinker.go')
-rw-r--r--examples/layout/blinker.go37
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)
}
}
}()