summaryrefslogtreecommitdiff
path: root/color.go
diff options
context:
space:
mode:
Diffstat (limited to 'color.go')
-rw-r--r--color.go337
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