diff options
| author | faiface <faiface2202@gmail.com> | 2019-05-06 00:42:28 +0200 |
|---|---|---|
| committer | faiface <faiface2202@gmail.com> | 2019-05-06 00:42:28 +0200 |
| commit | ff5293e4cbf7b116715fce5b5e91f907ca41a3de (patch) | |
| tree | c8422d8b370059935f518ec4d5a95e77fd8394d1 /examples/imageviewer/viewer.go | |
| parent | 2357ae3c4c1f905dd3f75dea19d48d301252a4af (diff) | |
| download | gui-ff5293e4cbf7b116715fce5b5e91f907ca41a3de.zip | |
examples: add imageviewer
Diffstat (limited to 'examples/imageviewer/viewer.go')
| -rw-r--r-- | examples/imageviewer/viewer.go | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/examples/imageviewer/viewer.go b/examples/imageviewer/viewer.go new file mode 100644 index 0000000..e783d78 --- /dev/null +++ b/examples/imageviewer/viewer.go @@ -0,0 +1,65 @@ +package main + +import ( + "image" + "image/draw" + "os" + + "github.com/faiface/gui" + + _ "image/gif" + _ "image/jpeg" + _ "image/png" + + _ "golang.org/x/image/bmp" +) + +func Viewer(env gui.Env, theme *Theme, view <-chan string) { + redraw := func(r image.Rectangle, img image.Image) func(draw.Image) image.Rectangle { + return func(drw draw.Image) image.Rectangle { + draw.Draw(drw, r, &image.Uniform{theme.Empty}, image.ZP, draw.Src) + DrawCentered(drw, r, img, draw.Over) + return r + } + } + + invalid := DrawText("Invalid image", theme.Face, theme.Text) + + var ( + r image.Rectangle + img image.Image + ) + + for { + select { + case path := <-view: + func() { + f, err := os.Open(path) + if err != nil { + img = invalid + return + } + defer f.Close() + img, _, err = image.Decode(f) + if err != nil { + img = invalid + return + } + }() + env.Draw() <- redraw(r, img) + + case e, ok := <-env.Events(): + if !ok { + close(env.Draw()) + return + } + + var minX, minY, maxX, maxY int + switch { + case e.Matches("resize/%d/%d/%d/%d", &minX, &minY, &maxX, &maxY): + r = image.Rect(minX, minY, maxX, maxY) + env.Draw() <- redraw(r, img) + } + } + } +} |