summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkj_sh6042026-03-15 12:56:15 -0400
committerkj_sh6042026-03-15 12:56:15 -0400
commit3960458765142f7e1475ed4c662dffe3e73a0255 (patch)
treea16a4fe8e9b75d46421e442df37e2a4ba8e0bc7f /src
parent737c95d40a2a89f6ff117413aa3a31159e41b7af (diff)
refactor: more color palettes and layout changes
Diffstat (limited to 'src')
-rw-r--r--src/main.go284
1 files changed, 241 insertions, 43 deletions
diff --git a/src/main.go b/src/main.go
index f2e85f3..df5ecef 100644
--- a/src/main.go
+++ b/src/main.go
@@ -22,8 +22,8 @@ const (
22 appTitle = "kjagave" 22 appTitle = "kjagave"
23 appVersion = "20260315-0200" 23 appVersion = "20260315-0200"
24 maxHistoryLen = 250 24 maxHistoryLen = 250
25 cardImageW = 150 25 cardImageW = 160
26 cardImageH = 98 26 cardImageH = 132
27) 27)
28 28
29type SavedColor struct { 29type SavedColor struct {
@@ -43,6 +43,8 @@ type SwatchCard struct {
43 image *gtk.Image 43 image *gtk.Image
44 label *gtk.Label 44 label *gtk.Label
45 hex string 45 hex string
46 rgb string
47 hsv string
46} 48}
47 49
48type App struct { 50type App struct {
@@ -97,9 +99,18 @@ var schemeNames = []string{
97} 99}
98 100
99var paletteNames = []string{ 101var paletteNames = []string{
100 "Web-safe colors", 102 "Web-safe (legacy)",
101 "Tango", 103 "Material Design",
102 "Visibone Core", 104 "Tailwind CSS",
105 "Flat UI",
106 "Pastel",
107 "Nord",
108 "Dracula",
109 "Solarized",
110 "Gruvbox",
111 "One Dark",
112 "Monokai",
113 "KiJiSH Dark Pastel Terminal",
103} 114}
104 115
105func main() { 116func main() {
@@ -196,11 +207,22 @@ func (app *App) createUI() {
196 207
197 root.PackStart(toolbar, false, false, 0) 208 root.PackStart(toolbar, false, false, 0)
198 209
199 schemeRow, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 4) 210 schemeRow, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 2)
200 app.swatchCards = make([]SwatchCard, 0, 4) 211 app.swatchCards = make([]SwatchCard, 0, 4)
201 for i := 0; i < 4; i++ { 212 for i := 0; i < 4; i++ {
202 card := app.newSwatchCard() 213 card := app.newSwatchCard()
203 cardIdx := i 214 cardIdx := i
215 card.button.Connect("button-press-event", func(_ *gtk.Button, ev *gdk.Event) bool {
216 if ev == nil {
217 return false
218 }
219 evBtn := gdk.EventButtonNewFromEvent(ev)
220 if evBtn == nil || evBtn.Button() != 3 {
221 return false
222 }
223 app.showSwatchContextMenu(cardIdx, ev)
224 return true
225 })
204 card.button.Connect("clicked", func() { 226 card.button.Connect("clicked", func() {
205 hex := app.swatchCards[cardIdx].hex 227 hex := app.swatchCards[cardIdx].hex
206 if hex == "" { 228 if hex == "" {
@@ -271,14 +293,14 @@ func (app *App) createUI() {
271 293
272 root.PackStart(controlRow, false, false, 0) 294 root.PackStart(controlRow, false, false, 0)
273 295
274 lower, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 6) 296 lower, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 4)
275 297
276 paletteFrame, _ := gtk.FrameNew("Palette") 298 paletteFrame, _ := gtk.FrameNew("Palette")
277 paletteBox, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 6) 299 paletteBox, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 2)
278 paletteBox.SetMarginTop(5) 300 paletteBox.SetMarginTop(2)
279 paletteBox.SetMarginBottom(5) 301 paletteBox.SetMarginBottom(2)
280 paletteBox.SetMarginStart(5) 302 paletteBox.SetMarginStart(2)
281 paletteBox.SetMarginEnd(5) 303 paletteBox.SetMarginEnd(2)
282 304
283 app.paletteScroll, _ = gtk.ScrolledWindowNew(nil, nil) 305 app.paletteScroll, _ = gtk.ScrolledWindowNew(nil, nil)
284 app.paletteScroll.SetPolicy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) 306 app.paletteScroll.SetPolicy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
@@ -303,11 +325,11 @@ func (app *App) createUI() {
303 lower.PackStart(paletteFrame, true, true, 0) 325 lower.PackStart(paletteFrame, true, true, 0)
304 326
305 favFrame, _ := gtk.FrameNew("Favorites") 327 favFrame, _ := gtk.FrameNew("Favorites")
306 favBox, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 6) 328 favBox, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 2)
307 favBox.SetMarginTop(5) 329 favBox.SetMarginTop(2)
308 favBox.SetMarginBottom(5) 330 favBox.SetMarginBottom(2)
309 favBox.SetMarginStart(5) 331 favBox.SetMarginStart(2)
310 favBox.SetMarginEnd(5) 332 favBox.SetMarginEnd(2)
311 333
312 favScroll, _ := gtk.ScrolledWindowNew(nil, nil) 334 favScroll, _ := gtk.ScrolledWindowNew(nil, nil)
313 favScroll.SetPolicy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) 335 favScroll.SetPolicy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
@@ -429,7 +451,7 @@ func (app *App) buildMenuBar() *gtk.MenuBar {
429 451
430func (app *App) initCompactButtonCSS() { 452func (app *App) initCompactButtonCSS() {
431 app.css, _ = gtk.CssProviderNew() 453 app.css, _ = gtk.CssProviderNew()
432 css := "button { padding: 1px 4px; min-height: 0; min-width: 0; } .palette-swatch { padding: 0; border-width: 0; border-radius: 0; }" 454 css := "button { padding: 1px 4px; min-height: 0; min-width: 0; } .palette-swatch { padding: 0; border-width: 0; border-radius: 0; } .swatch-overlay-label { text-shadow: none; }"
433 _ = app.css.LoadFromData(css) 455 _ = app.css.LoadFromData(css)
434 if screen, err := gdk.ScreenGetDefault(); err == nil && screen != nil { 456 if screen, err := gdk.ScreenGetDefault(); err == nil && screen != nil {
435 gtk.AddProviderForScreen(screen, app.css, gtk.STYLE_PROVIDER_PRIORITY_APPLICATION) 457 gtk.AddProviderForScreen(screen, app.css, gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
@@ -441,28 +463,41 @@ func (app *App) setButtonIcon(btn *gtk.Button, iconName string) {
441 if err != nil || img == nil { 463 if err != nil || img == nil {
442 return 464 return
443 } 465 }
466 if label, err := btn.GetLabel(); err == nil && strings.TrimSpace(label) != "" {
467 btn.SetTooltipText(label)
468 btn.SetLabel("")
469 }
444 btn.SetImage(img) 470 btn.SetImage(img)
445 btn.SetAlwaysShowImage(true) 471 btn.SetAlwaysShowImage(true)
446} 472}
447 473
448func (app *App) newSwatchCard() SwatchCard { 474func (app *App) newSwatchCard() SwatchCard {
449 button, _ := gtk.ButtonNew() 475 button, _ := gtk.ButtonNew()
450 button.SetSizeRequest(170, 185) 476 button.SetSizeRequest(166, 138)
477
478 vbox, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 0)
479 vbox.SetMarginTop(1)
480 vbox.SetMarginBottom(1)
481 vbox.SetMarginStart(1)
482 vbox.SetMarginEnd(1)
451 483
452 vbox, _ := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 4) 484 overlay, _ := gtk.OverlayNew()
453 vbox.SetMarginTop(4) 485 overlay.SetHExpand(true)
454 vbox.SetMarginBottom(4) 486 overlay.SetVExpand(true)
455 vbox.SetMarginStart(4)
456 vbox.SetMarginEnd(4)
457 487
458 image, _ := gtk.ImageNew() 488 image, _ := gtk.ImageNew()
459 image.SetFromPixbuf(solidPixbuf("#000000", cardImageW, cardImageH)) 489 image.SetFromPixbuf(solidPixbuf("#000000", cardImageW, cardImageH))
460 vbox.PackStart(image, false, false, 0) 490 overlay.Add(image)
461 491
462 label, _ := gtk.LabelNew("") 492 label, _ := gtk.LabelNew("")
463 label.SetJustify(gtk.JUSTIFY_CENTER) 493 label.SetJustify(gtk.JUSTIFY_CENTER)
464 label.SetHAlign(gtk.ALIGN_CENTER) 494 label.SetHAlign(gtk.ALIGN_CENTER)
465 vbox.PackStart(label, false, false, 0) 495 label.SetVAlign(gtk.ALIGN_CENTER)
496 if ctx, err := label.GetStyleContext(); err == nil {
497 ctx.AddClass("swatch-overlay-label")
498 }
499 overlay.AddOverlay(label)
500 vbox.PackStart(overlay, true, true, 0)
466 501
467 button.Add(vbox) 502 button.Add(vbox)
468 503
@@ -496,6 +531,8 @@ func (app *App) updateSchemePreview() {
496 for i := 0; i < len(app.swatchCards); i++ { 531 for i := 0; i < len(app.swatchCards); i++ {
497 if i >= len(colors) { 532 if i >= len(colors) {
498 app.swatchCards[i].hex = "" 533 app.swatchCards[i].hex = ""
534 app.swatchCards[i].rgb = ""
535 app.swatchCards[i].hsv = ""
499 app.swatchCards[i].button.Hide() 536 app.swatchCards[i].button.Hide()
500 continue 537 continue
501 } 538 }
@@ -506,10 +543,77 @@ func (app *App) updateSchemePreview() {
506 r := int(math.Round(colors[i].GetRed() * 255)) 543 r := int(math.Round(colors[i].GetRed() * 255))
507 g := int(math.Round(colors[i].GetGreen() * 255)) 544 g := int(math.Round(colors[i].GetGreen() * 255))
508 b := int(math.Round(colors[i].GetBlue() * 255)) 545 b := int(math.Round(colors[i].GetBlue() * 255))
546 textColor := "#F5F5F5"
547 if luminance(colors[i]) > 0.53 {
548 textColor = "#111111"
549 }
550 rgbText := fmt.Sprintf("rgb(%d, %d, %d)", r, g, b)
551 hsvText := fmt.Sprintf("hsv(%d, %d, %d)", int(h), int(s), int(v))
509 app.swatchCards[i].hex = hex 552 app.swatchCards[i].hex = hex
553 app.swatchCards[i].rgb = rgbText
554 app.swatchCards[i].hsv = hsvText
510 app.swatchCards[i].image.SetFromPixbuf(solidPixbuf(hex, cardImageW, cardImageH)) 555 app.swatchCards[i].image.SetFromPixbuf(solidPixbuf(hex, cardImageW, cardImageH))
511 app.swatchCards[i].label.SetText(fmt.Sprintf("%s\nrgb(%d, %d, %d)\nhsv(%d, %d, %d)", hex, r, g, b, int(h), int(s), int(v))) 556 app.swatchCards[i].label.SetMarkup(fmt.Sprintf("<span foreground=\"%s\" size=\"9000\"><b>%s</b>\n%s\n%s</span>", textColor, hex, rgbText, hsvText))
557 }
558}
559
560func (app *App) copyTextToClipboard(text string) {
561 if strings.TrimSpace(text) == "" {
562 return
563 }
564 clipboard, _ := gtk.ClipboardGet(gdk.SELECTION_CLIPBOARD)
565 clipboard.SetText(text)
566}
567
568func (app *App) showSwatchContextMenu(cardIdx int, ev *gdk.Event) {
569 if cardIdx < 0 || cardIdx >= len(app.swatchCards) {
570 return
571 }
572 card := app.swatchCards[cardIdx]
573 if card.hex == "" {
574 return
512 } 575 }
576 app.showColorContextMenu(card.hex, card.rgb, card.hsv, ev)
577}
578
579func (app *App) showColorContextMenu(hex, rgbText, hsvText string, ev *gdk.Event) {
580 if strings.TrimSpace(hex) == "" {
581 return
582 }
583
584 menu, _ := gtk.MenuNew()
585 copyHex, _ := gtk.MenuItemNewWithLabel("Copy HEX")
586 copyHex.Connect("activate", func() {
587 app.copyTextToClipboard(hex)
588 })
589 menu.Append(copyHex)
590
591 copyHSV, _ := gtk.MenuItemNewWithLabel("Copy HSV")
592 copyHSV.Connect("activate", func() {
593 app.copyTextToClipboard(hsvText)
594 })
595 menu.Append(copyHSV)
596
597 copyRGB, _ := gtk.MenuItemNewWithLabel("Copy RGB (RGV)")
598 copyRGB.Connect("activate", func() {
599 app.copyTextToClipboard(rgbText)
600 })
601 menu.Append(copyRGB)
602
603 menu.ShowAll()
604 menu.PopupAtPointer(ev)
605}
606
607func colorStringsFromHex(hex string) (string, string) {
608 rgba := gdk.NewRGBA()
609 if !rgba.Parse(hex) {
610 return "", ""
611 }
612 r := int(math.Round(rgba.GetRed() * 255))
613 g := int(math.Round(rgba.GetGreen() * 255))
614 b := int(math.Round(rgba.GetBlue() * 255))
615 h, s, v := rgbToHSV(rgba)
616 return fmt.Sprintf("rgb(%d, %d, %d)", r, g, b), fmt.Sprintf("hsv(%d, %d, %d)", int(h), int(s), int(v))
513} 617}
514 618
515func (app *App) applyHexEntry() { 619func (app *App) applyHexEntry() {
@@ -645,13 +749,12 @@ func (app *App) onFavoriteSelectionChanged(selection *gtk.TreeSelection) {
645} 749}
646 750
647func (app *App) populatePaletteGrid() { 751func (app *App) populatePaletteGrid() {
648 for { 752 children := app.paletteGrid.GetChildren()
649 child, err := app.paletteGrid.GetChildAt(0, 0) 753 children.Foreach(func(item interface{}) {
650 if err != nil || child == nil { 754 if widget, ok := item.(*gtk.Widget); ok {
651 break 755 app.paletteGrid.Remove(widget)
652 } 756 }
653 app.paletteGrid.Remove(child) 757 })
654 }
655 758
656 colors := paletteByName(app.activePaletteName()) 759 colors := paletteByName(app.activePaletteName())
657 cols := 24 760 cols := 24
@@ -666,6 +769,18 @@ func (app *App) populatePaletteGrid() {
666 img, _ := gtk.ImageNewFromPixbuf(solidPixbuf(hex, 16, 11)) 769 img, _ := gtk.ImageNewFromPixbuf(solidPixbuf(hex, 16, 11))
667 btn.Add(img) 770 btn.Add(img)
668 h := hex 771 h := hex
772 btn.Connect("button-press-event", func(_ *gtk.Button, ev *gdk.Event) bool {
773 if ev == nil {
774 return false
775 }
776 evBtn := gdk.EventButtonNewFromEvent(ev)
777 if evBtn == nil || evBtn.Button() != 3 {
778 return false
779 }
780 rgbText, hsvText := colorStringsFromHex(h)
781 app.showColorContextMenu(h, rgbText, hsvText, ev)
782 return true
783 })
669 btn.Connect("clicked", func() { 784 btn.Connect("clicked", func() {
670 rgba := gdk.NewRGBA() 785 rgba := gdk.NewRGBA()
671 if rgba.Parse(h) { 786 if rgba.Parse(h) {
@@ -925,19 +1040,102 @@ func generateScheme(base *gdk.RGBA, schemeName string) []*gdk.RGBA {
925 1040
926func paletteByName(name string) []string { 1041func paletteByName(name string) []string {
927 switch name { 1042 switch name {
928 case "Tango": 1043 case "Web-safe (legacy)":
1044 vals := []int{0x00, 0x33, 0x66, 0x99, 0xCC, 0xFF}
1045 colors := make([]string, 0, 216)
1046 for _, r := range vals {
1047 for _, g := range vals {
1048 for _, b := range vals {
1049 colors = append(colors, fmt.Sprintf("#%02X%02X%02X", r, g, b))
1050 }
1051 }
1052 }
1053 return colors
1054 case "Material Design":
1055 return []string{
1056 "#F44336", "#E91E63", "#9C27B0", "#673AB7", "#3F51B5", "#2196F3",
1057 "#03A9F4", "#00BCD4", "#009688", "#4CAF50", "#8BC34A", "#CDDC39",
1058 "#FFEB3B", "#FFC107", "#FF9800", "#FF5722", "#795548", "#9E9E9E",
1059 "#607D8B", "#000000", "#FFFFFF", "#EF5350", "#EC407A", "#AB47BC",
1060 "#7E57C2", "#5C6BC0", "#42A5F5", "#29B6F6", "#26C6DA", "#26A69A",
1061 "#66BB6A", "#9CCC65", "#D4E157", "#FFEE58", "#FFCA28", "#FFA726",
1062 "#FF7043", "#8D6E63", "#BDBDBD", "#78909C", "#212121", "#FAFAFA",
1063 "#C62828", "#AD1457", "#6A1B9A", "#4527A0", "#283593", "#1565C0",
1064 }
1065 case "Tailwind CSS":
1066 return []string{
1067 "#EF4444", "#F97316", "#F59E0B", "#EAB308", "#84CC16", "#22C55E",
1068 "#10B981", "#14B8A6", "#06B6D4", "#0EA5E9", "#3B82F6", "#6366F1",
1069 "#8B5CF6", "#A855F7", "#D946EF", "#EC4899", "#F43F5E", "#64748B",
1070 "#DC2626", "#EA580C", "#D97706", "#CA8A04", "#65A30D", "#16A34A",
1071 "#059669", "#0D9488", "#0891B2", "#0284C7", "#2563EB", "#4F46E5",
1072 "#7C3AED", "#9333EA", "#C026D3", "#DB2777", "#E11D48", "#475569",
1073 "#991B1B", "#9A3412", "#92400E", "#854D0E", "#3F6212", "#14532D",
1074 "#064E3B", "#134E4A", "#164E63", "#075985", "#1E3A8A", "#312E81",
1075 }
1076 case "Flat UI":
1077 return []string{
1078 "#1ABC9C", "#16A085", "#2ECC71", "#27AE60", "#3498DB", "#2980B9",
1079 "#9B59B6", "#8E44AD", "#34495E", "#2C3E50", "#F1C40F", "#F39C12",
1080 "#E67E22", "#D35400", "#E74C3C", "#C0392B", "#ECF0F1", "#BDC3C7",
1081 "#95A5A6", "#7F8C8D", "#52B3D9", "#E8F8F5", "#D5F4E6", "#D6EAF8",
1082 "#E8DAEF", "#FADBD8", "#F9E79F", "#FAD7A0", "#F5B7B1", "#D7DBDD",
1083 }
1084 case "Pastel":
1085 return []string{
1086 "#FFB3BA", "#FFDFBA", "#FFFFBA", "#BAFFC9", "#BAE1FF", "#E0BBE4",
1087 "#FFDFD3", "#FEC8D8", "#D5AAFF", "#B4F8C8", "#A0E7E5", "#FFAEBC",
1088 "#FBE7C6", "#B4F8C8", "#A0C4FF", "#BDB2FF", "#FFC6FF", "#FDFFB6",
1089 "#CAFFBF", "#9BF6FF", "#A0C4FF", "#BDB2FF", "#FFC6FF", "#FFFFFC",
1090 "#FFD6A5", "#FDFFB6", "#CAFFBF", "#A8E6CF", "#FFD3B6", "#FFAAA5",
1091 }
1092 case "Nord":
1093 return []string{
1094 "#2E3440", "#3B4252", "#434C5E", "#4C566A", "#D8DEE9", "#E5E9F0",
1095 "#ECEFF4", "#8FBCBB", "#88C0D0", "#81A1C1", "#5E81AC", "#BF616A",
1096 "#D08770", "#EBCB8B", "#A3BE8C", "#B48EAD", "#4C566A", "#434C5E",
1097 "#3B4252", "#2E3440", "#ECEFF4", "#E5E9F0", "#D8DEE9", "#88C0D0",
1098 }
1099 case "Dracula":
1100 return []string{
1101 "#282A36", "#44475A", "#F8F8F2", "#6272A4", "#8BE9FD", "#50FA7B",
1102 "#FFB86C", "#FF79C6", "#BD93F9", "#FF5555", "#F1FA8C", "#21222C",
1103 "#191A21", "#6272A4", "#B45BCF", "#4D4F68", "#626483", "#62D6E8",
1104 "#EA51B2", "#EBFF87", "#00F769", "#B45BCF", "#7081D0", "#A1EFE4",
1105 }
1106 case "Solarized":
1107 return []string{
1108 "#002B36", "#073642", "#586E75", "#657B83", "#839496", "#93A1A1",
1109 "#EEE8D5", "#FDF6E3", "#B58900", "#CB4B16", "#DC322F", "#D33682",
1110 "#6C71C4", "#268BD2", "#2AA198", "#859900", "#002B36", "#073642",
1111 "#586E75", "#657B83", "#839496", "#93A1A1", "#EEE8D5", "#FDF6E3",
1112 }
1113 case "Gruvbox":
1114 return []string{
1115 "#282828", "#CC241D", "#98971A", "#D79921", "#458588", "#B16286",
1116 "#689D6A", "#A89984", "#928374", "#FB4934", "#B8BB26", "#FABD2F",
1117 "#83A598", "#D3869B", "#8EC07C", "#EBDBB2", "#FBF1C7", "#3C3836",
1118 "#504945", "#665C54", "#7C6F64", "#D65D0E", "#FE8019", "#BDAE93",
1119 }
1120 case "One Dark":
1121 return []string{
1122 "#282C34", "#ABB2BF", "#E06C75", "#D19A66", "#E5C07B", "#98C379",
1123 "#56B6C2", "#61AFEF", "#C678DD", "#BE5046", "#3B4048", "#4B5263",
1124 "#545862", "#565C64", "#5C6370", "#636D83", "#828997", "#2C323C",
1125 "#353B45", "#3E4451", "#4F5666", "#5F697A", "#6B7587", "#979EAB",
1126 }
1127 case "Monokai":
929 return []string{ 1128 return []string{
930 "#2E3436", "#555753", "#888A85", "#BABDB6", "#D3D7CF", "#EEEEEC", 1129 "#272822", "#F8F8F2", "#F92672", "#E6DB74", "#A6E22E", "#66D9EF",
931 "#FCE94F", "#EDD400", "#C4A000", "#8AE234", "#73D216", "#4E9A06", 1130 "#AE81FF", "#FD971F", "#75715E", "#49483E", "#3E3D32", "#F8F8F0",
932 "#729FCF", "#3465A4", "#204A87", "#AD7FA8", "#75507B", "#5C3566", 1131 "#F5F4F1", "#A59F85", "#FD5FF0", "#F4BF75", "#FFF59D", "#CFCFC2",
933 "#EF2929", "#CC0000", "#A40000", "#FCAF3E", "#F57900", "#CE5C00", 1132 "#A1EFE4", "#FFE792", "#CC6633", "#778899", "#9D550F", "#E69F66",
934 } 1133 }
935 case "Visibone Core": 1134 case "KiJiSH Dark Pastel Terminal":
936 return []string{ 1135 return []string{
937 "#000000", "#333333", "#666666", "#999999", "#CCCCCC", "#FFFFFF", 1136 "#2C2C2C", "#DCDCDC", "#3F3F3F", "#D67979", "#60B48A", "#DFAF8F",
938 "#FF0000", "#FF9900", "#FFFF00", "#00FF00", "#00FFFF", "#0000FF", 1137 "#9AB8D7", "#DC8CC3", "#8CD0D3", "#DCDCDC", "#709080", "#DCA3A3",
939 "#9900FF", "#FF00FF", "#FF0066", "#663300", "#CC6633", "#99CC33", 1138 "#72D5A3", "#F0DFAF", "#94BFF3", "#EC93D3", "#93E0E3", "#FFFFFF",
940 "#6699CC", "#CC33CC", "#CC9999", "#33CCCC", "#336699", "#9966CC",
941 } 1139 }
942 default: 1140 default:
943 vals := []int{0x00, 0x33, 0x66, 0x99, 0xCC, 0xFF} 1141 vals := []int{0x00, 0x33, 0x66, 0x99, 0xCC, 0xFF}