当前位置:Linux教程 - Linux - GTK入门导读(GTK的rc档)

GTK入门导读(GTK的rc档)



         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 [= ]
    # {
    #