Files
2024-07-08 23:16:08 +08:00

100 lines
2.0 KiB
Go

package theme
import (
"image/color"
"sync"
"gioui.org/widget/material"
"golang.org/x/exp/shiny/materialdesign/colornames"
)
const (
System string = "system"
Light string = "light"
Dark string = "dark"
)
type Palette struct {
Material material.Palette
ContentSurfaceBg color.NRGBA
ListBg color.NRGBA
NavButtonBg color.NRGBA
NavButtonContrastBg color.NRGBA
ItemBg color.NRGBA
NotificationBg color.NRGBA
}
type Theme struct {
Name string
Palette
}
var (
light = Theme{
Name: Light,
Palette: Palette{
Material: material.Palette{
Fg: color.NRGBA(colornames.Black),
Bg: color.NRGBA(colornames.White),
ContrastBg: color.NRGBA{
R: 0x3f,
G: 0x51,
B: 0xb5,
A: 0xff,
},
ContrastFg: color.NRGBA(colornames.White),
},
ContentSurfaceBg: color.NRGBA(colornames.Grey50),
ListBg: color.NRGBA(colornames.BlueGrey50),
NavButtonBg: color.NRGBA(colornames.BlueGrey50),
NavButtonContrastBg: color.NRGBA(colornames.BlueGrey100),
ItemBg: color.NRGBA(colornames.Grey300),
NotificationBg: color.NRGBA(colornames.Grey200),
},
}
dark = Theme{
Name: Dark,
Palette: Palette{
Material: material.Palette{
Fg: color.NRGBA(colornames.White),
Bg: color.NRGBA(colornames.Grey900),
ContrastBg: color.NRGBA(colornames.Green500),
ContrastFg: color.NRGBA(colornames.White),
},
ContentSurfaceBg: color.NRGBA(colornames.Grey800),
ListBg: color.NRGBA(colornames.Grey700),
NavButtonBg: color.NRGBA(colornames.Grey800),
NavButtonContrastBg: color.NRGBA(colornames.Grey600),
ItemBg: color.NRGBA(colornames.Grey600),
NotificationBg: color.NRGBA(colornames.Grey700),
},
}
)
var (
theme Theme = light
mux sync.RWMutex
)
func Current() Theme {
mux.RLock()
defer mux.RUnlock()
return theme
}
func UseLight() {
mux.Lock()
defer mux.Unlock()
theme = light
}
func UseDark() {
mux.Lock()
defer mux.Unlock()
theme = dark
}