Sander Schobers
0f03760e66
Refactored Size (on Renderer) to return geom.Point instead of geom.PointF32. Refactored Width and Height (on Texture) to return int instead of float32. Refactored texture dimensions to be represented by ints instead of float32s.
68 lines
1.3 KiB
Go
68 lines
1.3 KiB
Go
package ui
|
|
|
|
import (
|
|
"time"
|
|
|
|
"opslag.de/schobers/geom"
|
|
)
|
|
|
|
// Run runs the application loop.
|
|
func Run(r Renderer, s *Style, view Control) error {
|
|
return RunWait(r, s, view, false)
|
|
}
|
|
|
|
// RunWait runs the application loop and conditionally waits on events before rendering.
|
|
func RunWait(r Renderer, s *Style, view Control, wait bool) error {
|
|
if s == nil {
|
|
s = DefaultStyle()
|
|
}
|
|
ctx := newContext(r, s, view)
|
|
defer ctx.Destroy()
|
|
|
|
root, ok := view.(RootControl)
|
|
if ok {
|
|
err := root.Init(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
anim := time.NewTicker(30 * time.Millisecond)
|
|
go func() {
|
|
for {
|
|
select {
|
|
case <-anim.C:
|
|
case <-ctx.quit:
|
|
return
|
|
}
|
|
if ctx.animate {
|
|
r.Refresh()
|
|
}
|
|
ctx.animate = false
|
|
}
|
|
}()
|
|
defer anim.Stop()
|
|
|
|
overlays := ctx.Overlays()
|
|
ctx.Renderer().Refresh()
|
|
for !ctx.HasQuit() {
|
|
var size = r.Size()
|
|
var bounds = geom.RectF32(0, 0, float32(size.X), float32(size.Y))
|
|
overlays.Arrange(ctx, bounds, geom.ZeroPtF32, nil)
|
|
overlays.Render(ctx)
|
|
if ctx.HasQuit() {
|
|
return nil
|
|
}
|
|
|
|
tooltip := ctx.tooltip.Text
|
|
ctx.tooltip.Text = ""
|
|
if r.PushEvents(ctx, wait) {
|
|
if ctx.tooltip.Text != tooltip {
|
|
ctx.overlays.SetVisibility(uiDefaultTooltipOverlay, ctx.tooltip.Text != "")
|
|
}
|
|
} else {
|
|
ctx.tooltip.Text = tooltip
|
|
}
|
|
}
|
|
return nil
|
|
}
|