diff options
Diffstat (limited to 'color.go')
| -rw-r--r-- | color.go | 337 |
1 files changed, 337 insertions, 0 deletions
diff --git a/color.go b/color.go new file mode 100644 index 0000000..bb61984 --- /dev/null +++ b/color.go @@ -0,0 +1,337 @@ +// Copyright 2017-2025 WIT.COM Inc. All rights reserved. +// Use of this source code is governed by the GPL 3.0 + +package main + +import ( + "math/rand" + + "github.com/awesome-gocui/gocui" + "go.wit.com/log" +) + +// simple colors for light and dark + +// information about how terminfo works +// https://jvns.ca/blog/2024/10/01/terminal-colours/ + +// TODO: move all this to a protobuf +// TODO: add black/white only flag for ttyS0 +// TODO: fix kvm/qemu serial console & SIGWINCH. +// TODO: check minicom (doesn't work) +// TODO: fix riscv boards + +// DONE ON ENABLE() WIDGET +// restores the last saved color and makes it active +func (tk *guiWidget) restoreEnableColor() { + if tk.color == nil { + tk.color = new(colorT) + } + tk.color.frame = tk.colorLast.frame + tk.color.fg = tk.colorLast.fg + tk.color.bg = tk.colorLast.bg + tk.color.selFg = tk.colorLast.selFg + tk.color.selBg = tk.colorLast.selBg + + tk.activateColor() +} + +// DONE ON DISABLE() WIDGET +// makes the button look disabled +func (tk *guiWidget) setColorDisable() { + if tk.color == nil { + tk.color = new(colorT) + } + // save the current color + tk.color.frame = superLightGrey + tk.color.fg = gocui.ColorBlack + tk.color.bg = superLightGrey + tk.color.selFg = superLightGrey + tk.color.selBg = superLightGrey + tk.activateColor() +} + +// sets the current gocui highlight colors +func (tk *guiWidget) activateColor() { + if tk.v == nil { + return + } + tk.v.FrameColor = tk.color.frame + tk.v.FgColor = tk.color.fg + tk.v.BgColor = tk.color.bg + tk.v.SelFgColor = tk.color.selFg + tk.v.SelBgColor = tk.color.selBg +} + +// saves the color and makes it active +func (tk *guiWidget) updateColor() { + if tk.v == nil { + return + } + tk.colorLast.frame = tk.color.frame + tk.colorLast.fg = tk.color.fg + tk.colorLast.bg = tk.color.bg + tk.colorLast.selFg = tk.color.selFg + tk.colorLast.selBg = tk.color.selBg + + tk.activateColor() +} + +// Below are all the colors. TODO: move to protobuf and save in a config file + +func (tk *guiWidget) setColorWindowFrame() { + if tk.color == nil { + tk.color = new(colorT) + } + if me.dark { // use a dark color palette + tk.color.frame = gocui.AttrNone + tk.color.fg = gocui.ColorBlack + tk.color.bg = gocui.ColorBlack + tk.color.selFg = gocui.AttrNone + tk.color.selBg = gocui.AttrNone + } else { + tk.color.frame = gocui.AttrNone + tk.color.fg = gocui.AttrNone + tk.color.bg = gocui.AttrNone + tk.color.selFg = gocui.AttrNone + tk.color.selBg = gocui.AttrNone + } + + tk.updateColor() +} + +// weird. lots of color problems for me on debian sid using the traditional Andy Herzfield 'gnome' +func (tk *guiWidget) setColorWindowTitleActive() { + if tk.color == nil { + tk.color = new(colorT) + } + if me.dark { // use a dark color palette + tk.color.frame = gocui.AttrNone + tk.color.fg = gocui.ColorBlue + tk.color.bg = gocui.AttrNone + tk.color.selFg = gocui.ColorWhite + tk.color.selBg = gocui.ColorBlue + } else { + tk.color.frame = gocui.ColorWhite + tk.color.fg = gocui.ColorWhite + tk.color.bg = gocui.ColorBlue + tk.color.selFg = gocui.ColorWhite + tk.color.selBg = gocui.ColorBlue + } + + tk.updateColor() +} + +func (tk *guiWidget) setColorWindowTitle() { + if tk.color == nil { + tk.color = new(colorT) + } + if me.dark { // use a dark color palette + tk.color.frame = gocui.AttrNone + tk.color.fg = gocui.ColorBlue + tk.color.bg = gocui.AttrNone + tk.color.selFg = gocui.ColorWhite + tk.color.selBg = gocui.ColorBlue + } else { + tk.color.frame = gocui.ColorWhite + tk.color.fg = gocui.ColorBlue + tk.color.bg = gocui.AttrNone + tk.color.selFg = gocui.ColorWhite + tk.color.selBg = gocui.ColorBlue + } + + tk.updateColor() +} + +func (tk *guiWidget) setColorBG() { + if tk.color == nil { + tk.color = new(colorT) + } + if me.dark { + tk.color.frame = gocui.AttrNone + tk.color.fg = gocui.ColorBlack + tk.color.bg = gocui.ColorBlack + tk.color.selFg = gocui.AttrNone + tk.color.selBg = gocui.AttrNone + } else { + tk.color.frame = gocui.ColorWhite + tk.color.fg = gocui.ColorWhite + tk.color.bg = gocui.AttrNone + tk.color.selFg = gocui.AttrNone + tk.color.selBg = gocui.AttrNone + } + + tk.updateColor() +} + +func (tk *guiWidget) setColorLabel() { + if tk.color == nil { + tk.color = new(colorT) + } + if me.dark { + tk.color.frame = gocui.AttrNone + tk.color.fg = gocui.ColorWhite + tk.color.bg = gocui.ColorBlack + tk.color.selFg = gocui.ColorWhite + tk.color.selBg = gocui.AttrNone + } else { + tk.color.frame = gocui.AttrNone + tk.color.fg = gocui.ColorBlack + tk.color.bg = gocui.AttrNone + tk.color.selFg = gocui.AttrNone + tk.color.selBg = gocui.ColorWhite + } + + tk.updateColor() +} + +func (tk *guiWidget) setColorButtonDense() { + if tk.color == nil { + tk.color = new(colorT) + } + if me.dark { + tk.color.frame = gocui.AttrNone + tk.color.fg = gocui.ColorBlue + tk.color.bg = gocui.ColorBlack + tk.color.selFg = gocui.ColorWhite + tk.color.selBg = gocui.ColorBlue + } else { + tk.color.frame = gocui.AttrNone + tk.color.fg = gocui.ColorWhite + tk.color.bg = gocui.ColorBlue + tk.color.selFg = gocui.ColorBlue + tk.color.selBg = gocui.AttrNone + } + + tk.updateColor() +} + +func (tk *guiWidget) setColorButton() { + if tk.color == nil { + tk.color = new(colorT) + } + if me.dark { + tk.color.frame = gocui.ColorBlack + tk.color.fg = gocui.ColorBlue + tk.color.bg = gocui.ColorBlack + tk.color.selFg = gocui.ColorWhite + tk.color.selBg = gocui.ColorBlue + } else { + tk.color.frame = gocui.ColorBlue + tk.color.fg = gocui.AttrNone + tk.color.bg = gocui.AttrNone + tk.color.selFg = gocui.ColorWhite + tk.color.selBg = gocui.ColorBlue + } + + tk.updateColor() +} + +func (tk *guiWidget) setColorInput() { + if tk.color == nil { + tk.color = new(colorT) + } + if me.dark { + tk.color.frame = gocui.ColorYellow + tk.color.fg = gocui.AttrNone + tk.color.bg = gocui.AttrNone + tk.color.selFg = gocui.ColorYellow + tk.color.selBg = gocui.ColorBlack + } else { + tk.color.frame = gocui.ColorYellow + tk.color.fg = gocui.AttrNone + tk.color.bg = gocui.AttrNone + tk.color.selFg = gocui.ColorYellow + tk.color.selBg = gocui.ColorBlack + } + tk.updateColor() +} + +func (tk *guiWidget) setColorModal() { + if tk.color == nil { + tk.color = new(colorT) + } + if me.dark { + tk.color.frame = gocui.ColorRed + tk.color.fg = gocui.ColorRed + tk.color.bg = gocui.ColorBlack + tk.color.selFg = gocui.ColorBlack + tk.color.selBg = gocui.AttrNone + } else { + tk.color.frame = gocui.ColorRed + tk.color.fg = gocui.AttrNone + tk.color.bg = gocui.AttrNone + tk.color.selFg = gocui.AttrNone + tk.color.selBg = gocui.ColorWhite + } + tk.updateColor() +} + +// what genius figured this out? +func (tk *guiWidget) setColorTextbox() { + if tk.color == nil { + tk.color = new(colorT) + } + if me.dark { + tk.color.frame = gocui.ColorRed + tk.color.fg = gocui.ColorRed + tk.color.bg = gocui.ColorBlack + tk.color.selFg = gocui.ColorBlack + tk.color.selBg = gocui.AttrNone + } else { + tk.color.frame = gocui.ColorRed + tk.color.fg = gocui.AttrNone + tk.color.bg = gocui.AttrNone + tk.color.selFg = gocui.AttrNone + tk.color.selBg = gocui.ColorWhite + } + tk.updateColor() +} + +// just notes down here + +// what genius figured this out? +// originally from github.com/dimasma0305/GoFetch +func get_teminal_color_palette() string { + // var runes rune + // color1 := "\x1b[0;29m \x1b[0m" + // runes = []rune(color1) + // view.WriteRunes(runes) + + color1 := "\x1b[0;29m \x1b[0m" + color2 := "\x1b[0;31m \x1b[0m" + color3 := "\x1b[0;32m \x1b[0m" + color4 := "\x1b[0;33m \x1b[0m" + color5 := "\x1b[0;34m \x1b[0m" + color6 := "\x1b[0;35m \x1b[0m" + color7 := "\x1b[0;36m \x1b[0m" + color8 := "\x1b[0;37m \x1b[0m" + + return color1 + " " + color2 + " " + color3 + " " + color4 + " " + color5 + " " + color6 + " " + color7 + " " + color8 +} + +func randColor() gocui.Attribute { + colors := []string{"Green", "#FFAA55", "Yellow", "Blue", "Red", "Black", "White"} + i := rand.Intn(len(colors)) + log.Log(NOW, "randColor() i =", i) + return gocui.GetColor(colors[i]) +} + +var none gocui.Attribute = gocui.AttrNone +var colorNone colorT = colorT{none, none, none, none, none, "debug none"} + +var lightPurple gocui.Attribute = gocui.GetColor("#DDDDDD") // light purple +var darkPurple gocui.Attribute = gocui.GetColor("#FFAA55") // Dark Purple +var heavyPurple gocui.Attribute = gocui.GetColor("#88AA55") // heavy purple +var powdererBlue gocui.Attribute = gocui.GetColor("#B0E0E6") // w3c 'powerder blue' +var superLightGrey gocui.Attribute = gocui.GetColor("#55AAFF") // super light grey + +// Standard defined colors from gocui: +// ColorBlack ColorRed ColorGreen ColorYellow ColorBlue ColorMagenta ColorCyan ColorWhite + +// v.BgColor = gocui.GetColor("#111111") // crazy red +// v.BgColor = gocui.GetColor("#FF9911") // heavy red +// v.SelBgColor = gocui.GetColor("#FFEE11") // blood red + +// v.BgColor = gocui.GetColor("#55AAFF") // super light grey +// v.BgColor = gocui.GetColor("#FFC0CB") // 'w3c pink' yellow |
