1
0
Fork 0
tetris-go/game/ui/layouts/input_control.go

57 lines
1.2 KiB
Go

package layouts
import (
"tetris/engine/core"
"tetris/game/ui"
"tetris/game/ui/base"
"tetris/game/ui/widgets"
rl "github.com/gen2brain/raylib-go/raylib"
)
// InputControl is a layout that has a label and an a widget associated with it.
type InputControl struct {
*base.WithFocus
label *widgets.Label
widget ui.InputWidget
spacing int
}
func NewInputControl(label *widgets.Label, wiget ui.InputWidget) *InputControl {
return &InputControl{
WithFocus: &base.WithFocus{},
label: label,
widget: wiget,
spacing: 10,
}
}
func (ic InputControl) Size() core.Vec2i {
return core.Vec2i{
X: ic.label.Size().X + ic.widget.Size().X + ic.spacing,
Y: max(ic.label.Size().Y, ic.widget.Size().Y),
}
}
func (ic *InputControl) SetFocus(value bool) {
ic.WithFocus.SetFocus(value)
ic.widget.SetFocus(value)
// TODO: use a theme system here so colors are not hardcoded.
if value {
ic.label.SetColor(rl.Red)
} else {
ic.label.SetColor(rl.White)
}
}
func (ic InputControl) HandleInput() {
ic.widget.HandleInput()
}
func (ic InputControl) Draw(x, y int32) {
size := ic.Size()
label_y := (int32(size.Y) - int32(ic.label.Size().Y)) / 2
ic.label.Draw(x, y+label_y)
ic.widget.Draw(x+int32(ic.label.Size().X+ic.spacing), y)
}