gui/layouts/layout_coord.go

59 lines
1.3 KiB
Go
Raw Normal View History

2023-01-22 12:38:03 +01:00
package layouts
import (
"image"
"git.milar.in/milarin/gui"
)
// CoordLayout is a gui.Layout which places its children on predefined coordinates
type CoordLayout struct {
gui.ViewTmpl
views map[gui.View]gui.Dimension
}
var _ gui.Layout = &CoordLayout{}
func NewCoordLayout() *CoordLayout {
return &CoordLayout{
views: map[gui.View]gui.Dimension{},
}
}
func (g *CoordLayout) Views() []gui.View {
s := make([]gui.View, 0, len(g.views))
for v := range g.views {
s = append(s, v)
}
return s
}
// SetView places v at the given coordinates with the given dimensions.
// v will be added to g's children if not already added before
func (g *CoordLayout) SetView(v gui.View, x, y, width, height int) {
g.views[v] = gui.Dimension{Point: gui.Point{X: x, Y: y}, Size: gui.Size{Width: width, Height: height}}
}
func (g *CoordLayout) Draw(img *gui.Image, ctx gui.AppContext) {
for v, d := range g.views {
v.Draw(img.SubImage(image.Rect(d.X, d.Y, d.Width, d.Height)).(*gui.Image), ctx)
}
}
func (v *CoordLayout) Layout(ctx gui.AppContext) (prefWidth, prefHeight int) {
return -1, -1
}
/*
func (g *CoordLayout) OnKeyPressed(event *gui.KeyEvent) (consumed bool) {
for _, view := range g.Views() {
if view.OnKeyPressed(event) {
return true
}
}
return false
}
*/
// TODO OnMouseEvent