MiniGUI-VAR V2.0.3 和 MiniGUI V1.6.9 产品特性的增强与优化
minigui-var v2.0.3 和 minigui v1.6.9 产品特性的增强与优化
1、ui美化增强
ui美化增强是 minigui-var 新版本的重要特性之一。在以前的发布版本中,minigui 提供了三种用户外观风格:pc3d, flat 和 phone。在当前版本中新的三种用户外观风格分别为: classic, flat 和 fashion。这几种风格可以被用在不同的显示设备和应用领域。用户可根据自己的需要在配置 minigui 时指定所需的外观风格:
* classic 外观风格类似于 windows 经典风格, minigui 默认配置时采用此种外观风格,相应的配置选项为--with-style=classic;
* flat 外观风格常被用于工业控制和灰度级显示屏上,相应的配置选项为--with-style=flat;
* fashion 外观风格适用于手持设备,相应的配置选项为--with-style=fashion。
为了达到外观风格的显示效果,我们在如下几个方面做了改善:
* minigui 实现了对256色 icon 图片的支持,即用户可以通过 loadiconfromfile, loadiconfrommem, 和 createiconex 函数实现对 icon 图片的装载和创建。
* minigui 实现了类似于 windows 菜单显示效果的滚动功能支持, pushbutton 外观 风格下不再支持定高方式, minigui 不再使用 stock 位图对象绘制 fashion 外观 风格下的 pushbutton。
* 增强了内嵌方式下对主窗口元素初始化的实现。
* 更新了不同外观风格所使用的位图和内嵌资源。
* 更新了所有不同外观风格的相应配置文件。
* 所有控件的外观也进行了相应的调整。
2、字体渲染增强
为了提高对 truetype 字体的渲染性能,在此版本中增加了对 truetype 字体的缓存机制支持,此功能可以在 minigui 编译配置时通过相应的配置选项 --enable-ttfcache 来开启。同时亦增加了对逻辑字体渲染的翻转、自动缩放和使用时强制关闭 cache 机制的支持。其中与逻辑字体的翻转支持相对应的逻辑字体类型为 font_flip_horz (水平翻转), font_flip_vert (垂直翻转)和 font_flip_horzvert (水平、垂直同时翻转);与逻辑字体的自动缩放支持相对应的逻辑字体类型为 font_other_autoscale;与逻辑字体的使用时强制关闭 cache 机制支持相对应的逻辑字体类型为 font_other_ttfnocache。为了进一步提高对逻辑字体的渲染效果还做了对 qpf 字体自动缩放的支持,内建资源方式下宋体 gb2312 12x12 rbf 字体更新和相应的资源包字体文件更新等工作。
下面是创建一可水平翻转的逻辑字体的部分代码,可供参考:
createlogfont (null, "song", "gb2312",
font_weight_regular, font_flip_horz, font_flip_horz,
font_other_nil, font_underline_none, font_struckout_none,
12, 0);
minigui 在以往发布的版本中将 "set width" 和 "spacing" 两个作为保留逻辑字体类型,而在此版本中这两个逻辑字体类型分别被 "flip" 和 "other" 所取代。因此 createlogfont 的原型由原来的:
plogfont guiapi createlogfont (const char* type, const char* family,
const char* charset, char weight, char slant, char set_width,
char spacing, char underline, char struckout,
int size, int rotation);
调整为:
plogfont guiapi createlogfont (const char* type, const char* family,
const char* charset, char weight, char slant, char flip,
char other, char underline, char struckout,
int size, int rotation);
考虑到向后的兼容性问题,"set width" (font_setwidth_*) 和 "spacing" (font_spacing_*) 这两种类型仍然有效. 然而这些类型均对翻转字体和其它渲染类型无影响。
3、控件的增强和优化
控件的增强和优化主要包含了几方面:通知码增强、功能完善和刷新优化。
在通知码方面主要是调整了对多行编辑框控件的 en_clicked 的支持,由先前的鼠标左键按下时发送通知码调整为鼠标左键弹起时发送通知码;增加了对多行编辑框的em_limittext (设置文本上限) ,em_getlimittext (获取文本上限),和 es_nohidesel (失去焦点时可显示选中的文本内容)的支持;增加了对编辑框的 en_selchanged 和 en_contchanged 的支持;增加了对组合框cbn_clicked的支持等。
在功能完善方面主要是增加了对列表框控件水平滚动条的支持;调整了多行编辑框中的光标显示形状;增加了对属性页控件两种新的风格 pss_scrollable (tabs滚动) 和 pss_bottom (在控件下方显示tabs)的支持等。
在刷新优化方面主要是对网格控件,列表型控件,树型控件,单行和多行编辑框等控件。
4、位图旋转、翻转和缩放支持
为了增强对位图旋转、翻转和缩放的支持新增了如下一系列函数:
* pivotscaledbitmapflip 实现对位图对象以任意点为中心的旋转、缩放和翻转支 持。
* pivotbitmap 实现对位图对象以任意点为中心旋转的支持。
* rotatebitmap, rotatescaledbitmap 实现对位图对象围绕中心点旋转和缩放的支持。
* rotatebitmapvflip, rotatebitmaphflip 实现对位图对象围绕中心点旋转的同时进行翻转的支持。
* rotatescaledbitmapvflip, rotatescaledbitmaphflip 实现对位图对象以中心点旋转缩放的同时进行翻转的支持。
5、副屏支持
当系统中有多个视频设备时,可将一个作为 minigui 的主屏,实现完整的多窗口系统;而其它设备作为副屏,在其上通过 minigui 的图形接口来实现文字渲染、图形显示等功能。此功能多用于手持设备等领域。此部分功能新增的接口有:
* initslavescreen 根据指定的引擎和显示模式打开副屏并返回一个图形设备上下文 句柄。
* terminateslavescreen 用于销毁副屏对象并释放资源。
6、位图装载/缩放优化
此次优化是通过调整位图装载的内部实现方式来完成的。新的实现方式是每加载完一扫描行后即调用一回调函数 cb 来处理,这大大降低了从文件或内存中装载位图时内存资源的占用。相关的函数如下:
* initmybitmapsl 初始化来自数据源的 mybitmap 对象的扫描线装载器。
* loadmybitmapsl 依次按扫描线方式装载来自数据源的 mybitmap 对象。此函数在一 扫描线被装载后会调用传递给 initmybitmapsl 的回调函数 cb 来处理扫描线。
* cleanupmybitmapsl 用于释放资源。
registerbitmapfiletype函数原型由原
bool guiapi registerbitmapfiletype (const char *ext,
int(*load)(mg_rwops *fp, mybitmap *bmp, rgb *pal),
int(*save)(mg_rwops *fp, mybitmap *bmp, rgb *pal),
bool(*check)(mg_rwops *fp))
改为
bool guiapi registerbitmapfiletype (const char *ext,
void* (*init) (mg_rwops* fp, mybitmap *my_bmp, rgb *pal),
int (*load) (mg_rwops* fp, void* init_info, mybitmap *my_bmp,
cb_one_scanline cb, void* context),
void (*cleanup) (void* init_info),
int (*save) (mg_rwops* fp, mybitmap *my_bmp, rgb *pal),
bool (*check) (mg_rwops* fp));
使用新的实现方式还涉及到了对以下函数的重新实现:
* loadmybitmapex, loadmybitmapfromfile 和 loadmybitmapfrommem
* loadbitmapex, loadbitmapfromfile 和 loadbitmapfrommem
同时依照此种实现方式还添加了下面几个新的绘制和缩放位图函数:
* paintimageex, paintimagefromfile 和 paintimagefrommem
* stretchpaintimageex, stretchpaintimagefromfile 和 stretchpaintimagefrommem
在此种实现方式下,您可以自定义位图的扫描线回调函数的处理方式,从而可以实现只装载位图对象的其中一部分等功能。
7、增加对 ose 操作系统的支持
minigui 在以往支持 linux/uclinux, uc/os-ii, threadx, nucleus, ecos, vxworks, win32 等嵌入式操作系统的基础上,新增了对 ose 操作系统的支持。minigui 增值版的新版本已经被验证可以在ose5.x操作系统上正常的运行。此次测试环境为:ose5.x windows 模拟器和 mx21 开发板。
发表时间:2006年7月6日17:32:20