stone/backend.go

42 lines
848 B
Go
Raw Normal View History

2022-10-31 13:51:28 -06:00
package stone
2022-11-08 23:13:44 -07:00
import "image"
2022-10-31 13:51:28 -06:00
import "errors"
type Backend interface {
2022-11-15 22:29:23 -07:00
Run ()
2022-11-10 00:02:08 -07:00
SetTitle (title string) (err error)
SetIcon (icons []image.Image) (err error)
Draw ()
2022-10-31 13:51:28 -06:00
}
2022-11-15 22:29:23 -07:00
type BackendFactory func (
application *Application,
callbackManager *CallbackManager,
) (
backend Backend,
err error,
)
2022-10-31 13:51:28 -06:00
var factories []BackendFactory
func RegisterBackend (factory BackendFactory) {
factories = append(factories, factory)
}
func instantiateBackend (application *Application) (backend Backend, err error) {
// find a suitable backend
for _, factory := range factories {
2022-11-15 22:29:23 -07:00
backend, err = factory(application, &application.callbackManager)
2022-10-31 13:51:28 -06:00
if err == nil && backend != nil { return }
}
// if none were found, but there was no error produced, produce an
// error
if err == nil {
err = errors.New("no available backends")
}
return
}