aboutsummaryrefslogtreecommitdiffstats
path: root/test/region
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2026-02-10 16:56:06 -0500
committerSam Anthony <sam@samanthony.xyz>2026-02-10 16:56:06 -0500
commit430f97bed9d758de90a72b0c06b2be1989ba2b1d (patch)
tree057a578389bfafe595ba415797908979c3d09add /test/region
parent3ce04a4d3dc8d174b520d85804e5c8dce8c5d08f (diff)
downloadgui-430f97bed9d758de90a72b0c06b2be1989ba2b1d.zip
add rows layout
Diffstat (limited to 'test/region')
-rw-r--r--test/region/main.go79
1 files changed, 79 insertions, 0 deletions
diff --git a/test/region/main.go b/test/region/main.go
new file mode 100644
index 0000000..f335b4f
--- /dev/null
+++ b/test/region/main.go
@@ -0,0 +1,79 @@
+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"
+)
+
+var bg = gui.HexToColor("#999999") // background color
+
+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)
+
+ // Background
+ back := layout.NewRegion(mux.MakeEnv(), layout.ResizeAll, layout.Background(bg))
+
+ // Create region on top of background, in bottom-right quadrant
+ region := layout.NewRegion(back, layout.ResizeQuad4)
+ 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 / 6)
+ env.Draw() <- redraw(true)
+ time.Sleep(time.Second / 6)
+ }
+ }()
+ }
+ }
+ }
+ close(env.Draw())
+}