The information contained within this document is considered to be the property of Stardock Systems, Inc. This information is provided 'as-is' and only for use by skin designers / authors to produce UIS skins for use with WindowBlinds. All other uses of this information are strictly prohibited. Although the format is very powerful and flexible, you should also find it quite easy to use as most features are optional & WindowBlinds will use it's own defaults if you do not specify any section.
Important Note to Personality Authors
When making a personality please make the .zip filename the same as the .uis filename. WindowBlinds will create a folder named the same as the zip file (minus the .zip extension)Also you should not use spaces or funny symbols in the name of the zip. It is useful if you could name the zip (and therefore the .uis file) something without the version of the personality. Then if you make a change to the personality, it can be updated in the listings easier.
[TitlebarSkin]
Firstly ALL .uis files must contain the personality name & author. Without these, the user will not be able to select it as it will not show in the list of installed personalities.SkinName = World of Yellow
SkinAuthor = Neil BanfieldThe following are not used in the current public releases but later versions may do, so you may as well include them
AuthorsURL = [Put your url here]
AuthorEmail = [Put your e-mail address here]
SpecialNotes = [Any special notes regarding this personality go here][Personality]
This is where the main details of the personality are specified. This section lists the bitmaps, the sizing information and the number of buttons implementedIf your personality does not use transparency in the titlebar buttons then you should put the following line in the UIS file as it helps WindowBlinds and ensures greater performance when using this personality.
UsesTran = 0
buttonCount = [Number of buttons we have defined in this personality]
We now specify details about the titlebar text
TextAlignment = [ 0 - Left, 1 - Centre, 2 - Right]
TextShift = [Amount in pixels to shift the titlebar text by from the left] (A)
TextShiftVert = [Amount in pixels to shift the titlebar text down by] (B)
TextRightClip = [How far from the right edge should clipping of the text start] (C)You should ensure you have set the TextShift & TextShiftVert settings correctly to prevent titlebar text overlapping any buttons or titlebar plugins you have added.
If you want to make the titlebar text appear on the bottom border, rather than the top border, then the next line is for you.
TextOnBottom = [0 - Normal text behaviour, 1 - Place the text on the bottom on the window]
WindowBlinds also has the ability to add strings to the front and back of the titlebar textFrontString = "*** " [String to add]
EndString = " ***" [String to add]All UIS 2 based personalities include lines which relate to menu bars. You should remember that the bitmap name is relative to the WindowBlinds install directory. menubar = yellow\menu.bmp
From version 0.86 onwards, you can specify how many pixels from the left & how many pixels from the right end of the menu bar should not be stretched (horizontally)
TileLeftMenu = {Amount of pixels}
TileRightMenu = {Amount of pixels}Sometimes you want to make the menus start a set number of pixels from the left of the window border.
MenuLeftTile = Specifies the amount to shift the menu text by again in pixels
When a menu item is selected, the item has a rectangle drawn behind it to indicate the selection. The next lines define the colour of the rectangle in red, green & blue
MenuR = 142
MenuG = 109
MenuB = 146There are also some other colours which are added to the UIS file too. These can be chosen by the user or they may choose to use their own system colours instead. You MUST include all of the 3 colours definitions described below or the colours are ignored
ActiveTextR =
ActiveTextG =
ActiveTextB =InactiveTextR =
InactiveTextG =
InactiveTextB =MenuTextR =
MenuTextG =
MenuTextB =Now we have the bitmaps for the window borders and titlebar. Again they are relative to the WindowBlinds install directory. Top = yellow\top.bmp
Left = yellow\left6.bmp
Right = yellow\right6.bmp
Bottom = yellow\bot5.bmpThese bitmaps use RGB(255,0,255) as a transparent area. Currently the transparency is only obtained from the active titlebar. Each bitmap consists of 2 images. The active & inactive images are placed in the bitmap together. For vertical sides, the active is on the left & the inactive on the right. For horizontal images, the active is on the top and the inactive is on the bottom
Each border has areas which are not tiled and areas which are tiled or stretched In the above, A & C are non tiled and B is an area which is either tiled or stretchedFor each we specify the size of A & the size of C
TopTopHeight = 45 (Size in pixels of A)
TopBotHeight = 45 (Size in pixels of C)
This is repeated for the other 3 sides
LeftTopHeight = 6
LeftBotHeight = 10RightTopHeight = 6
RightBotHeight = 10BottomTopHeight = 6
BottomBotHeight = 6Notes: The value of LeftBotHeight MUST be >= height of the bottom edge
We now specify is the area B should be tiled or stretched
TopStretch = 0 (0 - Tile, 1 - Stretch)
LeftStretch = 0 (0 - Tile, 1 - Stretch)
RightStretch = 0 (0 - Tile, 1 - Stretch)
BottomStretch = 0 (0 - Tile, 1 - Stretch)WindowBlinds version 0.86 introduces the long awaited animation facility. The following settings are for this option. You MUST do all the steps to get animation to work (This includes adding anim.dll to the personality) Animation can only be used for the active titlebar. It will not work for the inactive titlebar.
Firstly you need to add the extra frames in the border images. Currently each border MUST contain the same number of frames.
The you need to specify the time between frames. This is specified in ms. So 1000 = 1 sec
AniRate = 0
Then you have to tell WindowBlinds how many frame there are in the image. This includes the inactive state. So a normal non animated titlebar would contain 2 frames.
These frames are ordered in the following way (assuming a horizontal border and N frames for the animation)
Active 1So the inactive image is the last in the file. For vertical edges, the inactive frame is the right-most image.
Active 2
Active 3
....
Active N
InactiveIf you do not use animation then please set these values to 2. If you want to be very memory efficient, you can now set any edge which has the same inactive & active image to have only one image and only include one in the image file. This trick cannot be used for personalities which use animated titlebars / borders.
TopFrame = 2
LeftFrame = 2
RightFrame = 2
BottomFrame = 2After doing the above steps there is one more thing to do.
You must create a button of type dll and assign the dll name to anim.dll (Its in the WB dir so no need to add the directory name or include the file in your .zip file). The example below can be used. The number of the button does not matter, but it must be included in the button count.
[Button8]New for 0.40 is the ability to assign a bitmap to place behind the text. This is split into 2 (active = top half, inactive = bottom half). In version 0.63 and later, this feature works for left, centred & right aligned text.
XCoord = 0
YCoord = 0
Align = 0
; Button of type DLL
Action = -3
Width = 0
Height = 0
DllName = anim.dlltextBack = MacPC\macback.bmp
Also new in version 0.63 is the ability to set the alpha value for the text background image. This is a value from 0 - 255 where 255 = totally visible and 0 = invisible.
ActiveAlpha =
InactiveAlpha =
See the notes for alpha in the titlebar buttons section to see limitations of this feature.
We can tell WindowBlinds how much should be tiled at each end too. These bits will overhang the caption text. So to make the text background start 20 pixels to the left of the text and finish 30 pixels to the right, you would make TXTBackleft = 20 and TXTBackRight = 30.
TXTBackleft = 4
TXTBackRight = 4New for version 0.41 is the ability to specify a background wallpaper for the personality. The user is asked if they wish to use it when they choose the personality.
Wallpaper = Yellow\bitmap.bmp
Remember the paths are as usual relative to the WindowBlinds directory.
We also have the ability to run a command when the personality is selected. WindowBlinds will ask the user if they wish to do this action specified.
Exec = start readme.txt
You can specify the run style (3 = normal, 7 = hidden (use if you use start.exe to start something))
RunStyle = {0,1,2,3,4,5,6,7}
From 0.45 onwards you can specify some bitmaps to use for bitmap backgrounds etc
ExplorerBmp =
DialogBmp =
MDIBmp =
For 0.85 and later, you can specify a bitmap to use for the menu borders. Only the 3 pixel wide border around the edge of the bitmap is used.
menuBorders =
From 0.86 onwards, the following lines specify the amount of each border which should be off the screen when the window is maximized. This information is only used when the Show Window borders when maximized option is disabled.
MaxBorderCutLeft =
MaxBorderCutTop =
MaxBorderCutRight =
MaxBorderCutBottom =
Now we get onto the titlebar buttons The images for a button are all stored one file. The states are
But we also support different images for when the titlebar is inactive (like in the picture above), so the following is defined to indicate to WindowBlinds if we are using this
- Non Pressed
- Pressed
- Disabled
TripleImages = [1 - Use 6 images in one, 0 - Use 3 images]
We can assign sound effects to buttons so to enable this use the following line
SoundEnabled = [1 - Sound effects on, 0 - Sound effects off]
Lastly as we can assign the rollup function to a button we have a line which lets us specify the minimum height to rollup to. Without this line it will rollup to the height of the titlebar.
RollupSize = [In Pixels]
We can also have an action assigned to the right click on the titlebar. This code is as Action in the next section
RightClickAction = See Action table
We can also now assign an action to double clicking the titlebar. The default is to maximize the window
DoubleClickAction = See Action table
As well as the fixed borders, WindowBlinds supports button objects. These can be placed anywhere on the borders. They can be pressable, like normal buttons, or just act as image layers. This capability is very powerful and you may wish to experiment with it to get the best from it.
[Button#]
# = Number of the button. So [Button4] is the 5th button. We start from 0
Align = See table below
Align ID Meaning 0 Align button relative to top left of window 1 Align button relative to the top right of window 2 Align button relative to bottom left of window 3 Align button relative to bottom right of window 4 Align button in the middle of the top edge* 5 Align button in the middle of the bottom edge* 6 Align button in the middle of the left edge* 7 Align button in the middle of the right edge* 8 Align to left of caption text*
* These styles do not permit the button to be pressed in
XCoord = No of pixels to shift left edge of button from the alignment edge (Left or Right)
YCoord = No of pixels to shift top edge of button from the alignment edge (Top or Bottom)By default, WindowBlinds does not allow buttons to alter the shape of a window. However this default action can be changed by using the following setting. If you do not use this option, please do NOT include this line. The default value is -1.
By combining this option with the Visibility setting, you can change the shape of a window depending on it if has a minimize button, is sizable etc.
CombineOp = {-1 =As Normal, 0 = Cut away from the border, 2 = Add to border}
This option needs some explaining. When = 0, the RGB(255,0,255) section is used to cut into the shape. If the RGB(255,0,255) section is over an area which is already transparent then it does not affect it.
When = 2, the area which is not RGB(255,0,255) is added to the window border (i.e. the button can extend into an area which was originally transparent.
There are two limits. You CANNOT use Visibility = 1 or 2 for CombineOp buttons. This will not work. Also you cannot use the CombineOp line for certain Align settings.
Action = See table below
Action ID Action Performed 0 Close this window 1 Maximize this window 2 Minimize this window 3 Help button 4 Rollup / Unroll this window 5 Execute this command (see Command line next) 6 Force this Window to be always on top 7 Attach this window to the desktop (Always on bottom) 8 Litestep Only - Keep this window visible always 9 Prevent this window from being sized or moved 10 Execute the screensaver 11 System icon (I.e. The icon used for this window) 12 System Menu (Does not show the system icon, but works just like it with the menus) 13 Size from the top 14 Size from the bottom 15 Size from the left 16 Size from the right 17 Size from top left 18 Size from the top right 19 Size from the bottom left 20 Size from the bottom right 21 Send to back of z-order -1 Do nothing. For when you just want to show an image. This does not intercept mouse messages -2 This is like the above but it intercepts mouse messages, so clicking it stops you moving the window -3 New in 0.77
This tells WindowBlinds that this is a dll button. See later in this sectionNew in 0.85 is the ability to assign a different command to a button if shift or control is pressed. The following 2 lines take the same action codes as the Action line.
ShiftAction =
CtrlAction =
Command = [Filename to execute - for buttons with action = 5]
This is the bitmap which contains the button images. Again RGB(255,0,255) is a transparent area.
ButtonImage = yellow\min.bmp
We can also specify the visibility for the button. Using the codes below you can make a button appear only when certain conditions are true.
Visibility = See table below (Also see text following it)
Visibility ID Whats it mean 0 Always show this button 1 Show only when the window is active 2 Show only when the window is inactive 3 Show only when the window is maximized 4 Show only when the window is NOT maximized 5 Show only when window has been rolled up 6 Show only when window is NOT rolled up 7 Show only if this window has 'Always on top' set 8 Show only if window is NOT set as 'Always on top' 9 Show only if attached to desktop 10 Show only if NOT attached to desktop 11 Show only if 'Keep this window visible always' 12 Show if NOT 'Keep this window visible always' 13 Show only if window has WS_EX_CONTEXTHELP 14 Show only if window does NOT have help button 15 Show when window does NOT have either maximize or minimize button and is NOT maximized 16 Hides button if a maximize button exists or a minimize button exists 17 Show when window does NOT have either minimize or maximize button 18 Show if window is a MDI child 19 Show only if window is NOT a MDI child 20 Show if the window has a maximize button 21 Show only if the window does NOT have a maximize button 22 Show if the window has a minimize button 23 Show only if the window does NOT have a minimize button 24 Show if the window is sizable 25 Show if the window is NOT sizable 26 Show only if either a maximize of minimize button exists 27 Show only if the window has an icon 28 Show only if the window does NOT have an icon WindowBlinds 0.90 and later allow you to define upto 10 visibility codes per button. These are combined using the AND operator.
Visibility1 = Value from above table.
Visibility2
Visibility3
Visibility4
Visibility5
Visibility6
Visibility7
Visibility8
Visibility9All of the visibility options are optional. You only need to include them if you need to combine visibility options. The default value is always show . Like Code 23 & Code 1. This would result in a button which is only shown when the window is active & it does not have a minimize button. To do this you would add the following lines :-
Visibility = 23
Visibility1 = 1New for 0.63 is the ability to set an alpha value. WindowBlinds uses this to blend the image with whatever is below it. WindowBlinds makes use of its own advanced image blender which supports many per pixel effects. The alpha blender supports the RGB(255,0,255) transparency.
The larger the area of alpha blending, the slower it will be to display. However for normal sized buttons there is little performance hit that can be noticed. The alpha blending does not require any additional support files.
You can overlap blending and they will be blended in order. The lower numbered buttons are drawn before the higher numbered ones. So button 0 is drawn before button 5.
This option has no effect on button style 11 (sysmenu)
Alpha = {0 - 255}, where 255 is normal and 0 is invisible. All values between are different amounts to blend.
You can also specify the operation to use when combining the image
AlphaOp = See Table Below
Operation Code What it does 0 Simple Alpha Blend. This uses the Alpha value to work out the blending 1 As above but the image is flipped 3 Darken. This uses the darkest pixel from the images 4 Lighten. This uses the lightest pixel from the images 5 Multiply. This multiplies the images 6 Screen. 7 Difference. The result is the difference between the 2 images. 8 Simple Transparency 9 Blur. Alpha = the amount. higher value = greater blur. 10 Graduated Alpha Blend 11 Slight blend horizontally These operations are just like the ones you would find in a graphics package. The performance is not bad on a typical system and it may be that in the future these operations are made faster. If you would like any other per-pixel effects then please e-mail Neil@stardock.com with the algorithm for the operation and I will try to add it to a future release.
Most of the above operations would be used by a titlebar dll plugin as it is able to modify it's own look at runtime and so cannot have the operations carried out in a image package.
New for 0.77
0.77 introduces the dll plugin interface for buttons.
Basically this allows a programmer to design their own items to be added to titlebars. These could be clocks, animated buttons, almost anything!
The latest SDK's can be downloaded from www.windowblinds.net. The C SDK is included in this distribution and is called UIS2Plug.zip. Look for it in your WindowBlinds directory.
DllName = the dll to use. Again relative to the WindowBlinds directory
The following have been added to help you size your new items
Width = Width in pixels of the item
Height = Height in pixels of the itemThese values override the dimensions of the bitmap specified in ButtonImage. It is advised not to have a ButtonImage line as it will just waste memory. Use the Width & Height lines instead.
crzywin.zip contains a demo personality which uses the dll interface. Plugin.dll is a clock. Crzywin.uis contains a section called clock which holds the parameters that can be used to configure the clock module.
Please note that the crzywin personality (called 'Tech Demo for Win98') makes extensive use of alpha blending, and the clock module is running in the fade mode. So it will fade in & out (using more CPU than in really needs)
crzywin.zip is not included in the WindowBlinds distribution due to size limitations. It is included in the titlebar plugin sdk on www.windowblinds.net
Now for sound effects. You currently cannot assign a sound to the Close button. This is due to that option causing sound drivers to hang or crash.
InSound = [Sound to play when a button is pressed in]
OutSound = [Sound to play when a button is released]
WindowBlinds 0.39g and later supports bitmaps to replace the standard buttons and checkboxes. 0.45 introduces bitmaps for radio buttons too. [Buttons]
This is the checkbox bitmaps file.
CheckButton =
This is the radio buttons bitmaps file. If this is not specified then the checkbutton bitmap use used instead
RadioButton =
This is the button bitmaps
Bitmap =
And the edge sizes for the buttons. These edges are not stretched.
TopHeight = [Height of the top border]
BottomHeight = [Height of bottom border]
LeftWidth = [Width of the left border]
RightWidth = [Width of the right border]- Standard buttons
Button states in bitmaps are
1) Normal
2) Pressed
3) Disabled
4) Focus
5) Default
- Check box buttons
Checkbox states in bitmaps
1) Normal
2) Selected
3) Greyed non selected
4) Greyed selectedWindowBlinds 0.50 introduces the capability to assign bitmaps to the taskbar. Due to a bug in the public release of 0.50 this option did not work as intended. This now works properly. However the bitmap MUST be called TASK.BMP, but it can be in your directory. So TaskImg = abc\fred.bmp will not work for a personality called abc, but TaskImg = abc\task.bmp will.
[TaskBar]
TaskImg = image file (again relative to the WB directory)
The .UIS file format is ©1998-9 Neil Banfield & Stardock Systems, Inc