GtkStyle结构

http://hi.baidu.com/superprolog/item/43ac81615b102f1dad3e831a

GtkStyle结构
        每个GtkWidget有5个公共成员,它们在下面的程序片段中显示。它们分别是关于风格信息、需要的大小、实际大小,一个GdkWindow用于把构件画到屏幕上,还有一个父构件的指针。

        typedef struct
        {
            GtkStyle *style;
            GtkRequisition requisition;
            GtkAllocation allocation;
            GdkWindow *window;
            GtkWidget *parent;
        } GtkWidget;

        GtkStyle存储了构件绘制风格的信息。下面列出了结构:

         typedef struct
        {
            GdkColor fg[5]/* 对于大部分构件来说是前景色 */
            GdkColor bg[5] /*   对于大部分构件来说是背景色  */
            GdkColor light[5] /* 创建构件影子时,较浅的颜色 */
            GdkColor dark[5] /*  创建构件影子时,较深的颜色  */
            GdkColor mid[5] /* 较浅颜色和较深颜色之间的中间色 */
            GdkColor text[5] /* 对于大部分文字构件来说是文字颜色*/
            GdkColor base[5] /* 背景色,用于文本编辑构件 */
            GdkColor text_aa[5]; /* 用于文本颜色反锯齿 */
            GdkColor black, white; /* 代表黑和白的颜色 */
            PangoFontDescription *font_desc; /* 默认的字体 */
            gint xthickness, ythickness; /* 线宽度 */
            GdkPixmap *bg_pixmap[5]; /* 构件的背景图片*/
            /* 图形上下文,包括每个颜色和状态的绘制属性 */
            GdkGC *fg_gc [5], *bg_gc [5], *light_gc[5], *dark_gc[5], *mid_gc[5], *text_gc[5],
            *base_gc[5], *text_aa_gc[5];
            GdkGC *black_gc, *white_gc;
        } GtkStyle;

        GtkStyle结构中有许多对象。用户风格主题为每个都设置了一个默认值,因此改变它们不总是一个明智的做法。然而,如果需要,编辑构件的GtkStyle是一个修改显示的简单方式。
        您会注意到许多风格属性是元素队列。这是因为每个元素都要为下列5个可能的构件状态设置一个值:
        .    GTK_STATE_NORMAL:构件处于正常状态
        .    GTK_STATE_ACTIVE:构件处于激活状态,比如当一个开关按钮被按下。
        .    GTK_STATE_PRELIGHT:当鼠标指针在构件上方的构件;它可以处理用户点击。
        .    GTK_STATE_SELECTED:当构件或者它包含的文字被选中
        .    GTK_STATE_INSENSITIVE:构件的未激活状态,它不想用用户的输入

资源文件
        GTK+为应用程序提供了一种使用预定义风格的方式,叫做资源文件(RC文件)。RC文件允许用户为一类构件或者单个构件定义风格,会变得适应用户的偏好。和其他程序数据一样,它们通常被保存在home目录下,因此用户有权限改变设置。
        为了加载资源文件,当加载您的程序时,您应该调用gtk_rc_parse()。所有相关的构件会自动应用这些风格。

         void gtk_rc_parse (const gchar *filename);

        而且,如果您想从一个RC文件中直接引用一个构件,您需要使用gtk_widget_set_name()来给构件设置一个唯一的名字。这个名字会在RC文件中被用到,用于设置构建的风格以及它衍生构件的风格。
        在Listing 4-8中,显示了一个简单的RC文件的例子。在这个例子中, 创建了多个构件风格,每个风格都有一组属性。

         Listing 4-8定义构件风格(.gtkrc)
          style "widgets"
        {
            xthickness = 2
            ythickness = 2
            fg[ACTIVE] = "#FFFFFF"
            fg[SELECTED] = "#003366"
            fg[NORMAL] = "#CCCCCC"
            fg[PRELIGHT] = "#FFFFFF"
            fg[INSENSITIVE] = "#999999"
            bg[ACTIVE] = "#003366"
            bg[SELECTED] = "#FFFFFF"
            bg[NORMAL] = "#666666"
            bg[PRELIGHT] = "#003366"
            bg[INSENSITIVE] = "#666666"
        }
        style "labels" = "widgets" {
            font_name = "Sans Bold 14"
        }
        style "buttons" = "widgets" {
            GtkButton::inner-border = { 10, 10, 10, 10 }
        }
        style "checks" = "buttons" {
            GtkCheckButton::indicator-size = 25
        }
        class "GtkWindow" style "widgets"
        class "GtkLabel" style "labels"
        class "GtkCheckButton" style "checks"
        class "Gtk*Button" style "buttons"

        Figure 4-8展示了一个应用程序,它利用了Listing 4-8 RC文件的优势。颜色和字体和过去几章展示的例子不一样了。

4.6 构件风格 - 郭映辉 - 郭映辉
        如果您喜欢探索RC文件中所有窗口的全部标准风格,您应该阅读附录C。本节教您如何使用在程序中使用这些风格。
        构件可以应用风格,这点可以在前面的例子中找到启发。在这个例子中,button风格被应用于所有的Gtk*Button*widgets中,星号的意思是通配符。在程序中,这个风格应用于所有的对象,只要它的类名满足条件。

         widget "widgetname.*.GtkButton" style "stylename"

        第二个构件使用风格的方法,是基于构件的继承关系。这个例子中,stylename风格被应用到直接和间接继承于widgetname,它有点类似GtkButton。

         widget "widgetname.*.GtkButton" style "stylename"

        星号通配符可以匹配零到任意多的字符,除此之外,您还可以使用问号通配符,它可以匹配一个或多个任意字符。同时,通过英文句号表示构件继承关系,句号右边的构件是句号左边的构件的衍生构件。
        使用widget指令会碰到问题,如果已经为一个构件指定了构件名,必须使用构件名,而不是使用类名。如果您想使用构件类名,您可以直接使用widget_class。这允许您忽略所有的构件名,并且应用一个风格到所有的构件,只要它符合我们指定的样式。

         widget_class "GtkWindow.*.GtkLabel" style "stylename"

        除了基本的风格指令,下述列表显示了其它重要RC文件支持的指令。
        .    include:包含其它资源文件。您可以指定绝对或者相对文件名。
        .    module_path:一个路径的列表,中间用冒号分隔,可以被风格引擎搜寻引用的RC文件。
        .    *pixmap_path:同上。
        如果您计划在一个应用程序中使用RC文件,您应该确保提供给用户一个例子文件。您可以使用井号(#)来给RC文件添加注释,这给用户编辑文本时提供了帮助。
        本节只给RC文件提供了基本的介绍。如果需要更多信息,您应该参阅附录C。还有很多关于RC文件和主题风格的学习资源,您可以在 http://art.gnome.org找到它们。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值