MiniGUI中freetype库的支持

MiniGUI中freetype库的支持

MiniGUI中freetype库的支持

系统类型:arm;交叉编译器:arm-linux-gcc;minigui版本:V3.0.12

一、编译freetype库和重新编译libminigui

minigui中默认的configure命令是不支持freetype的支持的,要支持freetype库,需要下载freetype库进行交叉编译,然后重新编译libminigui(minigui核心库),并使用选项:--with-ttfsupport=ft1/ft2,指定你freetype库的版本,同时用LDFLAGS 和 CPPFLAGS 指定freetype库的路径和头文件路径。如果minigui 库编译通过后,把编译通过的库复制到arm板上。

二、添加字库和修改MiniGUI.cfg文件

下载想要的字库添加的你的板子系统中(在我的csdn资源中有times.ttf、simhei.ttf两个矢量字库,大家可免费下载),我把这两个资源放在我的arm板问题系统的/usr/local/share/minigui/res/font 目录下。同时修改MiniGUI.cfg配置文件的一下部分:

[truetypefonts]

font_number=1

#times字库为ISO8859-1字符集

name0=ttf-times-rrncnn-0-0-ISO8859-1

#字体路径与你存放路径一致

fontfile0=/usr/local/share/minigui/res/font/times.ttf

注:name的命名格式为:-----

对于矢量字库,设为0

三、自己源程序中使用新字体

case MSG_CREATE:

logfontbig24 = CreateLogFont("FONT_TYPE_NAME_SCALE_TTF", "times", "ISO8859-1",

FONT_WEIGHT_SUBPIXEL, FONT_SLANT_ROMAN, FONT_FLIP_NIL,

FONT_OTHER_NIL, FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE,

32, 0);

......

break;

......

case MSG_PAINT:

hdc = BeginPaint(hWnd);

Rectangle (hdc, rc.left, rc.top, rc.right, rc.bottom);

InflateRect (&rc, -1, -1);

SelectFont (hdc, logfontbig24);

DrawText (hdc, "HELLO WORLD", -1, &rc, DT_LEFT | DT_WORDBREAK);

EndPaint (hWnd, hdc);

......

return 0;

.......

case MSG_CLOSE:

DestroyLogFont (logfontbig24);

......

return 0;

在编译程序时需要链接freetype库,-lfreetype。

比特币0.9.2版编译中文手册

比特币0.9.2中文版编译手册 日期:2014-07-01 构建比特币源码,是一件十分费时费力的工作,尤其在windows系统中编译比特币源码更加的麻烦,经过一两天努力,终于在windows7 64位系统中成功编译出了比特币源文件。现在总结如下,首先准备一套干净的windows7 64位操作系统,最好是使用vbox或者vmware 虚拟机建立一个专用系统,这样的可以防止其它干扰导至编译失败,接下来说说,我的编译过程: 1.安装msys系统 msys作用是在windows系统中重建linux系统编译环境,在msys系统下操作,就像linux 中的操作一样,具有相同的语法命令。从下面的网址中下载msys最新版: https://www.360docs.net/doc/a8577399.html,/projects/mingw/files/Installer/mingw-get-setup.exe/download 然后运行mingw-get-setup.exe文件后,选择安装目录为H:\MinGW,之后软件会首先更新下载库,更新成功会弹出一个窗口MinGW installation manager,在这个窗口中,只下载msys相关的包文件,不要下载mingw相关文件,因为不使用它带的这个mingw。 主要如下面所示: msys-base-bin msys-autoconf-bin msys-automake-bin msys-libtool-bin 选择好之后,点击Installation->Apply changes即可。一定要确保mingw包没有被下载,这里我们只需要msys相关系统,也要确保msys-gcc和msys-w32api等包没有被下载,否则当我们执行编译时,可能会调用这些不该出现的包文件,而导至编译失败。 2.安装perl系统 由于在编译比特币时,需要调用一些perl脚本,所以从下面的网址中下载一个perl安装程序,然后安装即可。 https://www.360docs.net/doc/a8577399.html,/ActivePerl/releases/5.18.1.1800/ActivePerl-5.18.1.1800-M SWin32-x64-297570.msi

minigui1.6.10安装

新手大家一起学(1)---minigui1.6.10安装笔记 首先,从飞漫的网站上下载相关的压缩包: https://www.360docs.net/doc/a8577399.html,/project/showfiles.php?group_id=231764& package_id=281013&release_id=617949。 qvfb-1.1.tar.gz minigui-res-1.6.10.tar.gz mg-samples-1.6.10.tar.gz libminigui-1.6.10.tar.gz 在home目录下创建一个minigui的目录 mkdir minigui 将这些压缩包拷贝到home/minigui目录下 首先安装minigui的资源文件:

[root@localhost minigui]# tar -xvzf minigui-res-1.6.10.tar.gz [root@localhost minigui]#cd minigui-res-1.6.10 [root@localhost minigui-res-1.6.10]# make install 安装minigui的库文件 [root@localhost minigui]# tar -xvzf libminigui-1.6.10.tar.gz [root@localhost minigui]# cd libminigui-1.6.10 [root@localhost libminigui-1.6.10]# ./configure [root@localhost libminigui-1.6.10]# make [root@localhost libminigui-1.6.10]# make install 安装minigui的例子库 [root@localhost minigui]# tar -xzvf mg-samples-1.6.10.tar.gz

交叉编译几种常见的报错

