141 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2017 Zack Guo <zack.y.guo@gmail.com>. All rights reserved.
 | 
						|
// Use of this source code is governed by a MIT license that can
 | 
						|
// be found in the LICENSE file.
 | 
						|
 | 
						|
package termui
 | 
						|
 | 
						|
import "strings"
 | 
						|
 | 
						|
/*
 | 
						|
// A ColorScheme represents the current look-and-feel of the dashboard.
 | 
						|
type ColorScheme struct {
 | 
						|
	BodyBg            Attribute
 | 
						|
	BlockBg           Attribute
 | 
						|
	HasBorder         bool
 | 
						|
	BorderFg          Attribute
 | 
						|
	BorderBg          Attribute
 | 
						|
	BorderLabelTextFg Attribute
 | 
						|
	BorderLabelTextBg Attribute
 | 
						|
	ParTextFg         Attribute
 | 
						|
	ParTextBg         Attribute
 | 
						|
	SparklineLine     Attribute
 | 
						|
	SparklineTitle    Attribute
 | 
						|
	GaugeBar          Attribute
 | 
						|
	GaugePercent      Attribute
 | 
						|
	LineChartLine     Attribute
 | 
						|
	LineChartAxes     Attribute
 | 
						|
	ListItemFg        Attribute
 | 
						|
	ListItemBg        Attribute
 | 
						|
	BarChartBar       Attribute
 | 
						|
	BarChartText      Attribute
 | 
						|
	BarChartNum       Attribute
 | 
						|
	MBarChartBar      Attribute
 | 
						|
	MBarChartText     Attribute
 | 
						|
	MBarChartNum      Attribute
 | 
						|
	TabActiveBg		  Attribute
 | 
						|
}
 | 
						|
 | 
						|
// default color scheme depends on the user's terminal setting.
 | 
						|
var themeDefault = ColorScheme{HasBorder: true}
 | 
						|
 | 
						|
var themeHelloWorld = ColorScheme{
 | 
						|
	BodyBg:            ColorBlack,
 | 
						|
	BlockBg:           ColorBlack,
 | 
						|
	HasBorder:         true,
 | 
						|
	BorderFg:          ColorWhite,
 | 
						|
	BorderBg:          ColorBlack,
 | 
						|
	BorderLabelTextBg: ColorBlack,
 | 
						|
	BorderLabelTextFg: ColorGreen,
 | 
						|
	ParTextBg:         ColorBlack,
 | 
						|
	ParTextFg:         ColorWhite,
 | 
						|
	SparklineLine:     ColorMagenta,
 | 
						|
	SparklineTitle:    ColorWhite,
 | 
						|
	GaugeBar:          ColorRed,
 | 
						|
	GaugePercent:      ColorWhite,
 | 
						|
	LineChartLine:     ColorYellow | AttrBold,
 | 
						|
	LineChartAxes:     ColorWhite,
 | 
						|
	ListItemBg:        ColorBlack,
 | 
						|
	ListItemFg:        ColorYellow,
 | 
						|
	BarChartBar:       ColorRed,
 | 
						|
	BarChartNum:       ColorWhite,
 | 
						|
	BarChartText:      ColorCyan,
 | 
						|
	MBarChartBar:      ColorRed,
 | 
						|
	MBarChartNum:      ColorWhite,
 | 
						|
	MBarChartText:     ColorCyan,
 | 
						|
	TabActiveBg:	   ColorMagenta,
 | 
						|
}
 | 
						|
 | 
						|
var theme = themeDefault // global dep
 | 
						|
 | 
						|
// Theme returns the currently used theme.
 | 
						|
func Theme() ColorScheme {
 | 
						|
	return theme
 | 
						|
}
 | 
						|
 | 
						|
// SetTheme sets a new, custom theme.
 | 
						|
func SetTheme(newTheme ColorScheme) {
 | 
						|
	theme = newTheme
 | 
						|
}
 | 
						|
 | 
						|
// UseTheme sets a predefined scheme. Currently available: "hello-world" and
 | 
						|
// "black-and-white".
 | 
						|
func UseTheme(th string) {
 | 
						|
	switch th {
 | 
						|
	case "helloworld":
 | 
						|
		theme = themeHelloWorld
 | 
						|
	default:
 | 
						|
		theme = themeDefault
 | 
						|
	}
 | 
						|
}
 | 
						|
*/
 | 
						|
 | 
						|
var ColorMap = map[string]Attribute{
 | 
						|
	"fg":           ColorWhite,
 | 
						|
	"bg":           ColorDefault,
 | 
						|
	"border.fg":    ColorWhite,
 | 
						|
	"label.fg":     ColorGreen,
 | 
						|
	"par.fg":       ColorYellow,
 | 
						|
	"par.label.bg": ColorWhite,
 | 
						|
}
 | 
						|
 | 
						|
func ThemeAttr(name string) Attribute {
 | 
						|
	return lookUpAttr(ColorMap, name)
 | 
						|
}
 | 
						|
 | 
						|
func lookUpAttr(clrmap map[string]Attribute, name string) Attribute {
 | 
						|
 | 
						|
	a, ok := clrmap[name]
 | 
						|
	if ok {
 | 
						|
		return a
 | 
						|
	}
 | 
						|
 | 
						|
	ns := strings.Split(name, ".")
 | 
						|
	for i := range ns {
 | 
						|
		nn := strings.Join(ns[i:len(ns)], ".")
 | 
						|
		a, ok = ColorMap[nn]
 | 
						|
		if ok {
 | 
						|
			break
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return a
 | 
						|
}
 | 
						|
 | 
						|
// 0<=r,g,b <= 5
 | 
						|
func ColorRGB(r, g, b int) Attribute {
 | 
						|
	within := func(n int) int {
 | 
						|
		if n < 0 {
 | 
						|
			return 0
 | 
						|
		}
 | 
						|
 | 
						|
		if n > 5 {
 | 
						|
			return 5
 | 
						|
		}
 | 
						|
 | 
						|
		return n
 | 
						|
	}
 | 
						|
 | 
						|
	r, b, g = within(r), within(b), within(g)
 | 
						|
	return Attribute(0x0f + 36*r + 6*g + b)
 | 
						|
}
 |