From 2785d78d94b223b994a87304deeef8cb930527e2 Mon Sep 17 00:00:00 2001 From: cuu Date: Wed, 25 Jan 2023 05:37:07 +0000 Subject: [PATCH] load all fonts into memory --- sysgo/UI/UI.go | 57 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/sysgo/UI/UI.go b/sysgo/UI/UI.go index a578fe7..9cb2d79 100644 --- a/sysgo/UI/UI.go +++ b/sysgo/UI/UI.go @@ -3,6 +3,7 @@ package UI import ( "fmt" + "github.com/veandco/go-sdl2/sdl" "github.com/veandco/go-sdl2/ttf" "github.com/clockworkpi/LauncherGoDev/sysgo" @@ -51,41 +52,75 @@ func (self *Widget) NewCoord(x, y int) { self.PosY = y } +func FontRW(font_data [] byte, font_size int) *ttf.Font { + + mem,err := sdl.RWFromMem(font_data) + if err != nil { + panic(err) + } + + font, err := ttf.OpenFontRW(mem, 0, font_size) + if err != nil { + panic(fmt.Sprintf("OpenRW font failed %s", err)) + } + + return font +} + +type FontData struct { + Data []byte + Size int +} //invoked in main.go func Init() { font.Init() - + + fonts_name := [4]string{"VarelaRound-Regular.ttf", + "VeraMono.ttf", + "NotoSansMono-Regular.ttf", + "NotoSansCJK-Regular.ttf"} + skinpath := sysgo.SKIN + "/truetype" Fonts = make(map[string]*ttf.Font) fonts_path := make(map[string]string) - - fonts_path["varela"] = fmt.Sprintf("%s/VarelaRound-Regular.ttf", skinpath) - fonts_path["veramono"] = fmt.Sprintf("%s/VeraMono.ttf", skinpath) - fonts_path["noto"] = fmt.Sprintf("%s/NotoSansMono-Regular.ttf", skinpath) - fonts_path["notocjk"] = fmt.Sprintf("%s/NotoSansCJK-Regular.ttf", skinpath) + + fonts_path["varela"] = fmt.Sprintf("%s/%s", skinpath,fonts_name[0]) + fonts_path["veramono"] = fmt.Sprintf("%s/%s", skinpath,fonts_name[1]) + fonts_path["noto"] = fmt.Sprintf("%s/%s", skinpath,fonts_name[2]) + fonts_path["notocjk"] = fmt.Sprintf("%s/%s", skinpath,fonts_name[3]) + + fonts_data := make(map[string]FontData) + d,s := sdl.LoadFile(fonts_path["varela"]) + fonts_data["varela"] = FontData{d,s} + d,s = sdl.LoadFile(fonts_path["notocjk"]) + fonts_data["notocjk"] = FontData{d,s} + d,s = sdl.LoadFile(fonts_path["veramono"]) + fonts_data["veramono"] = FontData{d,s} + d,s = sdl.LoadFile(fonts_path["noto"]) + fonts_data["noto"] = FontData{d,s} for i := 10; i < 41; i++ { keyname := fmt.Sprintf("varela%d", i) - Fonts[keyname] = font.Font(fonts_path["varela"], i) + Fonts[keyname] = FontRW(fonts_data["varela"].Data, i) } - Fonts["varela120"] = font.Font(fonts_path["varela"], 120) + Fonts["varela120"] = FontRW(fonts_data["varela"].Data, 120) for i := 10; i < 26; i++ { keyname := fmt.Sprintf("veramono%d", i) - Fonts[keyname] = font.Font(fonts_path["veramono"], i) + Fonts[keyname] = FontRW(fonts_data["veramono"].Data, i) } for i := 10; i < 28; i++ { keyname := fmt.Sprintf("notosansmono%d", i) - Fonts[keyname] = font.Font(fonts_path["noto"], i) + Fonts[keyname] = FontRW(fonts_data["noto"].Data, i) } for i := 10; i < 28; i++ { keyname := fmt.Sprintf("notosanscjk%d", i) - Fonts[keyname] = font.Font(fonts_path["notocjk"], i) + Fonts[keyname] = FontRW(fonts_data["notocjk"].Data, i) } //