package alui

import (
	"opslag.de/schobers/allg5"
	"opslag.de/schobers/geom"
)

type UI struct {
	ctx  *Context
	main Control
}

func NewUI(disp *allg5.Display, main Control) *UI {
	ctx := &Context{
		Display: disp,
		Fonts:   NewFonts(),
		Palette: Palette{},
	}
	return &UI{ctx, main}
}

func (ui *UI) Context() *Context { return ui.ctx }

func (ui *UI) Destroy() {
	ui.ctx.Fonts.Destroy()
}

func (ui *UI) Fonts() *Fonts { return ui.ctx.Fonts }

func (ui *UI) SetPalette(p Palette) { ui.ctx.Palette = p }

func (ui *UI) layoutBounds(bounds geom.RectangleF32) {
	ui.main.Layout(ui.ctx, bounds)
}

func (ui *UI) Handle(e allg5.Event) { ui.main.Handle(e) }

func (ui *UI) Render() {
	ui.RenderBounds(ui.ctx.DisplayBounds())
}

func (ui *UI) RenderBounds(bounds geom.RectangleF32) {
	ui.ctx.Cursor = allg5.MouseCursorDefault
	ui.layoutBounds(bounds)
	ui.main.Render(ui.ctx, bounds)
	ui.ctx.Display.SetMouseCursor(ui.ctx.Cursor)
}
