package ui type Context interface { Animate() Fonts() *Fonts HasQuit() bool Overlays() *Overlays Quit() Renderer() Renderer Style() *Style Textures() *Textures } var _ Context = &context{} var _ EventTarget = &context{} type context struct { animate bool quit chan struct{} renderer Renderer view Control overlays *Overlays fonts *Fonts textures *Textures style *Style } func newContext(r Renderer, s *Style, view Control) *context { return &context{ quit: make(chan struct{}), renderer: r, style: s, view: view, overlays: NewOverlays(view), fonts: NewFonts(r), textures: NewTextures(r)} } func (c *context) Animate() { c.animate = true } func (c *context) Destroy() { c.fonts.Destroy() c.textures.Destroy() } func (c *context) Fonts() *Fonts { return c.fonts } func (c *context) HasQuit() bool { select { case <-c.quit: return true default: return false } } func (c *context) Overlays() *Overlays { return c.overlays } func (c *context) Renderer() Renderer { return c.renderer } func (c *context) Style() *Style { return c.style } func (c *context) Quit() { if !c.HasQuit() { close(c.quit) } } func (c *context) Textures() *Textures { return c.textures } // Handle implement EventTarget func (c *context) Handle(e Event) { switch e.(type) { case *DisplayCloseEvent: c.Quit() return } c.overlays.Handle(c, e) }