Update copyright year to 2015.
[cboard.git] / src / colors.c
blobaa947bf6723727f8d3c9443cb373ba9877eb72e5
1 /* vim:tw=78:ts=8:sw=4:set ft=c: */
2 /*
3 Copyright (C) 2002-2015 Ben Kibbey <bjk@luxsci.net>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 #ifdef HAVE_CONFIG_H
20 #include <config.h>
21 #endif
23 #include <stdio.h>
25 #include "common.h"
26 #include "conf.h"
27 #include "colors.h"
29 static int next_cp;
32 * Looks for a matching color pair or creates a new color pair if not found.
34 static chtype find_cp(short fg, short bg, attr_t attrs)
36 int i;
37 short xfg, xbg;
39 for (i = 1; i < COLOR_PAIRS; i++) {
40 pair_content(i, &xfg, &xbg);
42 if (xfg == fg && xbg == bg)
43 return COLOR_PAIR(i) | attrs;
46 init_pair(next_cp, fg, bg);
47 return COLOR_PAIR(next_cp++) | attrs;
51 * Mixes two color pairs' fg and bg colors determined by 'which'.
53 chtype mix_cp(chtype a, chtype b, attr_t attrs, int which)
55 short afg, abg;
56 short bfg, bbg;
58 pair_content(PAIR_NUMBER(a), &afg, &abg);
59 pair_content(PAIR_NUMBER(b), &bfg, &bbg);
61 switch (which) {
62 case A_FG_B_BG:
63 return find_cp(afg, bbg, attrs);
64 case A_FG_B_FG:
65 return find_cp(afg, bfg, attrs);
66 case A_BG_B_BG:
67 return find_cp(abg, bbg, attrs);
68 case B_FG_A_BG:
69 return find_cp(bfg, abg, attrs);
70 case B_BG_B_FG:
71 return find_cp(bbg, bfg, attrs);
72 case A_BG_A_FG:
73 return find_cp(abg, afg, attrs);
74 case B_BG_A_FG:
75 return find_cp(bbg, afg, attrs);
78 return 0;
81 void init_color_pairs()
83 next_cp = 1;
85 init_pair(next_cp++, config.color[CONF_BCOORDS].fg,
86 config.color[CONF_BCOORDS].bg);
87 init_pair(next_cp++, config.color[CONF_BGRAPHICS].fg,
88 config.color[CONF_BGRAPHICS].bg);
89 init_pair(next_cp++, config.color[CONF_BWHITE].fg,
90 config.color[CONF_BWHITE].bg);
91 init_pair(next_cp++, config.color[CONF_BBLACK].fg,
92 config.color[CONF_BBLACK].bg);
93 init_pair(next_cp++, config.color[CONF_BSELECTED].fg,
94 config.color[CONF_BSELECTED].bg);
95 init_pair(next_cp++, config.color[CONF_BCURSOR].fg,
96 config.color[CONF_BCURSOR].bg);
97 init_pair(next_cp++, config.color[CONF_SWINDOW].fg,
98 config.color[CONF_SWINDOW].bg);
99 init_pair(next_cp++, config.color[CONF_SBORDER].fg,
100 config.color[CONF_SBORDER].bg);
101 init_pair(next_cp++, config.color[CONF_STITLE].fg,
102 config.color[CONF_STITLE].bg);
103 init_pair(next_cp++, config.color[CONF_SENGINE].fg,
104 config.color[CONF_SENGINE].bg);
105 init_pair(next_cp++, config.color[CONF_SNOTIFY].fg,
106 config.color[CONF_SNOTIFY].bg);
107 init_pair(next_cp++, config.color[CONF_TWINDOW].fg,
108 config.color[CONF_TWINDOW].bg);
109 init_pair(next_cp++, config.color[CONF_TBORDER].fg,
110 config.color[CONF_TBORDER].bg);
111 init_pair(next_cp++, config.color[CONF_TTITLE].fg,
112 config.color[CONF_TTITLE].bg);
113 init_pair(next_cp++, config.color[CONF_HWINDOW].fg,
114 config.color[CONF_HWINDOW].bg);
115 init_pair(next_cp++, config.color[CONF_HBORDER].fg,
116 config.color[CONF_HBORDER].bg);
117 init_pair(next_cp++, config.color[CONF_HTITLE].fg,
118 config.color[CONF_HTITLE].bg);
119 init_pair(next_cp++, config.color[CONF_MWINDOW].fg,
120 config.color[CONF_MWINDOW].bg);
121 init_pair(next_cp++, config.color[CONF_MBORDER].fg,
122 config.color[CONF_MBORDER].bg);
123 init_pair(next_cp++, config.color[CONF_MTITLE].fg,
124 config.color[CONF_MTITLE].bg);
125 init_pair(next_cp++, config.color[CONF_MPROMPT].fg,
126 config.color[CONF_MPROMPT].bg);
127 init_pair(next_cp++, config.color[CONF_IWINDOW].fg,
128 config.color[CONF_IWINDOW].bg);
129 init_pair(next_cp++, config.color[CONF_IBORDER].fg,
130 config.color[CONF_IBORDER].bg);
131 init_pair(next_cp++, config.color[CONF_ITITLE].fg,
132 config.color[CONF_ITITLE].bg);
133 init_pair(next_cp++, config.color[CONF_IPROMPT].fg,
134 config.color[CONF_IPROMPT].bg);
135 init_pair(next_cp++, config.color[CONF_BMOVESW].fg,
136 config.color[CONF_BMOVESW].bg);
137 init_pair(next_cp++, config.color[CONF_BMOVESB].fg,
138 config.color[CONF_BMOVESB].bg);
139 init_pair(next_cp++, config.color[CONF_BCOUNT].fg,
140 config.color[CONF_BCOUNT].bg);
141 init_pair(next_cp++, config.color[CONF_BDWINDOW].fg,
142 config.color[CONF_BDWINDOW].bg);
143 init_pair(next_cp++, config.color[CONF_MENU].fg,
144 config.color[CONF_MENU].bg);
145 init_pair(next_cp++, config.color[CONF_MENUS].fg,
146 config.color[CONF_MENUS].bg);
147 init_pair(next_cp++, config.color[CONF_MENUH].fg,
148 config.color[CONF_MENUH].bg);
149 init_pair(next_cp++, config.color[CONF_HISTORY_MENU_LG].fg,
150 config.color[CONF_HISTORY_MENU_LG].bg);
153 * These are not configurable. They are the color pairs that are mixed
154 * with the background of the current square and foreground of the current
155 * piece. See draw_board() for details.
157 init_pair(next_cp++, config.color[CONF_BWHITE].fg,
158 config.color[CONF_BWHITE].bg);
159 init_pair(next_cp++, config.color[CONF_BBLACK].fg,
160 config.color[CONF_BWHITE].bg);
161 init_pair(next_cp++, config.color[CONF_BBLACK].fg,
162 config.color[CONF_BBLACK].bg);
163 init_pair(next_cp++, config.color[CONF_BWHITE].fg,
164 config.color[CONF_BBLACK].bg);
166 init_pair(next_cp++, config.color[CONF_BCASTLING].fg,
167 config.color[CONF_BCASTLING].bg);
168 init_pair(next_cp++, config.color[CONF_BENPASSANT].fg,
169 config.color[CONF_BENPASSANT].bg);
170 init_pair(next_cp++, config.color[CONF_BATTACK].fg,
171 config.color[CONF_BATTACK].bg);
172 init_pair(next_cp++, config.color[CONF_BPREVMOVE].fg,
173 config.color[CONF_BPREVMOVE].bg);
176 void set_default_colors()
178 config.color[CONF_BDWINDOW].fg = COLOR_WHITE;
179 config.color[CONF_BDWINDOW].bg = COLOR_BLACK;
180 config.color[CONF_BCOORDS].fg = COLOR_YELLOW;
181 config.color[CONF_BCOORDS].bg = COLOR_BLACK;
182 config.color[CONF_BMOVESW].fg = COLOR_WHITE;
183 config.color[CONF_BMOVESW].bg = COLOR_WHITE;
184 config.color[CONF_BMOVESW].nattrs = A_REVERSE;
185 config.color[CONF_BMOVESB].fg = COLOR_WHITE;
186 config.color[CONF_BMOVESB].bg = COLOR_BLUE;
187 config.color[CONF_BMOVESB].nattrs = A_REVERSE;
188 config.color[CONF_BCOUNT].fg = COLOR_MAGENTA;
189 config.color[CONF_BCOUNT].bg = COLOR_CYAN;
190 config.color[CONF_BCOUNT].attrs = A_BOLD;
191 config.color[CONF_BCOUNT].nattrs = A_REVERSE;
192 config.color[CONF_BGRAPHICS].fg = COLOR_WHITE;
193 config.color[CONF_BGRAPHICS].bg = COLOR_BLACK;
194 config.color[CONF_BWHITE].fg = COLOR_WHITE;
195 config.color[CONF_BWHITE].bg = COLOR_RED;
196 config.color[CONF_BWHITE].nattrs = A_REVERSE;
197 config.color[CONF_BBLACK].fg = COLOR_CYAN;
198 config.color[CONF_BBLACK].bg = COLOR_BLACK;
199 config.color[CONF_BSELECTED].fg = COLOR_WHITE;
200 config.color[CONF_BSELECTED].bg = COLOR_YELLOW;
201 config.color[CONF_BSELECTED].nattrs = A_BOLD|A_REVERSE;
202 config.color[CONF_BCURSOR].fg = COLOR_WHITE;
203 config.color[CONF_BCURSOR].bg = COLOR_GREEN;
204 config.color[CONF_BCURSOR].nattrs = A_BOLD|A_REVERSE;
205 config.color[CONF_SWINDOW].fg = COLOR_WHITE;
206 config.color[CONF_SWINDOW].bg = COLOR_BLACK;
207 config.color[CONF_SBORDER].fg = COLOR_CYAN;
208 config.color[CONF_SBORDER].bg = COLOR_BLACK;
209 config.color[CONF_STITLE].fg = COLOR_WHITE;
210 config.color[CONF_STITLE].bg = COLOR_BLUE;
211 config.color[CONF_STITLE].nattrs = A_REVERSE;
212 config.color[CONF_SENGINE].fg = COLOR_YELLOW;
213 config.color[CONF_SENGINE].bg = COLOR_BLACK;
214 config.color[CONF_SENGINE].nattrs = A_BOLD;
215 config.color[CONF_SNOTIFY].fg = COLOR_GREEN;
216 config.color[CONF_SNOTIFY].bg = COLOR_BLACK;
217 config.color[CONF_SNOTIFY].nattrs = A_BOLD;
218 config.color[CONF_TWINDOW].fg = COLOR_WHITE;
219 config.color[CONF_TWINDOW].bg = COLOR_BLACK;
220 config.color[CONF_TBORDER].fg = COLOR_CYAN;
221 config.color[CONF_TBORDER].bg = COLOR_BLACK;
222 config.color[CONF_TTITLE].fg = COLOR_WHITE;
223 config.color[CONF_TTITLE].bg = COLOR_BLUE;
224 config.color[CONF_TTITLE].nattrs = A_REVERSE;
225 config.color[CONF_HWINDOW].fg = COLOR_WHITE;
226 config.color[CONF_HWINDOW].bg = COLOR_BLACK;
227 config.color[CONF_HBORDER].fg = COLOR_CYAN;
228 config.color[CONF_HBORDER].bg = COLOR_BLACK;
229 config.color[CONF_HTITLE].fg = COLOR_WHITE;
230 config.color[CONF_HTITLE].bg = COLOR_BLUE;
231 config.color[CONF_HTITLE].nattrs = A_REVERSE;
232 config.color[CONF_MWINDOW].fg = COLOR_WHITE;
233 config.color[CONF_MWINDOW].bg = COLOR_BLACK;
234 config.color[CONF_MBORDER].fg = COLOR_CYAN;
235 config.color[CONF_MBORDER].bg = COLOR_BLACK;
236 config.color[CONF_MTITLE].fg = COLOR_WHITE;
237 config.color[CONF_MTITLE].bg = COLOR_MAGENTA;
238 config.color[CONF_MTITLE].nattrs = A_REVERSE;
239 config.color[CONF_MPROMPT].fg = COLOR_WHITE;
240 config.color[CONF_MPROMPT].bg = COLOR_MAGENTA;
241 config.color[CONF_MPROMPT].nattrs = A_BOLD;
242 config.color[CONF_IWINDOW].fg = COLOR_WHITE;
243 config.color[CONF_IWINDOW].bg = COLOR_BLACK;
244 config.color[CONF_IBORDER].fg = COLOR_CYAN;
245 config.color[CONF_IBORDER].bg = COLOR_BLACK;
246 config.color[CONF_ITITLE].fg = COLOR_WHITE;
247 config.color[CONF_ITITLE].bg = COLOR_MAGENTA;
248 config.color[CONF_ITITLE].nattrs = A_REVERSE;
249 config.color[CONF_IPROMPT].fg = COLOR_WHITE;
250 config.color[CONF_IPROMPT].bg = COLOR_MAGENTA;
251 config.color[CONF_IPROMPT].nattrs = A_BOLD;
252 config.color[CONF_MENU].fg = COLOR_WHITE;
253 config.color[CONF_MENU].bg = COLOR_BLACK;
254 config.color[CONF_MENUS].fg = COLOR_WHITE;
255 config.color[CONF_MENUS].bg = COLOR_RED;
256 config.color[CONF_MENUS].nattrs = A_BOLD;
257 config.color[CONF_MENUH].fg = COLOR_BLUE;
258 config.color[CONF_MENUH].bg = COLOR_YELLOW;
259 config.color[CONF_MENUH].nattrs = A_BOLD;
260 config.color[CONF_HISTORY_MENU_LG].fg = COLOR_GREEN;
261 config.color[CONF_HISTORY_MENU_LG].bg = COLOR_BLACK;
262 config.color[CONF_BCASTLING].fg = COLOR_YELLOW;
263 config.color[CONF_BCASTLING].bg = COLOR_BLACK;
264 config.color[CONF_BCASTLING].attrs = A_BOLD;
265 config.color[CONF_BCASTLING].nattrs = A_BOLD;
266 config.color[CONF_BENPASSANT].fg = COLOR_MAGENTA;
267 config.color[CONF_BENPASSANT].bg = COLOR_BLACK;
268 config.color[CONF_BENPASSANT].attrs = A_BOLD;
269 config.color[CONF_BENPASSANT].nattrs = A_BOLD;
270 config.color[CONF_BATTACK].fg = COLOR_BLUE;
271 config.color[CONF_BATTACK].bg = COLOR_BLACK;
272 config.color[CONF_BATTACK].attrs = A_BOLD|A_BLINK;
273 config.color[CONF_BATTACK].nattrs = A_REVERSE;
274 config.color[CONF_BPREVMOVE].fg = COLOR_WHITE;
275 config.color[CONF_BPREVMOVE].bg = COLOR_MAGENTA;
276 config.color[CONF_BPREVMOVE].nattrs = A_BOLD|A_REVERSE;