104 lines
2.5 KiB
Go
104 lines
2.5 KiB
Go
package console
|
|
|
|
import (
|
|
"fmt"
|
|
"runtime"
|
|
|
|
ui "github.com/gizak/termui/v3"
|
|
)
|
|
|
|
type Theme string
|
|
|
|
const (
|
|
ThemeDark Theme = "dark"
|
|
ThemeLight Theme = "light"
|
|
)
|
|
|
|
const (
|
|
ColorOlive ui.Color = 178
|
|
ColorDeepSkyBlue ui.Color = 39
|
|
ColorDeepPink ui.Color = 198
|
|
ColorCian ui.Color = 43
|
|
ColorOrange ui.Color = 166
|
|
ColorPurple ui.Color = 129
|
|
ColorGreen ui.Color = 64
|
|
ColorDarkRed ui.Color = 88
|
|
ColorBlueViolet ui.Color = 57
|
|
ColorDarkGrey ui.Color = 238
|
|
ColorLightGrey ui.Color = 254
|
|
ColorGrey ui.Color = 242
|
|
ColorWhite ui.Color = 244
|
|
ColorBlack ui.Color = 0
|
|
ColorClear ui.Color = -1
|
|
)
|
|
|
|
const (
|
|
menuColorNix ui.Color = 255
|
|
menuColorReverseNix ui.Color = 235
|
|
menuColorWindows ui.Color = 255
|
|
menuColorReverseWindows ui.Color = 0
|
|
)
|
|
|
|
type Palette struct {
|
|
ContentColors []ui.Color
|
|
GradientColors [][]ui.Color
|
|
BaseColor ui.Color
|
|
MediumColor ui.Color
|
|
ReverseColor ui.Color
|
|
}
|
|
|
|
// GetPalette returns a color palette based on specified theme
|
|
func GetPalette(theme Theme) Palette {
|
|
switch theme {
|
|
case ThemeDark:
|
|
return Palette{
|
|
ContentColors: []ui.Color{ColorOlive, ColorDeepSkyBlue, ColorDeepPink, ColorWhite, ColorGrey, ColorGreen, ColorOrange, ColorCian, ColorPurple},
|
|
GradientColors: [][]ui.Color{{39, 33, 62, 93, 164, 161}, {95, 138, 180, 179, 178, 178}},
|
|
BaseColor: ColorWhite,
|
|
MediumColor: ColorDarkGrey,
|
|
ReverseColor: ColorBlack,
|
|
}
|
|
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}},
|
|
BaseColor: ColorBlack,
|
|
MediumColor: ColorLightGrey,
|
|
ReverseColor: ColorWhite,
|
|
}
|
|
default:
|
|
panic(fmt.Sprintf("Specified theme is not supported: %v", theme))
|
|
}
|
|
}
|
|
|
|
// GetMenuColor returns a color based on the
|
|
// operating system target
|
|
func GetMenuColor() ui.Color {
|
|
switch runtime.GOOS {
|
|
case "windows":
|
|
return menuColorWindows
|
|
default:
|
|
return menuColorNix
|
|
}
|
|
}
|
|
|
|
// GetMenuColorReverse returns a color based on the
|
|
// operating system target
|
|
func GetMenuColorReverse() ui.Color {
|
|
switch runtime.GOOS {
|
|
case "windows":
|
|
return menuColorReverseWindows
|
|
default:
|
|
return menuColorReverseNix
|
|
}
|
|
}
|
|
|
|
func GetGradientColor(gradient []ui.Color, cur int, max int) ui.Color {
|
|
ratio := float64(len(gradient)) / float64(max)
|
|
index := int(ratio * float64(cur))
|
|
if index > len(gradient)-1 {
|
|
index = len(gradient) - 1
|
|
}
|
|
return gradient[index]
|
|
}
|