colors.go raw
1 package gel
2
3 import (
4 "fmt"
5 "image/color"
6 "sync"
7 )
8
9 // Colors is a map of names to hex strings specifying colors
10 type Colors struct {
11 sync.Mutex
12 m map[string]string
13 }
14
15 // HexARGB converts a 32 bit hex string into a color specification
16 func HexARGB(s string) (c color.RGBA) {
17 _, _ = fmt.Sscanf(s, "%02x%02x%02x%02x", &c.A, &c.R, &c.G, &c.B)
18 return
19 }
20
21 // HexNRGB converts a 32 bit hex string into a color specification
22 func HexNRGB(s string) (c color.NRGBA) {
23 _, _ = fmt.Sscanf(s, "%02x%02x%02x%02x", &c.A, &c.R, &c.G, &c.B)
24 return
25 }
26
27 // GetNRGBAFromName returns the named color from the map
28 func (c *Colors) GetNRGBAFromName(co string) color.NRGBA {
29 c.Lock()
30 defer c.Unlock()
31 if col, ok := c.m[co]; ok {
32 return HexNRGB(col)
33 }
34 return color.NRGBA{}
35 }
36
37 // newColors creates the base palette for the theme
38 func newColors() (c *Colors) {
39 c = new(Colors)
40 c.Lock()
41 defer c.Unlock()
42 c.m = map[string]string{
43 "black": "ff000000",
44 "light-black": "ff222222",
45 "blue": "ff3030cf",
46 "blue-lite-blue": "ff3080cf",
47 "blue-orange": "ff80a830",
48 "blue-red": "ff803080",
49 "dark": "ff303030",
50 "dark-blue": "ff303080",
51 "dark-blue-lite-blue": "ff305880",
52 "dark-blue-orange": "ff584458",
53 "dark-blue-red": "ff583058",
54 "dark-gray": "ff656565",
55 "dark-grayi": "ff535353",
56 "dark-grayii": "ff424242",
57 "dark-green": "ff308030",
58 "dark-green-blue": "ff305858",
59 "dark-green-lite-blue": "ff308058",
60 "dark-green-orange": "ff586c30",
61 "dark-green-red": "ff585830",
62 "dark-green-yellow": "ff588030",
63 "dark-lite-blue": "ff308080",
64 "dark-orange": "ff805830",
65 "dark-purple": "ff803080",
66 "dark-red": "ff803030",
67 "dark-yellow": "ff808030",
68 "gray": "ff808080",
69 "green": "ff30cf30",
70 "green-blue": "ff308080",
71 "green-lite-blue": "ff30cf80",
72 "green-orange": "ff80a830",
73 "green-red": "ff808030",
74 "green-yellow": "ff80cf30",
75 "light": "ffcfcfcf",
76 "light-blue": "ff8080cf",
77 "light-blue-lite-blue": "ff80a8cf",
78 "light-blue-orange": "ffa894a8",
79 "light-blue-red": "ffa880a8",
80 "light-gray": "ff888888",
81 "light-grayi": "ff9a9a9a",
82 "light-grayii": "ffacacac",
83 "light-grayiii": "ffbdbdbd",
84 "light-green": "ff80cf80",
85 "light-green-blue": "ff80a8a8",
86 "light-green-lite-blue": "ff80cfa8",
87 "light-green-orange": "ffa8bc80",
88 "light-green-red": "ffa8a880",
89 "light-green-yellow": "ffa8cf80",
90 "light-lite-blue": "ff80cfcf",
91 "light-orange": "ffcfa880",
92 "light-purple": "ffcf80cf",
93 "light-red": "ffcf8080",
94 "light-yellow": "ffcfcf80",
95 "lite-blue": "ff30cfcf",
96 "orange": "ffcf8030",
97 "purple": "ffcf30cf",
98 "red": "ffcf3030",
99 "white": "ffffffff",
100 "dark-white": "ffdddddd",
101 "yellow": "ffcfcf30",
102 "halfdim": "33000000",
103 "halfbright": "02ffffff",
104 }
105
106 c.m["Black"] = c.m["black"]
107 c.m["ButtonBg"] = c.m["blue-lite-blue"]
108 c.m["ButtonBgDim"] = "ff30809a"
109 c.m["ButtonText"] = c.m["White"]
110 c.m["ButtonTextDim"] = c.m["light-grayii"]
111 c.m["Chk"] = c.m["orange"]
112 c.m["Chk"] = c.m["orange"]
113 c.m["Danger"] = c.m["red"]
114 c.m["Dark"] = c.m["dark"]
115 c.m["DarkGray"] = c.m["dark-grayii"]
116 c.m["DarkGrayI"] = c.m["dark-grayi"]
117 c.m["DarkGrayII"] = c.m["dark-gray"]
118 c.m["DarkGrayIII"] = c.m["dark"]
119 c.m["DocBg"] = c.m["white"]
120 c.m["DocBgDim"] = c.m["light-grayiii"]
121 c.m["DocBgHilite"] = c.m["dark-white"]
122 c.m["DocText"] = c.m["dark"]
123 c.m["DocTextDim"] = c.m["light-grayi"]
124 c.m["Fatal"] = "ff880000"
125 c.m["Gray"] = c.m["gray"]
126 c.m["Hint"] = c.m["light-gray"]
127 c.m["Info"] = c.m["blue-lite-blue"]
128 c.m["InvText"] = c.m["light"]
129 c.m["Light"] = c.m["light"]
130 c.m["LightGray"] = c.m["light-grayiii"]
131 c.m["LightGrayI"] = c.m["light-grayii"]
132 c.m["LightGrayII"] = c.m["light-grayi"]
133 c.m["LightGrayIII"] = c.m["light-gray"]
134 c.m["PanelBg"] = c.m["light"]
135 c.m["PanelBgDim"] = c.m["dark-grayi"]
136 c.m["PanelText"] = c.m["dark"]
137 c.m["PanelTextDim"] = c.m["light-grayii"]
138 c.m["PrimaryLight"] = c.m["light-green-blue"]
139 c.m["Primary"] = c.m["green-blue"]
140 c.m["PrimaryDim"] = c.m["dark-green-blue"]
141 c.m["SecondaryLight"] = c.m["purple"]
142 c.m["Secondary"] = c.m["purple"]
143 c.m["SecondaryDim"] = c.m["dark-purple"]
144 c.m["Success"] = c.m["green"]
145 c.m["Transparent"] = c.m["00000000"]
146 c.m["Warning"] = c.m["light-orange"]
147 c.m["White"] = c.m["white"]
148 c.m["scrim"] = c.m["halfbright"]
149
150 c.m["Primary"] = c.m["PrimaryLight"]
151 c.m["Secondary"] = c.m["SecondaryLight"]
152
153 c.m["DocText"] = c.m["dark"]
154 c.m["DocBg"] = c.m["light"]
155
156 c.m["PanelText"] = c.m["dark"]
157 c.m["PanelBg"] = c.m["light"]
158
159 c.m["PanelTextDim"] = c.m["dark-grayii"]
160 c.m["PanelBgDim"] = c.m["dark-grayi"]
161 c.m["DocTextDim"] = c.m["light-grayi"]
162 c.m["DocBgDim"] = c.m["dark-grayi"]
163 c.m["Warning"] = c.m["light-orange"]
164 c.m["Success"] = c.m["dark-green"]
165 c.m["Chk"] = c.m["orange"]
166 c.m["DocBgHilite"] = c.m["dark-white"]
167 c.m["scrim"] = c.m["halfbright"]
168 return c
169 }
170
171 // SetDarkTheme to dark or light
172 func (c *Colors) SetDarkTheme(dark bool) {
173 c.Lock()
174 defer c.Unlock()
175 if !dark {
176 c.m["Primary"] = c.m["PrimaryLight"]
177 c.m["Secondary"] = c.m["SecondaryLight"]
178
179 c.m["DocText"] = c.m["dark"]
180 c.m["DocBg"] = c.m["light"]
181
182 c.m["PanelText"] = c.m["dark"]
183 c.m["PanelBg"] = c.m["white"]
184
185 c.m["PanelTextDim"] = c.m["dark-grayii"]
186 c.m["PanelBgDim"] = c.m["dark-grayi"]
187 c.m["DocTextDim"] = c.m["light-grayi"]
188 c.m["DocBgDim"] = c.m["light-grayiii"]
189 c.m["Warning"] = c.m["light-orange"]
190 c.m["Success"] = c.m["dark-green"]
191 c.m["Chk"] = c.m["orange"]
192 c.m["DocBgHilite"] = c.m["dark-white"]
193 c.m["scrim"] = c.m["halfdim"]
194 c.m["Fatal"] = c.m["light-red"]
195 c.m["Info"] = c.m["light-blue"]
196 } else {
197 c.m["Primary"] = c.m["PrimaryDim"]
198 c.m["Secondary"] = c.m["SecondaryDim"]
199
200 c.m["DocText"] = c.m["light"]
201 c.m["DocBg"] = c.m["dark"]
202
203 c.m["PanelText"] = c.m["light"]
204 c.m["PanelBg"] = c.m["black"]
205
206 c.m["PanelTextDim"] = c.m["light-grayii"]
207 c.m["PanelBgDim"] = c.m["light-gray"]
208 c.m["DocTextDim"] = c.m["dark-gray"]
209 c.m["DocBgDim"] = c.m["dark-grayii"]
210 c.m["Warning"] = c.m["yellow"]
211 c.m["Success"] = c.m["green"]
212 c.m["Chk"] = c.m["orange"]
213 c.m["DocBgHilite"] = c.m["light-black"]
214 c.m["scrim"] = c.m["halfbright"]
215 c.m["Fatal"] = c.m["red"]
216 c.m["Info"] = c.m["blue"]
217 }
218 }
219