快速业务通道

在嵌入式Linux系统中应用的GTK 和X分析

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-04
的,是那些对 X 不够了解的人的一种误解.在经过裁剪后的情况下,GTK /X 要比 GTK /FB 与 Qt/E 还要来得有效,且 XLIB 对一般的应用程序有着更好的支持作用,应用程序的开发会变得更高效.
 
  如何裁剪 GTK
 
  我们可以从标准的 GTK 发行版本来裁剪,裁剪掉其中的不需要的,修改已经有的代码,并加入新的特性所需要的代码.裁剪的范围包括小的改动,也包括一些大的结构性的、核心的改变.
 
  1、 去除 Widgets 窗口
 
  最开始,我们把不需要的 Widgets 去除掉,比如:GtkGamma、GtkHRuler、过时了的 GtkList(被 GtkCList所替代了)、和我们不需要的 GtkFrame 边框. 拥有帝国一切,皆有可能。欢迎访问phome.net
 
  2、 Widgets 窗口尺寸与绘制
 
  接着,修改Widgets的大小与绘制方法,GTK 提供了一个主题引擎机制,来控制窗口的外观与效果.它允许在运行中设置字体,设置行间隔,设置绘制特性.这样的机制很不错,但不够灵活,代码中很多设置的地方都是使用硬编码的方式;另外,一种主题,就是一堆额外的代码段和参数,这样会增加整体的尺寸.
 
  需要找出影响到窗口系统整体尺寸的内容,再来修改它.比如,一个按钮的大小与绘制,包括这样的参数:边框的宽度,x/y的位置(主题引擎需要的参数),缺省的间隔(常量),缺省的左上角的位置(常量),获得焦点.这些在嵌入系统中并不需要那么完整,我们可以根据实际的需求来简化代码,来避免GTK 的复杂性.
 
  另外,使用面向对象的方法,来继承窗口Widgets的特性,作为子类也是一个有效的方法.
 
  3、GtkWindow
 
  GTK 总是假定一个窗口里面包含了另一个窗口,它们就是嵌套关系.但对于我们经常会碰到的有软键盘的应用时,就不完全正确了.软键盘虽然是属于一个窗口的,但却会超出那个窗口.为了突破这个假定,需要对GtkWindow增加一些特性,将软键盘处理成一种特殊的子窗口.
 
  软键盘所在的窗口,需要处理软键盘的按键事件,并将按键转发给软键盘工具条.当软键盘按下,软键盘的回调函数就被注册到原始窗口上,这样软键盘就会响应按键事件.在GtkWindow上增加接口,可以创建,响应按键.
 
  在小屏幕的嵌入系统中,可以将滚动条做得更简化些,去掉边框,使用单个滚动条.这些都更适合嵌入系统.

 
  字体管理系统
 
  在字体管理方面,要找到一个轻型的机制来在嵌入式系统显示各种字体,并不是那么简单,困难在于GTK 的大型的 Widget 风格与 X 系统的老式的字体管理机制的结合所引起的问题.
 
  前面提到的,主题引擎方式的GTK 是用来控制窗口的样式与外观的.在一个窗口显示之前,它会得到一个式样对象,GtkStyle,它可以是一个指向父窗口的式样对象指针,或者是一个新的类型,这些式样对象将被应用到这个窗口及它的子窗口.这个式样由缺省值、rc 文本文件、应用来确定. 拥有帝国一切,皆有可能。欢迎访问phome.net
 
  要改变一个窗口的字体,你克隆窗口的式样,并使用X字体加载一个新的字体,类似adobe-helvetica-bold-r-normal——12-*-*-*-p-*-iso8859-1.
 
  但实际中会有些问题,GtkStyle是一个大的对象.如果一个屏幕上有很多种不同字体大小的多个窗口,每个都有一个唯一的GtkStyle对象,我们就会浪费大量的内存.到,X系统就不能支持类似字体的各种变化了.你甚至不能使X完成让某个字体变粗的操作,X系统是将不同外型的字体作为不同的字体的.X系统是假定你会硬编码一个希望的字体或者分析出一个字体名,改变字体及验证结果都将在字体服务器上.
 
  还可以使用一个更好的方法来完善字体管理系统,即包装GtkStyle,这样开发者就可以通过属性来获得一个窗口的字体,这比直接使用 X 系统字体的名字要更灵活.比如要显示一个比基本字体要大一号,并且是黑体字就可以调用:
 
  gtk_widget_set_font_bold (widget, TRUE);
 
 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号