stone/application.go

106 lines
2.7 KiB
Go
Raw Normal View History

2022-10-31 13:51:28 -06:00
package stone
2022-11-10 00:02:08 -07:00
import "image"
2022-10-31 13:51:28 -06:00
import "image/color"
2022-11-08 23:01:13 -07:00
// Application represents an application.
2022-10-31 13:51:28 -06:00
type Application struct {
DamageBuffer
title string
2022-11-10 00:02:08 -07:00
icons []image.Image
2022-10-31 13:51:28 -06:00
backend Backend
config Config
}
2022-11-08 23:18:56 -07:00
// 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.
2022-11-09 13:52:49 -07:00
func (application *Application) Run () (
2022-11-08 23:18:56 -07:00
channel chan(Event),
err error,
2022-11-06 12:47:37 -07:00
) {
2022-10-31 13:51:28 -06:00
// 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
2022-11-15 09:16:29 -07:00
application.config.colors = [8]color.Color {
// background
color.RGBA { R: 0, G: 0, B: 0, A: 0 },
// foreground
color.RGBA { R: 0xFF, G: 0xFF, B: 0xFF, A: 0xFF },
// red
2022-11-15 09:29:45 -07:00
color.RGBA { R: 0xFF, G: 0x00, B: 0x00, A: 0xFF },
2022-11-15 09:16:29 -07:00
// orange
color.RGBA { R: 0xFF, G: 0x80, B: 0x00, A: 0xFF },
// yellow
color.RGBA { R: 0xFF, G: 0xFF, B: 0x00, A: 0xFF },
// green
color.RGBA { R: 0x00, G: 0xFF, B: 0x00, A: 0xFF },
// blue
color.RGBA { R: 0x00, G: 0x00, B: 0xFF, A: 0xFF },
// purple
color.RGBA { R: 0x80, G: 0x00, B: 0xFF, A: 0xFF },
2022-10-31 13:51:28 -06:00
}
application.config.fontName = ""
application.config.fontSize = 11
2022-11-05 16:56:56 -06:00
2022-11-11 13:01:36 -07:00
application.config.padding = 2
2022-10-31 13:51:28 -06:00
2022-11-02 13:14:59 -06:00
application.backend, err = instantiateBackend(application)
2022-11-06 12:47:37 -07:00
if err != nil { return }
2022-11-09 13:52:49 -07:00
channel = make(chan(Event))
2022-11-09 16:53:14 -07:00
go application.backend.Run(channel)
2022-11-06 12:47:37 -07:00
return
2022-10-31 13:51:28 -06:00
}
2022-11-09 16:53:14 -07:00
// Draw "commits" changes made in the buffer to the display.
func (application *Application) Draw () {
application.backend.Draw()
}
2022-11-10 00:02:08 -07:00
// 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
}
2022-11-14 22:22:01 -07:00
// Title returns the application's title.
2022-11-10 00:02:08 -07:00
func (application *Application) Title () (title string) {
title = application.title
return
}
2022-11-14 22:22:01 -07:00
// SetIcon takes in a list of different sizes of an icon, and sets it as the
// application's icon.
2022-11-10 00:02:08 -07:00
func (application *Application) SetIcon (sizes []image.Image) (err error) {
application.icons = sizes
if application.backend != nil {
err = application.backend.SetIcon(sizes)
}
return
}
2022-11-14 22:22:01 -07:00
// Icon returns all available sizes of the application's icon. If there is no
// icon, nil is returned.
2022-11-10 00:02:08 -07:00
func (application *Application) Icon () (sizes []image.Image) {
sizes = application.icons
return
}
2022-11-09 16:53:14 -07:00
// Config returns a pointer to the application's configuration.
func (application *Application) Config () (config *Config) {
config = &application.config
return
}