-
Notifications
You must be signed in to change notification settings - Fork 4
/
font.go
116 lines (99 loc) · 2.5 KB
/
font.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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package main
import (
"strconv"
"github.com/visualfc/atk/tk"
)
var (
sizeList = []int{9, 10, 11, 12, 13, 14, 16, 18, 24, 36, 48, 72, 96, 144}
)
type Window struct {
*tk.Window
font *tk.UserFont
info *tk.Label
vpk *tk.PackLayout
}
func NewWindow() *Window {
mw := tk.RootWindow()
font := tk.NewUserFont("", 36)
info := tk.NewLabel(mw, "Hello, 中国")
info.SetFont(font)
vpk := tk.NewVPackLayout(mw)
w := &Window{mw, font, info, vpk}
w.Init()
return w
}
func (w *Window) Init() {
cmbFamily := tk.NewComboBox(w)
cmbFamily.SetValues(tk.FontFamilieList())
upfamily := func() {
w.font.SetFamily(cmbFamily.CurrentText())
w.Resize()
}
cmbFamily.OnSelected(upfamily)
cmbFamily.OnEditReturn(upfamily)
cmbFamily.SetCurrentText(w.font.Family())
cmbSize := tk.NewComboBox(w)
var values []string
for _, v := range sizeList {
values = append(values, strconv.Itoa(v))
}
cmbSize.SetValues(values)
cmbSize.SetCurrentText("36")
upsize := func() {
v, err := strconv.Atoi(cmbSize.CurrentText())
if err == nil {
w.font.SetSize(v)
w.Resize()
}
}
cmbSize.OnEditReturn(upsize)
cmbSize.OnSelected(upsize)
chkBold := tk.NewCheckButton(w, "Bold")
chkItalic := tk.NewCheckButton(w, "Italic")
chkUnderline := tk.NewCheckButton(w, "Underline")
chkOverstrike := tk.NewCheckButton(w, "Overstrike")
chkBold.OnCommand(func() {
w.font.SetBold(chkBold.IsChecked())
})
chkItalic.OnCommand(func() {
w.font.SetItalic(chkItalic.IsChecked())
})
chkUnderline.OnCommand(func() {
w.font.SetUnderline(chkUnderline.IsChecked())
})
chkOverstrike.OnCommand(func() {
w.font.SetOverstrike(chkOverstrike.IsChecked())
})
hpk := tk.NewHPackLayout(w)
hpk.AddWidget(tk.NewLabel(w, "Family"))
hpk.AddWidget(cmbFamily)
hpk.AddWidget(tk.NewLabel(w, "Size"))
hpk.AddWidget(cmbSize)
hpk2 := tk.NewHPackLayout(w)
hpk2.AddWidget(chkBold)
hpk2.AddWidget(chkItalic)
hpk2.AddWidget(chkUnderline)
hpk2.AddWidget(chkOverstrike)
w.vpk.SetBorderWidth(10)
w.vpk.AddWidgetEx(w.info, tk.FillY, true, tk.AnchorCenter)
w.vpk.AddWidget(tk.NewLayoutSpacer(w, 0, true))
w.vpk.AddWidgetEx(hpk, tk.FillNone, false, tk.AnchorWest)
w.vpk.AddWidgetEx(hpk2, tk.FillNone, false, tk.AnchorWest)
}
func (w *Window) Resize() {
width := w.font.MeasureTextWidth(w.info.Text()) + w.vpk.BorderWidth()*2
if width > w.Width() {
w.SetWidth(width)
} else if width < 400 {
w.SetWidth(400)
}
}
func main() {
tk.MainLoop(func() {
mw := NewWindow()
mw.SetTitle("ATK Font Demo")
mw.ResizeN(500, 300)
mw.Center(nil)
mw.ShowNormal()
})
}