diff options
Diffstat (limited to 'examples/imageviewer/splits.go')
| -rw-r--r-- | examples/imageviewer/splits.go | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/examples/imageviewer/splits.go b/examples/imageviewer/splits.go new file mode 100644 index 0000000..041a770 --- /dev/null +++ b/examples/imageviewer/splits.go @@ -0,0 +1,112 @@ +package main + +import ( + "image" + "image/draw" + + "github.com/faiface/gui" +) + +type envPair struct { + events <-chan gui.Event + draw chan<- func(draw.Image) image.Rectangle +} + +func (ep *envPair) Events() <-chan gui.Event { return ep.events } +func (ep *envPair) Draw() chan<- func(draw.Image) image.Rectangle { return ep.draw } + +func FixedLeft(env gui.Env, maxX int) gui.Env { + out, in := gui.MakeEventsChan() + + go func() { + for e := range env.Events() { + var minX, minY, dummy, maxY int + switch { + case e.Matches("resize/%d/%d/%d/%d", &minX, &minY, &dummy, &maxY): + in <- gui.Eventf("resize/%d/%d/%d/%d", minX, minY, maxX, maxY) + default: + in <- e + } + } + close(in) + }() + + return &envPair{out, env.Draw()} +} + +func FixedRight(env gui.Env, minX int) gui.Env { + out, in := gui.MakeEventsChan() + + go func() { + for e := range env.Events() { + var dummy, minY, maxX, maxY int + switch { + case e.Matches("resize/%d/%d/%d/%d", &dummy, &minY, &maxX, &maxY): + in <- gui.Eventf("resize/%d/%d/%d/%d", minX, minY, maxX, maxY) + default: + in <- e + } + } + close(in) + }() + + return &envPair{out, env.Draw()} +} + +func FixedTop(env gui.Env, maxY int) gui.Env { + out, in := gui.MakeEventsChan() + + go func() { + for e := range env.Events() { + var minX, minY, maxX, dummy int + switch { + case e.Matches("resize/%d/%d/%d/%d", &minX, &minY, &maxX, &dummy): + in <- gui.Eventf("resize/%d/%d/%d/%d", minX, minY, maxX, maxY) + default: + in <- e + } + } + close(in) + }() + + return &envPair{out, env.Draw()} +} + +func FixedBottom(env gui.Env, minY int) gui.Env { + out, in := gui.MakeEventsChan() + + go func() { + for e := range env.Events() { + var minX, dummy, maxX, maxY int + switch { + case e.Matches("resize/%d/%d/%d/%d", &minX, &dummy, &maxX, &maxY): + in <- gui.Eventf("resize/%d/%d/%d/%d", minX, minY, maxX, maxY) + default: + in <- e + } + } + close(in) + }() + + return &envPair{out, env.Draw()} +} + +func EvenHorizontal(env gui.Env, minI, maxI, n int) gui.Env { + out, in := gui.MakeEventsChan() + + go func() { + for e := range env.Events() { + var minX, minY, maxX, maxY int + switch { + case e.Matches("resize/%d/%d/%d/%d", &minX, &minY, &maxX, &maxY): + minX, maxX := minX+(maxX-minX)*minI/n, minX+(maxX-minX)*maxI/n + in <- gui.Eventf("resize/%d/%d/%d/%d", minX, minY, maxX, maxY) + default: + in <- e + } + } + close(in) + }() + + return &envPair{out, env.Draw()} +} |