--------------------------------------------------------------------------------
19. GTK的rc档
GTK有处理软体内定值的一套方法, 即使用其rc档. 这些可以用来设定颜色, 并且可以用pixmaps来设定某些物件的背景.
19.1 rc档的功能
当您的软体启动时, 您应该呼叫这一行:
void gtk_rc_parse (char *filename);
将您的档名传入做为参数. 这会使GTK来分析这个档案, 并使用设定值来设定物件的形态.
如果您希望有特别样子的物件, 但可从另一个物件做为基础来产生, 可以用这个:
void gtk_widget_set_name (GtkWidget *widget,
gchar *name);
传入您新产生的物件做为第一个参数, 您要给它的名字做为第二个参数. 这样的话可以让你透过rc档来改变该物件的属性.
如果我们用像以下的呼叫:
button = gtk_button_new_with_label ("Special Button");
gtk_widget_set_name (button, "special button");
则这个按钮被给了一个名字叫"special button" 并且会被指向rc档中的"special button.GtkButton". [<--- 要是我错了, 修正我!]
以下的rc档设定主视窗的属性, 并让所有子视窗继承其形态. 在程式中的程式码为:
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_set_name (window, "main window");
而该形态则在rc档中定义为:
widget "main window.*GtkButton*" style "main_button"
这会设定所有GtkButton物件, 成为在"main window"中的"main_buttons"的形态.
您可以看到, 这是很强很有弹性的系统. 用您最佳的想像力来看有多少好处.
19.2 GTK的rc档案格式
GTK的rc档格式如以下的范例. 这个testgtkrc档从GTK distribution而来, 但我加了点料及注解进去. 您也可以加一点解释来让使用者做微调.
有好几个指令来改变该物件的属性.
fg - 前景颜色.
bg - 背景颜色.
bg_pixmap - 背景图片pixmap.
font - 字型.
除此, 一个物件可以有好几种状态. 您可以设定不同的颜色, 图案及字形. 这些状态是:
NORMAL - 物件一般的状态, 没有滑鼠滑过, 没有被按下.
PRELIGHT - 滑鼠滑过该物件.
ACTIVE - 当该物件被压下或按下, 该视窗会生效.
INSENSITIVE - 当该物件被设为失效.
SELECTED - 当物件被选择.
当我们使用"fg"及"bg"来设定该物件的颜色时, 其格式为:
fg[] = { Red, Green, Blue }
这里STATE是我们以上所说的其中之一(PRELIGHT, ACTIVE etc), 而Red, Green及Blue为0到1.0, { 1.0, 1.0, 1.0 }为白色. 它们必须要为浮点数, "1"不行, 必须是"1.0", 否则会全部变成0. "0"可以. 不是以此格式者均为"0".
bg_pixmap跟以上都很近似, 除了变成档名以外.
pixmap_path是以":"做为分隔的一串路径. 这些路径会用来搜寻您所指定的pixmap.
font指令很简单:
font = ""
比较难的是找出想要的font名称. 用xfontsel或类似的工具来找会有点帮助.
"widget_class"设定物件的类别. 这些类别在物件概论中的类别组织图有列出来.
"widget"指令指定一个已经定好的形态给一个物件. 替代所有该物件的属性. 这些物件则在程式中以gtk_widget_set_name()注册过了. 这允许您指定各别物件的属性, 而不是设定全部同一类的. 我要求您要做好文件, 这样使用者可以自行修改.
当"parent"用来当成一个属性时, 该物件会继承其父所有财产.
当您定义一个形态时, 可以指定以前已经定义过的形态给新的.
style "main_button" = "button"
{
font = "-adobe-helvetica-medium-r-normal--*-100-*-*-*-*-*-*"
bg[PRELIGHT] = { 0.75, 0, 0 }
}
这个例子用"button"的形态, 产生一个"main_button"形态, 并且只改变font及背景颜色.
当然了并非所有属性都对所有物件生效. 因为该物件不见得拥有该属性.
19.3 rc档的范例
# pixmap_path ":::..."
#
pixmap_path "/usr/include/X11R6/pixmaps:/home/imain/pixmaps"
#
# style [= ]
# {
#
进入【UNIX论坛】
|