From 061d77c76a942ae9cf0cbf5b1147bea4dc69c88b Mon Sep 17 00:00:00 2001 From: sqshq Date: Mon, 1 Apr 2019 00:35:55 -0400 Subject: [PATCH] sparkline gradient colors improvements --- component/sparkline/sparkline.go | 6 +++--- config/component.go | 5 +++-- config/default.go | 6 ++---- console/palette.go | 13 ++++++------- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/component/sparkline/sparkline.go b/component/sparkline/sparkline.go index d96f45d..0c02402 100644 --- a/component/sparkline/sparkline.go +++ b/component/sparkline/sparkline.go @@ -19,7 +19,7 @@ type SparkLine struct { maxValue float64 minValue float64 scale int - color ui.Color + gradient []ui.Color palette console.Palette } @@ -30,7 +30,7 @@ func NewSparkLine(c config.SparkLineConfig, palette console.Palette) *SparkLine Consumer: data.NewConsumer(), values: []float64{}, scale: *c.Scale, - color: *c.Item.Color, + gradient: *c.Gradient, palette: palette, } @@ -112,7 +112,7 @@ func (s *SparkLine) Draw(buffer *ui.Buffer) { } for j := 1; j <= top; j++ { - buffer.SetCell(ui.NewCell(console.SymbolVerticalBar, ui.NewStyle(s.palette.GetGradientColor(j-1, height))), image.Pt(s.Inner.Max.X-n-indent, s.Inner.Max.Y-j)) + buffer.SetCell(ui.NewCell(console.SymbolVerticalBar, ui.NewStyle(console.GetGradientColor(s.gradient, j-1, height))), image.Pt(s.Inner.Max.X-n-indent, s.Inner.Max.Y-j)) if i == len(s.values)-1 && j == top { buffer.SetString(curValue, textStyle, image.Pt(s.Inner.Max.X-n-indent+2, s.Inner.Max.Y-j)) buffer.SetString(minValue, textStyle, image.Pt(s.Inner.Max.X-n-indent+2, s.Max.Y-2)) diff --git a/config/component.go b/config/component.go index ef9de10..21001d9 100644 --- a/config/component.go +++ b/config/component.go @@ -55,8 +55,9 @@ type GaugeConfig struct { type SparkLineConfig struct { ComponentConfig `yaml:",inline"` - Scale *int `yaml:"scale,omitempty"` - Item Item `yaml:",inline"` + Scale *int `yaml:"scale,omitempty"` + Item Item `yaml:",inline"` + Gradient *[]ui.Color `yaml:",omitempty"` } type BarChartConfig struct { diff --git a/config/default.go b/config/default.go index 28633be..e912458 100644 --- a/config/default.go +++ b/config/default.go @@ -173,10 +173,8 @@ func (c *Config) setDefaultColors() { } for i, s := range c.SparkLines { - if s.Item.Color == nil { - s.Item.Color = &palette.ContentColors[i%colorsCount] - c.SparkLines[i] = s - } + s.Gradient = &palette.GradientColors[i%(len(palette.GradientColors))] + c.SparkLines[i] = s } for i, g := range c.Gauges { diff --git a/console/palette.go b/console/palette.go index 47e55bb..959db20 100644 --- a/console/palette.go +++ b/console/palette.go @@ -37,7 +37,7 @@ const ( type Palette struct { ContentColors []ui.Color - GradientColors []ui.Color + GradientColors [][]ui.Color BaseColor ui.Color MediumColor ui.Color ReverseColor ui.Color @@ -48,7 +48,7 @@ func GetPalette(theme Theme) Palette { case ThemeDark: return Palette{ ContentColors: []ui.Color{ColorOlive, ColorDeepSkyBlue, ColorDeepPink, ColorWhite, ColorGrey, ColorGreen, ColorOrange, ColorCian, ColorPurple}, - GradientColors: []ui.Color{39, 44, 47, 82, 148, 185, 209, 203, 198, 196, 125}, + GradientColors: [][]ui.Color{{39, 33, 62, 93, 164, 161}, {95, 138, 180, 179, 178, 178}}, BaseColor: ColorWhite, MediumColor: ColorDarkGrey, ReverseColor: ColorBlack, @@ -56,7 +56,7 @@ func GetPalette(theme Theme) Palette { case ThemeLight: return Palette{ ContentColors: []ui.Color{ColorBlack, ColorDarkRed, ColorBlueViolet, ColorGrey, ColorGreen}, - GradientColors: []ui.Color{250, 248, 246, 244, 242, 240, 238, 236, 234, 232, 16}, + GradientColors: [][]ui.Color{{250, 248, 246, 244, 242, 240, 238, 236, 234, 232, 16}}, BaseColor: ColorBlack, MediumColor: ColorLightGrey, ReverseColor: ColorWhite, @@ -66,8 +66,7 @@ func GetPalette(theme Theme) Palette { } } -// selects gradient color for cur item (out of max items) -func (palette *Palette) GetGradientColor(cur int, max int) ui.Color { - ratio := float64(len(palette.GradientColors)) / float64(max) - return palette.GradientColors[int(ratio*float64(cur))] +func GetGradientColor(gradient []ui.Color, cur int, max int) ui.Color { + ratio := float64(len(gradient)) / float64(max) + return gradient[int(ratio*float64(cur))] }