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:
@@ -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
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user