Chapter 13. Pekwm themes

Table of Contents
13.1. Guidelines
13.2. Attribute names used, explanations, possible values, examples
13.3. Structure

This section aims to documenting the pekwm theme structure. It's rather cryptic at first look, sorry.

Please use existing themes as real life examples and base when it comes to making your own.

13.1. Guidelines

It is strongly recommended and expected that theme tarballs are labeled for the pekwm version they are made and tested with. The filename format should be theme_name-pekwm_version.[tar.gz|tgz|tar.bz2|tbz]. For example silly_theme-pekwm_0.1.5.bz2.

It is also highly recommended that theme directories are named in a similar fashion. However, for stable releases this is not mandatory, the tarball filename is enough. If you're building for a GIT revision, mention it in as many places as possible.

The silly theme from above would contain a directory structure as follows:

silly_theme-pekwm_0.1.5/
pekwm_0.1.5/theme
pekwm_0.1.5/menubg.png
pekwm_0.1.5/submenu.png

The theme file header should contain attleast the themes name, the pekwm version the theme is for, address to reach the theme maker/porter or get an updated theme, and a last modified date. Changelog entries won't hurt if you aren't the original theme author. For example:

# silly, a PekWM 0.1.5 theme by shared (themes@adresh.com)
# This theme is available from hewphoria.com.
# Last modified 20060529.

# Extract this theme directory under ~/.pekwm/themes/ and the
# themes menu will pick it up automatically.

# Changelog:
# 2006-05-29 HAX0ROFUNIVERSE <hawt@haxorland.invalid>
#  * REWROTE EVERYTHING WITH CAPS LOCK ON,
#    CAPS LOCK IS CRUISE CONTROL FOR COOL!

Try to stick to the theme syntax and rather than deleting entries please use the EMPTY texture.

13.2. Attribute names used, explanations, possible values, examples

Name            Example(s)
|               | Possible values (if not obvious)
|               | | Explanation
--------------------------------------------------------------------------------------------------
"pixels"
                "2"

                    An integer, amount of pixels.


"size"
                "2x2"

                    Pixels vertically times pixels horizontally.


"percent"        
                 "87"

                    Any percent value from 1 to 100.

"toggle"         
                 "true"

                    sets a value as true (1) or false (0).


"padding"
                "2 2 2 2"

                    Free pixels from top, free pixels under, free pixels from left, free pixels from right.


"decorname"
                "DEFAULT"

                    Any name for a decoration set, special decoration set names are:

                  DEFAULT,

                    Defines decorations to all windows unless overridden with another decoration set (REQUIRED).

                  MENU,

                    Defines decorations for menus.

                  STATUSWINDOW,

                    Defines decorations for the status window (REQUIRED).

                  CMDDIALOG,

                    Defines decorations for the command dialog.

                  WORKSPACEINDICATOR,

                    Defines decorations for the workspace indicator.

                  BORDERLESS,

                    Defines decorations for borderless windows (recommended).

                  TITLEBARLESS,

                    Defines decorations for titlebarless windows (recommended,
                    should be there if your theme looks nasty when toggled titlebarless).


"colour"
                "#FFFFFF"

                    A colour value in RGB format.

"imagename"
                "topleftcorner.png#fixed"

                    Image files filename with one of these possible variables:

                  #fixed,

                    Image is fixed size. Default if omitted.

                  #scaled,

                    Image will be scaled to fit the area it's defined for.

                  #tiled,

                    Image will be repeated as many times as needed to fill the area it's defined for.


"texture"
                "Solid #888888 1x1"

                    Any valid texture. Valid textures are:

                  EMPTY,

                    No texture (transparent).

                  SOLID colour size,

                    A solid colour texture of defined colour and size.

                  SOLIDRAISED colour colour colour pixels pixels toggle toggle toggle toggle size,

                    A solid colour texture with a 3D look of defined colours, form and size.

                    First colour defines the main fill colour, second the hilight colour used on the left and top
                    parts of the texture, third the hilight colour on the bottom and right parts of the texture.

                    First pixel amount defines how fart apart the 3D effects are from eachother, second pixel
                    amount is how thick the bordering will be (both pixels default to 1).
                    
                    The four toggles are used to tell which raised corners are to be drawn. This is usefull for
                    example when defining solidraised frame corner pieces. The order is Top, Bottom, Left, Right
                    (not unlike that used in padding). As example: "True False True False" (or 1 0 1 0) could
                    mean you want to draw the TopLeft piece of a solidraised window border.

                    Size should explain itself, see above.

                  IMAGE imagename,

                    An image texture using the defined imagename


"fontstring"
                 "XFT#Verdana:size=10#Left#1 1"
                 "-misc-fixed-*-*-*-*-14-*-*-*-*-*-*-1#Center#1 1"

                    Defines a font. Chopped to parts by # marks.

                    First the font name, then the text orientation, then shadow offsets,
                    then font type if not traditional x font. Some fields can be omitted.


"buttonactions"
                 "1" { Actions = "Close" }

                    Buttonactions work alike what you are used from the mouse config, first mouse button number
                    pressed when this action should happen, then any standard pekwm actions.

13.3. Structure

