wmcdplay - A cd player designed for WindowMaker
Copyright (C) 1998  Sam Hawker <shawkie@geocities.com>
This software comes with ABSOLUTELY NO WARRANTY
This software is free software, and you are welcome to redistribute it
under certain conditions
See the README file for a more complete notice.


ARTWORK
=======

The artwork mechanism allows you to customise the appearance (and more) of
wmcdplay at run-time, by loading an artwork file with the "-f artwork_file"
command line argument - yes, THIS IS A CHANGE!!!!! IT USED TO BE "-a"
                             ----------------------------------------

This file trys to explain how to create artwork files. Please feel free to send
me comments or improved versions.


BASICS
======

wmcdplay can be in any one of 6 states:
   Data     0
   Stopped  1
   Playing  2
   Paused   3
   NoCD     4
   TrayOpen 5

wmcdplay buttons can perform any of 10 actions, and the action can
depend on the current state of wmcdplay:
   NOTHING 0
   Stop    1
   Play    2
   Pause   3
   Resume  4
   Prev    5
   Next    6
   Rewd    7
   FFwd    8
   Eject   9
   Close   10


PIXMAPS
=======

The following symbolic color names may be used in any pixmaps:
   led_color_high
   led_color_med
   led_color_low
   color_back
and should be used appropriately to ensure that the led and background
colors can be set at runtime with the "-l led_color" and "-back_color"
command line arguments

led.xpm
-------
   This pixmap is used by wmcdplay to draw the digits of the time and
   track displays
   It represents the string of characters: "00112233445566778899  DDAATTNNOOCC--PPEE:;_"
   "00" means the character "0" but states that it is double width (eg 7+1 pixels wide)
   ":" means the character ":" which is only single width (eg 3+1 pixels wide)
   ";" means an unlit ":" single width character
   "_" means a single width "-" character
   The digit size used does not matter, but ensure that 1 pixel spaces are left between
   digits and that (double width + 1 space) = 2 * (single width + 1 space)
   eg.                            ( 7 + 1 ) = 2 * ( 3 + 1 )
   Transparency is _NOT_ interpreted
   This file must begin with these 2 lines (character perfect):

