8、 Microwindows 和 X-Window 相比也是一个不错的选择,它占用大约 100KB-600KB 大小的内存,和文件存储空间,虽然已经有了一个其上的 GTK+ 移植,但还是不够成熟;
X-window:比你想象的要小很多
对于X-window系统,广大的网络开发者已经做了大量的工作来减小其的尺寸,最知名的有TinyX。可以通过对不需要的代码的裁剪及去除XLIB中静态数据来减少总体的尺寸,如:color管理系统,弧形,粗线条等。
在大多数开发人员的印象里,X 系统很庞大,但实际上,你听到的,是那些对 X 不够了解的人的一种误解。在经过裁剪后的情况下,GTK+/X 要比 GTK+/FB 与 Qt/E 还要来得有效,且 XLIB 对一般的应用程序有着更好的支持作用,应用程序的开发会变得更高效。
如何裁剪 GTK+
我们可以从标准的 GTK+ 发行版本来裁剪,裁剪掉其中的不需要的,修改已经有的代码,并加入新的特性所需要的代码。裁剪的范围包括小的改动,也包括一些大的结构性的、核心的改变。
一、 去除 Widgets 窗口
最开始,我们把不需要的 Widgets 去除掉,比如:GtkGamma、GtkHRuler、过时了的 GtkList(被 GtkCList所替代了)、和我们不需要的 GtkFrame 边框。
二、 Widgets 窗口尺寸与绘制
接着,修改Widgets的大小与绘制方法,GTK+提供了一个主题引擎机制,来控制窗口的外观与效果。它允许在运行中设置字体,设置行间隔,设置绘制特性。这样的机制很不错,但不够灵活,代码中很多设置的地方都是使用硬编码的方式;另外,一种主题,就是一堆额外的代码段和参数,这样会增加整体的尺寸。
需要找出影响到窗口系统整体尺寸的内容,再来修改它。比如,一个按钮的大小与绘制,包括这样的参数:边框的宽度,x/y的位置(主题引擎需要的参数),缺省的间隔(常量),缺省的左上角的位置(常量),获得焦点。这些在嵌入系统中并不需要那么完整,我们可以根据实际的需求来简化代码,来避免GTK+的复杂性。
另外,使用面向对象的方法,来继承窗口Widgets的特性,作为子类也是一个有效的方法。
三、GtkWindow
GTK+总是假定一个窗口里面包含了另一个窗口,它们就是嵌套关系。但对于我们经常会碰到的有软键盘的应用时,就不完全正确了。软键盘虽然是属于一个窗口的,但却会超出那个窗口。所以为了突破这个假定,需要对GtkWindow增加一些特性,将软键盘处理成一种特殊的子窗口。
软键盘所在的窗口,需要处理软键盘的按键事件,并将按键转发给软键盘工具条。当软键盘按下,软键盘的回调函数就被注册到原始窗口上,这样软键盘就会响应按键事件。在GtkWindow上增加接口,可以创建,响应按键。
在小屏幕的嵌入系统中,可以将滚动条做得更简化些,去掉边框,使用单个滚动条。这些都更适合嵌入系统。
字体管理系统
在字体管理方面,要找到一个轻型的机制来在嵌入式系统显示各种字体,并不是那么简单,困难在于GTK+ 的大型的 Widget 风格与 X 系统的老式的字体管理机制的结合所引起的问题。
前面提到的,主题引擎方式的GTK+ 是用来控制窗口的样式与外观的。在一个窗口显示之前,它会得到一个式样对象,GtkStyle,它可以是一个指向父窗口的式样对象指针,或者是一个新的类型,这些式样对象将被应用到这个窗口及它的子窗口。这个式样由缺省值、rc 文本文件、应用来确定。
|