/
fonts.go
53 lines (49 loc) · 2.5 KB
/
fonts.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package roboto
import (
"fmt"
"gioui.org/font"
"gioui.org/font/opentype"
"gioui.org/text"
"github.com/gio-eui/md3-fonts/fonts/roboto/robotoblack"
"github.com/gio-eui/md3-fonts/fonts/roboto/robotoblackitalic"
"github.com/gio-eui/md3-fonts/fonts/roboto/robotobold"
"github.com/gio-eui/md3-fonts/fonts/roboto/robotobolditalic"
"github.com/gio-eui/md3-fonts/fonts/roboto/robotolight"
"github.com/gio-eui/md3-fonts/fonts/roboto/robotolightitalic"
"github.com/gio-eui/md3-fonts/fonts/roboto/robotomedium"
"github.com/gio-eui/md3-fonts/fonts/roboto/robotomediumitalic"
"github.com/gio-eui/md3-fonts/fonts/roboto/robotoregular"
"github.com/gio-eui/md3-fonts/fonts/roboto/robotoregularitalic"
"github.com/gio-eui/md3-fonts/fonts/roboto/robotothin"
"github.com/gio-eui/md3-fonts/fonts/roboto/robotothinitalic"
"sync"
)
var (
once sync.Once
collection []text.FontFace
)
func Collection() []font.FontFace {
once.Do(func() {
register(font.Font{Weight: font.Thin, Style: font.Regular}, robotothin.TypeFace, robotothin.Data)
register(font.Font{Weight: font.Thin, Style: font.Italic}, robotothinitalic.TypeFace, robotothinitalic.Data)
register(font.Font{Weight: font.Light, Style: font.Regular}, robotolight.TypeFace, robotolight.Data)
register(font.Font{Weight: font.Light, Style: font.Italic}, robotolightitalic.TypeFace, robotolightitalic.Data)
register(font.Font{Weight: font.Normal, Style: font.Regular}, robotoregular.TypeFace, robotoregular.Data)
register(font.Font{Weight: font.Normal, Style: font.Italic}, robotoregularitalic.TypeFace, robotoregularitalic.Data)
register(font.Font{Weight: font.Medium, Style: font.Regular}, robotomedium.TypeFace, robotomedium.Data)
register(font.Font{Weight: font.Medium, Style: font.Italic}, robotomediumitalic.TypeFace, robotomediumitalic.Data)
register(font.Font{Weight: font.Bold, Style: font.Regular}, robotobold.TypeFace, robotobold.Data)
register(font.Font{Weight: font.Bold, Style: font.Italic}, robotobolditalic.TypeFace, robotobolditalic.Data)
register(font.Font{Weight: font.Black, Style: font.Regular}, robotoblack.TypeFace, robotoblack.Data)
register(font.Font{Weight: font.Black, Style: font.Italic}, robotoblackitalic.TypeFace, robotoblackitalic.Data)
})
return collection
}
func register(fnt font.Font, Typeface string, fontByte []byte) {
face, err := opentype.Parse(fontByte)
if err != nil {
panic(fmt.Errorf("failed to parse font: %v", err))
}
fnt.Typeface = font.Typeface(Typeface)
collection = append(collection, font.FontFace{Font: fnt, Face: face})
}