aboutsummaryrefslogtreecommitdiffstats
path: root/layout/region.go
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 /layout/region.go
parent3ce04a4d3dc8d174b520d85804e5c8dce8c5d08f (diff)
downloadgui-430f97bed9d758de90a72b0c06b2be1989ba2b1d.zip
add rows layout
Diffstat (limited to 'layout/region.go')
-rw-r--r--layout/region.go18
1 files changed, 8 insertions, 10 deletions
diff --git a/layout/region.go b/layout/region.go
index 59e1e0c..93d930a 100644
--- a/layout/region.go
+++ b/layout/region.go
@@ -15,6 +15,7 @@ type Region struct {
// NewRegion creates a region layout that occupies part of the parent env's area, as determined by the resize function.
// Resize takes the area of the parent and returns the area of the region.
+// It returns the child Env.
func NewRegion(env gui.Env, resize func(image.Rectangle) image.Rectangle, o ...Option) gui.Env {
opts := evalOptions(o...)
@@ -27,14 +28,18 @@ func NewRegion(env gui.Env, resize func(image.Rectangle) image.Rectangle, o ...O
area := resize(event.(gui.Resize).Rectangle) // first event guaranteed to be Resize
events <- gui.Resize{area}
- env.Draw() <- drawBackground(opts.bg)
+ // Draw background
+ redrawBg := func(area image.Rectangle) func(draw.Image) image.Rectangle {
+ return drawSubImage(drawBackground(opts.bg), area)
+ }
+ env.Draw() <- redrawBg(area)
for {
select {
case event := <-env.Events(): // event from parent
switch event := event.(type) {
case gui.Resize:
- env.Draw() <- drawRegion(drawBackground(opts.bg), area)
+ env.Draw() <- redrawBg(area)
area = resize(event.Rectangle)
events <- gui.Resize{area} // forward to child
default:
@@ -46,7 +51,7 @@ func NewRegion(env gui.Env, resize func(image.Rectangle) image.Rectangle, o ...O
close(env.Draw())
return
}
- env.Draw() <- drawRegion(f, area)
+ env.Draw() <- drawSubImage(f, area)
}
}
}(events, drw)
@@ -54,13 +59,6 @@ func NewRegion(env gui.Env, resize func(image.Rectangle) image.Rectangle, o ...O
return Region{events, drw}
}
-// Translate a draw call to the given area.
-func drawRegion(f func(draw.Image) image.Rectangle, area image.Rectangle) func(draw.Image) image.Rectangle {
- return func(img draw.Image) image.Rectangle {
- return f(subimage(img, area))
- }
-}
-
// Events implements the Env interface.
func (r Region) Events() <-chan gui.Event { return r.events }