交叉编译几种常见的报错 由于是第一次交叉编译,不知道会出现什么问题,思路就是先把gcc和ld都改成arm的,然后遇到什么问题在解决什么问题,以下过程都是在这个思路下进行。 1.指定arm的编译器和连接器: 只是把gcc改为arm-none-linux-gnueabi-gcc,ld改为arm-none-linux-gnueabi-ld,其他的都没有 修改。出现以下错误: arm-none-linux-gnueabi-ld: warning: library search path "/usr/local/lib" is unsafe for cross-compilation arm-none-linux-gnueabi-ld: skipping incompatible /usr/local/lib/libfreetype.so when searching for -lfreetype arm-none-linux-gnueabi-ld: skipping incompatible /usr/local/lib/libfreetype.a when searching for -lfreetype arm-none-linux-gnueabi-ld: cannot find -lfreetype 分析原因是:链接的这些库文件都是在PC编译器下编译出来的,现在把它们和用arm-none-linux-gnueabi-gcc编译出来的文件做链接,当然会出错。 解决方法:这些库重新用arm-gcc重新编译生成相应的库。 下面使用是重新编译库文件的过程: 重新编译freetype 根据交叉编译的文档,我创建了一个文件夹/usr/local/arm-linux来存放编译后的库文件。执行: ./configure –host=arm-none-linux-gnueabi –prefix=/usr/local/arm-linux 注意:host的参数应该是交叉编译环境的前缀。 另外,freetype自动生成的include文件夹有点小问题,编译完成后的include目录结构是 /include/ft2build.h和

教程系列十--使用mStudio开发MiniGUI应用程序

天行健,君子以自强不息;地势坤,君子以厚德载物 天 嵌 通 途 工 作 室 教程系列 <十> 使用mStudio开发MiniGUI应用程序 工作室网址 https://www.360docs.net/doc/a8577399.html,/embedroad BBS https://www.360docs.net/doc/a8577399.html,/embedroad/bbs 金 陵 科 技 学 院 信息技术学院 天嵌通途工作室教程系列/ EmbedRoad Studio Tutorials Series

https://www.360docs.net/doc/a8577399.html,/embedroad jinwenjie2007@https://www.360docs.net/doc/a8577399.html, 第 2 页 共 11 页 天嵌通途工作室是由学生自发组织的半商业性质的团体, 主要由金陵科技学院嵌入式爱好者以及软件工程爱好者组成, 使用mStudio开发MiniGUI应用程序 mStudio 是飞漫软件推出的面向MiniGUI 开发的一款可视化集成开发环境,基于Eclipse CDT,为开发人员提供所见即所得(WYSIWYG)的界面设计环境,同时,自动生成代码,维护工程框架等。运行于Windows 版本的mStudio 采用了MinGW 运行环境。 版本与运行环境: FMSoft mStudio 1.0 with MiniGUI-BE V3.0 for Windows 支持操作系统:Windows 2000 / XP / 7操作系统 支持硬件平台:x86 一、软件安装 1.1 安装C/C++运行环境 如果您未安装VS2005的运行环境,请安装vcredist_x86.exe ,也可以在工作室网站上下载:https://www.360docs.net/doc/a8577399.html,/embedroad/down.asp 。 如果你已经装过VS2005集成开发环境,则这步可以省略。 1.2 安装JRE或者JDK 如果您未按照JRE运行环境,请安装Windows版本JRE 。 (jre-6u19-windows-i586.exe) 以上两个全部默认路径安装即可。JRE 的安装目录是:C:\Program Files\Java。 1.3安装mStudio 下载网址:https://www.360docs.net/doc/a8577399.html,/index.php?id=136&L=1。 运行mStudio-1.0-MiniGUI-BE-3.0-MinGW-en.msi ,这个软件免费,一路默认安装即可。 1.4 选择Workspace路径 双击软件运行Eclipse,第一次启动时需要选择Workspace 路径,但工程存储路径中不能包含空格和中文字符。例如:

FreeType的缓存

FreeType的缓存.txt你妈生你的时候是不是把人给扔了把胎盘养大?别把虾米不当海鲜。别把虾米不当海鲜。 FreeType的缓存子系统提供了一个高性能的管理face、size、glyph image和charmap的途径。 I. Requirements and Design Goals: When dealing with fonts, caching rapidly becomes a necessity for at least the following reasons: 当处理字体时,高速缓存是必要的,原因如下: l 打开字体文件是相当慢的,因为它需要加载数据到内存中。所以,尽可能地保持FT_Face对象处于打开状态是一个好主意。 l 每一个FT_Face 或 FT_Size对象会占用几百KB,假设它总是很大,应该限制打开的face的个数到最小。 l 每个face包含成百上千的字形,由于通常只是使用一个face中的一小部分字形,一次性加载所有的字形是完全没有必要的。应该缓存我们经常使用的字形。 l 当属于给定face的所有字形已经载入内存时,对应的FT_Face对象可以被关闭已减少内存的占用。 FreeType缓存子系统提供了自动完成上述任务的很好的途径。 II. The Cache Manager: FTC_Manager用于处理缓存中的各种数据。应首先调用FTC_Manager_New 来创建它。 1. 通过FTC_FaceID鉴别face: FTC_Manager并不直接知晓哪些字体被安装了或者在运行期是否有效。应用程序有责任定位和鉴别face,并打开相应的字体文件。这意味着应用程序必须使用一个指针(FTC_FaceID)来唯一鉴别一个给定的有效的或已安装的face。虽然这个指针对于FTC_Manager来说并不重要,但是它们的值在程序运行期必须始终保持不变,用于关联缓存的数据和它们相应的face。 应用程序也必须提供(在FTC_Manager_New期间)一个专门的回调函数FTC_Face_Requester。这个外观请求器管理从一个给定的FTC_FaceID转换到一个新FT_Face对象,这通常暗示着调用FT_New_Face 或FT_Open_Face。

