在大多数开发人员的印象里,X 系统很庞大,但实际上,你听到的,是那些对 X 不够了解的人的一种误解 。在经过裁剪后的情况下,GTK /X 要比 GTK /FB 与 Qt/E 还要来得有效,且 XLIB 对一般的应用程序有着更好的支持作用,应用程序的开发会变得更高效 。
如何裁剪 GTK
我们可以从标准的 GTK发行版本来裁剪,裁剪掉其中的不需要的,修改已经有的代码,并加入新的特性所需要的代码 。裁剪的范围包括小的改动,也包括一些大的结构性的、核心的改变 。
1、 去除 Widgets 窗口
最开始,我们把不需要的 Widgets 去除掉,比如:GtkGamma、GtkHRuler、过时了的 GtkList(被 GtkCList所替代了)、和我们不需要的 GtkFrame 边框 。
2、 Widgets 窗口尺寸与绘制
接着,修改Widgets的大小与绘制方法,GTK 提供了一个主题引擎机制,来控制窗口的外观与效果 。它允许在运行中设置字体,设置行间隔,设置绘制特性 。这样的机制很不错,但不够灵活,代码中很多设置的地方都是使用硬编码的方式;另外,一种主题,就是一堆额外的代码段和参数,这样会增加整体的尺寸 。
需要找出影响到窗口系统整体尺寸的内容,再来修改它 。比如,一个按钮的大小与绘制,包括这样的参数:边框的宽度,x/y的位置(主题引擎需要的参数),缺省的间隔(常量),缺省的左上角的位置(常量),获得焦点 。这些在嵌入系统中并不需要那么完整,我们可以根据实际的需求来简化代码,来避免GTK 的复杂性 。
另外,使用面向对象的方法,来继承窗口Widgets的特性,作为子类也是一个有效的方法 。
3、GtkWindow
GTK 总是假定一个窗口里面包含了另一个窗口,它们就是嵌套关系 。但对于我们经常会碰到的有软键盘的应用时,就不完全正确了 。软键盘虽然是属于一个窗口的,但却会超出那个窗口 。所以为了突破这个假定,需要对GtkWindow增加一些特性,将软键盘处理成一种特殊的子窗口 。
软键盘所在的窗口,需要处理软键盘的按键事件,并将按键转发给软键盘工具条 。当软键盘按下,软键盘的回调函数就被注册到原始窗口上,这样软键盘就会响应按键事件 。在GtkWindow上增加接口,可以创建,响应按键 。
在小屏幕的嵌入系统中,可以将滚动条做得更简化些,去掉边框,使用单个滚动条 。这些都更适合嵌入系统 。
字体管理系统
在字体管理方面,要找到一个轻型的机制来在嵌入式系统显示各种字体,并不是那么简单,困难在于GTK的大型的 Widget 风格与 X 系统的老式的字体管理机制的结合所引起的问题 。
前面提到的,主题引擎方式的GTK是用来控制窗口的样式与外观的 。在一个窗口显示之前,它会得到一个式样对象,GtkStyle,它可以是一个指向父窗口的式样对象指针,或者是一个新的类型,这些式样对象将被应用到这个窗口及它的子窗口 。这个式样由缺省值、rc 文本文件、应用来确定 。
要改变一个窗口的字体,你必须克隆窗口的式样,并使用X字体加载一个新的字体,类似adobe-helvetica-bold-r-normal--12-*-*-*-p-*-iso8859-1 。
但实际中会有些问题,GtkStyle是一个大的对象 。如果一个屏幕上有很多种不同字体大小的多个窗口,每个都有一个唯一的GtkStyle对象,我们就会浪费大量的内存 。到最后,X系统就不能支持类似字体的各种变化了 。你甚至不能使X完成让某个字体变粗的操作,因为X系统是将不同外型的字体作为不同的字体的 。X系统是假定你会硬编码一个希望的字体或者分析出一个字体名,改变字体及验证结果都将在字体服务器上 。
推荐阅读
- 在乡镇上做什么生意好
- 怎么给宝宝起英文名
- 马蹄铁何时在中国出现
- 如何用象棋软件在网上下棋
- 江南百景图跑丢的大母鸡在哪里
- PPT中提取图片中颜色具体操作步骤
- 二 你是我买的第一个
- Linux configure关于交叉编译的参数设置
- 山药在地下怎么长的
- 实用技巧:Linux2.6.18 SD卡驱动的修正