Illumination v0.9b by Daniel Parnell 12th January 1999
Welcome to the wonderful world of theme based windows!
Illumination allows Win32 (95, 98 and NT 4.0) users to change
their user interface to look like anything they want.
I decided to write this when I saw they Enlightenment X Windows
window manager. I thought to myself "I'd love to work in an
environment like this". Unfortunatly for me I have to use
Win32 at work so Enlightenment wasn't an option for me :(
Illumnination is only at the proof of concept stage at the
moment, however I'm already beginning to make plans for a
full theme system for all window controls (however this is
a little ways off at the moment).
When Illumination is run for the first time there is no
theme selected, so choose the "Configure" item from the Illumination
task bar icon and select a theme layout file. Once this is
done, Illumination will need to be restarted, and then all new
windows to pop up will be drawn using the selected theme.
To stop Illumination simple right click on the icon in the task
bar and choose Exit.
NOTE: BEFORE CLOSING ILLUMINATION MAKE SURE THERE ARE NO OTHER
APPLICATIONS RUNNING AS THEY MAY CRASH
AND ALWAYS REMEMBER THIS IS BETA SOFTWARE, SO I DON'T
GARENTEE IT WONT CRASH CAUSING DATA LOSS
Daniel
daniel@oz.quests.com
**************************************
*** Information about Illumination ***
**************************************
Illumination was written using Delphi 4.0 C/S
The graphics were all stolen from variois other sources (enlightenment themes
and screen shots)
**************************
*** The Exclusion List ***
**************************
The exclusion list is stored in the file EXCLUDE.CFG in the same
directory as Illumination. It is broken up into three sections
[MODULES], [NONESTED], [WINDOWCLASSES] and [NOSIZEFIXUPS].
The [MODULES] and [NONESTED] sections contain module names (program names)
The first means NO windows created by that module will be Illuminated, while
the second means only top level windows will be Illuminated. If an application
is having trouble with Illumination, try it in the [NONESTED] section first,
failing that put it in the [MODULES] section.
The [WINDOWCLASSES] section allows individual type of windows to be excluded.
The [NOSIZEFIXUPS] section also allows the size fixup code to be disabled for
specific window classes.
A tool has been added to allow the module name and window class name of a
window to be determined easily called the "Window Finder". This is accessible
under the Advanced menu on the Illumination popup menu. Moving the cursor over
a window will display the caption, module and window class of the window under
it. This information can then be used in the EXCLUDE.CFG file to force Illumination
to ignore windows of that type in the future.
I would be interested in seeing the exclusion lists people come up with so I
see if Illumination can be made to work with all programs.
************************************
*** HOW DO I MAKE MY OWN THEMES? ***
************************************
Theme files are broken up into several sections
[Images]
[Title Font]
[Inactive Font]
[Menu Font]
[Layout]
[Misc]
[Code]
The [Images] section contains a list of image files to be used with the theme.
Each file is given an internal name and has an optional transparent color
expressed as a hex number (ie ffffff for white).
The images should be placed in the same directory as the layout file.
The font secions are fairly self explanitary so I wont go into them in any
details.
The [Misc] section contains various extra information
There are four values currently defined in this section
WidthFixup, HeightFixup and MenuFixup. The values in these three values
are added to the window width and height to try to overcome some more limitations
in the way windows works.
The most exciting value in this section is AutoExclude. When this value is 1
then any bitmaps in the theme that have a transparent color will be used to
generate the window region.
For Example
[Misc]
AUTOEXCLUDE=1
WidthFixup=88
HeightFixup=64
Now for the [Layout] section. This is where the magic happens ;)
Each entry in this section describes the contents of a single rectangle
in the window and consists of the following items.
The code section is a value from the following list
BORDER
BOTTOM
BOTTOMLEFT
BOTTOMRIGHT
CAPTION
ERROR
GROWBOX
HSCROLL
LEFT
MENU
NOWHERE
REDUCE
RIGHT
SIZE
SYSMENU
TOP
TOPLEFT
TOPRIGHT
TRANSPARENT
VSCROLL
ZOOM
CLOSE
MINIMIZE
MAXIMIZE
NEXT
PREV
HELP
TASKLIST
RESTORE
SAVE
POWER
TITLE
Some of the items will only show up if the window in question has those items
(ie MAXIMIZE items will only be displayed if the window has a maximize button).
If a code is preceeded by a ! character then it will be displayed if the window
doesn't have that type of item (this is useful to display a disabled version
of a maximize button for example).
The code can be followed by another code that is used for visibilty checking
instead of the default style for that code. An example of this is shown below
BOTTOMRIGHT-SIZE BR:-16,-16;BR:-2,-2 SizeBox SizeBox White
This shows the bitmap SizeBox if the window in question has the SIZE style, but
used the BOTTOMRIGHT code.
The following it a little more advanced use
CLIENT-SIZE TL:1,19;BR:-17,-17
!CLIENT-SIZE TL:1,19;BR:-3,-1
This defines two different client areas depening on if the window can be sized
or not.
There are two special codes
CLIENT
EXCLUDE
NOTE: Each layout MUST have a CLIENT area otherwise nothing will be displayed
in the window.
The EXCLUDE code allows rectangular regions to be removed from the window
to create non-rectangular windows. The window region is built up from the
declared window items, however if some of the bitmaps used are transparent
then the transparent areas will need to be excluded from the window.
The rect item describes a rectangular area in the window.
:x,y;:x,y
The valid flags are
T - y coordinate is relative to the top of the window
L - X coordinate is relative to the left of the window
B - y coordinate is relative to the bottom of the window
R - X coordinate is relative to the right of the window
S - stretch any given bitmaps
F - tile bitmap to fit the given rectangle
After the rectangle has been defined there are three optional bitmap names
correspond to the normal, clicked and inactive bitmaps.
The name section is used with the code section to identify which forth words
are to be used with which user interface element
The currently defined methods are
OnIdle
OnCalcRect
OnPaint
to declare a method definition in the code section do the following
[Layout]
# Code Rect Selected Clicked Inactive Name
TITLE STL:1,0;TR:-3,19 None Title
[Code]
: Title::OnCalcRect
WINDOWTEXT TEXTWIDTH 58 + WINDOWSTYLE WS_MAXIMIZE AND IF 17 + THEN @LEFT + !RIGHT ;
The [Code] section is HIGHLY EXPERIMENTAL at the moment, however once it is
finished it will allow themes to be created that don't use any bitmaps at all!
The code in the [Code] section is written in a very small subset of the Forth
programming language (for more info see www.forthinc.com or the comp.lang.forth
newsgroup). I chose forth because it is very small, fast and EASY TO CODE ;)
It uses reverse polish notation (anybody with a HP calculator should be able to
pick it up without any trouble).
The following is the currently defined words
Window style constants
WS_BORDER
WS_BOTTOM
WS_BOTTOMLEFT
WS_BOTTOMRIGHT
WS_CAPTION
WS_ERROR
WS_GROWBOX
WS_HSCROLL
WS_LEFT
WS_MENU
WS_NOWHERE
WS_REDUCE
WS_RIGHT
WS_SIZE
WS_SYSMENU
WS_TOP
WS_TOPLEFT
WS_TOPRIGHT
WS_TRANSPARENT
WS_VSCROLL
WS_ZOOM
WS_CLOSE
WS_MINIMIZE
WS_MAXIMIZE
WS_NEXT
WS_PREV
WS_HELP
WS_TASKLIST
WS_RESTORE
WS_SAVE
WS_POWER
WS_TITLE
WINDOWTEXT ( - title )
pushes the current windows title onto the stack
TEXTWIDTH ( text - width )
pushes the width of the piece of text on the top of the stack onto the stack
TEXTHEIGHT ( text - height )
pushes the height of the piece of text on the top of the stack onto the stack
@TOP ( - top)
gets the top of this rect
!TOP ( top - )
sets to top of this rect
@LEFT ( - left )
gets the left of this rect
!LEFT ( left - )
sets the left of this rect
@BOTTOM ( - bottom )
gets the bottom of this rect
!BOTTOM ( bottom - )
sets the bottom of this rect
@RIGHT ( - right )
gets the right of this rect
!RIGHT ( right - )
sets the right of this rect
RECTTOP ( element - top )
gets the top of the given ui element
RECTLEFT ( element - left )
gets the left of the given ui element
RECTBOTTOM ( element - bottom )
gets the bottom of the given ui element
RECTRIGHT ( element - right )
gets the right of the given element
WINDOWSTYLE ( - style )
gets the windows style
@PENCOLOR ( - color )
gets the pen color
!PENCOLOR ( color - )
sets the pen color
@BRUSHCOLOR ( color - )
gets the pen color
!BRUSHCOLOR ( color - )
sets the pen color
MOVETO ( x y - )
moves the pen to the given position
LINETO ( x y - )
draws a line from the pen's current position to the given position
PUTPIXEL ( x y color - )
sets the pixel at the given position to the given color
GETPIXEL ( x y - color )
gets the pixel color at the given position
RECTANGLE ( x1 y1 x2 y2 - )
draws a rectangle with the given size
FILLRECT ( x1 y1 x2 y2 - )
fills a rectangle with the given size
@RECT ( - x1 y1 x2 y2 )
gets the current rectangle
!RECT ( x1 y1 x2 y2 - )
sets the current rectangle
RECTWIDTH ( - width )
returns the width of the current ui element
RECTHEIGHT ( - height )
returns the height of the current ui element
WINDOWACTIVE ( - flag )
returns non-zero if the current window is active
The following words are the standard Forth words that are defined
:
;
+
-
*
/
DUP
DROP
SWAP
IF
ELSE
THEN
BEEP
DISP
DO
LOOP
I
BEGIN
AGAIN
UNTIL
CREATE
DOES
ALLOT
!
@
2/
2*
>R
R>
IMMEDIATE
HERE
>
<
=
>=
<=
<>
1+
1-
AND
OR
XOR
NOT
RAND
CONSTANT
VARIABLE
CHANGE LOG:
January 12, 1999
- Fixed a stack of display bugs mainly to do with the auto-exclusion code
It now support non-stretched and tiled bitmaps properly
- Added code to allow the theme to change instantly when a new theme is selected
- Added the NoSizeFixups section to the exclude list
January 1, 1999
- Fixed problems with TAB characters in theme files
- Fixed redraw problems when resizing windows (well they are fixed on my machine anyway)
- Various other small bug fixes
December 12, 1998
- Various bug fixes
- Fixed problem some people were having where a 217 error would stop Illumination from starting
November 28, 1998
- More bug fixes
- Added AutoExclusion
November 16, 1998
- More menu fixes (system menu)
- Added bitmap tiling
November 14, 1998
- Added Enabled menu item
- Added Exclusion list
- Added Window Finder
November 7, 1998
- Bug fixes
- Added the forth
October 25, 1998
- Wrote custom menu handling code to get rid of screen glitches
- Added code to allow code to be given another codes style
- Created the MacOS theme
               (
geocities.com/siliconvalley/park)                   (
geocities.com/siliconvalley)