Browse Source

load all fonts into memory

cuu 1 year ago
parent
commit
2785d78d94
1 changed files with 46 additions and 11 deletions
  1. 46 11
      sysgo/UI/UI.go

+ 46 - 11
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)
 	}
 
 	//