diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2024-05-10 13:10:44 -0400 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2024-05-10 13:10:44 -0400 |
| commit | 221e3dea36880a7ff45a4a8b3f33fec3b261c2c4 (patch) | |
| tree | 648bdd14106dcdf2ae3ef89473b3bbca49ae30f7 /gui/widget/image.go | |
| parent | 039d0880c9bff721189e1ba2e658fa5fcc3a980f (diff) | |
| download | volute-221e3dea36880a7ff45a4a8b3f33fec3b261c2c4.zip | |
move image widget to separate file
Diffstat (limited to 'gui/widget/image.go')
| -rw-r--r-- | gui/widget/image.go | 38 |
1 files changed, 38 insertions, 0 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 + } +} |