e16

This book is to help theme designers get familiar with the syntax and capabilities of e16.

I have just begun writing this book. Content will be added gradually as time permits.

Structure

The Importance of structure and standardization

Structure is a good thing. Two benefits are predictability and control. It's even better when you standardize on the best way of doing something. Then you get efficiency and scalability.

The early days of enlightenment saw a wide degree of them layouts. This must have been problematic at best for theme designers to learn from and make changes to as well as application maintainers to code for. I'm sure that's why rasterman documented an "imposed" standard and included it as a README in all the themes available at the time.

While this was a good step in the right direction, I found that standard to be a bit mundane to cope with on a large scale (ie. when doing search and replacing, adding syntax, etc. on all themes at once). So from my personal experience in working with e16 themes, I've come up with a slightly more elegant layout.

Themes from this site should follow this structure.


Walking through a theme

Not every component of e16 is necessarily required (for example if your theme doesn't make use of slideouts then you won't need the slideouts.cfg or buttons.cfg base config file) but for documentation purposes, I'll cover all the files and directories.

NAME TYPE DESCRIPTION
ABOUT directory Used to produce a theme description by edox
Required files: MAIN
artwork directory Contains images used by the theme (including mouse cursors)
May or may not contain subdirectories for categorization
audio directory Contains sound bits used by the theme
borders directory Contains border configuration files
Files that belong in here: default.cfg, borderless.cfg, pager.cfg, dialog.cfg, shaped.cfg, transient.cfg, etc.. (any border that you'd like to define).
These files are included by the borders.cfg base config file
imageclasses directory Contains imageclass configuration files
Files that belong in here: borders.cfg, coords.cfg, dialogs.cfg, dock.cfg, dragbar.cfg, focuslist.cfg, iconbox.cfg, menustyles.cfg, pager.cfg, tooltips.cfg
These files are included by the imageclasses.cfg base config file
ttfonts directory Contains any custom TrueType fonts used in the theme
actionclasses.cfg base config file Defines window manager actions
Ties buttons/mouse events to actions such as moving, minimizing and closing windows. Also defines the popup/tooltip "help" text.
borders.cfg base config file Defines all borders available for the theme
This typically just includes files located in the borders directory
buttons.cfg base config file Defines buttons that are used for slideouts
cursors.cfg base config file Cursors (mouse pointer) definition file
desktops.cfg base config file Desktop backgrounds definition file
fonts.theme.cfg base config file Defines the font(s) to be used when a user has elected to use the themes's fonts.
fonts.cfg base config file Symbolic link pointing to fonts.theme.cfg.
Needed only for backwards compatibility with older e16 releases. Originally, this was the only font-alias file that e16 looked for.
fonts.xft.cfg base config file If present, overrides system XFT configuration
($EROOT/config/fonts.xfg.cfg)
fonts.pango.cfg base config file If present, overrides system Pango configuration
($EROOT/config/font.pango.cfg)
imageclasses.cfg base config file Defines *almost* all imagery used in the theme
Should just include the files located in the imageclasses directory
init.cfg base config file Initialization file
menustyles.cfg base config file Defines images and text options used for enlightenments menus
slideouts.cfg base config file Defines a slideout panel of buttons
sound.cfg base config file Sound definition file
textclasses.cfg base config file Defines text properties such as direction and color.
tooltips.cfg base config file Defines images and positioning of enlightenment help popups
windowmatches.cfg base config file Configures certain borders to be used with certain window types

Definitions - Keywords and Macro's

What are they?

The syntax of e16's configuration files are primarily nothing but keywords and macros. Otherwise you would be looking at a lot of numbers without much insight as to what's going on.

A keyword represents the numerical instructions e16 uses to operate and a macro groups keywords together. A macro can also be similar to a function, in that you can pass in parameters.

The file that defines these keywords and macros is located at [INSTALL_BASE]/share/e16/config/definitions where [INSTALL_BASE] is primarily /usr but may vary depending on your installation or distribution.

You'll be learning many of them throughout this howto but if you'd like to see what they all are, go crack open that file.


How they get instantiated

The first line in any e16 base configuration file needs to include the definitions file like this:

#include <definitions>

Files that are included by a base configuration file do not need to include the definitions again.

Just about every keyword and macro you will see in a theme's configuration, comes from this file. There are a few exceptions in which some themes define their own macros, however, if it's worth being defined then it should be in this file for all themes to take advantage of and standardize on.

The first definition in all base config files

The second line in any base config file should be:

__E_CFG_VERSION X

Where X is an integer (currently either 0 [zero] or 1 [one]) that defines which version of configuration data e16 is reading from the file.

(need to find exact version that "__E_CFG_VERSION 1" is valid in)

Actionclasses

What are they?

As the name suggests, actionclasses are used when clicking on borders and buttons to initiate some type of action, such as moving or maximizing a window. They are primarily used within border configurations.


A bit of history

Historically, enlightenment relied upon the actionclasses.cfg file provided in a theme. Unfortunately this led to dramatic differences in mouse button and keyboard controls between themes. A user switching from one theme to the next would need to retrain their fingers based on theme design choices rather than the consistency of window manager settings.

Eventually enlightenment added a default actionclasses.cfg file (currently located in [INSTALL_BASE]/share/e16/config/actionclasses.cfg). It is used unless one exists within a theme.


Base actionclasses

The following is a table of the default actionclass names and the operations they preform.

NAME ACTIVATOR DESCRIPTION
ACTION_AUTOSHADE Cursor movement Automatically shade window when mouse cursor enters and exits
ACTION_BUTTON_DRAG Button 1,2,3 Move desktop buttons
ACTION_GOTO_DESK_NEXT Button 1,2,3 Go to the next desktop
ACTION_GOTO_DESK_PREV Button 1,2,3 Go to the previous desktop
ACTION_ICONIFY Button 1
Button 3
Iconify (or minimize) window
Show the window operations menu
ACTION_KILL Button 1
Button 3
Close window
Forcibly destroy window
ACTION_LOWER Button 1,2,3 Lower window (push behind other windows)
ACTION_MAX Button 1
Button 2
Button 3
Toggle between maximum screen size and normal size
Toggle between maximum screen width and normal width
Toggle between maximum screen height and normal height
ACTION_MAXH Button 1,2,3 Toggle between maximum screen height and normal height
ACTION_MAXW Button 1,2,3 Toggle between maximum screen width and normal width
ACTION_MENU Button 1,2,3 Show window options menu
ACTION_MOVE Button 1
Button 2
Button 3
Button 4 (mousewheel up)
Button 5 (mousewheel down)
SHIFT Button 1
CTRL Button 1
CTRL-SHIFT Button 1
SHIFT Button 2
Move this window
Shade/Unshade this window
Show the Window Options menu
Shade window
Unshade window
Start a group
Add to current group
Break window's group
Show/Hide group borders
ACTION_RAISE Button 1,2,3 Raise window (place in front of other windows)
ACTION_RESIZE Button 1
Button 3
Resize window
Move window
ACTION_RESIZE_H Button 1
Button 3
Resize window horizontally
Move window
ACTION_RESIZE_V Button 1
Button 3
Resize window vertically
Move window
ACTION_SEND_NEXT Button 1,2,3 Send to next desktop
ACTION_SEND_PREV Button 1,2,3 Send to previous desktop
ACTION_SHADE Button 1,2,3 Shade/unshade window
ACTION_SNAPSHOT Button 1,2,3 Remember all window/border settings
ACTION_STICK Button 1,2,3 Toggle the Omnipresent (visible on all Desktops) state
ACTION_WINDOW_SLIDEOUT Button 1,2,3 Show more buttons

The best way to add custom actionclasses

If your theme has an actionclass.cfg base configuration file, then by default it overrides the system one and you would need to redefine all the default actionclasses over again. If you did this then your theme would not inherit any changes made to the system actionclasses.cfg file that may occur in the future.

To be able to extend the system actionclasses you will need to use the include_next directive in your themes actionclasses.cfg file like this:

#include_next "actionclasses.cfg"

This will include the system actionclasses.cfg file into your themes's actionclasses.cfg file. Then you'll just need to create any custom actionclasses.

Imageclasses

In order to cover imageclasses best it will be covered in two parts. The first part will discuss the syntax and options. The second part will show how e16 uses them.

Imageclass Syntax

The basics

Let's start by covering just the required syntax for an imageclass.

__ICLASS __BGN
  __NAME IMAGE-1
  __NORMAL "artwork/image-1.png"
__END

Line 1 begins the imageclass
Line 2 gives it a name
Line 3 identifies the image to be used and in which state (explained more below)
Line 4 ends the imageclass

Each of those words beginning with two underscores is actually a keyword (remember those things we talked about back in the definitions part of the howto?). As you can see some keywords do not require arguments and others do.


Applying the basics

Consider the following "my-image.png".

Now lets setup an e16 imageclass with that image to be used in the title bar of a border.

__ICLASS __BGN
  __NAME IMAGE-1
  __NORMAL "artwork/my-image.png"
__END

Hmph. So much for basics. See how the scaling process stretched out the beveled edge.


Imageclass properties

In order to get the desired affect we need to apply some imageclass properties. Below is a list of what's available.

__EDGE_SCALING
__PADDING

__FILLRULE __SCALE
__FILLRULE __STRETCH
__FILLRULE __TILE
__FILLRULE __TILE_H
__FILLRULE __TILE_V
__FILLRULE __INTEGER_TILE_H
__FILLRULE __INTEGER_TILE_V
__FILLRULE __INTEGER_TILE

__BEVEL __BEVEL_AMIGA
__BEVEL __BEVEL_MOTIF
__BEVEL __BEVEL_NEXT
__BEVEL __BEVEL_DOUBLE
__BEVEL __BEVEL_WIDEDOUBLE
__BEVEL __BEVEL_THINPOINT
__BEVEL __BEVEL_THICKPOINT

__ROTATE __ROTATE_90
__ROTATE __ROTATE_180
__ROTATE __ROTATE_270

__FLIP __FLIP_HORIZONTAL
__FLIP __FLIP_90
__FLIP __FLIP_VERTICAL
__FLIP __FLIP_270

In order to fix our border we need to use __EDGE_SCALING and __PADDING.

Edge scaling identifies pixels from the edge of an image that are to be left "as is" when scaling the image. Its purpose is to preserve things like beveled edges so that the scaling/stretching process doesn't distort them as seen in the first example. In the example below, 3 pixels on both sides and 2 pixels on the top and bottom are not scaled in order to leave us our nice beveled look.

Padding is needed when you don't want text (or other images) to begin at the very edges of your image, similar to margins in a text document. See below how the "Eterm-0.9.4" text is positioned away from the edges of the image now? Text justification is done in the textclasses.

The values for both of these options impact the edges of an image in the following order: left, right, top, bottom.

Here's an example of what happens when we apply those properties.

__ICLASS __BGN
  __NAME IMAGE-1
  __NORMAL "artwork/my-image.png"
  __EDGE_SCALING 3 3 2 2
  __PADDING 10 10 4 4
__END


 

The default fill rule stretches the image. However, its possible to tile an image rather than stretch it.

Below is an image designed for tiling and how how e16 processes the tile directive for that same Eterm border. We maintain a nice pattern look as apposed to the distortion that would occur during any stretching of that image.

__ICLASS __BGN
  __NAME TILE-1
  __NORMAL "artwork/tile-image.png"
  __FILLRULE __TILE
  __PADDING 10 10 4 4
__END


Visual feedback

So far the only images we've used are declared using the '__NORMAL' keyword. This keyword controls image state. This is the only image state directive that's required in an imageclass. If you'd like to have more visual feedback when using your theme, however, then you need to create and include other images declared with the appropriate image state name.

The table below will help you understand the possible image states.

Image State Name        Usage
__NORMAL Always, unless a more specific image declaration overrides it
__HILITED When mouse pointer hovers over the image
__CLICKED When image is clicked on
__NORMAL_ACTIVE When the window is currently focused
__HILITED_ACTIVE Window is focused and pointer hovers the image
__CLICKED_ACTIVE Window has focus and pointer is clicking the image
__NORMAL_STICKY When window has been set to sticky (on all desktops)
__HILITED_STICKY Window is sticky and pointer hovers the image
__CLICKED_STICKY Window is sticky and pointer is clicking the image
__NORMAL_ACTIVE_STICKY When window is sticky and focused
__HILITED_ACTIVE_STICKY Window is sticky/focused and pointer is hovering image
__CLICKED_ACTIVE_STICKY Window is sticky/focused and pointer is clicking the image

Pulling it all together

Below is an example of using several image states in one image class. Edge scaling follows each image state to address any differences required for each image, but padding is only needed once.

__ICLASS __BGN
  __NAME IMAGE-1
  __NORMAL "artwork/image-normal.png"
  __EDGE_SCALING 4 4 4 4
  __HILITED "artwork/image-hilited.png"
  __EDGE_SCALING 4 4 4 4
  __CLICKED "artwork/image-clicked.png"
  __EDGE_SCALING 4 4 4 4
  __PADDING 8 8 8 8
__END

Imageclass Definitions

Still under construction

Before we get started

Imageclasses can be grouped into two categories. Those that are used directly by e16 (static) and those that are used in other parts of your theme configuration (dynamic).

Static imageclasses required a specific name. Dynamic imageclasses can be named anything. But, sticking with names that are found in this documentation helps when working on a lot of e16 themes.

Not all static imageclasses are required. As a matter of fact e16 defaults back to a generic gray image if you don't have something defined, but your theme probably wont look right if that happens. There are a few that can safely be ignored without this gray image being applied. They are identified in the below tables with an asterisk * next to their name.

The following syntax is used to depict how images are scaled in (width)x(height).
(-) image size is used
(*) scales as needed
(c) configuration defined
(c+) configuration defined to scale as needed
(25) image is scaled to (n) fixed pixels

For example:
(-)x(*) would use the image width but scale height as needed.
(*)x(25) would scale an image width as needed but force height to be 25 pixels.
(c)x(c+) both width and height are configuration controlled but width is fixed and height is scalable.


Organization

As noted in the structure part of the documentation, all imageclass configuration files are placed in the directory [THEME]/imageclasses/ and are included by the base config file [THEME]/imageclasses.cfg.


borders.cfg

All imagery around your windows including the action buttons (ie. minimize, maximize, close, etc.)



NAME Category Size
DEFAULT_TITLEBAR dynamic (c+)x(c)
DEFAULT_BOTTOMBAR dynamic (c+)x(c)
DEFAULT_SIDE_LEFT dynamic (c)x(c+)
DEFAULT_SIDE_RIGHT dynamic (c)x(c+)
DEFAULT_CORNER_TL dynamic (c)x(c)
DEFAULT_CORNER_TR dynamic (c)x(c)
DEFAULT_CORNER_BL dynamic (c)x(c)
DEFAULT_CORNER_BR dynamic (c)x(c)
DEFAULT_KILL dynamic (c)x(c)
DEFAULT_ICONIFY dynamic (c)x(c)
DEFAULT_MAXIMIZE dynamic (c)x(c)
DEFAULT_LOWER dynamic (c)x(c)

The names for border imageclasses are all flexible because you call them from borderclasses. Try to be descriptive, it helps when working on your theme. If you have imageclasses that are only used for a particular border then prepend them with the border name like above (DEFAULT_).


coords.cfg

The image used to displaying positional coordinates during window movement or resizing.



NAME Category Size
COORDS static (*)x(*)


dialogs.cfg

The images used in the configuration and pop-up dialogs of e16.



NAME Category Size
DIALOG static (*)x(*)
DIALOG_BUTTON static (*)x(*)
DIALOG_WIDGET_AREA static (*)x(*)
DIALOG_WIDGET_BUTTON static (*)x(*)
DIALOG_WIDGET_CHECK_BUTTON static (-)x(-)
DIALOG_WIDGET_RADIO_BUTTON static (-)x(-)
DIALOG_WIDGET_SEPARATOR static (*)x(c+)
DIALOG_WIDGET_SLIDER_BASE_HORIZONTAL static (*)x(-)
DIALOG_WIDGET_SLIDER_BASE_VERTICAL static (-)x(*)
DIALOG_WIDGET_SLIDER_KNOB_HORIZONTAL static (-)x(-)
DIALOG_WIDGET_SLIDER_KNOB_VERTICAL static (-)x(-)
SETTINGS_AREADESK_AREA static (*)x(*)
SETTINGS_AREA_AREA static (*)x(*)
SETTINGS_DESKTOP_AREA static (*)x(*)


dock.cfg

The image used for dockapps. See http://web.cs.mun.ca/~gstarkes/wmaker/dockapps/ for more information on these utility/monitoring programs.



NAME Category Size
DEFAULT_DOCK_BUTTON static (64)x(64)


dragbar.cfg

Dragbar images. When you have multiple desktops configured, it allows you to slide back the current desktop and expose the one underneath. It sits on either the top, bottom, left, or right edge of the screen. The RAISE and LOWER buttons switch to previous and subsequent desktops.



NAME Category Size
DESKTOP_DESKRAY_HORIZ static (-)x(-)
DESKTOP_DESKRAY_VERT static (-)x(-)
DESKTOP_DRAGBUTTON_HORIZ static (*)x(16)
DESKTOP_DRAGBUTTON_VERT static (16)x(*)
DESKTOP_LOWERBUTTON_HORIZ static (16)x(16)
DESKTOP_LOWERBUTTON_VERT static (16)x(16)
DESKTOP_RAISEBUTTON_HORIZ static (16)x(16)
DESKTOP_RAISEBUTTON_VERT static (16)x(16)


epplets.cfg

The images needed for e16's custom utility and system monitoring programs.

Insert Images for EPPLETS


NAME Category Size
EPPLET_ARROW_DOWN static
EPPLET_ARROW_LEFT static
EPPLET_ARROW_RIGHT static
EPPLET_ARROW_UP static
EPPLET_BACKGROUND_HORIZONTAL static
EPPLET_BACKGROUND_VERTICAL static
EPPLET_BUTTON static
EPPLET_CLOSE static
EPPLET_CONFIGURE static
EPPLET_DRAWINGAREA static
EPPLET_EJECT static
EPPLET_FAST_FORWARD static
EPPLET_HBAR_BAR static
EPPLET_HBAR_BASE static
EPPLET_HELP static
EPPLET_HSLIDER_BASE static
EPPLET_HSLIDER_KNOB static
EPPLET_NEXT static
EPPLET_PAUSE static
EPPLET_PLAY static
EPPLET_POPUP_BASE static
EPPLET_POPUP_ENTRY static
EPPLET_PREVIOUS static
EPPLET_REPEAT static
EPPLET_REWIND static
EPPLET_SKIP static
EPPLET_STOP static
EPPLET_TOGGLEBUTTON_OFF static
EPPLET_TOGGLEBUTTON_ON static
EPPLET_VBAR_BAR static
EPPLET_VBAR_BASE static
EPPLET_VSLIDER_BASE static
EPPLET_VSLIDER_KNOB static


focuslist.cfg

The image used when selecting running applications via "Alt-TAB". Each program listed repeats this image.



NAME Category Size
WARPFOCUS static (*)x(*)


iconbox.cfg

The iconbox holds minimized applications. The images defined in here are also used for the SysTray that recent versions of e16 support.



NAME Category Size
DEFAULT_ICON_BUTTON static (*)x(*)
ICONBOX_ARROW_DOWN static (12)x(12)
ICONBOX_ARROW_LEFT static (12)x(12)
ICONBOX_ARROW_RIGHT static (12)x(12)
ICONBOX_ARROW_UP static (12)x(12)
ICONBOX_COVER_HORIZONTAL * static (*)x(*)
ICONBOX_COVER_VERTICAL * static (*)x(*)
ICONBOX_HORIZONTAL static (*)x(*)
ICONBOX_SCROLLBAR_BASE_HORIZONTAL static (*)x(12)
ICONBOX_SCROLLBAR_BASE_VERTICAL static (12)x(*)
ICONBOX_SCROLLBAR_KNOB_HORIZONTAL static (*)x(8)
ICONBOX_SCROLLBAR_KNOB_VERTICAL static (8)x(*)
ICONBOX_SCROLLKNOB_HORIZONTAL static (8)x(8)
ICONBOX_SCROLLKNOB_VERTICAL static (8)x(8)
ICONBOX_VERTICAL static (*)x(*)


menustyles.cfg

The images defined here are used for the application menus and window/border menus.



NAME Category Size
MENU_BG dynamic (*)x(*)
MENU_SEL dynamic (*)x(*)
MENU_SUB dynamic (*)x(*)


pager.cfg

The images used when the desktop pager is not drawing your active desktop(s).



NAME Category Size
PAGER_BG dynamic (*)x(*)
PAGER_SEL * dynamic (*)x(*)
PAGER_WIN dynamic (*)x(*)


tooltips.cfg

The images needed for e16's pop-up help windows.



NAME Category Size
TT_MAIN dynamic (*)x(*)
TT_LOGO dynamic (-)x(-)
TT_CLOUD1 dynamic (8)x(8)
TT_CLOUD2 dynamic (16)x(16)
TT_CLOUD3 dynamic (24)x(24)
TT_CLOUD4 dynamic (32)x(32)

Textclasses and Fonts

Enlightenment text processing can be broken into two components. Font selection
(known as font-aliases) and textclasses that define properties and location.

Font-aliases

Still under construction

A bit of history

Font-aliases first appeared in version 16.8.4(?) to provide a more flexible way of changing theme fonts according to user needs. Prior to that, all font selection was specified by the theme in textclasses.cfg. Unfortunatly most themes didn't take into account the many locales that enlightenment was being ran in. The result was that many characters outside the standard ASCII set were not displayed properly -- if at all.


Why are they called aliases?

The reason they're called aliases is that instead of defining the font and size (such as "Vera/8") in a textclass item, you assign it a name and then just reference that "alias name" rather than the font itself.

By doing this, separate config files can now override font and size selection without disturbing text properties such as color and direction.


How it works

Without setting a custom file name, the font alias configuration files searched for are:

fonts.cfg
fonts.xft.cfg
fonts.pango.cfg
fonts.theme.cfg

Which one is used depends on compilation options and user settings. See the "post by Kim" in the "Font standards" forum thread for details.

What this means for themers is that by default the enlightenment [system wide] configuration is in control of theme fonts and will use either fonts.xft.cfg or fonts.pango.cfg depending on compilation options. Both Xft and Pango configurations use a well rounded Sans font installed on all modern systems. If for some reason your theme doesn't work well with the font sizes defined there, than you might want to copy the Xft and Pango font config files to your theme and modify the font sizes. Your copies will then take precidence and your theme will display properly. It's still best to use the "Sans" font though for good character support in all locales.

If you would like to do something more unique, however, then that's when fonts.theme.cfg should be used. If you have a specific TrueType font, place it in THEME/ttfont and then define your custom font configuration in THEME/fonts.theme.cfg. This file is used when e16 is set to use the theme font rather than system font.

Users override both theme and system fonts by defining what they want in either fonts.xft.cfg, fonts.pango.cfg, fonts.cfg or any other name they setup e16 to look for in ~/.e16/.

In order for a theme to work well with pre 1.0.0 versions of enlightenment, create a symbolic link fonts.cfg -> fonts.theme.cfg.


Alias naming convention

In order for users to have their own font alias config file in ~/.e16/ and have it affect all themes, there needs to be a standard in font alias names. Otherwise what a user defines may not match the font-aliasses defined in each themes textclasses.cfg file.

Below is a list of names used by fonts.xft.cfg and fonts.pango.cfg from the EROOT/config directory. Defining all of these (especially if you don't use them in textclasses.cfg) is not necessary, but using the names found in this list is most appropriate.

font-default
font-border
font-border-small
font-coords
font-dialog
font-dialog-hilite
font-epplet
font-epplet-small
font-epplet-medium
font-epplet-large
font-focus
font-iconbox
font-init
font-menu
font-pager
font-tooltip


The basics

Syntax for a font-aliases file is quite simple.

__FONT __BGN
  font-default  "xft:sans-8:bold"
__END

Line 1 begins the font alias definition
Line 2 defines the font alias
Line 3 ends the font alias definition

Other than defining more font aliases, this is all the syntax there is. There aren't any advanced or additional options.


Font sources

There are a number of sources that e16 can use fonts from. Below is a list of sources and the syntax required for the font alias definition.

Fnlib - no longer supported, don't use it.

TrueType - Theme embedded TrueType font file located in the THEME/ttfont directory. FontForge is a good program to display and edit TrueType fonts.

font-default "Arial/12"

X Font - Old school (Type 1) X font selection. Use xfontsel, xlsfonts and xfd to view and capture the syntax for these fonts.

font-default "-*-helvetica-*-r-*-*-10-*-*-*-*-*-*-*" /* normal */
font-default "-*-helvetica-*-r-*--10-*-*-*-*-*-*-*,-*-*-*-r-*--10-*-*-*-*-*-*-*" /* multibyte */

Xft - Modern X font rendering system. Supports Type 1, TrueType, OpenType, and others. fc-list and xfd can be used to display fonts on the system.

font-default "xft:sans-8:bold"

Pango - GTK based font rendering system.

font-default "pango:sans bold 8"

Textclass syntax

Still under construction

The basics

The required syntax for textclasses is:

__TCLASS __BGN
  __NAME TEXT
  __NORMAL "*font-border"
__END

Line 1 begins the textclass
Line 2 gives it a name
Line 3 identifies the font-alias and in which state (explained more below)
Line 4 ends the textclass


Textclass properties

__FORGROUND_COLOR 255 255 255
__BACKGROUND_COLOR 0 0 0
__JUSTIFICATION 512

__DRAWING_EFFECT __EFFECT_NORMAL
__DRAWING_EFFECT __EFFECT_SHADOW
__DRAWING_EFFECT __EFFECT_OUTLINE

__ORIENTATION __FONT_TO_UP
__ORIENTATION __FONT_TO_DOWN
__ORIENTATION __FONT_TO_LEFT
__ORIENTATION __FONT_TO_RIGHT

Visual feedback

Text State Name        Usage
__NORMAL Always, unless a more specific text declaration overrides it
__HILITED When mouse hovers over the image
__CLICKED When image is clicked on with the mouse
__NORMAL_ACTIVE When the window is currently active
__HILITED_ACTIVE Window is active and mouse hovers the image
__CLICKED_ACTIVE Window is active and mouse is clicking the image
__NORMAL_STICKY When window has been set to sticky (on all desktops)
__HILITED_STICKY Window is sticky and mouse hovers the image
__CLICKED_STICKY Window is sticky and mouse is clicking the image
__NORMAL_ACTIVE_STICKY When window is sticky and currently active
__HILITED_ACTIVE_STICKY Window is sticky/active and mouse is hovering image
__CLICKED_ACTIVE_STICKY Window is sticky/active and image is being clicked

Textclass definitions

Still under construction

COORDS
DIALOG
DIALOG_BUTTON
DIALOG_WIDGET_AREA
DIALOG_WIDGET_BUTTON
DIALOG_WIDGET_CHECK_BUTTON
DIALOG_WIDGET_RADIO_BUTTON
DIALOG_WIDGET_TABLE
DIALOG_WIDGET_TEXT
EPPLET_BUTTON
EPPLET_LABEL
EPPLET_POPUP
EPPLET_TEXT_LARGE
EPPLET_TEXT_MEDIUM
EPPLET_TEXT_TINY
EPPLET_TOGGLEBUTTON_OFF
EPPLET_TOGGLEBUTTON_ON
WARPFOCUS

Cursors

Still under construction

/* Native cursor definitions */
XC_NONE
XC_x_CURSOR
XC_ARROW
XC_BASED_ARROW_DOWN
XC_BASED_ARROW_UP
XC_BOAT
XC_BOGOSITY
XC_BOTTOM_LEFT_CORNER
XC_BOTTOM_RIGHT_CORNER
XC_BOTTOM_SIDE
XC_BOTTOM_TEE
XC_BOX_SPIRAL
XC_CENTER_PTR
XC_CIRCLE
XC_CLOCK
XC_COFFEE_MUG
XC_CROSS
XC_CROSS_REVERSE
XC_CROSSHAIR
XC_DIAMOND_CROSS
XC_DOT
XC_DOTBOX
XC_DOUBLE_ARROW
XC_DRAFT_LARGE
XC_DRAFT_SMALL
XC_DRAPED_BOX
XC_EXCHANGE
XC_FLEUR
XC_GOBBLER
XC_GUMBY
XC_HAND1
XC_HAND2
XC_HEART
XC_ICON
XC_IRON_CROSS
XC_LEFT_PTR
XC_LEFT_SIDE
XC_LEFT_TEE
XC_LEFTBUTTON
XC_LL_ANGLE
XC_LR_ANGLE
XC_MAN
XC_MIDDLEBUTTON
XC_MOUSE
XC_PENCIL
XC_PIRATE
XC_PLUS
XC_QUESTION_ARROW
XC_RIGHT_PTR
XC_RIGHT_SIDE
XC_RIGHT_TEE
XC_RIGHTBUTTON
XC_RTL_LOGO
XC_SAILBOAT
XC_SB_DOWN_ARROW
XC_SB_H_DOUBLE_ARROW
XC_SB_LEFT_ARROW
XC_SB_RIGHT_ARROW
XC_SB_UP_ARROW
XC_SB_V_DOUBLE_ARROW
XC_SHUTTLE
XC_SIZING
XC_SPIDER
XC_SPRAYCAN
XC_STAR
XC_TARGET
XC_TCROSS
XC_TOP_LEFT_ARROW
XC_TOP_LEFT_CORNER
XC_TOP_RIGHT_CORNER
XC_TOP_SIDE
XC_TOP_TEE
XC_TREK
XC_UL_ANGLE
XC_UMBRELLA
XC_UR_ANGLE
XC_WATCH
XC_XTERM

Borders

Cover border definitions here.

Menustyles

Still under construction

NORMAL_MENU_STYLE_VERTICAL("TYPE", "", "", "", "", "", NUM)

Menu Types:
DEFAULT
DESK_MENU
EMPTY
GROUP_MENU
ROOT
ROOT_IMAGE

Tooltips

Still under construction

DEFINE_TOOLTIP("TYPE", "", "", "", "", "", "", 16)
DEFINE_TOOLTIP_SIMPLE("TYPE", "", "", 16)
DEFINE_TOOLTIP_WITH_LOGO("TYPE", "", "", "", "", "", "", 16)

Tooltip Types:
ICONBOX
PAGER
DEFAULT

Desktops

Still under construction

BEGIN_BACKGROUND("Yellow_Background1")
SET_SOLID("0 0 0")
ADD_BACKGROUND_TILED("artwork/backgrounds/bg_2.jpg")
ON_DESKTOP("0")
ON_DESKTOP("1")
ON_DESKTOP("2")
ON_DESKTOP("3")
ON_DESKTOP("4")
ON_DESKTOP("5")
ON_DESKTOP("6")
ON_DESKTOP("7")
ON_DESKTOP("8")
ON_DESKTOP("9")
ON_DESKTOP("10")
ON_DESKTOP("11")
ON_DESKTOP("12")
ON_DESKTOP("13")
ON_DESKTOP("14")
ON_DESKTOP("15")
ON_DESKTOP("16")
ON_DESKTOP("17")
ON_DESKTOP("18")
ON_DESKTOP("19")
ON_DESKTOP("20")
ON_DESKTOP("21")
ON_DESKTOP("22")
ON_DESKTOP("23")
ON_DESKTOP("24")
ON_DESKTOP("25")
ON_DESKTOP("26")
ON_DESKTOP("27")
ON_DESKTOP("28")
ON_DESKTOP("29")
ON_DESKTOP("30")
ON_DESKTOP("31")
END_BACKGROUND

ADD_BACKGROUND_CENTERED
ADD_BACKGROUND_SCALED
ADD_BACKGROUND_SCALED_RETAIN_ASPECT
ADD_BACKGROUND_SCALED_RETAIN_ASPECT_ALIGN_BOTTOM
ADD_BACKGROUND_SCALED_RETAIN_ASPECT_ALIGN_LEFT
ADD_BACKGROUND_SCALED_RETAIN_ASPECT_ALIGN_RIGHT
ADD_BACKGROUND_SCALED_RETAIN_ASPECT_ALIGN_TOP
ADD_BACKGROUND_TILED
ADD_BACKGROUND_TILED_CENTER
ADD_BACKGROUND_TILED_SCALED_HORIZONTALLY
ADD_BACKGROUND_TILED_SCALED_RETAIN_ASPECT
ADD_BACKGROUND_TILED_SCALED_VERTICALLY

ADD_OVERLAY_IMAGE_ASPECT
ADD_OVERLAY_IMAGE_BOTTOM_LEFT
ADD_OVERLAY_IMAGE_BOTTOM_MIDDLE
ADD_OVERLAY_IMAGE_BOTTOM_RIGHT
ADD_OVERLAY_IMAGE_CENTERED
ADD_OVERLAY_IMAGE_LEFT_MIDDLE
ADD_OVERLAY_IMAGE_RIGHT_MIDDLE
ADD_OVERLAY_IMAGE_SCALED
ADD_OVERLAY_IMAGE_TOP_LEFT
ADD_OVERLAY_IMAGE_TOP_MIDDLE
ADD_OVERLAY_IMAGE_TOP_RIGHT

Sound

Still under construction

SOUND_ALERT
SOUND_BUTTON_CLICK
SOUND_BUTTON_RAISE
SOUND_DEICONIFY
SOUND_DESKTOP_LOWER
SOUND_DESKTOP_RAISE
SOUND_DESKTOP_SHUT
SOUND_ERROR_IPC
SOUND_EXIT
SOUND_FOCUS_SET
SOUND_GROUP_SETTINGS_ACTIVE
SOUND_ICONIFY
SOUND_INSERT_KEYS
SOUND_LOGOUT
SOUND_LOWER
SOUND_MENU_SHOW
SOUND_MOVE_AREA_DOWN
SOUND_MOVE_AREA_LEFT
SOUND_MOVE_AREA_RIGHT
SOUND_MOVE_AREA_UP
SOUND_MOVE_RESIST
SOUND_MOVE_START
SOUND_MOVE_STOP
SOUND_NEW_ICONBOX
SOUND_RAISE
SOUND_RESIZE_START
SOUND_RESIZE_STOP
SOUND_SCANNING
SOUND_SETTINGS_ACTIVE
SOUND_SETTINGS_AREA
SOUND_SETTINGS_AUDIO
SOUND_SETTINGS_AUTORAISE
SOUND_SETTINGS_BG
SOUND_SETTINGS_DESKTOPS
SOUND_SETTINGS_FOCUS
SOUND_SETTINGS_FX
SOUND_SETTINGS_GROUP
SOUND_SETTINGS_MOVERESIZE
SOUND_SETTINGS_PAGER
SOUND_SETTINGS_PLACEMENT
SOUND_SETTINGS_TOOLTIPS
SOUND_SHADE
SOUND_SLIDEOUT_SHOW
SOUND_STARTUP
SOUND_UNSHADE
SOUND_WAIT
SOUND_WINDOW_BORDER_CHANGE
SOUND_WINDOW_CHANGE_LAYER_DOWN
SOUND_WINDOW_CHANGE_LAYER_UP
SOUND_WINDOW_CLOSE
SOUND_WINDOW_SLIDE
SOUND_WINDOW_SLIDE_END
SOUND_WINDOW_STICK

Init

Still under construction

/* NB "STARTUP_BACKGROUND" is a special background name - if this exists E
* Will display the "blinds" on startup and hides whatever it is doing behind
* these whilst "booting" */

BEGIN_BACKGROUND("STARTUP_BACKGROUND")
SET_SOLID("30 30 90")
ADD_BACKGROUND_TILED_SCALED_VERTICALLY("artwork/init/bg.png")
END_BACKGROUND

/* need to define these for the bar displayed on startup */
__ICLASS __BGN
__NAME STARTUP_BAR
__NORMAL "artwork/dialogs/bg.png"
__EDGE_SCALING 2 2 2 2
__END

/* Progress bar stuff needed to be able to start and look decent */
__ICLASS __BGN
__NAME PROGRESS_BAR
/* normal used for text background */
__NORMAL "artwork/init/text_bg.png"
__EDGE_SCALING 6 22 1 1
/* used for numeric bg */
__CLICKED "artwork/init/text_bg.png"
__EDGE_SCALING 6 22 1 1
/* used for bar itself */
__NORMAL_ACTIVE "artwork/init/progress_bar.png"
__EDGE_SCALING 6 22 1 1
__PADDING 6 22 1 1
__END

/* text class for text above progress bar */
__TCLASS __BGN
__NAME "PROGRESS_TEXT"
__JUSTIFICATION 0

__NORMAL "-*-vizung-medium-r-normal-*-*-120-*-*-p-*-*-*"
__DRAWING_EFFECT __EFFECT_SHADOW
__FORGROUND_COLOR 60 60 60
__BACKGROUND_COLOR 220 220 220
__END

/* number in % displayed next to text */
__TCLASS __BGN
__NAME "PROGRESS_TEXT_NUMBER"
__JUSTIFICATION 512

__NORMAL "-*-vizung-medium-r-normal-*-*-120-*-*-p-*-*-*"
__DRAWING_EFFECT __EFFECT_SHADOW
__FORGROUND_COLOR 60 60 60
__BACKGROUND_COLOR 220 220 220
__END

Windowmatches

Still under construction

USE_BORDER_FOR_CLIENT_WITH_CLASS
USE_BORDER_FOR_CLIENT_WITH_NAME
USE_BORDER_FOR_CLIENT_WITH_TITLE
USE_BORDER_FOR_SHAPED_CLIENT
USE_BORDER_FOR_STICKY_CLIENT
USE_BORDER_FOR_TRANSIENT_CLIENT
USE_BORDER_FOR_UNRESIZABLE_CLIENT