操作系统

第7章移动互联网技术 7.1 移动操作系统 智能手机操作系统是一种运算能力及功能比传统功能手机更强的操作系统。使用最多的操作系统有:Android、iOS、Symbian、Windows Phone和BlackBerry OS。他们之间的应用软件互不兼容。因为可以像个人电脑一样安装第三方软件,所以智能手机有丰富的功能。智能手机能够显示与个人电脑一致的正常网页,它具有独立的操作系统以及良好的用户界面,拥有很强的应用扩展性、能方便随意地安装和删除应用程序。 7.1.1 Android概述 Android是一种以Linux为基础的开放源代码操作系统,主要使用于便携设备。目前尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由Google收购注资,并组建开放手机联盟进行开发改良,逐渐扩展到平板电脑及其他领域上。Android的主要竞争对手是苹果公司的iOS以及RIM的Blackberry OS。2011年第一季度,Android 在全球的市场份额首次超过塞班系统,跃居全球第一。 7.1.1.1Android系统架构 图android 系统架构图

1)Linux 内核层: Android系统是基于Linux 2.6内核的,这一层为Android设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi驱动、电源管理等。 2)Android 运行时环境: a)Android 核心库:提供了JA V A库的大多数功能 b)Dalvik 虚拟机: 依赖于linux 内核的一些功能,比如线程机制和底层内存管理机制。同时虚拟机是基于寄存器的。Dalvik 采用简练、高效的byte code 格式运行,它能够在低资耗和没有应用相互干扰的情况下并行执行多个应用,每一个Android 应用程序都在它自己的进程中运行,并且都拥有一个独立的Dalvik 虚拟机实例。Dalvik 虚拟机中可执行文件为.dex文件,该格式文件针对小内存使用做了优化。所有的类都经由JA V A 编译器编译,然后通过SDK中的"dx" 工具转化成.dex 格式由虚拟机执行。 3)类库: a)系统C 库(libc):专门为基于embedded linux的设备定制的。 b)媒体库:支持多种常用的音频、视频格式回放和录制,同时支持静态图像文 件。编码格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG。 c)SurfaceManager :对显示子系统的管理,并且为多个应用程序提供了2D和 3D 图层的无缝融合

《The design of FreeType 2》中译版

《The design of FreeType 2》中译版 介绍 这份文档提供了FreeType 2函数库设计与实现的细节。本文档的目标是让开发人员更好的理解FreeType 2是如何组织的,并让他们扩充、定制和调试它。 首先,我们先了解这个库的目的,也就是说,为什么会写这个库: * 它让客户应用程序方便的访问字体文件,无论字体文件存储在哪里,并且与字体格式无关。* 方便的提取全局字体数据,这些数据在平常的字体格式中普遍存在。(例如:全局度量标准,字符编码/字符映射表,等等) * 方便的提取某个字符的字形数据(度量标准,图像,名字,其他任何东西) * 访问字体格式特定的功能(例如,SFNT表,多重控制,OpenType轮廓表) Freetype 2的设计也受如下要求很大的影响: * 高可移植性。这个库必须可以运行在任何环境中。这个要求引入了一些非常激烈的选择,这些是FreeType2的低级系统界面的一部分。 * 可扩展性。新特性应该可以在极少改动库基础代码的前提下添加。这个要求引入了非常简单的设计:几乎所有操作都是以模块的形式提供的。 * 可定制。它应该能够很容易建立一个只包含某个特定项目所需的特性的版本。当你需要集成它到一个嵌入式图形库的字体服务器中时,这是非常重要的。 * 简洁高效。这个库的主要目标是只有很少cpu和内存资源的嵌入式系统。 这份文档的其他部分分为几个部分。首先,一些章节介绍了库的基本设计以及Freetype 2内部对象/数据的管理。 接下来的章节专注于库的定制和与这个话题相关的系统特定的界面,如何写你自己的模块和如何按需裁减库初始化和编译。 一、组件和API FT可以看作是一组组件,每个组件负责一部分任务,它们包括 * 客户应用程序一般会调用FT高层API,它的功能都在一个组件中,叫做基础层。 * 根据上下文和环境,基础层会调用一个或多个模块进行工作,大多数情况下,客户应用程序不知道使用那个模块。 * 基础层还包含一组例程来进行一些共通处理,例如内存分配,列表处理、io流解析、固定点计算等等,这些函数可以被模块随意调用,它们形成了一个底层基础API。 如下图,表明它们的关系:

几种GUI比较

几种嵌入式GUI介绍 一、MicroWindows Century软件公司维护的,较早出现的开放源代码的嵌入式嵌入式GUI 特点: 1主要特色:提供较为完善的图形功能,支持多种外部设备输入,包括LCD、鼠标和键盘等。 2核心是基于显示设备接口的,绝大部分使用C语言开发的,移植性很强。 3主要在linux、wince等操作系统上运行。 4对硬件资源的需求: 文件存储空间:100k-600k 输入输出接口:支持frambuffer ,支持每像素1、2、4、8、16、24、32.支持彩色和灰度显示。支持鼠标、键盘、触摸屏。 CPU:支持intel 16位32位,MIPS R4000、ARM。 二、Qt/Embedded(简称QtE) QtE是一个专门为嵌入式系统设计图形用户界面的工具包,挪威Trolltech 公司产品。1995年正式发行第一个版本Qt0.9。Linux桌面系统的KDE 就是基于Qt库开发的,Qt与linux操作系统的兼容性最好。

