package stone import "image" // Application represents an application. type Application struct { DamageBuffer title string icons []image.Image backend Backend config Config callbackManager CallbackManager } // Run initializes the application, starts it, and then returns a channel that // broadcasts events. If no suitable backend can be found, an error is returned. func (application *Application) Run () ( 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) application.config.load() application.backend, err = instantiateBackend(application) if err != nil { return } application.backend.Run() return } // OnQuit registers an event handler to be called just before the application // quits. This can happen when the user closes the application, or the backend // experiences an unrecoverable error. func (application *Application) OnQuit ( onQuit func (), ) { application.callbackManager.onQuit = onQuit } // OnPress registers an event handler to be called when a key or mouse button // is pressed. func (application *Application) OnPress ( onPress func (button Button, modifiers Modifiers), ) { application.callbackManager.onPress = onPress } // OnPress registers an event handler to be called when a key or mouse button // is released. func (application *Application) OnRelease ( onRelease func (button Button), ) { application.callbackManager.onRelease = onRelease } // OnResize registers an event handler to be called when the application window // is resized. After the event handler is called, any updates it makes will // automatically be pushed to the screen. func (application *Application) OnResize ( onResize func (), ) { application.callbackManager.onResize = onResize } // OnMouseMove registers an event handler to be called when mouse motion is // detected. The coordinates of the cell that the mouse now hovers over are // given as input. func (application *Application) OnMouseMove ( onMouseMove func (x, y int), ) { application.callbackManager.onMouseMove = onMouseMove } // OnScroll registers an event handler to be called when the user uses the mouse // scroll wheel. Horizontal and vertical amounts are given as input. func (application *Application) OnScroll ( onScroll func (x, y int), ) { application.callbackManager.onScroll = onScroll } // OnStart registers an event handler to be called once when the application // starts, right before the first time updates are pushed to the screen. // Anything done in here will be the first thing to appear on screen. func (application *Application) OnStart ( onStart func (), ) { application.callbackManager.onStart = onStart } // Draw "commits" changes made in the buffer to the display. func (application *Application) Draw () { application.backend.Draw() } // SetTitle sets the application's title. If in a window, it will appear as the // window's name. func (application *Application) SetTitle (title string) (err error) { application.title = title if application.backend != nil { err = application.backend.SetTitle(title) } return } // Title returns the application's title. func (application *Application) Title () (title string) { title = application.title return } // SetIcon takes in a list of different sizes of an icon, and sets it as the // application's icon. func (application *Application) SetIcon (sizes []image.Image) (err error) { application.icons = sizes if application.backend != nil { err = application.backend.SetIcon(sizes) } return } // Icon returns all available sizes of the application's icon. If there is no // icon, nil is returned. func (application *Application) Icon () (sizes []image.Image) { sizes = application.icons return } // Config returns a pointer to the application's configuration. func (application *Application) Config () (config *Config) { config = &application.config return }