PDecor{}: the block for decoration sets, any amount of Decor sections can exist inside this block.

        Decor, decorname{}: name of the decoration set.


                Title{}: theming of the frame.

                        Height, pixels

                                Amount of pixels the titlebar should height.

                        HeightAdapt, boolean

                                If true, Height is adapted to fit the Title font.

                        Pad, padding

                                How many pixels are left around a title text.

                        Focused, texture

                                Background texture for a focused titlebar.

                        UnFocused, texture

                                Background texture for an unfocused titlebar.

                        WidthMin, pixels

                                Minimum width of title in pixels, will also place the titlebar outside of the window borders.
                                Use 0 to place titlebar inside borders.

                        WidthMax, percent

                                Maximum width of titles relative to window width, when this value ends up being smaller than
                                the value in WidthMin, WidthMin is overridden.

                        WidthSymetric, toggle

                                Set true to constant width titles or false to use titles that only are as big as the clients
                                title text string requires (note, asymmetric width is not fully implemented yet, allways set
                                this true for now to avoid problems).


                        Tab{}: theming of a titlebar tab.

                                Focused, texture

                                        Background texture for a tab of a focused window.

                                Unfocused, texture

                                        Background texture for a tab of an unfocused window.

                                FocusedSelected, texture

                                        Background texture for the currently selected tab of a focused window.

                                UnFocusedSelected, texture

                                        Background texture for the currently selected tab of an unfocused window.


                        FontColor{}: theming of font colours

                                Focused, colour colour

                                        Text colour for a tab of a focused window. second value is the shadow colour.

                                Unfocused, colour colour

                                        Text colour for a tab of an unfocused window. second value for shadow.

                                FocusedSelected, colour colour

                                        Text colour for the currently selected tab of a focused window. second value for shadow.

                                UnFocusedSelected, colour colour

                                        Text colour for the currently selected tab of an unfocused window. second value for shadow.


                        Font{}: theming of the titlebar fonts.

                                Focused, fontstring

                                        Font of the text of a tab of a focused window.

                                Unfocused, fontstring

                                        Font of the text of a tab of an unfocused window.

                                FocusedSelected, fontstring

                                        Font of the text of the currently selected tab of a focused window.

                                UnFocusedSelected, fontstring

                                        Font of the text of the currently selected tab of an unfocused window.


                        Separator{}: theming of the tab separator.

                                Focused, texture

                                        Separator texture for a focused window.

                                Unfocused, texture

                                        Separator texture for an unfocused window.


                        Buttons{}: theming of titlebar buttons.

                                Right{}: places the button on the right end of the titlebar.
                                Left{}:  places the button on the left end of the titlebar.

                                        Focused, texture

                                                Texture for button of a focused window.

                                        Unfocused, texture

                                                Texture for button of an unfocused window.

                                        Pressed, texture

                                                Texture for button that is pressed.

                                        Button, buttonactions

                                                Configures what to do when a button is pressed.


                        Border{}: theming of the borders.

                                Focused{}:   borders for focused windows.
                                UnFocused{}: borders for unfocused windows.

                                        TopLeft, texture

                                                Texture for the top left corner.

                                        Top, texture

                                                Texture for the top border.

                                        TopRight, texture

                                                Texture for the top right corner.

                                        Left, texture

                                                Texture for the left border.

                                        Right, texture

                                                Texture for the right birder.

                                        BottomLeft, texture

                                                Texture for the bottom left corner.

                                        Bottom, texture

                                                Texture for the bottom border.

                                        BottomRight, texture

                                                Texture for the bottom right border.



Harbour{}: enables theming of the harbour.

        Texture, texture

                Texture to use as the harbour background.



Menu{}: themes the insides of a menu window.

        Pad, padding

                How many pixels of space around an entry is reserved.

        Focused{}:    apply these when the menu/submenu is focused.
        Unfocused{}:  apply these when the menu/submenu is not focused.
        Selected{}:   apply these on the menu entry currently selected.

                Font, fontstring

                        What font to use.

                Background, texture

                        A texture that starts from the top of the menu and ends on the bottom.

                Item, texture

                        A texture that starts from the top of a menu entry and ends on the bottom of the entry.

                Text, colour

                        Colour of text to use.

                Separator, texture

                        Texture to use as separator (required, client menu will break if none is defined).

                Arrow, texture

                        Texture to use for indicating submenus (you want this to be defined too).



CmdDialog{}: themes the insides of a command dialog window.

        Font, fontstring

                What font to use.

        Texture, texture

                Texture to use as the background.

        Text, colour

                Colour of text.

        Pad, padding

                Amount of pixels of space around font to reserve.



Status{}: themes the insides of the status window that shows up when moving windows and so on.

        Font, fontstring

                What font to use.

        Texture, texture

                Texture to use as the background.

        Text, colour

                Colour of text.

        Pad, padding

                Amount of pixels of space around font to reserve.



WorkspaceIndicator{}: themes the workspace indicator that shows up when switching workspace.

        Font, fontstring

                What font to use.


        Background, texture

                Background for the whole window.


        Workspace, texture

                Texture to use when rendering a workspace.

        WorkspaceActive, texture

                Texture to use when rendering the active workspace.

        Text, colour

                Colour of text.

        EdgePadding, padding

                Amount of pixels of space around window edges and workspaces.

        WorkspacePadding, padding

                Amount of pixels of space between workspaces.