aboutsummaryrefslogtreecommitdiffstats
path: root/test/border/main.go
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2026-02-11 17:42:51 -0500
committerSam Anthony <sam@samanthony.xyz>2026-02-11 17:42:51 -0500
commitc8610ea4164403c418c3fc13aee13685aeff447f (patch)
tree06e0d4b2012b791fd6bec059d6cde0fd22a3d5e1 /test/border/main.go
parentebc5d96f0614ab3b4f2073eadf22fbe554b0ec8f (diff)
downloadgui-c8610ea4164403c418c3fc13aee13685aeff447f.zip
add border layout
Diffstat (limited to 'test/border/main.go')
-rw-r--r--test/border/main.go95
1 files changed, 95 insertions, 0 deletions
diff --git a/test/border/main.go b/test/border/main.go
new file mode 100644
index 0000000..315216c
--- /dev/null
+++ b/test/border/main.go
@@ -0,0 +1,95 @@
+package main
+
+import (
+ "image"
+ "image/color"
+ "image/draw"
+ "time"
+
+ "github.com/faiface/gui"
+ "github.com/faiface/gui/layout"
+ "github.com/faiface/gui/win"
+ "github.com/faiface/mainthread"
+)
+
+const (
+ margin = 10
+ border = 2
+ padding = 15
+)
+
+var (
+ bgClr = gui.HexToColor("#999999") // background color
+ brdrClr = color.RGBA{0xFF, 0x00, 0xFF, 0xFF}
+)
+
+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
+ bg := layout.NewRegion(mux.MakeEnv(), bgClr, layout.Full())
+
+ // Margin, border, and padding
+ border := layout.NewBorder(bg, layout.Margin(margin), layout.Border(border, brdrClr), layout.Padding(padding))
+
+ //region := layout.NewRegion(border, color.White, layout.Full())
+ //go func() { for range region.Events() {} }()
+
+ // Region in top-right quadrant
+ region := layout.NewRegion(border, color.Transparent, layout.Quad1())
+ 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())
+}