特点: 1主要特色:支持多种平台,移植时只需重新编译代码而不需要对代码进行修改。 2模块化,可剪裁,极其适合嵌入式系统的“小而快”的要求。 3用C++编写,为开发者提供清晰的框架。 4 For free 版本代码完全开放。https://www.360docs.net/doc/a8577399.html, 三、uc/GUI uC/GUI是一个通用的嵌入式应用的图形模块,它是美国Micrium公司开发的一种高效的、与处理器和LCD控制器独立的通用GUI,可以适用各种CPU和LCD,uC/GUI完全以ANSI-C编写,因此它与处理器无关,在单任务和多任务操作系统都可以很好的应用、可以很方便地移植到不同的操作系统和嵌入式微处理器上,并可支持不同尺寸的图形液晶显示器。它采用层次化的设计,功能强大,移植方便,被广泛地应用于嵌入式领域,如PDA、机顶盒以及DVD NCD播放机等 (1)支持任何8位、16位和32位的CPU,只要求CPU具有相应的ANSI-C编译器即可; (2)所有硬件接口定义都使用可配置的宏; (3)字符、位图可显示与LCD的任意点,并不限制与字节长度的整数倍数地址; (4)所有程序在长度和速度方面都进行了优化,结构清晰;

应用freetype开发描边字体

应用freetype开发描边字体 在天龙八部,聊个斋这些国产的游戏中,都用到了freetype,并使用到freetype提供的描边生成方法。 关于freetype怎么应用描边,有个sample,链接如下 https://www.360docs.net/doc/a8577399.html,/freetype2/docs/tutorial/example2.cpp 但是这个sample中的生成描边的方式是低效率的,因为是间接生成的,在描绘函数里面得到span的信息,然后又遍历了span再生成bitmap,最后再输出。 经过我一个通宵研究,我想出了一个更为直接的描绘方式。 只要把这个sample中间的一部分替换成如下代码就可以了: FT_Outline *outline = &reinterpret_cast(glyph)->outline; FT_Glyph_Get_CBox(glyph, FT_GL YPH_BBOX_GRIDFIT, &bbox); int width = (bbox.xMax - bbox.xMin)>>6; int rows = (bbox.yMax - bbox.yMin)>>6; bmp.buffer = new unsigned char[width * rows]; memset(bmp.buffer, 0, width * rows); bmp.width = width; bmp.rows = rows; bmp.pitch = width; bmp.pixel_mode = FT_PIXEL_MODE_GRAY; bmp.num_grays = 256; memset(¶ms, 0, sizeof (params)); params.source = outline; params.target = &bmp; params.flags = FT_RASTER_FLAG_AA; FT_Outline_Translate(outline,-bbox.xMin,-bbox.yMin); FT_Outline_Render(library, outline, ¶ms); save_edge_buffer = bmp.buffer; FT_BBox bbox_in; FT_Glyph glyph_fg; FT_Get_Glyph(size->face->glyph, &glyph_fg); FT_Glyph_Get_CBox(glyph_fg, FT_GL YPH_BBOX_GRIDFIT, &bbox_in); bmp.buffer = new unsigned char[width * rows]; memset(bmp.buffer, 0, width * rows); bmp.width = width; bmp.rows = rows;

MiniGUI 体系结构

MiniGUI 体系结构之二 1 引言 在任何一个足够复杂的 GUI 系统中,处理窗口之间的互相剪切是其首要解决的问题。因为多窗口系统首先要确保一个窗口中的绘制输出不会影响到另外一个窗口。为此,GUI 系统一般要利用 Z 序来管理窗口之间的互相剪切关系。根据窗口在 Z 序中所处的位置,GUI 系统要计算每个窗口受剪切的区域,即剪切域。通常,窗口的剪切域定义为互不相交的矩形集合。GUI 系统的底层图形引擎在进行输出时,要根据当前输出的剪切域进行输出的剪切操作。从而保证窗口的绘制输出不会互相影响。因为任何一个窗口的创建、销毁、隐藏、显示均有可能影响其他窗口的剪切域,所以首先要有一个高效的剪切域维护算法。本文将详细描述MiniGUI 中的剪切域生成算法。 许多人对控件(或者部件)的概念已经相当熟悉了。控件可以理解为主窗口中的子窗口。这些子窗口的行为和主窗口一样,即能够接收键盘和鼠标等外部输入, 也可以在自己的区域内进行输出?D?D只是它们的所有活动被限制在主窗口 中。MiniGUI 也支持子窗口,并且可以在子窗口中嵌套建立子窗口。我们将MiniGUI 中的所有子窗口均称为控件。 在 Windows 或 X Window 中,系统会预先定义一些控件类,当利用某个控件类创建控件之后,所有属于这个控件类的控件均会具有相同的行为和显示。利用这些技术,可以确保一致的人机操作界面,而对程序员来讲,可以像搭积木一样地组建图形用户界面。MiniGUI 使用了控件类和控件的概念,并且可以方便地对已有控件进行重载,使得其有一些特殊效果。比如,需要建立一个只允许输入数字的编辑框时,就可以通过重载已有编辑框而实现,而不需要重新编写一个新的控件类。 在多语种环境中,输入法是一个必不可少的模块。输入法提供了将标准键盘输入翻译为适当语种的文字的能力。MiniGUI 中也包含有标准的中文简体输入法,包括全拼、五笔和智能拼音等等。本文最后将介绍 MiniGUI 中的输入法模块实现。 回页首 2 窗口 Z 序 Z 序实际定义了窗口之间的层叠顺序。说起“Z 序”这个名称,实际是相对屏幕坐标而言的。一般而言,屏幕上的所有窗口均有一个坐标系,即原点在左上角,X 轴水平向右,Y 轴垂直向下的坐标系。Z 序就是相对于一个假想的 Z 轴而言的,这个 Z 轴从屏幕外指向屏幕内。窗口在这个 Z 轴上的值,就确定了其 Z 序。Z 序值大的窗口,覆盖了 Z 序值小的窗口。

