1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
|
############ GQmpeg skin specifications file. ############
(A quick reference of what is required in the image files
for each widget type is located at the end of this document )
Skins are simply a directory which contain image files and
a skindata file (named skindata).
All skin features are configured in the skindata file.
Note: when using an alternate skin, it's specs go into a file named
skindata_alt, it uses the same format as the skindata file. Pressing
the Alt_Skin_Button button switches between the two skins.
(each skin must contain an Alt_Skin_Button if you want the alternate
skin feature to work)
Any line can be made into a comment by prefacing it with a '#' symbol.
All image files can be any size, GQmpeg will calculate the drawing data
for you. Skins can have any size buttons, display items, digits,
fonts, etc. The files can be of any type supported by gdk-pixbuf (xpm, png,
jpeg, gif, etc.) The recommended file format is png.
Prelights are optional on all items that support them. A prelight is an
alternate image that is displayed when the mouse is over a pressable
item (button, slider, dial). For example, the default skin includes prelights
for all buttons, notice the buttons 'brighten' when the mouse moves over
them.
Every image within a file must have the same width and height, for example
if the play button was 30 by 20, the resulting image file would be
180 by 20. (6 button states total, including status lights and prelights)
Addendum: If the above button was specified with the status light and
prelight options as false, the resulting image file would be
60 by 20. (2 button states total, 1 for normal, 1 for pressed)
Note that images for buttons and numbers contain the items horizontally,
the images for items contain the items vertically, the image for a font
contains 3 rows of 32 items, and the slider contains the background and
handle horizontally or vertically (depending if a slider is horizontal
or verticle, respectivley).
Only the background image is required, all other elements are optional
(although it would be nice to always have a play button :)
If you do not want an item displayed, comment out the line with
a '#' symbol.
IMPORTANT:
Slots enclosed in "[]" are optional, but are so only to retain backward
compatibility of skins. Please specify all options for each type as in the
future the options enclosed in "[]" may no longer be "optional". Please
separate each option with a single space, and do not add extra characters
at the end of the line, as the extra info may be mistaken for expanded
options in the event that options are added to the skin spec in the future.
PROPER TRANSPARENCY:
The main background image uses a threshold of 1 (out of 256 levels) for the
window shape, the rest is used for partially overwiting the background when
the Transparency option is true.
Portions of items, buttons, sliders, numbers, and text that never change and
are the same as the background image should be set transparent so that the
'force transparent' option works properly.
############# skindata file format #################
Note: For an example skindata file see the file skindata-template.
x and y are always the position in the window (use the -skinhelp command line
option to have GQmpeg print out the mouse coordinates as the mouse moves)
And finally, to what is available:
==========================
Main options
==========================
Background: filename
filename
The background image file, the window will be the same size as this image.
Add transparency to this image for shaped skins, the cutoff threshold for
transparency is 1 on images with muli-level alpha (like in png).
Transparency: flag
flag
True or False, this specifies if the background image (above) has a multiple
level alpha channel (as in png files) to apply when overwriting the root
window's background.
Mask: filename
(this is DEPRECATED!, for transparent skins just add transparency to the
Background image, Mask remains merely for backwards compatibility)
filename
The mask image file, only needed for skins which are shaped windows (not
rectangular). Contains a transparency mask for the main window.
==========================
Text display
==========================
Title/Album/Artist/Genre: filename length [extended] x y
filename
Should contain a fixed font. With 3 or 6 lines of 32 characters each,
these are the characters, they are listed in three rows so you can copy
and past them into you graphics program. (first character in the top line
is a space)
!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~
When extended is TRUE these are the 3 addition lines of international chars
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXX FIXME! TO DO! XXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
length
Maximum number of characters to display in window.
extended
(optional, absence defaults to FALSE)
When TRUE, the image contains 3 additional lines for internation
characters. The result is 6 lines of 32 characters each.
==========================
Buttons (that optionally include an 'active' mode)
==========================
Play/Pause/Stop/Shuffle/Repeat/
Time_Remaining/Time_Total_Button: filename prelight status_light x y [clip_filename]
filename
Image file. Contains the buttons horizontally in this order:
normal, normal pressed, normal active, normal active pressed, prelit, prelit active
(the actual number of images may vary, see next two options)
prelight
TRUE or FALSE, specifies whether or not prelight buttons are available, If
FALSE, do not include the last two prelight buttons in the image file.
status_light
TRUE or FALSE, specifies whether or not button lights are available. If FALSE,
do not include the 'lit up', 'lit down', and 'prelight lit up' buttons in the
image file.
clip_filename (optional)
When specified, defines an image with transparency to be used as the button's
draw clip mask. The clip mask is placed at location x, y The transparency is used to
indicate the portions of the button that should be visible (drawn) and respond to
mouse clicks. If the image contains a multiple level alpha channel, the mask is reduced
such that levels above 50% are visible and those below 50% are not visible.
==========================
Buttons (standard)
==========================
Next/Prev/FF/RW/Playlist/Config/Iconify/Mixer/Exit/Alt_Skin/Volume_Up/Volume_Down/
Balance_Left/Balance_Right_Button: filename prelight x y [clip_filename]
Preset_1_/.../Preset_10_Button: filename prelight x y [clip_filename]
filename
Image file. Contains the buttons horizontally in this order:
normal, normal pressed, prelit
(the actual number of images may vary, see next option)
prelight
TRUE or FALSE, specifies whether or not prelight buttons are available. If
FALSE, do not include the last prelight button in the image file.
clip_filename (optional)
When specified, defines an image with transparency to be used as the button's
draw clip mask. The clip mask is placed at location x, y The transparency is used to
indicate the portions of the button that should be visible (drawn) and respond to
mouse clicks. If the image contains a multiple level alpha channel, the mask is reduced
such that levels above 50% are visible and those below 50% are not visible.
==========================
Items (with fixed number sections)
==========================
Stereo/Shuffle/Repeat/Mpegversion/Mpeglayer/Mpegmode/Status/
Minus/Total_Item: filename x y
filename
Image file. Contains the items vertically in the order below:
Stereo_Item: blank, mono , stereo
Shuffle_Item: off, on
Repeat_Item: off, on
Mpegversion_Item: blank, 1, 2
Mpeglayer_Item: blank, 1, 2, 3
Mpegmode_Item: blank, stereo, joint-stereo, dual-channel, single-channel
Status_Item: stop, pause, play
Minus_Item: time counts up, time counts down
Total_Item: time refers to current song only, to total playlist, to live
==========================
Items (animation oriented)
==========================
Load_Item: filename sections x y
filename
Image file. Contains animations for the following items:
Load_Item: Animation for loading playlist in background.
sections
The total number of sections in the image file. The first section is always
blank (animation is off), the subsequent images are cycled through to create
the animation. This number is a total count, so it will be 1 (first is always
blank) plus the number of animation frames.
==========================
Items (value oriented)
==========================
Position/Volume/Balance_Item: filename sections x y
filename
Image file. Contains images vertically in the order representing the lowest to
highest values.
sections
The number of images within the file, recommended number of images is 16 to 32.
The most possible usable images is 101 for volume and blance (from volume=0%
to volume = 100%).
Note:
These items must be listed before their respective sliders:
(see Position/Volume/Balance_Slider).
==========================
Digit placeholder (for convenience, less memory usage with many similar numbers)
==========================
Digit_Large/Digit_Small_Default: filename
filename
Image file. Contains digits horizontally from 0 to 9, and a blank space.
These two digits are a convenience function, if you want to use a digit more than
once it is quicker to load it into on of these two slots. Then when using the digit
in the number item type below, use the words 'Large' or 'Small' in place of the
filename.
==========================
Numbers
==========================
Hour/Minute/Second/Song/Total/In_Rate/In_Hz/Out_Bits/Out_Hz/
Song_Minute/Song_Second/Frame/Frame_Total/CPU/
Hour_Total/Minute_Total/Second_Total_Number: filename [length center] x y
filename
Image file for the number's digit, or the word 'Large' or 'Small' (see above).
If a filename is specified, the image should contain the digits horizontally
from 0 to 9, and a blank space.
length (optional)
The number of digits to display, if not present the default is assumed.
center (optional, but if specified length is required too)
TRUE or FALSE, specify to center the number.
==========================
Sliders
==========================
Position/Volume/Balance_Slider: filename prelight [verticle reversed] length x y
filename
Image file. Contains images horizontally in this order:
slider background, handle normal, handle pressed, handle prelit
(handles must have the same dimensions)
prelight
TRUE or FALSE, specifies whether or not a prelight handle is available, if FALSE,
do not include a 'handle prelit' in the image file.
verticle
TRUE or FALSE. If false the slider is horizontal, if true, verticle.
reversed
TRUE or FALSE. If true, the slider works opposite than normal. For example
when false the slider moves from left to right, when true the slider moves
from right to left. On a verticle slider and reversed is false, the slider
moves from top to bottom.
length
The width of the slider's background, this is the complete width the slider will
be in the window, and must match the length of the 'slider background' in the
image file.
==========================
Dials (AKA knobs)
==========================
Position/Volume/Balance_Dial: filename has_press_image has_prelight_image reversed
angle_start angle_end handle_offset_x handle_offset_y center_x center_y
x y w h [clip_filename]
filename
Image file. Contains images for the dial's handle vertically in this order:
normal
pressed (being dragged with mouse, optional)
prelit (mouse over highlight, optional)
has_press_image
TRUE or FALSE, specifies whether or not handle has a pressed image (above)
has_prelight_image
TRUE or FALSE, specifies whether or not handle has a pressed image (above)
reversed
TRUE of FALSE, normally a dial works clockwise with angle_start being the
lowest (zero) value and angle_end being the highest value. When TRUE the dial
works counter-clockwise with angle_end being the lowest (zero) value to
angle_start being the highest position.
angle_start
angle_end
The start and end angles define the end points of the dial's rotation in integer
degrees, the degrees count from 0 located right of center axis increasing clockwise
to a value of 359. (360 is equivelent to 0, but the only accepted numbers are 0 - 359.
This (admittedly poor) figure might help:
270 ____ center axis
_|_ /
/ /
/ / \
180 -| + |- 0 (360)
\ /
\_ _/
|
90
handle_offset_x
handle_offset_y
The x and y coordinates into the handle image that represents the handle center
of rotation (pivot point), this does not have to actually be within the image size.
center_x
center_y
The x and y coordinates on the skin image for the handle center of rotation.
x, y, width, height:
Marks the clipping region to draw the dial, basically the handle is not drawn
outside this region. (width and height will be ignored if a clip mask image
is specified (see next option).
clip_filename (optional)
When specified, defines an image with transparency to be used as the dial's
draw clip mask. The clip mask is placed at x, y (above) and the image's dimensions
are used in place of width, height (above). The transparency is used to indicate the
portions of the dial that should be visible (drawn) and respond to mouse clicks.
If the image contains a multiple level alpha channel, the mask is reduced such that
levels above 50% are visible and those below 50% are not visible.
==============================================================================
************ Quick reference tables **************
==============================================================================
Note: All example values below set (*)coordinates x=1 and y=1, and filename to fn.png.
(*) Except Dials.
--------------------------
Buttons (all button images contained horizontally)
--------------------------
Play/Pause/Stop/Shuffle/Repeat_Button: filename prelight status_light x y
Time_Remaining/Time_Total_Button: filename prelight status_light x y
Option line: | # images | Normal | Pressed | Lit | Lit | Prelit | Prelit |
| total | | | Normal | Pressed | Normal | Lit Normal |
-----------------------+----------+--------+---------+--------+---------+--------+------------+
fn.png TRUE TRUE 1 1 | 6 | X | X | X | X | X | X |
fn.png TRUE FALSE 1 1 | 3 | X | X | | | X | |
fn.png FALSE TRUE 1 1 | 4 | X | X | X | X | | |
fn.png FALSE FALSE 1 1| 2 | X | X | | | | |
Next/Prev/FF/RW/Playlist/Config/Iconify/Mixer/Exit/Alt_Skin_Button: filename prelight x y
Volume_Up/Volume_Down/Balance_Left/Balance_Right_Button: filename prelight x y
Option line: | # images | Normal | Pressed | Prelit |
| total | | | Normal |
-----------------------+----------+--------+---------+--------+
fn.png TRUE 1 1 | 3 | X | X | X |
fn.png FALSE 1 1 | 2 | X | X | |
--------------------------
Items (all item images contained vertically)
--------------------------
Stereo/Shuffle/Repeat/Mpegversion/Mpeglayer/Mpegmode/Status/Minus/Total_Item: filename x y
Item: | # images | Image 1 | Image 2 | Image 3 | Image 4 | Image 5 |
| total | | | | | |
-----------------------+----------+---------+---------+---------+---------+---------+
Stereo_Item | 3 | blank | mono | stereo | | |
Shuffle_Item | 2 | off | on | | | |
Repeat_Item | 2 | off | on | | | |
Mpegversion_Item | 3 | blank | ver 1 | ver 2 | | |
Mpeglayer_Item | 4 | blank | layer 1 | layer 2 | layer 3 | |
Mpegmode_Item | 5 | blank | stereo | j-stereo| dual-ch |single-ch|
Status_Item | 3 | stop | pause | play | | |
Minus_Item | 2 | normal |remaining| | | |
Total_Item | 2 | normal | total | live | | |
Load_Item: filename section_count x y
(These are special Animation items, any number of sections can be included)
Option line: | # images | Image 1 | Image 2 | ....... | Last Image |
| total | | | | |
-------------------+----------+---------+---------+---------+------------+
fn.png 8 1 1 | 8 | blank | Frame 1 | F2...F6 | Frame 7 |
fn.png 4 1 1 | 4 | blank | Frame 1 | Frame 2 | Frame 3 |
Position/Volume/Balance_Item: filename sections x y
Option Line: (*) | # images | 1st Image | middle Image | Last Image |
| total | | | |
----------------------------+----------+-----------+--------------+---------------+
Volume_Item fn.png 17 1 1 | 17 | 1 - 0% vol| 9 - 50 % vol | 17 - 100% vol |
Volume_Item fn.png 31 1 1 | 31 | 1 - 0% vol| 16 - 50 % vol| 31 - 100% vol |
Balance_Item fn.png 17 1 1 | 17 | 1 - Left | 9 - middle | 17 - Right |
Balance_Item fn.png 13 1 1 | 13 | 1 - Left | 6 - middle | 13 - Right |
(*)note: The values (17, 31, 17, 13) above are only examples, any number of images
can be specified.
--------------------------
Sliders (all slider images contained horizontally)
--------------------------
Position/Volume/Balance_Slider: filename prelight [verticle reversed] length x y
Option line: | # images | Background | Normal | Pressed | Prelit |
| total | width | | | Normal |
-----------------------------------+----------+-------------+--------+---------+--------+
fn.png TRUE FALSE FALSE 32 1 1 | 4 | 32 pixels | X | X | X |
fn.png FALSE FALSE FALSE 250 1 1 | 3 | 250 pixels | X | X | |
--------------------------
Dials (can be confusing, see detailed description, above)
--------------------------
Position/Volume/Balance_Dial: filename has_press_image has_prelight_image reversed
angle_start angle_end handle_offset_x handle_offset_y center_x center_y
x y w h [clip_filename]
Option line: | # images | Normal | Pressed | Prelit |
| total | | | Normal |
----------------------------------------------------------+----------+--------+---------+--------+
fn.png TRUE TRUE TRUE 0 180 16 16 200 100 140 40 80 80 | 3 | X | X | X |
fn.png FALSE TRUE TRUE 0 180 16 16 200 100 140 40 80 80 | 2 | X | | X |
fn.png FALSE FALSE TRUE 0 180 16 16 200 100 140 40 80 80 | 1 | X | | |
--------------------------
Numbers (all number images contained horizontally)
--------------------------
*_Number: filename [length centered] x y
Option line: | # images | Images in order (left to right) |
| total | |
---------------------+----------+------------------------------------------------+
fn.png 1 1 | 11 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, " "(blank space) |
fn.png 3 FALSE 1 1 | 11 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, " "(blank space) |
--------------------------
Fonts (all font images contained in 3 or 6 rows of 32 columns)
--------------------------
Title/Album/Artist/Genre: filename length [extended] x y
Option line: | # images | Images in order |
| total | |
------------------------+----------+--------------------+
fn.png 16 1 1 | 96 | see grid 1 (below) |
fn.png 16 FALSE 1 1 | 96 | see grid 1 (below) |
fn.png 16 TRUE 1 1 | 192 | see grid 2 (below) |
+------------------------------------+
character grid 1: | |
(standard) | !"#$%&'()*+,-./0123456789:;<=>? |
| @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ |
| `abcdefghijklmnopqrstuvwxyz{|}~ |
| |
+------------------------------------+
+------------------------------------+
character grid 2: | |
(international | !"#$%&'()*+,-./0123456789:;<=>? |
extended) | @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ |
| `abcdefghijklmnopqrstuvwxyz{|}~ |
| XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| XXXXXXX FIXME! TO DO! XXXXXXXXXX |
| XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| |
+------------------------------------+
#################################
|