package stone import "time" import "image/color" // Application represents an application. type Application struct { DamageBuffer title string backend Backend config Config } // SetSize sets the application's buffer size. This may or may not change the // size of the window, depending on the backend used. func (application *Application) SetSize (width, height int) { application.DamageBuffer.SetSize(width, height) } // SetTitle sets the application's title. If in a window, it will appear as the // window's name. func (application *Application) SetTitle (title string) { application.title = title application.backend.SetTitle(title) } // Run initializes the application, and then calls callback. Operations inside // of callback are allowed to interact with the application. Depending on the // backend used, this function may bind to the main thread. func (application *Application) Run ( callback func (application *Application), ) ( err error, ) { // 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: 0x2B, G: 0x30, B: 0x3C, A: 0xFF }, color.RGBA { R: 0x4C, G: 0x56, B: 0x6A, A: 0xFF }, color.RGBA { R: 0x2E, G: 0x34, B: 0x40, A: 0xFF }, color.RGBA { R: 0xA8, G: 0x55, B: 0x5D, A: 0xFF }, } application.config.padding = 4 application.backend, err = instantiateBackend(application) if err != nil { return } application.backend.Run(callback) return } // Await blocks until an event is recieved, or until the specified timeout has // elapsed. If the timeout is zero, it will wait forever. This function returns // true if the backend is still active, and false if it has closed. func (application *Application) Await (timeout time.Duration) (keepRunning bool) { keepRunning = application.backend.Await(timeout) return } // Poll updates the window and checks for new events. This function returns true // if the backend is still active, and false if it has closed. func (application *Application) Poll () (keepRunning bool) { keepRunning = application.backend.Poll() return } // Title returns the application's title. func (application *Application) Title () (title string) { title = application.title return } // Config returns a pointer to the application's configuration. func (application *Application) Config () (config *Config) { config = &application.config return } // JustPressed returns true if the specified button is pressed, but was not // pressed the last time events were checked. func (application *Application) JustPressed (button Button) (pressed bool) { pressed = application.backend.JustPressed(button) return } // JustReleased returns true if the specified button func (application *Application) JustReleased (button Button) (released bool) { released = application.backend.JustReleased(button) return } func (application *Application) Pressed (button Button) (pressed bool) { pressed = application.backend.Pressed(button) return } func (application *Application) Repeated (button Button) (repeated bool) { repeated = application.backend.Repeated(button) return } func (application *Application) Typed () (text string) { text = application.backend.Typed() return } func (application *Application) Resized () (resized bool) { resized = application.backend.Resized() return } func (application *Application) MousePosition () (x, y int) { x, y = application.backend.MousePosition() return }