mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-05 17:35:36 +00:00
theme/material: add the material theme
Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
// 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
|
||||
|
||||
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,
|
||||
Font: text.Font{
|
||||
Size: 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.Text)
|
||||
}
|
||||
Reference in New Issue
Block a user