Added renderer factory.
- Removes dependency on the specific backend from an application point-of-view.
This commit is contained in:
parent
5ecfd10754
commit
2c9007ce9b
@ -202,8 +202,8 @@ func (r *Renderer) Rectangle(rect geom.RectangleF32, c color.Color, thickness fl
|
||||
allg5.DrawRectangle(minX, minY, maxX, maxY, newColor(c), thickness)
|
||||
}
|
||||
|
||||
func (r *Renderer) RegisterFont(path, name string, size int) error {
|
||||
var f, err = allg5.LoadTTFFont(path, int(size))
|
||||
func (r *Renderer) RegisterFont(name, path string, size int) error {
|
||||
var f, err = allg5.LoadTTFFont(path, size)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
27
allg5ui/rendererfactory.go
Normal file
27
allg5ui/rendererfactory.go
Normal file
@ -0,0 +1,27 @@
|
||||
package allg5ui
|
||||
|
||||
import (
|
||||
"opslag.de/schobers/allg5"
|
||||
"opslag.de/schobers/zntg/ui"
|
||||
)
|
||||
|
||||
func init() {
|
||||
ui.SetRendererFactory(&rendererFactory{})
|
||||
}
|
||||
|
||||
type rendererFactory struct{}
|
||||
|
||||
func (f rendererFactory) New(title string, width, height int) (ui.Renderer, error) {
|
||||
return f.NewOptions(title, width, height, ui.NewRendererOptions{Resizable: true})
|
||||
}
|
||||
|
||||
func (f rendererFactory) NewOptions(title string, width, height int, opts ui.NewRendererOptions) (ui.Renderer, error) {
|
||||
renderer, err := NewRenderer(width, height, allg5.NewDisplayOptions{
|
||||
Resizable: opts.Resizable,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
renderer.SetWindowTitle(title)
|
||||
return renderer, nil
|
||||
}
|
@ -4,9 +4,9 @@ import (
|
||||
"image/color"
|
||||
"log"
|
||||
|
||||
"opslag.de/schobers/allg5"
|
||||
_ "opslag.de/schobers/zntg/allg5ui" // import the renderer for the UI
|
||||
|
||||
"opslag.de/schobers/geom"
|
||||
"opslag.de/schobers/zntg/allg5ui"
|
||||
"opslag.de/schobers/zntg/ui"
|
||||
)
|
||||
|
||||
@ -63,13 +63,13 @@ func (b *basic) Init(ctx ui.Context) error {
|
||||
}
|
||||
|
||||
func run() error {
|
||||
var render, err = allg5ui.NewRenderer(800, 600, allg5.NewDisplayOptions{})
|
||||
var render, err = ui.NewRenderer("Basic Example", 800, 600)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer render.Destroy()
|
||||
|
||||
err = render.RegisterFont("../resources/font/OpenSans-Regular.ttf", "default", 14)
|
||||
err = render.RegisterFont("default", "../resources/font/OpenSans-Regular.ttf", 14)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -24,8 +24,9 @@ type Renderer interface {
|
||||
DrawImage(im Image, p geom.PointF32)
|
||||
DrawImageOptions(im Image, p geom.PointF32, opts DrawOptions)
|
||||
FillRectangle(r geom.RectangleF32, c color.Color)
|
||||
Font(font string) Font
|
||||
Font(name string) Font
|
||||
Rectangle(r geom.RectangleF32, c color.Color, thickness float32)
|
||||
RegisterFont(name, path string, size int) error
|
||||
RenderTo(Image)
|
||||
RenderToDisplay()
|
||||
SetMouseCursor(c MouseCursor)
|
||||
|
31
ui/rendererfactory.go
Normal file
31
ui/rendererfactory.go
Normal file
@ -0,0 +1,31 @@
|
||||
package ui
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"opslag.de/schobers/geom"
|
||||
)
|
||||
|
||||
type RendererFactory interface {
|
||||
New(title string, width, height int) (Renderer, error)
|
||||
NewOptions(title string, width, height int, opts NewRendererOptions) (Renderer, error)
|
||||
}
|
||||
|
||||
var rendererFactory RendererFactory
|
||||
|
||||
func NewRenderer(title string, width, height int) (Renderer, error) {
|
||||
if rendererFactory == nil {
|
||||
return nil, errors.New("no renderer factory registered")
|
||||
}
|
||||
return rendererFactory.New(title, width, height)
|
||||
}
|
||||
|
||||
// SetRendererFactory sets the new factory that is used to create a new renderer.
|
||||
func SetRendererFactory(factory RendererFactory) {
|
||||
rendererFactory = factory
|
||||
}
|
||||
|
||||
type NewRendererOptions struct {
|
||||
Location *geom.PointF32
|
||||
Resizable bool
|
||||
}
|
Loading…
Reference in New Issue
Block a user