From 1b03644d1e0e1be27cdd22732f893d03c0e8421d Mon Sep 17 00:00:00 2001 From: Clement Benard Date: Fri, 12 Jul 2019 17:32:57 +0200 Subject: Somehow added the wrong file, fix that --- examples/layout/blinker.go | 60 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 examples/layout/blinker.go (limited to 'examples/layout/blinker.go') diff --git a/examples/layout/blinker.go b/examples/layout/blinker.go new file mode 100644 index 0000000..76dbd95 --- /dev/null +++ b/examples/layout/blinker.go @@ -0,0 +1,60 @@ +package main + +import ( + "image" + "image/draw" + "log" + "time" + + "github.com/faiface/gui" + "github.com/faiface/gui/win" + "golang.org/x/image/colornames" +) + +func Blinker(env gui.Env) { + defer func() { + if recover() != nil { + log.Print("recovered blinker") + } + }() + + var r image.Rectangle + var visible bool = true + + redraw := func() func(draw.Image) image.Rectangle { + return func(drw draw.Image) image.Rectangle { + if visible { + draw.Draw(drw, r, image.White, image.ZP, draw.Src) + } else { + draw.Draw(drw, r, &image.Uniform{colornames.Firebrick}, image.ZP, draw.Src) + } + return r + } + } + + // first we draw a white rectangle + env.Draw() <- redraw() + func() { + for event := range env.Events() { + switch event := event.(type) { + case win.MoDown: + if event.Point.In(r) { + go func() { + for i := 0; i < 3; i++ { + visible = false + env.Draw() <- redraw() + time.Sleep(time.Second / 3) + visible = true + env.Draw() <- redraw() + time.Sleep(time.Second / 3) + } + }() + } + case gui.Resize: + log.Print(event) + r = event.Rectangle + env.Draw() <- redraw() + } + } + }() +} -- cgit v1.2.3 From 736e35bd9b0c8f4f9649557e4b7a3085b4bdbe63 Mon Sep 17 00:00:00 2001 From: Clement Benard Date: Mon, 15 Jul 2019 15:44:34 +0200 Subject: Easier and more idiomatic Layout initializing --- examples/layout/blinker.go | 1 - 1 file changed, 1 deletion(-) (limited to 'examples/layout/blinker.go') diff --git a/examples/layout/blinker.go b/examples/layout/blinker.go index 76dbd95..b096a73 100644 --- a/examples/layout/blinker.go +++ b/examples/layout/blinker.go @@ -51,7 +51,6 @@ func Blinker(env gui.Env) { }() } case gui.Resize: - log.Print(event) r = event.Rectangle env.Draw() <- redraw() } -- cgit v1.2.3 From 8b70878ccc7fe324f3647e56503a37f3780f9d41 Mon Sep 17 00:00:00 2001 From: Clement Benard Date: Mon, 15 Jul 2019 16:19:19 +0200 Subject: now working --- examples/layout/blinker.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'examples/layout/blinker.go') diff --git a/examples/layout/blinker.go b/examples/layout/blinker.go index b096a73..8c380c3 100644 --- a/examples/layout/blinker.go +++ b/examples/layout/blinker.go @@ -40,11 +40,8 @@ func Blinker(env gui.Env) { case win.MoDown: if event.Point.In(r) { go func() { - for i := 0; i < 3; i++ { - visible = false - env.Draw() <- redraw() - time.Sleep(time.Second / 3) - visible = true + for i := 0; i < 6; i++ { + visible = !visible env.Draw() <- redraw() time.Sleep(time.Second / 3) } -- cgit v1.2.3 From 8d183ef96a57e3a2f42c0cb4ec0ab4c256e0d47e Mon Sep 17 00:00:00 2001 From: Clement Benard Date: Wed, 7 Aug 2019 16:02:33 +0200 Subject: Made the layout package actually usable --- examples/layout/blinker.go | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) (limited to 'examples/layout/blinker.go') 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) } } }() -- cgit v1.2.3