字体美化

Ubuntu 8.10Ubuntu 8.10字体美化原理初步探索字体美化原理初步探索 前言 本人(Gary)对操作系统的美观要求颇高,因为没有一个看上去舒服的系统就很难激发学习使用的热情。而Linux跟Windows相比在字体显示的美观度方面(特指汉字)差距颇大。一来微软投入了大量的资源和财力开发出了一些特定的商业字库供Windows使用,而来Windows本身也是以易用性强著称,所以微软在背后也做了大量的工作让使用者安装好系统就能近乎完美的浏览各种文档和页面。即使默认没有安装某种字体或者字库,想要增加也仅仅靠点击几下鼠标就能达到目的,不可谓不是已经做到极致。老实说至少在这个方面不管哪个Linux的发行版都是比不上。 虽然如此,但是由于Linux自身功能的强大性和自由性,我坚信可以定制修改出一个让人满意的字体显示效果,但是要达到这个目的可不是点点鼠标就可以的,背后隐藏着很多的知识。对于像我这样未入门的人来说门槛有些高。虽然网上有很多美化的方法和步骤,可是在我尝试过后都不是那么令人满意。主要有这样几个方面的问题:1. 每个人的系统安装情况不同,你有安装过的包我不一定装了。你方便找到或者安装上的包对于我来说却可能非常困难;2. 命令繁杂且都没有任何说明,让人难以理解,特别是对于初学者;3.美化以后绝大部分总会留有美中不足,比如大部分都好看了,可是某某某应用程序还是不行之类的事情经常发生;4.即使幸运的美化好了让你重新帮别人再弄一次估计都很难重现,因为根本不懂原理或者理解很浅薄容易遗忘。我就是因为上面4点原因因此决心好好研究一下Linux系统下的字体系统,以我目前新装上的Ubuntu 8.10为蓝本在网上搜索了大量的相关文章撰写本文,只是来源琐碎,有一些来源链接丢失了,实在是不好意思。不过本文也融入了大量的个人理解,并且修正了很多的错误。大家可以随意转载,没有任何限制,也不用通知本人,只需要连同前言部分也一起转载就可以了。如有错误欢迎批评指正,以便及时修正,免得误人子弟。 如有问题需要探讨请发送邮件到 预备知识 1.1.有衬线字体有衬线字体有衬线字体((Serif Serif)、)、)、无衬线字体无衬线字体无衬线字体((Sans Serif)Sans Serif)和等宽字体和等宽字体和等宽字体((Monospace Monospace)) 初看到“衫线”这个词时候以为是衬衫,心想字体还分什么有衬衫无衬衫?仔细一看才发现看错了,在字典里面查了一下发现原来“衫线”是一个术语起源于荷兰语,指字母的拐角或端点位置的修饰线。(如下图所示) 我们平时所用的Times New Roman、Georgia等就属于有衫线字体(Serif),而Arial、Tahoma、Verdana 等则属于无衫线字体(Sans Serif)。对中文而言,同样存在这两大种类,很明显,宋体、细明体(繁体中常用)等就属于Serif,而黑体、幼圆等则属于Sans Serif。总结一下个人觉得有衫线字体(Serif)就是有棱角而且粗细不一的,无衫线字体(sans serif)就是相对比较圆滑而且粗细均匀的字体。正是由于这个特性使得无衬衫字体(Sans Serif)比较醒目,而且字体较小的时候依然容易辨认,而有衫线字体(Serif)由于强调笔画始末,因此前后字母看上去连续性更强,适合阅读,可是字号小了以后有些细的地方就变得更细显得模糊或者发虚,但是大的时候却更有型。因此各有利弊,不同场合应该选择不同的字体来显示,这样才更加美观,也使得本文更有意义。 上面这两种字体类别又叫比例字体(Proportional Font),另外还有一种字体叫做等宽字体 (Monospace Font)。顾名思义就是字符宽度相等。在等宽字体中,字母 i,j 显得两侧餘白较多,

MiniGUI 高级图形支持系统

