From ff5293e4cbf7b116715fce5b5e91f907ca41a3de Mon Sep 17 00:00:00 2001 From: faiface Date: Mon, 6 May 2019 00:42:28 +0200 Subject: examples: add imageviewer --- examples/imageviewer/splits.go | 112 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 examples/imageviewer/splits.go (limited to 'examples/imageviewer/splits.go') 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()} +} -- cgit v1.2.3