主题设计
Metacity 主题配置文件基于 XML 格式。
配置文件
创建文件和目录:
$PREFIX/share/themes/[theme_name]/metacity-1/
$HOME/.themes/[theme_name]/metacity-1/
比如 Moblin 的主题 Moblin-Netbook ,以后都以这个主题为例。
/usr/share/themes/Moblin-Netbook/metacity-1/metacity-theme-1.xml基本概念支持的 Window 类型
Metacity 有 6 中窗口类型:
- normal
a normal top-level window
- dialog
a dialog window
- modal_dialog
a dialog window that has modal state ie. intervention required by user before they can interact with it's parent window
- menu
a pinnable menu window ie. tearoff menu
- utility
a small persistant utility window ie. paletde or toolbox
- border
a window that should not show any decorations typically ie. full screen window
Styles
对于每种 Window 类型,都需要为之设置一个 "style set" (或者称 window decoration )。 一个 "style set" 是几中不同的 "frame states" 的组合 styles 。"frame states" 有以下几种声明:
- window 是聚焦还是没聚焦 (focused or un-focused)
- window 是 maximized or shaded [or both]
- window 能否被 vertically, horizontally, vertically and horizontally resized
一个 "frame state" 对于一个 "frame style" (都没有s,指单个)。"frame style" 化分为两部分: frame 'pieces' 和 window 'buttons'。这样分开更容 易定制 Metacity 主题。
Frame pieces
Metacity 有以下几种 frame pieces :
| entire_background | the whole frame of the window which is drawn first |
| titlebar | 程序窗口的上面(俗称:标题栏) |
| titlebar_middle | 标题栏的中间,不包括任何 "edge" |
| left_titlebar_edge | 标题栏左边边缘 |
| right_titlebar_edge | 标题栏右边边缘 |
| top_titlebar_edge | 标题栏顶部边缘 |
| bottom_titlebar_edge | 标题栏底部边缘 |
| title | 包含标题的部分 |
| left_edge | frame 的左边边缘 |
| right_edge | frame 的右边边缘 |
| bottom_edge | frame 的底部边缘 |
| overlay | same as entire_background, only that it is drawn last |
Window Buttons
Metacity 有以下几种 Window Buttons :
| close | 关闭按钮 |
| maximize | 最大化按钮 |
| minimize | 最小化 |
| menu | 菜单按钮 |
Buttons 可以有下面几种位置:
| left_left_background | 左边第一个按钮的背景 |
| left_middle_background | 左边第二个按钮的背景 |
| left_right_background | 左边第三个按钮的背景 |
| right_left_background | 右边第一个按钮的背景 |
| right_middle_background | 右边第二个按钮的背景 |
| right_right_background | 右边第三个按钮的背景 |
对于窗口上的每个按钮,需要设置一个在给出一个 "button state" 时的怎么样 显示。 Metacity 的按钮状态有:
| normal | 常规显示 |
| pressed | 鼠标点击 (clicked) 后的显示 |
| prelight | 聚焦时候显示 |
Window menus
通常是在标题栏点击右键弹出 menu ,或者标题栏设置一个 menu icons,点击这 个 menu icons 弹出菜单。菜单的上通常有下列列表:
| close | 关闭 |
| maximize | 最大化 |
| minimize | 最小化 |
| unmaximize | 取消最大化 |
而且可以设置在下面几种情况下,对于的 GtkStateType :
| normal | menu icon 常规显示 |
| prelight | menu icon 列表中的项目被聚焦后怎样显示 |
| active | 激活后又怎么显示 |
| selected | 选择后又怎么显示 |
| insensitive | 灰色状态(此时不可用)如何显示 |
测试 Themes
当然可以直接安装主题测试了,不过这有点傻。可以使用 metacity-theme-viewer 工具查看一个主题的面貌。不带参数的时候,显示当前 主题,后接一个主题名字作为参数,可以显示这个主题的面貌,这样很方便。注 意:主题名字是 /usr/share/themes 下的目录名,或者其他地方。
应用主题
使用 gconftool-2 或者使用 GUI 程序可以应用一个主题。
gconftool-2 --type=string --set /apps/metacity/general/theme 主题名
再次提醒:主题通常放在 /usr/share/themes 下。
查看当前主题,可以使用 gconf-editor 工具,也可以使用 :
gconftool-2 --dump /apps/metacity/general
http://developer.gnome.org/doc/tutorials/metacity/metacity-themes.html