MiniGUI 高级图形支持系统 MiniGUI 是一款面向实时嵌入式系统的图形用户界面支持系统。MiniGUI 的开发起始于1998 年底,到现在已历经十年多时间。经过飞漫软件多年的精心打造,MiniGUI 已经成为性能优良、功能丰富的跨操作系统嵌入式图形用户界面支持系统。目前,MiniGUI 已经广泛应用于通讯、医疗、工控、电力、机顶盒、多媒体终端等领域。使用MiniGUI 成功开发产品的企业有华为、中兴通讯、大唐移动、长虹、TCL、联想、迈瑞、南瑞、炬力、D2 等。这些用户广泛分部在中国大陆、中国台湾、新加坡、韩国、美国、德国、意大利、印度、以色列等国家和地区。值得一提的是,在中国自主开发的3G 通讯标准TD-SCDMA 中,约有60% 获得入网许可证的TD-SCDMA 手机使用MiniGUI 作为其嵌入式图形平台,以支撑浏览器、可视电话等3G 应用软件的运行,其中有海信T68、中兴通讯U85 等TD 手机型号。 MiniGUI 的软件架构 如上图所示,从底至上,MiniGUI 由如下几个模块组成: 图形抽象层(Graphics Abstraction Layer,GAL)。图形抽象层将来自不同操作系统或设备的图形接口进行抽象,为MiniGUI 上层提供统一的图形接口。在图形抽象层内,包含有针对Linux FB 设备、eCos LCD 设备等的软件组成部分。这些软件组成部分通过调用底层设备的接口来实现具体的图形抽象层操作,如打开设备、设置分辨率及显示模式、关闭设备等。我们将

这些用于适配图形抽象层接口的软件组成部分称为“引擎(engine)”,其概念和操作系统中的设 备驱动程序类似。 ?输入抽象层(Input Abstraction Layer,IAL)。和GAL 类似,输入抽象层将MiniGUI 涉及的所有输入设备,如键盘(keyboard)、小键盘(keypad)、鼠标(mouse)、触摸屏(touch screen)等抽象了出来,为上层提供一致的接口。要支持不同的键盘、触摸屏或者鼠标接口,则通过为IAL 编写不同的输入引擎实现。MiniGUI 通过IAL 及其输入引擎,提供对Linux 控制台(键盘及鼠标)、触摸屏、遥控器、小键盘等输入设备的支持。 ?图形设备接口(Graphics Device Interfaces,GDI)。该模块基于图形抽象层为上层应用程序提供图形相关的接口,如绘制曲线、输出文本、填充矩形等等。图形设备接口中含包含其他比较独立的子模块,如字体字符集(font and charset)支持、图像(image)支持等。 ?消息处理模块(Messaging Module)。该模块在输入抽象层基础上,实现了MiniGUI 的消息处理机制,为上层提供了完备的消息管理接口。众所周知,几乎所有的GUI 系统本质上都是事件驱动的,系统自身的运行,以及GUI 应用程序的运行,都依赖于消息处理模块。 ?多窗口处理模块(Windowing Module)和控件(Control 或Widget)。基于图形设备接口和消息处理模块,MiniGUI 实现了多窗口处理模块。该模块为上层应用程序提供了创建主窗口和控件的基本接口,并负责维护控件类。控件类是用来实现控件代码重用的重要概念,利用控件类(control class),我们可以创建属于某个控件类的多个控件实例(instance),从而让这些控件实例使用同一个控件类的代码,这样,我们就实现了类似C++ 那样的类和实例概念, 从而可以最大程度上重复利用已有代码,并提高软件的可维护性。MiniGUI 的控件模块实现了常见的GUI 控件,如静态框、按钮、编辑框、列表框、下拉框等等。 ?外观支持(Look and Feel)。这个模块是MiniGUI V3.0 提供给上层应用程序的接口,可用来定制MiniGUI 窗口、控件的绘制。在MiniGUI V3.0 之前的版本中,对主窗口和控件的定制能力,还没有被抽离出来形成独立的模块,但我们仍然可以通过配置选项让MiniGUI 的主窗口、控件具有三种显示风格,分别是:类似PC 的三维风格(PC3D)、平板风格(FLAT)、流行风格(FASHION)。在MiniGUI 3.0 中,主窗口和控件的外观可完全由应用程序自行定制,在创 建主窗口或者控件时,指定外观渲染器(renderer)的名称,就可以让主窗口或者控件具有各自 不同的外观。 MiniGUI 运行模式 和Linux 这样的类UNIX 操作系统相比,一般意义上的传统嵌入式操作系统具有一些特殊性。举例而言,诸如uClinux、uC/OS-II、eCos 等操作系统,通常运行在没有MMU(内存管理单元,用于提供虚拟内存支持)的CPU 上;这时,往往就没有进程的概念,而只有线程或者任务的概念,这样,MiniGUI 的运行环境也就大相径庭。因此,为了适合不同的操作系统环境,我们可将MiniGUI 配置成三种不同的运行模式: ?MiniGUI-Threads。运行在MiniGUI-Threads 上的程序可以在不同的线程中建立多个窗口,但所有的窗口在一个进程或者地址空间中运行。这种运行模式主要用来支持大多数传统意义上的嵌入式操作系统,比如VxWorks、ThreadX、Nucleus、OSE、pSOS、uC/OS-II、eCos等等。 当然,在Linux 和uClinux 上,MiniGUI 也能以MiniGUI-Threads 的模式运行。

中文 LyX 使用简介

