package main import ( "git.vezzani.net/ben/games/common/elements/v1/blocks" "git.vezzani.net/ben/games/common/elements/v1/buttons" "git.vezzani.net/ben/games/common/elements/v1/core" "git.vezzani.net/ben/games/common/elements/v1/mouse" "git.vezzani.net/ben/games/common/elements/v1/stacks" "git.vezzani.net/ben/games/common/geo" "git.vezzani.net/ben/games/common/sprites/v1" "github.com/hajimehoshi/ebiten/v2" "golang.org/x/image/colornames" ) var root = stacks.New( stacks.Horizontal(), stacks.Core(core.Name("parent")), stacks.Core(core.Children( stacks.New( stacks.Core( core.Name("left"), core.Children( buttons.New( buttons.BlockOpt(blocks.Size(100, 100)), buttons.Label("hello"), buttons.BlockOpt(blocks.BackgroundColor(colornames.Green)), buttons.OnClick(func(ms mouse.State) { println("green") }), ), blocks.New( blocks.Size(100, 100), blocks.BackgroundColor(colornames.Yellow), ), ), ), ), stacks.New( stacks.Core(core.Name("right")), stacks.Core(core.Children( blocks.New( blocks.Size(100, 100), blocks.BackgroundColor(colornames.Blue), ), blocks.New( blocks.Size(100, 100), blocks.BackgroundColor(colornames.Red), ), )), ), )), ) func newEditor() *editor { return &editor{} } type editor struct { bounds geo.Bounds handleMouse func() bool } func (e *editor) Update() error { sprites.Update() e.handleMouse() return nil } func (e *editor) Draw(screen *ebiten.Image) { root.Draw(screen) } func (e *editor) Layout(outsideWidth, outsideHeight int) (screenWidth, screenHeight int) { if e.bounds.Width != outsideWidth || e.bounds.Height != outsideHeight { e.bounds = geo.Bounds{ Min: geo.Point{}, Width: outsideWidth, Height: outsideHeight, } e.handleMouse = mouse.Handler(root) } return outsideWidth, outsideHeight }