aboutsummaryrefslogtreecommitdiffstats
path: root/examples/imageviewer/button.go
diff options
context:
space:
mode:
authorfaiface <faiface2202@gmail.com>2019-05-06 00:42:28 +0200
committerfaiface <faiface2202@gmail.com>2019-05-06 00:42:28 +0200
commitff5293e4cbf7b116715fce5b5e91f907ca41a3de (patch)
treec8422d8b370059935f518ec4d5a95e77fd8394d1 /examples/imageviewer/button.go
parent2357ae3c4c1f905dd3f75dea19d48d301252a4af (diff)
downloadgui-ff5293e4cbf7b116715fce5b5e91f907ca41a3de.zip
examples: add imageviewer
Diffstat (limited to 'examples/imageviewer/button.go')
-rw-r--r--examples/imageviewer/button.go61
1 files changed, 61 insertions, 0 deletions
diff --git a/examples/imageviewer/button.go b/examples/imageviewer/button.go
new file mode 100644
index 0000000..0078774
--- /dev/null
+++ b/examples/imageviewer/button.go
@@ -0,0 +1,61 @@
+package main
+
+import (
+ "image"
+ "image/color"
+ "image/draw"
+
+ "github.com/faiface/gui"
+)
+
+func Button(env gui.Env, theme *Theme, text string, action func()) {
+ textImg := DrawText(text, theme.Face, theme.Text)
+
+ redraw := func(r image.Rectangle, over, pressed bool) func(draw.Image) image.Rectangle {
+ return func(drw draw.Image) image.Rectangle {
+ var clr color.Color
+ if pressed {
+ clr = theme.ButtonDown
+ } else if over {
+ clr = theme.ButtonOver
+ } else {
+ clr = theme.ButtonUp
+ }
+ draw.Draw(drw, r, &image.Uniform{clr}, image.ZP, draw.Src)
+ DrawCentered(drw, r, textImg, draw.Over)
+ return r
+ }
+ }
+
+ var (
+ r image.Rectangle
+ over bool
+ pressed bool
+ )
+
+ for e := range env.Events() {
+ var x, y, minX, minY, maxX, maxY int
+
+ switch {
+ case e.Matches("resize/%d/%d/%d/%d", &minX, &minY, &maxX, &maxY):
+ r = image.Rect(minX, minY, maxX, maxY)
+ env.Draw() <- redraw(r, over, pressed)
+
+ case e.Matches("mo/down/%d/%d/left", &x, &y):
+ newPressed := image.Pt(x, y).In(r)
+ if newPressed != pressed {
+ pressed = newPressed
+ env.Draw() <- redraw(r, over, pressed)
+ }
+
+ case e.Matches("mo/up/%d/%d/left", &x, &y):
+ if pressed {
+ action()
+ pressed = false
+ env.Draw() <- redraw(r, over, pressed)
+ }
+ }
+ }
+
+ close(env.Draw())
+}