aboutsummaryrefslogtreecommitdiff
path: root/go/ui/button.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/ui/button.go')
-rw-r--r--go/ui/button.go60
1 files changed, 60 insertions, 0 deletions
diff --git a/go/ui/button.go b/go/ui/button.go
new file mode 100644
index 00000000..6454ccac
--- /dev/null
+++ b/go/ui/button.go
@@ -0,0 +1,60 @@
+package ui
+
+import (
+ "image/color"
+
+ "github.com/hajimehoshi/ebiten/v2"
+ "github.com/hajimehoshi/ebiten/v2/ebitenutil"
+ "github.com/hajimehoshi/ebiten/v2/text"
+
+ "muhq.space/muhqs-game/go/font"
+)
+
+type Button interface {
+ Widget
+ Click(x, y int)
+}
+
+type SimpleButton struct {
+ WidgetBase
+ label string
+ OnClick func(b *SimpleButton)
+ BG color.Color
+ FG color.Color
+}
+
+func NewSimpleButton(x, y, w, h int, label string, onClick func(b *SimpleButton)) *SimpleButton {
+ sb := &SimpleButton{NewWidgetBase(x, y, w, h), label, onClick, gray, color.White}
+ sb.renderImpl = func() *ebiten.Image { return sb.render() }
+ return sb
+}
+
+func (b *SimpleButton) render() *ebiten.Image {
+ img := ebiten.NewImage(b.Width, b.Height)
+
+ ebitenutil.DrawRect(img, float64(0), float64(0), float64(b.Width), float64(b.Height), b.BG)
+
+ bounds := text.BoundString(font.Font24, b.label)
+ x := (b.Width - bounds.Dx()) / 2
+ if x < 0 {
+ x = 0
+ }
+
+ y := b.Height - bounds.Dy()/2
+ if y < 0 {
+ y = 0
+ }
+ text.Draw(img, b.label, font.Font24, x, y, b.FG)
+ return img
+}
+
+func (b *SimpleButton) FindObjectAt(x, y int) interface{} {
+ if b.Contains(x, y) {
+ return b
+ }
+ return nil
+}
+
+func (b *SimpleButton) Click(x, y int) {
+ b.OnClick(b)
+}