diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2021-07-31 17:15:38 +1000 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2021-07-31 17:56:47 +1000 |
commit | 550c0fd4dc0ee2d6bb6185fa0dd50ff9e250a9de (patch) | |
tree | 068efeda909c5803d7d4dabaf753420e1fca7c02 | |
parent | 0bc0e4ac88f430976e4f2e69285ad6c56d94c137 (diff) |
refactor
-rw-r--r-- | pkg/gui/style/basic_styles.go (renamed from pkg/gui/style/style.go) | 8 | ||||
-rw-r--r-- | pkg/gui/style/text_style.go (renamed from pkg/gui/style/basic.go) | 19 | ||||
-rw-r--r-- | pkg/theme/gocui.go | 45 | ||||
-rw-r--r-- | pkg/theme/style.go | 57 | ||||
-rw-r--r-- | pkg/theme/theme.go | 89 |
5 files changed, 113 insertions, 105 deletions
diff --git a/pkg/gui/style/style.go b/pkg/gui/style/basic_styles.go index d6c8149b2..ef29904bc 100644 --- a/pkg/gui/style/style.go +++ b/pkg/gui/style/basic_styles.go @@ -28,3 +28,11 @@ var ( AttrUnderline = New().SetUnderline() AttrBold = New().SetBold() ) + +func FromBasicFg(fg color.Color) TextStyle { + return New().SetFg(NewBasicColor(fg)) +} + +func FromBasicBg(bg color.Color) TextStyle { + return New().SetBg(NewBasicColor(bg)) +} diff --git a/pkg/gui/style/basic.go b/pkg/gui/style/text_style.go index 45652097e..d2bfccaeb 100644 --- a/pkg/gui/style/basic.go +++ b/pkg/gui/style/text_style.go @@ -44,22 +44,6 @@ func New() TextStyle { return s } -func FromBasicFg(fg color.Color) TextStyle { - s := New() - c := NewBasicColor(fg) - s.fg = &c - s.style = s.deriveStyle() - return s -} - -func FromBasicBg(bg color.Color) TextStyle { - s := New() - c := NewBasicColor(bg) - s.bg = &c - s.style = s.deriveStyle() - return s -} - func (b TextStyle) Sprint(a ...interface{}) string { return b.style.Sprint(a...) } @@ -68,6 +52,9 @@ func (b TextStyle) Sprintf(format string, a ...interface{}) string { return b.style.Sprintf(format, a...) } +// note that our receiver here is not a pointer which means we're receiving a +// copy of the original TextStyle. This allows us to mutate and return that +// TextStyle receiver without actually modifying the original. func (b TextStyle) SetBold() TextStyle { b.decoration.SetBold() b.style = b.deriveStyle() 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 -} |