Add a slider UI widget

I'm not too happy with how I have to configure the step for each one
separately, but it's the best I can do at the moment.
This commit is contained in:
2020-03-24 22:33:26 +00:00
parent 69971b2825
commit 20ad9ae6f8
5 changed files with 266 additions and 9 deletions

View File

@@ -4,6 +4,7 @@ import (
"fmt"
"image"
"log"
"strconv"
"github.com/hajimehoshi/ebiten"
"github.com/hajimehoshi/ebiten/ebitenutil"
@@ -18,7 +19,6 @@ func init() {
// FIXME: these need further investigation / implementation
registerBuilder(menus.TypeOverlay, nil)
registerBuilder(menus.TypeSlider, nil)
}
const (
@@ -56,6 +56,7 @@ type Driver struct {
clickables []clickable
freezables []freezable
hoverables []hoverable
mouseables []mouseable
paintables []paintable
valueables []valueable
@@ -149,6 +150,36 @@ func (d *Driver) OnClick(id string, f func()) error {
return fmt.Errorf("Couldn't find clickable widget %q", id)
}
// FIXME: HURK. Surely I'm missing something? steps is value:offset
func (d *Driver) ConfigureSlider(id string, steps map[int]int) error {
for _, clickable := range d.clickables {
if slider, ok := clickable.(*slider); ok && slider.id() == id {
slider.steps = steps
log.Printf("Found slider %#+v", slider)
return nil
}
}
return fmt.Errorf("Couldn't find slider %q", id)
}
func (d *Driver) ValueInt(id string, into *int) error {
var vStr string
if err := d.Value(id, &vStr); err != nil {
return err
}
value, err := strconv.Atoi(vStr)
if err != nil {
return err
}
*into = value
return nil
}
func (d *Driver) Update(screenX, screenY int) error {
// This will be updated while processing hovers
d.tooltip = ""
@@ -190,6 +221,10 @@ func (d *Driver) Update(screenX, screenY int) error {
d.mouseUpEvent(clickable, inBounds, mouseWasDown, mouseIsDown)
}
for _, mouseable := range d.mouseables {
mouseable.registerMousePosition(d.cursorOrig)
}
return nil
}