package gui import ( "image/color" "golang.org/x/image/font" ) type Style interface { SetForeground(c color.Color) Foreground(ctx AppContext) color.Color SetBackground(c color.Color) Background(ctx AppContext) color.Color SetFont(f *Font) Font(ctx AppContext) *Font SetFontSize(fontSize int) FontSize(ctx AppContext) int FontFace(ctx AppContext) font.Face } type StyleTmpl struct { foreground color.Color background color.Color font *Font fontSize *int } func (s *StyleTmpl) SetForeground(c color.Color) { s.foreground = c } func (s *StyleTmpl) Foreground(ctx AppContext) color.Color { if s.foreground == nil { return ctx.Foreground() } return s.foreground } func (s *StyleTmpl) SetBackground(c color.Color) { s.background = c } func (s *StyleTmpl) Background(ctx AppContext) color.Color { if s.background == nil { return ctx.Background() } return s.background } func (s *StyleTmpl) SetFont(f *Font) { s.font = f } func (s *StyleTmpl) Font(ctx AppContext) *Font { if s.font == nil { return ctx.Font() } return s.font } func (s *StyleTmpl) SetFontSize(fontSize int) { s.fontSize = &fontSize } func (s *StyleTmpl) FontSize(ctx AppContext) int { if s.fontSize == nil { return ctx.FontSize() } return *s.fontSize } func (s *StyleTmpl) FontFace(ctx AppContext) font.Face { return s.Font(ctx).Face(s.FontSize(ctx)) }