aboutsummaryrefslogtreecommitdiffstats
path: root/gui/widget/widget.go
diff options
context:
space:
mode:
Diffstat (limited to 'gui/widget/widget.go')
-rw-r--r--gui/widget/widget.go29
1 files changed, 29 insertions, 0 deletions
diff --git a/gui/widget/widget.go b/gui/widget/widget.go
index 61ba760..ae09160 100644
--- a/gui/widget/widget.go
+++ b/gui/widget/widget.go
@@ -5,6 +5,7 @@ import (
"fmt"
"sync"
+ xdraw "golang.org/x/image/draw"
"image"
"image/color"
"image/draw"
@@ -119,6 +120,34 @@ Loop:
}
}
+func Image(imChan <-chan image.Image, r image.Rectangle, env gui.Env, wg *sync.WaitGroup) {
+ defer wg.Done()
+ defer close(env.Draw())
+
+ interp := xdraw.ApproxBiLinear
+ redraw := func(im image.Image) func(draw.Image) image.Rectangle {
+ return func(drw draw.Image) image.Rectangle {
+ interp.Scale(drw, r, im, im.Bounds(), draw.Src, nil)
+ return r
+ }
+ }
+ var im image.Image = image.NewGray(r)
+
+ for {
+ select {
+ case im = <-imChan:
+ env.Draw() <- redraw(im)
+ case event, ok := <-env.Events():
+ if !ok {
+ return
+ }
+ if event, ok := event.(win.WiFocus); ok && event.Focused {
+ env.Draw() <- redraw(im)
+ }
+ }
+ }
+}
+
func isDigit(r rune) bool {
return '0' <= r && r <= '9'
}