Sander Schobers
9641719579
Refactored event handling to be able to "handle" events so no other controls will handle the same event again.
60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
package tins2020
|
|
|
|
import "github.com/veandco/go-sdl2/sdl"
|
|
|
|
type ButtonBar struct {
|
|
Container
|
|
|
|
Background sdl.Color
|
|
ButtonLength int32
|
|
Orientation Orientation
|
|
Buttons []Control
|
|
}
|
|
|
|
const buttonBarWidth = 96
|
|
|
|
func (b *ButtonBar) Init(ctx *Context) error {
|
|
for i := range b.Buttons {
|
|
b.AddChild(b.Buttons[i])
|
|
}
|
|
return b.Container.Init(ctx)
|
|
}
|
|
|
|
func (b *ButtonBar) Arrange(ctx *Context, bounds Rectangle) {
|
|
b.Container.Arrange(ctx, bounds)
|
|
length := b.ButtonLength
|
|
switch b.Orientation {
|
|
case OrientationHorizontal:
|
|
if length == 0 {
|
|
length = bounds.H
|
|
}
|
|
offset := bounds.X
|
|
for i := range b.Buttons {
|
|
b.Buttons[i].Arrange(ctx, RectSize(offset, bounds.Y, length, bounds.H))
|
|
offset += length
|
|
}
|
|
default:
|
|
if length == 0 {
|
|
length = bounds.W
|
|
}
|
|
offset := bounds.Y
|
|
for i := range b.Buttons {
|
|
b.Buttons[i].Arrange(ctx, RectSize(bounds.X, offset, bounds.W, length))
|
|
offset += length
|
|
}
|
|
}
|
|
}
|
|
|
|
func (b *ButtonBar) Render(ctx *Context) {
|
|
SetDrawColor(ctx.Renderer, b.Background)
|
|
ctx.Renderer.FillRect(b.Bounds.SDLPtr())
|
|
b.Container.Render(ctx)
|
|
}
|
|
|
|
type Orientation int
|
|
|
|
const (
|
|
OrientationVertical Orientation = iota
|
|
OrientationHorizontal
|
|
)
|