/* XPM */
static const char * led_xpm[] = {

ledsym.xpm
----------
   This pixmap is used by wmcdplay to draw the symbols illustrating the current status
   It should contain symbols for the following (in sequence):
      Data, Stopped, Playing, Paused, NoCD, TrayOpen
   The symbol size used does not matter, but ensure that 1 pixel spaces are left between
   symbols
   Transparency is _NOT_ interpreted
   This file must begin with these 2 lines (character perfect):

/* XPM */
static const char * ledsym_xpm[] = {

ledtsel.xpm
-----------
   This pixmap is used by wmcdplay to draw the symbols illustrating the current track
   selection mode
   It should contain symbols for the following (in sequence):
      None, Next, Repeat, RepeatCD, Random
   The symbol size used does not matter, but ensure that 1 pixel spaces are left between
   symbols
   Transparency is _NOT_ interpreted
   This file must begin with these 2 lines (character perfect):

/* XPM */
static const char * ledtsel_xpm[] = {

symbols.xpm
-----------
   This pixmap contains the symbols to be drawn onto the buttons
   It should contain symbols for the following (in sequence):
      NOTHING, Stop, Play, Pause, Resume, Prev, Next, Rewd, FFwd, Eject, Close
   The symbol size used does not matter, but ensure that 1 pixel spaces are left between
   symbols
   Transparency _IS_ interpreted
   This file must begin with these 2 lines (character perfect):

/* XPM */
static const char * symbols_xpm[] = {
   
cdplayer.xpm
------------
   This pixmap provides the basic background for wmcdplay
   It _must_ be 64x64 pixels
   It should provide solid areas (the size and color of which will depend on the
   led.xpm, ledsym.xpm and ledtsel.xpm files used), for any required displays to
   be drawn onto
   These areas are usually bordered in some way
   It can also be used to provide solid areas which can form buttons
   (Although the button symbols can themselves form the buttons)
   Transparency _IS_ interpreted
   This file must begin with these 2 lines (character perfect):

/* XPM */
static const char * cdplayer_xpm[] = {


THE DATA FILE - artwork.dat
===========================

So far, all we have in our artwork file is a set of pixmaps. But we also
need a data file (artwork.dat), to answer the following questions:

   How many buttons are there?
   Where exactly is each button?
   What does each button do?
   Should do-NOTHING buttons be hidden?
   Which led displays are there?
   Where are they?

The formats of entries in this file must follow the examples given quite closely.
Basically, anything before an '=' must appear exactly as shown and at the
beginning of the line (not indented as here). Also, all entries must be on a single
line unless shown otherwise here.
Comments and blank lines are, however, perfectly legal (between entries).

How many buttons?
-----------------
   eg.

   int art_nbtns=5;

Where exactly is each button?
-----------------------------
   Buttons must be shaped as convex polygons, so you give the position
   (and shape) of each as a list of coordinates of its verticies.
   The polygon defined by these points is used to interpret mouse clicks,
   and also (optionally) to hide do-NOTHING buttons.

   Also, tell wmcdplay where on the button to put the symbol. This is in the
   form of the co-ordinates of the top-left corner of the symbol, relative
   to the top-left corner of wmcdplay.
   A single entry, defines all buttons.

   eg.

   int art_btns[]={ 8  , 38 , 5  , 5  , 27 , 7  , 27 , 20 , 40 , 7  , 54 , 5  , 54 ,
                    19 , 26 , 5  , 6  , 22 , 28 , 22 , 28 , 39 , 22 , 39 , 6  , 24 ,
                    19 , 50 , 5  , 6  , 57 , 21 , 42 , 28 , 42 , 28 , 59 , 6  , 59 ,
                    35 , 26 , 5  , 31 , 22 , 52 , 22 , 52 , 24 , 37 , 39 , 31 , 39 ,
                    51 , 31 , 5  , 42 , 36 , 56 , 22 , 59 , 22 , 59 , 39 , 42 , 39 };

   Each line defines 1 button:
   symbol_x , symbol_y , num_vertices , x1 , y1 , x2 , y2 , x3 , y3 , x4 , y4 , x5 , y5

   Different buttons may have different numbers of vertices, so different numbers of fields.
   The button must be a _convex_ polygon, and the vertices must be given in sequence, going
   _clockwise_ around the button.

What does each button do?
-------------------------
   This is answered with a set of integer actions (see list given earlier) for each button,
   for each state (see list given earlier):

   wmcdplay state:     0   1   2   3   4   5

                       D   S   P   P   N   T
                       A   T   L   A   O   R
                       T   O   A   U       A
                       A   P   Y   S   C   Y
                           P   I   E   D    
                       T   E   N   D       O
                       R   D   G           P
                       K                   E
                                           N

   eg.

   int art_actions[]={ 0 , 2 , 3 , 4 , 0 , 0  ,
                       5 , 5 , 5 , 0 , 0 , 0  ,
                       6 , 6 , 6 , 0 , 0 , 0  ,
                       0 , 0 , 1 , 1 , 0 , 0  ,
                       9 , 9 , 9 , 9 , 9 , 10 };

Should do-NOTHING buttons be hidden?
------------------------------------
   This can be set so that whenever a button has NOTHING assigned to it, it is hidden
   (using the region defined by style_btns). Otherwise it is left and the symbol
   representing NOTHING is drawn onto it.

   eg.

   bool art_hidebtns=false;

Which led displays are there?
-----------------------------

   eg.

   bool style_leds[4]={ true, true, false, false};

   That's basically:
   show_time=true , show_track=true , show_status=false , show_trksel=false

Where are they?
---------------
   eg.

   int art_ledpos[3][2]={ 8 , 7 , 37 , 45 , 0 , 0 , 0 , 0 };

   That's basically:
   time_x=8 , time_y=7 , track_x=37 , track_y=45 , status_x=0 , status_y=0 , trksel_x=0 , trksel_y=0

   These are the co-ordinates of the top-left corner of each display
   relative to the top-left corner of wmcdplay.
   You should enter valid integers even for displays which you have
   chosen not to use.


ARTWORK FILES
=============

All the above files should be placed in an appropriately named directory and the
"makeart" script (installed by default in /usr/local/share/wmcdplay) should be
executed in the parent directory.  You should end up with a new .art file.  You
should be able to load wmcdplay with this artwork using the "-f artwork_file"
command line argument.
You should also be able to make your new artwork the compile-time default by
using the "--with-art" option to the "configure" script.
