~eliasnaur/gio

ref: 69dfd2e3a55419167975adc316f8126bc4737443 gio/widget/material/label.go -rw-r--r-- 1.7 KiB
69dfd2e3Elias Naur op/paint: add support for efficient ImageOp subimages 8 months ago
                                                                                
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
// SPDX-License-Identifier: Unlicense OR MIT

package material

import (
	"image/color"

	"gioui.org/layout"
	"gioui.org/op/paint"
	"gioui.org/text"
	"gioui.org/unit"
	"gioui.org/widget"
)

type Label struct {
	// Face defines the text style.
	Font text.Font
	// Color is the text color.
	Color color.RGBA
	// Alignment specify the text alignment.
	Alignment text.Alignment
	// MaxLines limits the number of lines. Zero means no limit.
	MaxLines int
	Text     string
	TextSize unit.Value

	shaper text.Shaper
}

func (t *Theme) H1(txt string) Label {
	return t.Label(t.TextSize.Scale(96.0/16.0), txt)
}

func (t *Theme) H2(txt string) Label {
	return t.Label(t.TextSize.Scale(60.0/16.0), txt)
}

func (t *Theme) H3(txt string) Label {
	return t.Label(t.TextSize.Scale(48.0/16.0), txt)
}

func (t *Theme) H4(txt string) Label {
	return t.Label(t.TextSize.Scale(34.0/16.0), txt)
}

func (t *Theme) H5(txt string) Label {
	return t.Label(t.TextSize.Scale(24.0/16.0), txt)
}

func (t *Theme) H6(txt string) Label {
	return t.Label(t.TextSize.Scale(20.0/16.0), txt)
}

func (t *Theme) Body1(txt string) Label {
	return t.Label(t.TextSize, txt)
}

func (t *Theme) Body2(txt string) Label {
	return t.Label(t.TextSize.Scale(14.0/16.0), txt)
}

func (t *Theme) Caption(txt string) Label {
	return t.Label(t.TextSize.Scale(12.0/16.0), txt)
}

func (t *Theme) Label(size unit.Value, txt string) Label {
	return Label{
		Text:     txt,
		Color:    t.Color.Text,
		TextSize: size,
		shaper:   t.Shaper,
	}
}

func (l Label) Layout(gtx *layout.Context) {
	paint.ColorOp{Color: l.Color}.Add(gtx.Ops)
	tl := widget.Label{Alignment: l.Alignment, MaxLines: l.MaxLines}
	tl.Layout(gtx, l.shaper, l.Font, l.TextSize, l.Text)
}