主题的高阶编辑

本节的大部分内容取自 Fluxbox 0.1.13版 manpage 内容,或深受其影响。 通常,manpage 就是这方面的绝对权威,但这一节或许对刚起步的 style 设计人员来说 更有启蒙价值吧。

要理解 style 的工作机制,有一点对 X11 中的“资源”概念的了解是很有裨益的。

X11 的资源由键和键值组成。键由更小的键组成 (有时称为子键),每个子键用点 (.) 隔开。键也可以 包含星号(*) 以作为通配符,意思是说已输入的某行文字将和多个键匹配。 在某些 styles 仅仅基于一或两种颜色的时候,这种方用法很有用。

Fluxbox 允许您对其三个主要组件进行配置: 工具栏,菜单,窗口修饰。slit 自动从工具栏继承了 style,但如果需要的话也可以另外设置。 拖拉窗口时用于显示坐标位置的小窗口,它的 style 则是从被拖拉窗口的标题栏那儿借来的。

这里有些容易上手的例子,说明了一些基本语法:

例子 10.1. Toolbar Clock style

    toolbar.clock.color:  green

这一项可将工具栏上时钟的“颜色”资源设置成 绿色。另一个例子:

例子 10.2. Menu style

    menu*color: rgb:3/4/5

这个则是将菜单及所有子菜单的颜色设置成 rgb:3/4/5。有关颜色命名的描述,请 请参见 X11 manpages。当然对于 menu.title.colormenu.frame.color 也是适用的。再看一个:

例子 10.3. Font style

    *font: -b&h-lucida-medium-r-normal-*-*-140-*

所有键的“字体”资源的设置,像这样,一步即可到位。有关系统中所安装的字体的信息,您可以使用像 xfontselgfontselxlsfonts 这样的程序来了解。

其实 Fluxbox 之所以吸引人的一个重要特色在于它的纹理实时渲染功能。纹理描述直接由它们所适用的键来指定,例如:

例子 10.4. Texture style

    toolbar.clock:   Raised Gradient Diagonal Bevel1
    toolbar.clock.color: rgb:8/6/4
    toolbar.clock.colorTo: rgb:4/3/2

别急,我们马上就会解释这些指令的工作原理。一个纹理的描述由五个域组成,分别是:

表格 10.1. Texture directives

DirectiveDescription
Flat / Raised / Sunken / Tiled

让组件的外观分别是 flat, raised 或者 sunken。

Tiled 只对 pixmaps 起作用而且并不产生缩放效应。

Gradient / Solid绘制单色或渐变色的纹理。
Horizontal / Vertical / Diagonal / Crossdiagonal / Pipecross / Elliptic / Rectangle / Pyramid选择其中一个纹理类型。只有同时指定了 Gradient,它们才有效。
Interlacedinterlace the texture (darken every other line). 此选项常和渐变色纹理搭配使用,但自 Blackbox 0.60.3版后,(即所有的 Fluxbox 版本),同单色纹理也可一起使用。
Bevel1 / Bevel2使用 bevel 的种类。Bevel1 是默认值,阴影处于图像边缘处。Bevel2 是替代选项,阴影处于图像边缘内侧 一像素内。

除了纹理描述以外,还可以使用 ParentRelative 选项,可以让某个组件看起来就像 是其上一级的一部分。

所有渐变色纹理都有两个颜色值组成: colorcolorTo。 在 Solid 模式 中使用 interlace 时,colorTo r用于查找 interlace 颜色。

提供了哪些键,每个键的取值情况怎样,这些问题的完整答案都可以在 附录 C, Theme Reference 中找到。

乍一看,那么冗长的一张清单,但别忘了,要构造您自己的 style ,有时候用一条指令就可以轻松设置许多键的,例如:

例子 10.5. Typical short style

    *color:             slategrey
    *colorTo:           darkslategrey
    *unfocus.color:     darkslategrey
    *unfocus.colorTo:   black
    *textColor:         white
    *unfocus.textColor: lightgrey
    *font:              lucidasans-10