You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
973 B
Go

package app
import (
"github.com/gdamore/tcell/v2"
"github.com/jordanorelli/astro-domu/internal/math"
)
type containerView struct {
4 years ago
refWidth int
refHeight int
children []*node
focussed int
}
func (c *containerView) handleEvent(e tcell.Event) change {
switch e.(type) {
case *tcell.EventKey:
return c.children[c.focussed].handleEvent(e)
default:
// ui.Debug("screen saw unhandled event of type %T", e)
}
return nil
}
func (c *containerView) draw(img canvas, st *state) {
4 years ago
bounds := img.bounds()
for _, n := range c.children {
4 years ago
n.draw(cut(img, c.scaleFrame(n.frame, bounds)), st)
}
}
func (c *containerView) scaleFrame(frame math.Rect, bounds math.Rect) math.Rect {
xscale := bounds.Width / c.refWidth
yscale := bounds.Height / c.refHeight
return math.Rect{
Origin: math.Vec{xscale * frame.Origin.X, yscale * frame.Origin.Y},
Width: xscale * frame.Width,
Height: yscale * frame.Height,
}
}
type node struct {
view
frame math.Rect
}