diff options
Diffstat (limited to 'gui/widget')
| -rw-r--r-- | gui/widget/image.go | 38 | ||||
| -rw-r--r-- | gui/widget/widget.go | 27 |
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' } |