首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

GTK+和X在嵌入式Linux中的应用 02

GTK+和X在嵌入式Linux中的应用 02

X-window:比你想象的要小很多
  对于X-window系统,广大的网络开发者已经做了大量的工作来减小其的尺寸,最知名的有TinyX。可以通过对不需要的代码的裁剪及去除XLIB中静态数据来减少总体的尺寸,如:color管理系统,弧形,粗线条等。
  在大多数开发人员的印象里,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系统是假定你会硬编码一个希望的字体或者分析出一个字体名,改变字体及验证结果都将在字体服务器上。
返回列表