57 lines
1.2 KiB
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)
|
|
}
|