summaryrefslogtreecommitdiffstats
path: root/pkg/theme
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2021-07-31 15:34:45 +1000
committerJesse Duffield <jessedduffield@gmail.com>2021-07-31 17:33:20 +1000
commit0bc0e4ac88f430976e4f2e69285ad6c56d94c137 (patch)
treea317e1f10ccdc111b3e2d71ca87ad47555b6118c /pkg/theme
parent117c0bd4f7adea7afb845107623b1b3d9b4e96fa (diff)
more efficient
Diffstat (limited to 'pkg/theme')
-rw-r--r--pkg/theme/theme.go68
1 files changed, 59 insertions, 9 deletions
diff --git a/pkg/theme/theme.go b/pkg/theme/theme.go
index ffccc606a..d05897540 100644
--- a/pkg/theme/theme.go
+++ b/pkg/theme/theme.go
@@ -42,13 +42,13 @@ var (
// UpdateTheme updates all theme variables
func UpdateTheme(themeConfig config.ThemeConfig) {
- ActiveBorderColor = GetGocuiColor(themeConfig.ActiveBorderColor)
- InactiveBorderColor = GetGocuiColor(themeConfig.InactiveBorderColor)
- SelectedLineBgColor = style.SetConfigStyles(themeConfig.SelectedLineBgColor, true)
- SelectedRangeBgColor = style.SetConfigStyles(themeConfig.SelectedRangeBgColor, true)
- GocuiSelectedLineBgColor = GetGocuiColor(themeConfig.SelectedLineBgColor)
- OptionsColor = GetGocuiColor(themeConfig.OptionsTextColor)
- OptionsFgColor = style.SetConfigStyles(themeConfig.OptionsTextColor, false)
+ ActiveBorderColor = GetGocuiStyle(themeConfig.ActiveBorderColor)
+ InactiveBorderColor = GetGocuiStyle(themeConfig.InactiveBorderColor)
+ SelectedLineBgColor = GetTextStyle(themeConfig.SelectedLineBgColor, true)
+ SelectedRangeBgColor = GetTextStyle(themeConfig.SelectedRangeBgColor, true)
+ GocuiSelectedLineBgColor = GetGocuiStyle(themeConfig.SelectedLineBgColor)
+ OptionsColor = GetGocuiStyle(themeConfig.OptionsTextColor)
+ OptionsFgColor = GetTextStyle(themeConfig.OptionsTextColor, false)
isLightTheme := themeConfig.LightTheme
if isLightTheme {
@@ -90,11 +90,61 @@ func GetGocuiAttribute(key string) gocui.Attribute {
return gocui.ColorWhite
}
-// GetGocuiColor bitwise OR's a list of attributes obtained via the given keys
-func GetGocuiColor(keys []string) gocui.Attribute {
+// GetGocuiStyle bitwise OR's a list of attributes obtained via the given keys
+func GetGocuiStyle(keys []string) gocui.Attribute {
var attribute gocui.Attribute
for _, key := range keys {
attribute |= GetGocuiAttribute(key)
}
return attribute
}
+
+var colorMap = map[string]struct {
+ foreground style.TextStyle
+ background style.TextStyle
+}{
+ "default": {style.FgWhite, style.BgBlack},
+ "black": {style.FgBlack, style.BgBlack},
+ "red": {style.FgRed, style.BgRed},
+ "green": {style.FgGreen, style.BgGreen},
+ "yellow": {style.FgYellow, style.BgYellow},
+ "blue": {style.FgBlue, style.BgBlue},
+ "magenta": {style.FgMagenta, style.BgMagenta},
+ "cyan": {style.FgCyan, style.BgCyan},
+ "white": {style.FgWhite, style.BgWhite},
+}
+
+func GetTextStyle(keys []string, background bool) style.TextStyle {
+ s := style.New()
+
+ for _, key := range keys {
+ switch key {
+ case "bold":
+ s = s.SetBold()
+ case "reverse":
+ s = s.SetReverse()
+ case "underline":
+ s = s.SetUnderline()
+ default:
+ value, present := colorMap[key]
+ if present {
+ var c style.TextStyle
+ if background {
+ c = value.background
+ } else {
+ c = value.foreground
+ }
+ s = s.MergeStyle(c)
+ } else if utils.IsValidHexValue(key) {
+ c := style.NewRGBColor(color.HEX(key, background))
+ if background {
+ s.SetBg(c)
+ } else {
+ s.SetFg(c)
+ }
+ }
+ }
+ }
+
+ return s
+}