关于GTK theme engine的使用和GTK风格介绍

GTK+是一个广泛应用的图形库,允许开发者创建图形用户界面。GTK主题引擎是实现应用程序主题风格的关键,通过共享对象代码、配置文件和数据文件来定制界面。文章介绍了GTK+的构件设计思想,特别是组合构件的创建,以及如何通过rc文件定义和分析主题。主题引擎以共享库形式存在,通过特定的入口函数进行初始化。同时,文章还探讨了如何安装和使用主题引擎,以及通过gtkrc文件定制构件属性和风格,展示了GTK+在界面定制方面的灵活性。
摘要由CSDN通过智能技术生成

                                            关于GTK+构件的设计风格及思想




  引言:图形用户界面是用户与仪器的唯一交互方式,也是一个操作系统当中一个尤为重要的方面,GTK+即是一个应用于界面开发的良好图形库。
      GTK+概述

        一,1 GTK+简介

        GTK+(GIMP ToolKit,GIMP工具包)最初用于开发GIMP,是一个用于创建图形用户接口的图形库在功能上类似微软的MFC,即为应用程序提供一套与平台无关的图形用户界面接口GTK+是基于LGPL授权的,因此GTK+在开发开源软件或商业的非自由软件领域中都得到越来越广泛的使用特别在嵌入式应用中,由于GTK+库小,且程序员可以根据自己需要对其进行裁剪,因此其占用资源少并能快速装入,所以基于GTK+开发的图形用户界面适合在内存受限的嵌入式设备上运行

     

        2,GTK+是在GDK的基础上创建的,其软件层次结构如图1所示Glib是Linux系统下最常用的轻量级的C语言函数库,它提供了C常用的数据结构定义、处理函数、宏、

    3,(引入)如果定义组件的风格
   
    定义组合构件的设计首先需要对GTK+自定义构件的设计非常熟悉,对GTK+构件的设计风格和继承关系很了解,并且能掌握对各个库的相应关系组合构件它不是单纯从某个构件继承下来的,只是组合任何想要组合的构件来实现某项功能因此必须考虑该组合构件的父类问题

        组合构件也跟构件库里面的构件一样,它也可能要接收信号并做出相应的处理因此挂接信号也是设计需要考虑的问题


        作为一个构件,组合构件也应有自己的风格,由于组合构件是多个构件的组合,每个构件又有其不同的风格,如何确定当前构件的风格也是设计的难点


        二,组合构件的设计思想及其实现

        1 组合构件的设计思想

        通俗的讲,GTK+的构件库是基于C语言的,它不具有面向对象的特性,然而GTK+的确又是面向对象的,那是因为它用C语言来实现了C++编译器的功能因此它同样具有继承的特性,

    它的代码风格也延续了面向对象的设计风格在GTK+库中,直接继承自GtkObject对象的构件主要是GtkWidget,它几乎是所有可视构件的共同祖先,大多数构件共有的属性都包括在其中与

    其他GUI开发工具不同的是,我们不用直接创建GtkObject或GtkWidget对象,而是用定义对象的实例结构和类结构的方式来定义对象,然后再通过类型注册来实现对象当前笔者就根据组合

    构件的特点,直接从GtkObject继承它与GtkWidget是一种并行关系和其他构件一样,它也有相应的宏定义,来进行各种强制转换和类型获取

       

    任何一个构件都有其创建对象函数,组合构件也是一样,在对象中定义各个成员构件,在创建对象时将其一一创建,并根据需要对其各个构件来进行属性设定,最后返回的是组合构件对象本

    身关于信号的设定也是和其他构件的方法一样,在类的结构体中定义信号,并在类的初始化中对信号进行定义
   
    组合构件的接口设计应可以根据当前总体设计的需要,而不是像一般构件一样完全的独立出来,它具有自己的特色,并不需要刻意遵守一般构件的要求这也是组合构件的灵活性所在



    GTK+允许用户通过rc文件来定制应用程序的主题风格,即设置构件颜色、字号大小,并为构件添加背景图标等而对于组合构件而言,由于其为多个构件的组合,每个构件都有其相

    应的风格设计,因此严格的讲它本身是不具有风格设计的,所谓组合构件的风格设计,就是对各个构件进行风格设计,并将其风格设定封装在一个函数里,对外只提供一个接口对于组合构件

    如果不进行风格设计,它将沿用整个图形界面的风格设计。



   



    引入:
      什么是gtk主题引擎???
     
    主题引擎是应用程序主题使用的一些代码。如今,已有许多不同的主题引擎存在。
        GTK + 主题由三件事: 一个主题引擎 ,这是一个共享对象包括代码的图形要素,一个配置文件来配置的运作主题的引擎和核心部分基于GTK +和额外的数据文件的主题引擎如图片。

         A theme can include its own theme engine, it can use an existing theme engine, such as the Pixbuf theme which draws all elements in terms of images, or it can use GTK+'s built in drawing code.


    GTK+程序启动如何分析主题?
    每一个GTK+的程序都会在启动时分析当前主题的gtkrc文件来决定显示控件的风格,在gtkrc文件中通常会定义一个theme engine,并给它传递适当的参数,例如
    engine "crux-engine" {
    rect_scrollbar = TRUE
    }

    theme engine以共享库的形式存在,存放在/usr/lib/gtk-2.0/2.2.0/engines或/usr/lib/gtk/themes/engines下,文件名形式为libcrux-engine.so.

    我们看在实施题材引擎的有些细节。 如上所述,题材引擎是一个共有的对象。 共有的对象必须出口三个入口:
   
    (1)void        theme_init            (GtkThemeEngine *engine);
          (2)void        theme_exit            (GtkThemeEngine *engine);
          (3)GtkRcStyle *theme_create_rc_style (GtkThemeEngine *engine);


    重点:1,在theme_init函数主要执行以下两个函数,注册生成GtkRCStyle和GtkStyle类。
    crux_rc_style_register_type (module);
    crux_style_register_type (module);
    
    -----crux_rc_style_register_type函数执行GtkRCStyle类的初始化函数,重载crux_parse_rc_style和crux_rc_style_merge函数ÿ
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值