中文LyX 使用简介 小虫 LyX 这个程式在Linux 上面出现已经有一段时间了,也很早就可以支援中文的使用,其实已经可以作为在Linux 上面进行文书排版工作的很好用的解决方案,可惜的是,这支程式在国内似乎并没有受到足够的重视,没有被大家广泛接受并使用;作为一个从一年多以前就完全利用LyX 来处理日常文件排版工作的Linux 使用者,小虫想要利用这篇短短的文章来跟大家简单介绍一下LyX 的使用,并且稍稍分说LyX 这套排版系统跟Word 等程式的不同,希望能够让大家来认识一下LyX 配合LA TEX-CJK 的这套排版系统,进而让Linux 也可以帮大家处理日常的文件排版工作。 1 什么是LyX? 在谈论LyX 之前,要先请读者认识一下TEX 跟LA TEX 是甚么东东;1984 年的时候,Donald Knuth 教授为了他自己即将出版的新书排版美观的要求,开发了TEX 这套排版程式,提供一套语言来供使用者作文书排版的工作,并且还可以输出非常精美的文件,特别是在处理数学式子的时候TEX 特别的好用,所以这个系统马上受到广泛的爱用,现在还有不少人在撰写科学论文的时候还是习惯用TEX 来排版呢,美国物理学会跟数学学会都直接接受TEX 格式的文件投稿,可见得TEX 在科学论文方面的普遍性,不过,TEX 的指令太繁复了,使用起来并不是很方便,所以后来Leslie Lamport 在TEX 之上用巨集加入了许多扩充功能,发展出了更方便的LA TEX 系统,TEX/LA TEX 是幕后排版系统,他们利用指令来指定文件的种类跟文章内容的编排方式,所以说用LA TEX 来写文章就好像在写程式一样,虽然功能强大,可是入门的门槛可不低,使用上也不太方便;目前市面上有好几本讲述LA TEX 的中文书籍,想多了解LA TEX 的朋友可以自行去找来看看。 鉴于LA TEX 的学习不易,有心人士便替LA TEX 创造一个图形化的操作介面,那就是LyX 这一支程式啦,LyX 让使用者可以用"近乎" 所见即所得(What Y ou See Is What Y ou Get, WYSIWYG) 的方式来编排文件,不必再去记一堆LA TEX 的指令就可以编排文件了。既然称之为一个"前端介面",可想而知,LyX 其实只负责提供一个图形介面来方便使用者的操作,它本身其实并不负责文件的排版跟列印输出等等工作的,LyX 会将使用者编排的文件转成LA TEX 格式的档案,然后再呼叫系统里面的LA TEX 套件来进行排版的工作,产生排版的结果,所以要使用LyX 的话,系统上还要有LA TEX 才行。

MiniGUI及其移植与应用

MiniGUI及其移植与应用 权宁一 (东北电力大学信息工程学院吉林吉林132012) 【摘要】:本文介绍了MiniGUI系统在嵌入式开发中的移植与应用。对MiniGUI图形软件的特点、体系结构、工作模式做了叙述,描述了MiniGUI在uc_osⅡ环境中的移植方法,MiniGUI应用软件的开发思想和流程,并对其应用领域做了介绍。 【关键词】:MiniGUI,移植,控件,消息循环 1、MiniGUI概述 随着嵌入式系统在工业控制、信息家电、智能手持终端、办公自动化等领域中的广泛应用,人们对产品的图形用户接口(GUI)的需求越来越强烈。图形美观、界面友好的GUI已广泛应用在3G手机、PDA、智能传感器、工控终端等嵌入式设备上,其中比较成熟的GUI产品有:MiniGUI、MicroWindows、OpenGUI、TinyXWindow、QT/Embedded。 MiniGUI最初是清华大学为数控机床研发计算机控制系统时根据需要独立开发的图形用户接口,它具有代码小巧、实时性好、高效稳定、易于裁减的特点,非常适合应用于嵌入式实时控制系统。MiniGUI可以运行在任何一种具有线程支持的POSIX兼容系统上,同时也是国内出现的最早的遵循LGPL条约的自由软件之一。MiniGUI有三种运行模式:⑴MiniGUI-Threads:运行在MiniGUI-Threads的程序可在不同的线程中建立多个窗口,但所有的窗口在一个进程中运行,可以配合的操作系统有ucosii、vxworks、linux。⑵MiniGUI-lite:每个程序是单独的进程,每个进程可建立多个窗口,只有具备完整unix特性的操作系统才可运行这一模式。⑶MiniGUI-standalone,可以以独立进程方式运行而不需要其它任何支持,这种方式几乎可以支持所有操作系统。MiniGUI具有以下特点:⑴小巧可订制,包含全部功能的库文件只有300k。⑵高稳定性,可移植性好。⑶界面皮肤支持,用户可通过皮肤支持获得华丽外观界面。⑷提供了完备的多窗口机制及消息传递机制。⑸丰富的控件资源,包括菜单、进度条、列表框、按钮、工具栏等。(6)多种键盘布局支持,多字符集及多字体支持,常见的图像文件支持。⑺多种汉字输入法支持,windows资源文件支持。 2、MiniGUI的结构特点与移植方式 2.1MiniGUI的体系结构 图1MiniGUI结构体系 MiniGUI采用了分层结构设计思想,共分为GAL、IAL、Pthread层,MiniGUI核心层,用户接口层三层结构。GAL为图形抽象层,提供了底层操作系统的图形接口,配置MiniGUI选用GAL引擎,就可使用framebuffer作为MiniGUI图形发生引擎;IAL为输入抽象层,它提供了输入设备如键盘鼠标等的驱动,可将输入设备的输入事件最终映射为GUI系统API层的消息事件。有了GAL、IAL可以把底层硬件及操作系统进行完全屏蔽,方便MiniGUI的移植。同时,用户可在XWindow系统中调试运行自己的产品,通过重新编译就可使软件运行在特定的硬件平台上。Pthread(POSIXthread)是提供内核级线程支持的c库函数。MiniGUI核心层为中间层,包含了窗口系统所需要的各个功能模块,详见图1。用户接口层API对于不同的平台是一致统一的,底层系统已被完全屏蔽,用户不必考虑输入设备及绘图细节,只需使用标准C语言进行类似win32库函数调用即可。2.2MiniGUI工作模式 MiniGUI采用微客户/服务器机制,通过消息队列和多线程之间的同步机制来实现。在多线程环境中各线程之间有信息交互的需要,依据"先来先服务"的原则,依次处理每个线程的请求。一个线程首先在desktop微服务器的消息队列中放置一条消息,要求建立窗口,然后进入等待状态。当desktop处于空闲状态时可以立即处理这一请求。最后,desktop返回处理结果,唤醒等待的线程。 MiniGUI启动3个重要的微服务器,它们分别为desktop、parser、timer。其中desktop用于管理MiniGUI窗口中的所有主窗口;parser线程用于采集键盘鼠标事件并转换成API层消息;timer线程用来触发定时器事件。 2.3MiniGUI的移植 嵌入式系统的结构框架从底层到上层依次为:硬件平台、嵌入式操作系统、MiniGUI、用户程序,其中uclinux与uc/OS-II为常用的操作系统,下面以uc/OS-II为例介绍MiniGUI的移植。uc/OS-II具有实时性强、代码简单的特点,在教学及工业实时控制领域得到了广泛应用。MiniGUIforuc/OS-II的配置及编译可在windows环境中的ADS开发平台中进行,编译完成之后生成一个静态库MiniGUI_lib,最终生成包括uc/OS-II、MiniGUI、应用程序在内的可执行映像文件,将映像文件固化写入硬件平台即完成MiniGUI的移植。在编译之前需要进行以下工作:设置MiniGUI配置头文件、确定头文件路径、选定编译规则。MiniGUI配置头文件中参数_AUTO_IAL是模拟键盘鼠标选项;_COM-MM_IAL是uc/OS-II通用输入引擎;_GB_SUPPORT是字符集支持;_USE_OWN_MALLOC为内存管理函数支持;_USE_OWN_STDIO为函数支持。编译规则设置中_MiniGU-I_LIB_声明编译MiniGUI_LIB库;_uc/OS-II_声明目标操作系统;-EC允许隐性类型转换;_NOLINUX_表示非linux系统。3、基于MiniGUI的软件设计开发思想 3.1MiniGUI开发流程 uc/OS-II初始化后创建任务main_task,在该任务中创建POSIX协议线程main_thread,main_thread中调用函数mg_main_task,进入MiniGUI入口MiniGUI_entry,进而调用应用程序入口函数MiniGUIMain,执行用户软件及窗口过程函数。MiniGUI应用程序必须包括的头文件有:common.h--定义了宏及数据类型;minigui.h--定义了接口函数及杂项函数;window.h--定义了窗口的宏及数据类型;control.h--定义了系统内部控件。 MiniGUIMain()是程序的入口点函数,一般用户程序先创建一个主窗口或非模式对话框,在主窗口内建立若干控件,然后建立消息队列,进入窗口消息循环,响应各类消息。通过调用Cre-ateMainWindow()函数创建主窗口,函数返回窗口句柄。函数调用时需给MAINWINCREATE结构体指针赋值,确定主窗口的各项属性值。调用ShowWindow()函数将主窗口进行显(下转第71页 )

