From 0a73529306d9e3e16845eb0101728fba5112063f Mon Sep 17 00:00:00 2001 From: Sander Schobers Date: Sat, 9 May 2020 16:48:18 +0200 Subject: [PATCH] Separated the lazy text rendering method. --- fonts.go | 36 ++++++++++++++++++++++++++++++++---- fpsrenderer.go | 12 +----------- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/fonts.go b/fonts.go index c0feb32..603cd09 100644 --- a/fonts.go +++ b/fonts.go @@ -3,21 +3,49 @@ package tins2020 import ( "fmt" + "github.com/veandco/go-sdl2/sdl" "github.com/veandco/go-sdl2/ttf" "opslag.de/schobers/fs/vfs" ) +type Font struct { + *ttf.Font +} + +func (f *Font) Render(renderer *sdl.Renderer, text string, pos Point, color sdl.Color) (*Texture, error) { + surface, err := f.RenderUTF8Solid(text, color) + if err != nil { + return nil, err + } + defer surface.Free() + texture, err := NewTextureFromSurface(renderer, surface) + if err != nil { + return nil, err + } + return texture, nil +} + +func (f *Font) RenderCopy(renderer *sdl.Renderer, text string, pos Point, color sdl.Color) error { + texture, err := f.Render(renderer, text, pos, color) + if err != nil { + return err + } + defer texture.Destroy() + texture.Copy(renderer, texture.RectOffset(pos)) + return nil +} + type Fonts struct { dir vfs.CopyDir - fonts map[string]*ttf.Font + fonts map[string]*Font } func (f *Fonts) Init(dir vfs.CopyDir) { f.dir = dir - f.fonts = map[string]*ttf.Font{} + f.fonts = map[string]*Font{} } -func (f *Fonts) Font(name string) *ttf.Font { return f.fonts[name] } +func (f *Fonts) Font(name string) *Font { return f.fonts[name] } type FontDescriptor struct { Name string @@ -47,7 +75,7 @@ func (f *Fonts) Load(name, path string, size int) error { if font, ok := f.fonts[name]; ok { font.Close() } - f.fonts[name] = font + f.fonts[name] = &Font{font} return nil } diff --git a/fpsrenderer.go b/fpsrenderer.go index 9073ab7..539af83 100644 --- a/fpsrenderer.go +++ b/fpsrenderer.go @@ -37,15 +37,5 @@ func (f *FPS) Render(ctx *Context) { f.ticks[f.slot]++ font := ctx.Fonts.Font("debug") - surface, err := font.RenderUTF8Solid(fmt.Sprintf("FPS: %d", f.total), sdl.Color{R: 255, G: 255, B: 255, A: 255}) - if err != nil { - return - } - defer surface.Free() - texture, err := NewTextureFromSurface(ctx.Renderer, surface) - if err != nil { - return - } - defer texture.Destroy() - texture.Copy(ctx.Renderer, texture.RectOffset(Pt(5, 5))) + font.RenderCopy(ctx.Renderer, fmt.Sprintf("FPS: %d", f.total), Pt(5, 5), sdl.Color{R: 255, G: 255, B: 255, A: 255}) }