aboutsummaryrefslogtreecommitdiffstats
path: root/gui/widget
diff options
context:
space:
mode:
Diffstat (limited to 'gui/widget')
-rw-r--r--gui/widget/image.go38
-rw-r--r--gui/widget/widget.go27
2 files changed, 38 insertions, 27 deletions
diff --git a/gui/widget/image.go b/gui/widget/image.go
new file mode 100644
index 0000000..c5712c4
--- /dev/null
+++ b/gui/widget/image.go
@@ -0,0 +1,38 @@
+package widget
+
+import (
+ "sync"
+
+ "image"
+ "image/draw"
+
+ "volute/gui"
+ "volute/gui/win"
+)
+
+func Image(imChan <-chan image.Image, r image.Rectangle, env gui.Env, wg *sync.WaitGroup) {
+ defer wg.Done()
+ defer close(env.Draw())
+
+ var im image.Image = image.NewGray(r)
+ for {
+ select {
+ case im = <-imChan:
+ env.Draw() <- imageDraw(im, r)
+ case event, ok := <-env.Events():
+ if !ok {
+ return
+ }
+ if event, ok := event.(win.WiFocus); ok && event.Focused {
+ env.Draw() <- imageDraw(im, r)
+ }
+ }
+ }
+}
+
+func imageDraw(im image.Image, r image.Rectangle) func(draw.Image) image.Rectangle {
+ return func(drw draw.Image) image.Rectangle {
+ interpolator.Scale(drw, r, im, im.Bounds(), draw.Src, nil)
+ return r
+ }
+}
diff --git a/gui/widget/widget.go b/gui/widget/widget.go
index d20d67e..7122359 100644
--- a/gui/widget/widget.go
+++ b/gui/widget/widget.go
@@ -73,33 +73,6 @@ func outputDraw(v float64, r image.Rectangle) func(draw.Image) image.Rectangle {
}
}
-func Image(imChan <-chan image.Image, r image.Rectangle, env gui.Env, wg *sync.WaitGroup) {
- defer wg.Done()
- defer close(env.Draw())
-
- var im image.Image = image.NewGray(r)
- for {
- select {
- case im = <-imChan:
- env.Draw() <- imageDraw(im, r)
- case event, ok := <-env.Events():
- if !ok {
- return
- }
- if event, ok := event.(win.WiFocus); ok && event.Focused {
- env.Draw() <- imageDraw(im, r)
- }
- }
- }
-}
-
-func imageDraw(im image.Image, r image.Rectangle) func(draw.Image) image.Rectangle {
- return func(drw draw.Image) image.Rectangle {
- interpolator.Scale(drw, r, im, im.Bounds(), draw.Src, nil)
- return r
- }
-}
-
func isDigit(r rune) bool {
return '0' <= r && r <= '9'
}