1 /*
2     TiMidity++ -- MIDI to WAVE converter and player
3     Copyright (C) 1999-2002 Masanao Izumo <mo@goice.co.jp>
4     Copyright (C) 1995 Tuukka Toivonen <tt@cgs.fi>
5 
6     This program is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10 
11     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15 
16     You should have received a copy of the GNU General Public License
17     along with this program; if not, write to the Free Software
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 
20     xskin.h
21 
22     Oct.03.1998  Daisuke Nagano
23 */
24 
25 #ifdef HAVE_CONFIG_H
26 #include "config.h"
27 #endif /* HAVE_CONFIG_H */
28 
29 #include <stdio.h>
30 #include <stdlib.h>
31 #ifndef __MACOS__
32 #include <sys/time.h>
33 #include <X11/Xlib.h>
34 #include <X11/Xutil.h>
35 #include <X11/cursorfont.h>
36 #endif /* __MACOS__ */
37 
38 #ifndef NO_STRING_H
39 #include <string.h>
40 #else /* NO_STRING_H */
41 #include <strings.h>
42 #endif /* NO_STRING_H */
43 
44 #ifdef HAVE_SYS_SOCKET_H
45 #include <sys/socket.h>
46 #endif
47 
48 #ifndef __MACOS__
49 #include <signal.h>
50 #include <sys/types.h>
51 #include <sys/ipc.h>
52 #include <sys/shm.h>
53 #endif /* __MACOS__ */
54 
55 #define XSKIN_WINDOW_NAME "Timidity"
56 #define XSKIN_RES_CLASS   "timidity"
57 #define XSKIN_RES_NAME    "Timidity"
58 
59 extern Pixmap xskin_loadBMP( Display *, Window, char *, int *, int * );
60 extern int xskin_loadviscolor( Display *, Window, char * );
61 
62 
63 /* text */
64 
65 extern void ts_puttext( int, int, char * );
66 
67 /* numbers */
68 
69 extern void ts_putnum( int, int, int );
70 
71 /* cbuttons */
72 
73 extern void ts_prev(int);
74 extern void ts_play(int);
75 extern void ts_pause(int);
76 extern void ts_stop(int);
77 extern void ts_next(int);
78 extern void ts_eject(int);
79 
80 /* titlebar */
81 
82 extern void ts_titlebar(int);
83 extern void ts_exitbutton(int);
84 extern void ts_menubutton(int);
85 extern void ts_iconbutton(int);
86 extern void ts_minibutton(int);
87 
88 /* monoster */
89 
90 extern void ts_mono(int);
91 extern void ts_stereo(int);
92 
93 /* shufrep */
94 
95 extern void ts_shuf(int);
96 extern void ts_rep(int);
97 extern void ts_equ(int);
98 extern void ts_plist(int);
99 
100 /* posbar */
101 
102 extern int ts_pos(int,int);
103 
104 /* volume */
105 
106 extern int ts_volume(int,int);
107 extern int ts_pan(int,int);
108 
109 /* spectrum analizer */
110 
111 extern void ts_spectrum( int, unsigned char * );
112 
113 /* positions */
114 
115 #define OFF   0
116 #define ON    1
117 #define ONOFF 2
118 #define OFFON 3
119 
120 #define skin_width  275
121 #define skin_height 116
122 
123 #define TS_PREV          0
124 #define TS_PLAY          1
125 #define TS_PAUSE         2
126 #define TS_STOP          3
127 #define TS_NEXT          4
128 #define TS_EJECT         5
129 #define TS_TITLEBAR      6
130 #define TS_EXITBUTTON    7
131 #define TS_MENUBUTTON    8
132 #define TS_ICONBUTTON    9
133 #define TS_MINIBUTTON    10
134 #define TS_MONO          11
135 #define TS_STEREO        12
136 #define TS_SHUFON        13
137 #define TS_SHUFOFF       14
138 #define TS_REPON         15
139 #define TS_REPOFF        16
140 #define TS_EQUON         17
141 #define TS_EQUOFF        18
142 #define TS_PLISTON       19
143 #define TS_PLISTOFF      20
144 #define TS_POS           21
145 #define TS_VOLUME        22
146 #define TS_PAN           23
147 #define TS_SPECTRUM      24
148 
149 
150 /* text */
151 
152 #define TEXT_W           5
153 #define TEXT_H           6
154 
155 #define BITRATE_X        111
156 #define BITRATE_Y        43
157 #define SAMPLE_X         156
158 #define SAMPLE_Y         43
159 #define MESSAGE_X        112
160 #define MESSAGE_Y        27
161 
162 /* numbers */
163 
164 #define NUM_W            9
165 #define NUM_H            13
166 
167 #define MIN_H_X          48
168 #define MIN_H_Y          26
169 #define MIN_L_X          60
170 #define MIN_L_Y          26
171 #define SEC_H_X          78
172 #define SEC_H_Y          26
173 #define SEC_L_X          90
174 #define SEC_L_Y          26
175 
176 /* cbuttons */
177 
178 #define PREV_SX(f)       0
179 #define PREV_SY(f)       f==OFF?0:18
180 #define PREV_DX          16
181 #define PREV_DY          88
182 #define PREV_W           23
183 #define PREV_H           18
184 
185 #define PLAY_SX(f)       23
186 #define PLAY_SY(f)       f==OFF?0:18
187 #define PLAY_DX          39
188 #define PLAY_DY          88
189 #define PLAY_W           23
190 #define PLAY_H           18
191 
192 #define PAUSE_SX(f)      46
193 #define PAUSE_SY(f)      f==OFF?0:18
194 #define PAUSE_DX         62
195 #define PAUSE_DY         88
196 #define PAUSE_W          23
197 #define PAUSE_H          18
198 
199 #define STOP_SX(f)       69
200 #define STOP_SY(f)       f==OFF?0:18
201 #define STOP_DX          85
202 #define STOP_DY          88
203 #define STOP_W           23
204 #define STOP_H           18
205 
206 #define NEXT_SX(f)       92
207 #define NEXT_SY(f)       f==OFF?0:18
208 #define NEXT_DX          108
209 #define NEXT_DY          88
210 #define NEXT_W           22
211 #define NEXT_H           18
212 
213 #define EJECT_SX(f)      114
214 #define EJECT_SY(f)      f==OFF?0:16
215 #define EJECT_DX         136
216 #define EJECT_DY         89
217 #define EJECT_W          23
218 #define EJECT_H          16
219 
220 /* titlebar */
221 
222 #define TITLEBAR_SX(f)   27
223 #define TITLEBAR_SY(f)   f==OFF?15:0
224 #define TITLEBAR_DX      0
225 #define TITLEBAR_DY      0
226 #define TITLEBAR_W       275
227 #define TITLEBAR_H       14
228 
229 #define EXITBUTTON_SX(f) 18
230 #define EXITBUTTON_SY(f) f==OFF?0:9
231 #define EXITBUTTON_DX    264
232 #define EXITBUTTON_DY    3
233 #define EXITBUTTON_W     9
234 #define EXITBUTTON_H     9
235 
236 #define MENUBUTTON_SX(f) 0
237 #define MENUBUTTON_SY(f) f==OFF?0:9
238 #define MENUBUTTON_DX    6
239 #define MENUBUTTON_DY    3
240 #define MENUBUTTON_W     9
241 #define MENUBUTTON_H     9
242 
243 #define ICONBUTTON_SX(f) 9
244 #define ICONBUTTON_SY(f) f==OFF?0:9
245 #define ICONBUTTON_DX    244
246 #define ICONBUTTON_DY    3
247 #define ICONBUTTON_W     9
248 #define ICONBUTTON_H     9
249 
250 #define MINIBUTTON_SX(f) f==OFF?0:9
251 #define MINIBUTTON_SY(f) 18
252 #define MINIBUTTON_DX    254
253 #define MINIBUTTON_DY    3
254 #define MINIBUTTON_W     9
255 #define MINIBUTTON_H     9
256 
257 /* monoster */
258 
259 #define MONO_SX(f)       29
260 #define MONO_SY(f)       f==OFF?12:0
261 #define MONO_DX          212
262 #define MONO_DY          41
263 #define MONO_W           29
264 #define MONO_H           12
265 
266 #define STEREO_SX(f)     0
267 #define STEREO_SY(f)     f==OFF?12:0
268 #define STEREO_DX        239
269 #define STEREO_DY        41
270 #define STEREO_W         29
271 #define STEREO_H         12
272 
273 /* playpause */
274 
275 #define PSTATE_STOP      0
276 #define PSTATE_PAUSE     1
277 #define PSTATE_PLAY      2
278 
279 #define PSTATE1_SX(f)    (f==PSTATE_STOP?18:(f==PSTATE_PAUSE?9:0))
280 #define PSTATE1_SY(f)    0
281 #define PSTATE1_DX       26
282 #define PSTATE1_DY       28
283 #define PSTATE1_W        9
284 #define PSTATE1_H        9
285 
286 #define PSTATE2_SX(f)    (f==PSTATE_STOP?39:(f==PSTATE_PAUSE?36:27))
287 #define PSTATE2_SY(f)    0
288 #define PSTATE2_DX       24
289 #define PSTATE2_DY       28
290 #define PSTATE2_W        3
291 #define PSTATE2_H        9
292 
293 /* shufrep */
294 
295 #define SHUF_SX(f)       28
296 #define SHUF_SY(f)       f==OFF?0:(f==ON?30:(f==ONOFF?45:15))
297 #define SHUF_DX          164
298 #define SHUF_DY          89
299 #define SHUF_W           47
300 #define SHUF_H           15
301 
302 #define REP_SX(f)        0
303 #define REP_SY(f)        f==OFF?0:(f==ON?30:(f==ONOFF?45:15))
304 #define REP_DX           210
305 #define REP_DY           89
306 #define REP_W            28
307 #define REP_H            15
308 
309 #define EQU_SX(f)        f==OFF?0:(f==ON?0:(f==ONOFF?46:46))
310 #define EQU_SY(f)        f==OFF?73:(f==ON?61:(f==ONOFF?61:73))
311 #define EQU_DX           219
312 #define EQU_DY           58
313 #define EQU_W            23
314 #define EQU_H            12
315 
316 #define PLIST_SX(f)      f==OFF?23:(f==ON?23:(f==ONOFF?69:69))
317 #define PLIST_SY(f)      f==OFF?73:(f==ON?61:(f==ONOFF?61:73))
318 #define PLIST_DX         242
319 #define PLIST_DY         58
320 #define PLIST_W          23
321 #define PLIST_H          12
322 
323 /* posbar */
324 
325 #define BAR_SX           0
326 #define BAR_SY           0
327 #define BAR_W            248
328 #define BAR_H            10
329 #define BAR_DX           16
330 #define BAR_DY           72
331 
332 #define POS_SX(f)        f==OFF?248:278
333 #define POS_SY(f)        0
334 #define POS_W            29
335 #define POS_H            10
336 #define POS_MIN_DX       16
337 #define POS_MAX_DX       235
338 #define POS_DY           72
339 
340 /* volume */
341 
342 #define VOLUME_SX        0
343 #define VOLUME_SY        0
344 #define VOLUME_W         68
345 #define VOLUME_H         15
346 #define VOLUME_DX        107
347 #define VOLUME_DY        57
348 
349 #define VOL_SX(f)        f==OFF?15:0
350 #define VOL_SY(f)        421
351 #define VOL_W            15
352 #define VOL_H            12
353 #define VOL_MIN_DX       107
354 #define VOL_MAX_DX       160
355 #define VOL_DY           57
356 
357 #define PANPOT_SX        9
358 #define PANPOT_SY        0
359 #define PANPOT_W         37
360 #define PANPOT_H         15
361 #define PANPOT_DX        177
362 #define PANPOT_DY        57
363 
364 #define PAN_SX(f)        f==OFF?15:0
365 #define PAN_SY(f)        421
366 #define PAN_W            15
367 #define PAN_H            12
368 #define PAN_MIN_DX       178
369 #define PAN_MAX_DX       199
370 #define PAN_DY           57
371 
372 /* spectrum analizer */
373 
374 #define SPE_SX           24
375 #define SPE_SY           43
376 #define SPE_W            76
377 #define SPE_H            16
378 
379