3.2 MiniGUI
由于MiniGUI较好地将硬件设备抽象为GAL层和IAL层,移植时只需要针对自身的硬件特点按照GAL层调用接口和IAL层调用接口来做内部实现即可。图4为MiniGUI的GAL层结构示意,IAL层结构类似。
实现了framebuffer的Linux驱动后,配置MiniGUI选择Native的GAL引擎,便可以使用framebuffer作为MiniGUI的图形发生引擎。
MiniGUI的IAL层将输入设备的输入事件最终映射为GUI系统API层的消息事件。IAL层默认处理两种设备的输入操作:键盘设备和鼠标设备。键盘设备向上层提供不同的按键输入信息,鼠标设备提供点击、抬起和落笔坐标等的信息。在实现MiniGUI与输入设备驱动的接口时,采用Select的方式获得输入设备的动作,并转换为消息队列中的消息。消息参数按照Win32接口定义为点击键编号或鼠标当前的坐标(其中触摸屏事件与鼠标事件类似)。通过编写针对硬件开发系统的IAL支持代码,实现了IAL层的移植。
MiniGUI中多字体和字符集支持是通过设备上下文(DC)的逻辑字体(LOGFONT)实现的,创建逻辑字体时指定相应的字符集,其内部实现为对于所需显示字符的所属字符集的识别处理,最终调用相应字符集的处理函数族。应用程序在启动时,可切换系统字符集,如GB2312、BIG5、EUCKR、UJIS。MiniGUI的这种字符集支持方式不同于采用UNICODE的解决方案。在节省系统资源的意义上讲,这种实现更加适合于嵌入式系统应用,是MiniGUI的一大创新点。MiniGUI同时支持包括ttf、bdf、type 1、vbf等多种字体格式,可以根据需要配置MiniGUI来支持相应字体的显示。
3.3 Qt/Embedded的移植
Qt/Embedded的底层图形引擎完全依赖于framebuffer,因此在移植时需考虑目标平台的Linux内核版本和framebuffer驱动程序的实现情况,包括分辨率和颜色深度等在内的信息。当前嵌入式CPU大多内部集成LCD控制器,并支持多种配置方式。除少数CPU低色彩配置时的endian问题外,Qt/Embedded能够较好地根据系统已有的framebuffer驱动接口构建上层的图形引擎。
Qt/Embedded图形发生引擎中的图形绘制操作函数都是由源泉码目录src/kernel/中的src/kernel/qgfxreaster_qws.cpp中所定义的QgfxRasterBase类发起声明的。对于设备更加底层的抽象描述,则在src/kernel目录中的qgfx_qws.cpp中的Qscreen类中给予相应定义。这些是对framebuffer设备直接操作的基础,包括点、线、区域填充、alpha混合、屏幕绘制等函数均在其中定义实现。在framebuffer驱动程序调试通过后,配置Qt/Embedded的编译选项,可以保证Qt/Embedded的图形引擎正常工作。
Qt/Embedded中的输入设备,同样分为鼠标类与键盘类。其中鼠标设备在源泉码目录中的src/kernel/qwsmouse_qws.cpp中实现,从该类又重新派生出一些特殊鼠标类设备的实现类,其派生结构如图5所示。
|