aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2024-02-08 16:15:59 -0500
committerSam Anthony <sam@samanthony.xyz>2024-02-08 16:15:59 -0500
commit815b8ca9d246cfa4dba1ff6439c6cacaa9a5e9ee (patch)
tree4e147d3e384f11f7368eec8228f340c1c0fbb92b
parent83ce69a4785d6464fafd07e60b20b968529f018a (diff)
downloadvolute-815b8ca9d246cfa4dba1ff6439c6cacaa9a5e9ee.zip
add image widget
-rw-r--r--gui/widget/widget.go29
-rw-r--r--main.go11
2 files changed, 40 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'
}
diff --git a/main.go b/main.go
index edd76fe..656f749 100644
--- a/main.go
+++ b/main.go
@@ -2,6 +2,7 @@ package main
import (
"fmt"
+ "image"
"os"
"sync"
@@ -62,6 +63,16 @@ func run() {
wg,
)
+ imChan := make(chan image.Image)
+ defer close(imChan)
+ wg.Add(1)
+ go widget.Image(
+ imChan,
+ image.Rect(0, 200, 100, 300),
+ mux.MakeEnv(),
+ wg,
+ )
+
for i := 0; i < POINTS; i++ {
wg.Add(1)
go calculateFlow(