From 430f97bed9d758de90a72b0c06b2be1989ba2b1d Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Tue, 10 Feb 2026 16:56:06 -0500 Subject: add rows layout --- test/region.go | 81 ----------------------------------------------------- test/region/main.go | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++ test/rows/main.go | 61 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 140 insertions(+), 81 deletions(-) delete mode 100644 test/region.go create mode 100644 test/region/main.go create mode 100644 test/rows/main.go (limited to 'test') diff --git a/test/region.go b/test/region.go deleted file mode 100644 index 682e23f..0000000 --- a/test/region.go +++ /dev/null @@ -1,81 +0,0 @@ -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()) -} 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()) +} diff --git a/test/rows/main.go b/test/rows/main.go new file mode 100644 index 0000000..9848ddf --- /dev/null +++ b/test/rows/main.go @@ -0,0 +1,61 @@ +package main + +import ( + "image" + "image/color" + "image/draw" + + "github.com/faiface/gui" + "github.com/faiface/gui/layout" + "github.com/faiface/gui/win" + "github.com/faiface/mainthread" +) + +const ( + nrows = 16 + rowHeight = 12 + rowWidth = 128 +) + +var bg = gui.HexToColor("#ffffea") // 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) + + rows := layout.NewRows(mux.MakeEnv(), nrows, layout.Background(bg)) + for i, row := range rows { + go colorBlock(row, image.Pt(rowWidth, rowHeight), color.RGBA{uint8(i * 256 / 4), 0x20, 0x20, 0xFF}) + } + + for event := range env.Events() { + switch event.(type) { + case win.WiClose: + close(env.Draw()) + return + } + } +} + +func colorBlock(env gui.Env, size image.Point, c color.Color) { + redraw := func(img draw.Image) image.Rectangle { + r := image.Rectangle{img.Bounds().Min, img.Bounds().Min.Add(size)} + draw.Draw(img, r, &image.Uniform{c}, image.ZP, draw.Src) + return r + } + for event := range env.Events() { + switch event.(type) { + case gui.Resize: + env.Draw() <- redraw + } + } + close(env.Draw()) +} -- cgit v1.2.3