From 550c0fd4dc0ee2d6bb6185fa0dd50ff9e250a9de Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Sat, 31 Jul 2021 17:15:38 +1000 Subject: refactor --- pkg/theme/gocui.go | 45 +++++++++++++++++++++++++++ pkg/theme/style.go | 57 ++++++++++++++++++++++++++++++++++ pkg/theme/theme.go | 89 ------------------------------------------------------ 3 files changed, 102 insertions(+), 89 deletions(-) create mode 100644 pkg/theme/gocui.go create mode 100644 pkg/theme/style.go (limited to 'pkg/theme') diff --git a/pkg/theme/gocui.go b/pkg/theme/gocui.go new file mode 100644 index 000000000..6bda0c721 --- /dev/null +++ b/pkg/theme/gocui.go @@ -0,0 +1,45 @@ +package theme + +import ( + "github.com/gookit/color" + "github.com/jesseduffield/gocui" + "github.com/jesseduffield/lazygit/pkg/utils" +) + +var gocuiColorMap = map[string]gocui.Attribute{ + "default": gocui.ColorDefault, + "black": gocui.ColorBlack, + "red": gocui.ColorRed, + "green": gocui.ColorGreen, + "yellow": gocui.ColorYellow, + "blue": gocui.ColorBlue, + "magenta": gocui.ColorMagenta, + "cyan": gocui.ColorCyan, + "white": gocui.ColorWhite, + "bold": gocui.AttrBold, + "reverse": gocui.AttrReverse, + "underline": gocui.AttrUnderline, +} + +// GetAttribute gets the gocui color attribute from the string +func GetGocuiAttribute(key string) gocui.Attribute { + if utils.IsValidHexValue(key) { + values := color.HEX(key).Values() + return gocui.NewRGBColor(int32(values[0]), int32(values[1]), int32(values[2])) + } + + value, present := gocuiColorMap[key] + if present { + return value + } + return gocui.ColorWhite +} + +// 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 +} diff --git a/pkg/theme/style.go b/pkg/theme/style.go new file mode 100644 index 000000000..ba014681a --- /dev/null +++ b/pkg/theme/style.go @@ -0,0 +1,57 @@ +package theme + +import ( + "github.com/gookit/color" + "github.com/jesseduffield/lazygit/pkg/gui/style" + "github.com/jesseduffield/lazygit/pkg/utils" +) + +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 +} diff --git a/pkg/theme/theme.go b/pkg/theme/theme.go index d05897540..b19af5e54 100644 --- a/pkg/theme/theme.go +++ b/pkg/theme/theme.go @@ -1,11 +1,9 @@ package theme import ( - "github.com/gookit/color" "github.com/jesseduffield/gocui" "github.com/jesseduffield/lazygit/pkg/config" "github.com/jesseduffield/lazygit/pkg/gui/style" - "github.com/jesseduffield/lazygit/pkg/utils" ) var ( @@ -61,90 +59,3 @@ func UpdateTheme(themeConfig config.ThemeConfig) { GocuiDefaultTextColor = gocui.ColorWhite } } - -// GetAttribute gets the gocui color attribute from the string -func GetGocuiAttribute(key string) gocui.Attribute { - if utils.IsValidHexValue(key) { - values := color.HEX(key).Values() - return gocui.NewRGBColor(int32(values[0]), int32(values[1]), int32(values[2])) - } - - colorMap := map[string]gocui.Attribute{ - "default": gocui.ColorDefault, - "black": gocui.ColorBlack, - "red": gocui.ColorRed, - "green": gocui.ColorGreen, - "yellow": gocui.ColorYellow, - "blue": gocui.ColorBlue, - "magenta": gocui.ColorMagenta, - "cyan": gocui.ColorCyan, - "white": gocui.ColorWhite, - "bold": gocui.AttrBold, - "reverse": gocui.AttrReverse, - "underline": gocui.AttrUnderline, - } - value, present := colorMap[key] - if present { - return value - } - return gocui.ColorWhite -} - -// 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 -} -- cgit v1.2.3