zntg/ui/style.go

104 lines
2.6 KiB
Go

package ui
import "image/color"
var defaultDimensions *Dimensions
var defaultFonts *Fonts
var defaultPalette *Palette
var defaultStyle *Style
type Dimensions struct {
OutlineWidth float32
ScrollbarWidth float32
TextPadding float32
}
type Fonts struct {
Default string
}
type Palette struct {
// Background is the default background color.
Background color.Color
// Primary is used as a the main contrast color.
Primary color.Color
// PrimaryDark is a foreground version of the main contrast color.
PrimaryDark color.Color
// PrimaryHighlight is a light version of the main contrast color.
PrimaryHighlight color.Color
// PrimaryLight is a background version of the main contrast color.
PrimaryLight color.Color
// ShadedBackground is a darker version of the background color.
ShadedBackground color.Color
// Text is the default text color.
Text color.Color
// TextDisabled is disabled text color.
TextDisabled color.Color
// TextNegative is the text color associated with a negative event.
TextNegative color.Color
// TextOnPrimary is the text color when used with the main contrast color as background.
TextOnPrimary color.Color
// TextPositive is the text color associated with a positive event.
TextPositive color.Color
}
type Style struct {
Dimensions *Dimensions
Fonts *Fonts
Palette *Palette
}
func DefaultDimensions() *Dimensions {
if defaultDimensions == nil {
defaultDimensions = &Dimensions{
OutlineWidth: 2.,
ScrollbarWidth: 16.,
TextPadding: 8.,
}
}
return defaultDimensions
}
func DefaultFonts() *Fonts {
if defaultFonts == nil {
defaultFonts = &Fonts{
Default: "default",
}
}
return defaultFonts
}
func DefaultPalette() *Palette {
if defaultPalette == nil {
defaultPalette = &Palette{
Background: color.White,
Primary: RGBA(0x3F, 0x51, 0xB5, 0xFF),
PrimaryDark: RGBA(0x00, 0x28, 0x84, 0xFF),
PrimaryHighlight: RGBA(0xE8, 0xEA, 0xF6, 0xFF),
PrimaryLight: RGBA(0x75, 0x7C, 0xE8, 0xFF),
ShadedBackground: RGBA(0xFA, 0xFA, 0xFA, 0xFF),
Text: color.Black,
TextDisabled: RGBA(0xBD, 0xBD, 0xBD, 0xFF),
TextNegative: RGBA(0xFF, 0x43, 0x36, 0xFF),
TextOnPrimary: color.White,
TextPositive: RGBA(0x4C, 0xAF, 0x50, 0xFF),
}
}
return defaultPalette
}
func DefaultStyle() *Style {
if defaultStyle == nil {
defaultStyle = &Style{
Dimensions: DefaultDimensions(),
Fonts: DefaultFonts(),
Palette: DefaultPalette(),
}
}
return defaultStyle
}
func RGBA(r, g, b, a byte) *color.RGBA {
return &color.RGBA{R: r, G: g, B: b, A: a}
}