aboutsummaryrefslogtreecommitdiffstats
path: root/test/region.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/region.go')
-rw-r--r--test/region.go76
1 files changed, 76 insertions, 0 deletions
diff --git a/test/region.go b/test/region.go
new file mode 100644
index 0000000..afd739e
--- /dev/null
+++ b/test/region.go
@@ -0,0 +1,76 @@
+package main
+
+import (
+ "image"
+ "image/draw"
+ "time"
+
+ "github.com/faiface/gui"
+ "github.com/faiface/gui/layout"
+ "github.com/faiface/gui/win"
+ "github.com/faiface/mainthread"
+)
+
+func main() {
+ mainthread.Run(run)
+}
+
+func run() {
+ w, err := win.New(win.Title("Grid Layout Test"), win.Resizable())
+ if err != nil {
+ panic(err)
+ }
+
+ mux, env := gui.NewMux(w)
+
+ // Create region in bottom-right quadrant of window
+ region := layout.NewRegion(mux.MakeEnv(), func(r image.Rectangle) image.Rectangle {
+ return image.Rect(r.Min.X+r.Dx()/2, r.Min.Y+r.Dy()/2, r.Max.X, r.Max.Y)
+ })
+ go blinker(region)
+
+ for event := range env.Events() {
+ switch event.(type) {
+ case win.WiClose:
+ close(env.Draw())
+ return
+ }
+ }
+}
+
+// Blinker is a widget that blinks three times when it is clicked.
+func blinker(env gui.Env) {
+ redraw := func(visible bool) func(draw.Image) image.Rectangle {
+ return func(img draw.Image) image.Rectangle {
+ if visible {
+ draw.Draw(img, img.Bounds(), image.White, image.ZP, draw.Src)
+ } else {
+ draw.Draw(img, img.Bounds(), image.Black, image.ZP, draw.Src)
+ }
+ return img.Bounds()
+ }
+ }
+
+ area := (<-env.Events()).(gui.Resize).Rectangle // first event guaranteed to be Resize
+ env.Draw() <- redraw(true)
+
+ for event := range env.Events() {
+ switch event := event.(type) {
+ case gui.Resize:
+ area = event.Rectangle
+ env.Draw() <- redraw(true)
+ case win.MoDown:
+ if event.Point.In(area) {
+ go func() {
+ for i := 0; i < 3; i++ {
+ env.Draw() <- redraw(false)
+ time.Sleep(time.Second / 3)
+ env.Draw() <- redraw(true)
+ time.Sleep(time.Second / 3)
+ }
+ }()
+ }
+ }
+ }
+ close(env.Draw())
+}