draw2d/font.go

110 lines
2.1 KiB
Go
Raw Permalink Normal View History

2011-04-27 08:06:14 +00:00
// Copyright 2010 The draw2d Authors. All rights reserved.
// created: 13/12/2010 by Laurent Le Goff
2012-04-17 09:03:56 +00:00
2011-04-27 08:06:14 +00:00
package draw2d
import (
"io/ioutil"
2012-01-13 09:14:12 +00:00
"log"
"path"
2015-07-10 00:06:47 +00:00
"path/filepath"
2015-04-16 09:51:13 +00:00
"github.com/golang/freetype/truetype"
2011-04-27 08:06:14 +00:00
)
var (
fontFolder = "../resource/font/"
fonts = make(map[string]*truetype.Font)
fontNamer FontFileNamer = FontFileName
2011-04-27 08:06:14 +00:00
)
2015-11-05 13:43:36 +00:00
// FontStyle defines bold and italic styles for the font
// It is possible to combine values for mixed styles, eg.
// FontData.Style = FontStyleBold | FontStyleItalic
2011-04-27 08:06:14 +00:00
type FontStyle byte
const (
FontStyleNormal FontStyle = iota
FontStyleBold
FontStyleItalic
)
type FontFamily byte
const (
FontFamilySans FontFamily = iota
FontFamilySerif
FontFamilyMono
)
type FontData struct {
Name string
Family FontFamily
Style FontStyle
}
type FontFileNamer func(fontData FontData) string
2015-06-27 17:41:34 +00:00
func FontFileName(fontData FontData) string {
2011-04-27 08:06:14 +00:00
fontFileName := fontData.Name
switch fontData.Family {
case FontFamilySans:
fontFileName += "s"
case FontFamilySerif:
fontFileName += "r"
case FontFamilyMono:
fontFileName += "m"
}
if fontData.Style&FontStyleBold != 0 {
fontFileName += "b"
} else {
fontFileName += "r"
}
if fontData.Style&FontStyleItalic != 0 {
fontFileName += "i"
}
fontFileName += ".ttf"
2012-04-17 08:18:26 +00:00
return fontFileName
}
func RegisterFont(fontData FontData, font *truetype.Font) {
fonts[fontNamer(fontData)] = font
2012-04-17 08:18:26 +00:00
}
func GetFont(fontData FontData) *truetype.Font {
fontFileName := fontNamer(fontData)
2011-04-27 08:06:14 +00:00
font := fonts[fontFileName]
if font != nil {
return font
}
fonts[fontFileName] = loadFont(fontFileName)
return fonts[fontFileName]
}
func GetFontFolder() string {
return fontFolder
}
func SetFontFolder(folder string) {
2015-07-10 00:06:47 +00:00
fontFolder = filepath.Clean(folder)
2011-04-27 08:06:14 +00:00
}
func SetFontNamer(fn FontFileNamer) {
fontNamer = fn
}
2011-04-27 08:06:14 +00:00
func loadFont(fontFileName string) *truetype.Font {
fontBytes, err := ioutil.ReadFile(path.Join(fontFolder, fontFileName))
if err != nil {
log.Println(err)
return nil
}
font, err := truetype.Parse(fontBytes)
2011-04-27 08:06:14 +00:00
if err != nil {
log.Println(err)
return nil
}
return font
}