stone/application.go

94 lines
2.5 KiB
Go
Raw Normal View History

2022-10-31 13:51:28 -06:00
package stone
import "time"
import "image/color"
type Application struct {
DamageBuffer
title string
backend Backend
config Config
}
func (application *Application) SetSize (width, height int) {
application.DamageBuffer.SetSize(width, height)
// application.updateWindowSize()
}
func (application *Application) SetTitle (title string) {
application.title = title
application.backend.SetTitle(title)
}
func (application *Application) Run (callback func (application *Application)) {
// default values for certain parameters
width, height := application.Size()
if width < 1 { width = 80 }
if height < 1 { height = 20 }
application.DamageBuffer.SetSize(width, height)
// TODO: load these from a file
application.config.colors = [4]color.Color {
color.RGBA { R: 0x00, G: 0x00, B: 0x00, A: 0xFF },
color.RGBA { R: 0xFF, G: 0xFF, B: 0xFF, A: 0xFF },
color.RGBA { R: 0x00, G: 0x00, B: 0x00, A: 0xFF },
color.RGBA { R: 0xFF, G: 0xFF, B: 0xFF, A: 0xFF },
}
2022-11-02 13:14:59 -06:00
// TODO: instead, return the error
var err error
application.backend, err = instantiateBackend(application)
if err != nil { panic(err.Error()) }
2022-10-31 13:51:28 -06:00
application.backend.Run(callback)
}
func (application *Application) Await (timeout time.Duration) (keepRunning bool) {
2022-11-02 13:14:59 -06:00
keepRunning = application.backend.Await(timeout)
2022-10-31 13:51:28 -06:00
return
}
func (application *Application) Poll () (keepRunning bool) {
2022-11-02 13:14:59 -06:00
keepRunning = application.backend.Poll()
2022-10-31 13:51:28 -06:00
return
}
func (application *Application) Title () (title string) {
title = application.title
return
}
func (application *Application) Config () (config *Config) {
config = &application.config
return
}
2022-11-02 13:14:59 -06:00
func (application *Application) Resized () (resized bool) {
resized = application.backend.Resized()
return
}
2022-10-31 13:51:28 -06:00
// // updateWindowSize updates the window size according to the buffer size.
// func (application *Application) updateWindowSize () {
// if application.window == nil { return }
// application.window.SetBounds(application.calculateWindowSize())
// }
// updateBufferSize updats the buffer size according to the window size.
// func (application *Application) updateBufferSize () {
// if application.window == nil {
// panic("call to application.updateBufferSize before window exists")
// }
//
// windowBounds := application.window.Bounds().Max
//
// if windowBounds != application.previousBounds {
// application.previousBounds = windowBounds
// application.boundsDirty = true
// application.DamageBuffer.SetSize (
// int(windowBounds.X) / application.metrics.cellWidth,
// int(windowBounds.Y) / application.metrics.cellHeight)
// }
// }