stone/backend.go

35 lines
780 B
Go

package stone
import "image"
import "errors"
type Backend interface {
Run (channel chan(Event))
SetTitle (title string) (err error)
SetIcon (icons []image.Image) (err error)
}
type BackendFactory func (application *Application) (backend Backend, err error)
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 {
backend, err = factory(application)
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
}