嵌入式Linux系统下的汉字处理和显示

嵌入式Linux系统下的汉字处理和显示本文阐述在嵌入式Linux环境下通过汉字编码的转换,汉字字体的提取,实现对汉字的处理和显示。所提出的解决方案,在嵌入式Linux环境下,可以不依赖于MicroWindows、MiniGUI等嵌入式图形界面接口软件实现汉字的处理与显示。 1 汉字编码的处理 由于传统的计算机字符内码ASCII码最多只能包含256个字符,只能包含英文字符和其他常用字符,而不能包含其它语言的字符,尤其是汉字。因此不同的组织机构又制定了包含汉字的字符编码标准。GB编码是由我国政府颁布的国家标准,经过不断扩充,形成了GB2312、GB13000(GBK)、GB18030标准;BIG-5码是主要由使用繁体字的地区采用的标准;Unicode编码是由Unicode协会为包含汉字在内的各种语种字符制定的统一字符集标准,同时兼容于国际标准ISO 10646,但是不兼容GB编码。Unicode编码又有UTF8等实现形式,一般Unicode指UCS-2规范。 在嵌入式Linux系统下使用的汉字,其来源大致可以分为: 1.程序字符串常量中的汉字; 2.文本文件或其它资源文件。 因为各种源文件编辑器、文本文件编辑器或资源文件来源的不同、网络环境的不同。因此嵌入式Linux系统下使用的汉字也体现为各种不同的编码格式,需要进行编码格式的转换,才能够对汉字进行正确的处理。 嵌入式Linux系统应用开发所使用的程序源文件和文本文件,一般是来自于Windows操作系统下的编辑工具,或Linux桌面操作系统下的编辑工具。Windows操作系统下的常用文本编辑器,如Notepad、UltraEdit等,缺省的文件编码保存格式是ASCII码,其中的汉字以GB编码保存。Linux XWindow下的图形界面文件编辑器gEdit,也以ASCII码作为缺省的文本保存编码,其中的汉字以UTF-8编码保存。 嵌入式Linux系统所使用的程序编译工具,如gcc、g++系列工具,按照ASCII码格式对源文件进行分析和编译,对于字符串常量中的字符,则不加区别,按原有编码格式编译进入目标文件。

相关主题
相关文档
最新文档