学习MiniGUI上使用TrueType字体时,在网上找了好多文章,总算是搞定了。不过话说这世界变化快,minigui也在更新迭代,这些文章大都是2年前写的,看这些文章对我入门有帮助,不过也被一些过时的内容坑了不次。在这里将我的过程做一个记录以备用。

新版本 MiniGUI 3.2.0

目前网上关于minigui的文章都是针对经典版本MiniGUI 3.0.12的,如果你现在访问MiniGUI的官网(http://www.minigui.org/zhcn)你会发现MiniGUI就在最近已经悄悄正式发布了MiniGUI 3.2.0,这个新一个主要的改进就是提供了64位版本和对触屏设备的支持(mGNCS4Touch),后面这个新的特性我还没有进一步了解,不过提供64位版本,对我来说,可是大大方便了我的开发。
因为现在多数人和我一样已经很少用32位的系统,为了在MiniGUI框架下开发就得多装一个32位的ubuntu系统。现在有了64位的版本,就不用频繁切换开发环境了。

参见《MiniGUI 3.2.0 Released(2018/07/12)》

如果你是新入手学习MiniGUI框架,强烈建议你使用MiniGUI 3.2.0,因为它使用更方便。如果你的项目已经在MiniGUI 3.0.12开发一阵子了,也可以直接升级到3.2.0。为什么我敢这么说呢?唉,说说自己的经历吧。
大概一个多月前我开发入门做嵌入式开发,找到MiniGUI这个框架。开始也是照着网上的教程,自己编译手工MiniGUI代码,又是手工安装miniStudio,好一阵折腾,等折腾好了,然后发现在MiniGUI官网上有这一篇文章:

《Setting up Development Environment on Ubuntu Linux》

文章很简单,一看就明白,就是在Ubuntu 16.04下设置MiniGUI开发环境的步骤。我才明白 MiniGUI官方已经提供了MiniGUI的package,可以直接用apt-get方式安装MiniGUI以及miniStudio。这比自己编译安装省太多事儿啦,几条apt-get执行完就搞定了。早知道就这个,我还浪费那么多时间手工编译干嘛(学会手工编译MiniGUI也是必要的,因为后面向开发板移植的阶段要用到)

然后我就在这个环境下开始了项目开发,边看着MiniGUI 3.0.12的文档(MiniGUI 3.0.12),边摸索就算入了门,这一个多月进展顺利。

今天我发现MiniGUI正式升级了,想到apt-get升级一下MiniGUI的版本,查看版本时发现,我一个月前安装的libminigui_ths版本号已经是3.2.0

也就是说至少一个月前就MiniGU官网的服务器上就已经提示了3.2.0的二进制版本,7月12日才正式发布,靠,还有这波操作?
我不知不觉已经照着3.0.12的文档在3.2.0上工作了这么长时间,目前没发现API接口与3.0.12有什么不同或不兼容。也就是说基于3.0.12版本开发的项目可以直接升级到3.2.0

搭建MiniGUI 3.2.0 开发环境

安装MiniGUI 3.2.0很简单前一节已经讲了参照这篇官方说明:《Setting up Development Environment on Ubuntu Linux》几分钟就能搞定了。
minigui提供了miniStudio这个所见即所得的界面开发工具可以大大提高开发效率,建议使用,miniStudio是基于eclipse的开发工具,所以要安装eclipse。
如果你还不会安装用eclipse,那可能要多花些时间安装eclipse。

TrueType字体支持

MiniGUI 3.2.0默认已经基于freetype2提供了对TrueType字体的支持。
打开/usr/local/include/minigui/mgconfig.h,就能看到_MGFONT_FT2已经打开,说明MiniGUI 3.2.0基于freetype2提供了对TrueType字体的支持(_MGFONT_TTF代表基于freetype1支持TrueType,在这里是关闭的)。

所以我们不必像MiniGUI 3.0.12那样为了支持TrueType而专门编译MiniGUI。

找一个TrueType 字库试试

TrueType 字库好找,你的C:\Windows\Fonts下面就有很多后缀为ttf的字体文件,如下图:比如黑体(simhei.ttf),楷体(simkai.ttf),幼圆(SIMYOU.TTF),仿宋(simfang.ttf),英文字体(times.ttf),英文字体(arial.ttf)。

将字体复制到你的ubuntu开发环境中(注意大小写)。你可以将字体直接复制到MiniGUI的系统字体目录下(/usr/local/share/minigui/res/font),也可以复制到你的项目字体资源文件夹下(/you/minigui/project/path/res/font),

如果你是用在eclipse中创建的MiniGUI项目,就会有一个res资源文件夹,默认res下是没有font文件夹的你要手工建一个。

NOTE:如果你是在ubuntu虚拟机下开发,复制字体文件到虚拟机后,最好执行chmod命令修改一下文件权限:
chmod 664 your_font_file

修改MiniGUI.cfg

有了ttf字体文件,MiniGUI并不会自动就知道的,你需要告诉它有哪些字体可用,这就需要修改MiniGUI的系统配置参数/usr/local/etc/MiniGUI.cfg:

(要管理员权限才能编辑 )
sudo gedit /usr/local/etc/MiniGUI.cfg

如下图打开系统配置文件,如下格式将ttf的位置和字体类型写入配置文件。本例中加了5种字体arial,times,msyh(微软雅黑),simyou(幼圆),simkai(楷体),(千万注意不要眼花修改到[type1fonts]下,否则就找不到字体了,我就干过好几次,看起来和[truetypefonts]太像了)

注意:

  1. name0-N是每个字体的名字,这可不是随便命名的,命名规则参见《MINIGUI-USER-MANUAL-V3.0》,3.1.5 小节
  2. fontfile0~N在指定字体文件位置时,可以用绝对路径,也可以如上图使用相对路径,如果使用相对路径,这个相对路径是基于minigui系统的资源文件夹(/usr/local/share/minigui/res),或项目的资源文件夹(/you/minigui/project/path)[创建eclipse创建的MiniGUI project才有这个文件夹结构]

MiniGUI搜索资源的方式

为什么放在项目的资源文件夹下,MiniGUI也能找到字体?
因为miniStudio生成的main代码中,已经调用SetResPath将当前文件夹加入资源搜索路径,你去查查你的main入口函数

int MiniGUIMain(int argc, const char* argv[])
{#ifdef ntStartWindowExMSG Msg;mMainWnd *mWin;#ifdef _MGNCS_INCORE_RESncsSetEtcHandle(ncsGetIncoreEtc());ncsInitialize();hPackage = ncsLoadIncoreResPackage();
#elsechar f_package[MAX_PATH];ncsInitialize();sprintf(f_package, "%s", "res/facelock.res");// 将当前文件夹加入资源搜索路径SetResPath("./");hPackage = ncsLoadResPackage (f_package);
#endif。。。}

miniStudio

好了,经过上一步,我们已经在MiniGUI的系统配置中加入了TrueType字体,下面我们可以试试在miniStudio中使用增加的矢量字体了

创建一个MiniGUI Project

首先我们 需要用于测试的MiniGUI项目,如下图打开系统菜单File->New->Other,如下图找到MiniGUI Project.就可以创建一个简单的MiniGUI Project.

miniStudio 选择TrueType字体

打开菜单File->New创建一个新的模板:

直到目前,都很顺序,然后选择字体 ,问题了来了。。。怎么没有我们刚刚安装的TrueType字体?

遇到这个问题时,我内心是崩溃的,miniStudio不是开源的,用户手册也没讲到这么细。然后我想到之前在《MINIGUI-USER-MANUAL-V3.0》看到的关于MiniGUI.cfg的内容(第3章),PDF文件截图如下:

如上图红框标的文字,应用程序首先是找当前文件夹下的MiniGUI.cfg,miniStudio这个开发工具的图形界面(guibuilder)应该也是一个基于于MiniGUI框架开发的GUI应用。所以它应该是有一个自己的MiniGUI.cfg

so,我想明白了。miniStudio这个开发工具的图形界面(guibuilder)的当前文件夹是/usr/local/etc/guibuilder/,在这里找到了它的MiniGUI.cfg

打开/usr/local/etc/guibuilder/MiniGUI.cfg,果然,这里还是默认的设置,

如前面修改/usr/local/etc/MiniGUI.cfg一样,添加TrueType字体。

再次打开miniStudio终于看到了

选择一个楷体试试,呵呵,TrueType字体加载成功

本文未完,下半部分请看
《minigui 3.2.0:基于miniStudio应用TrueType字体的过程(2)》

参考资料

《Setting up Development Environment on Ubuntu Linux》
《14.7 字体的渲染特效》

minigui 3.2.0:基于miniStudio应用TrueType字体的过程(1)相关推荐

  1. minigui 3.2.0:基于miniStudio应用TrueType字体的过程(2)-字体边缘锯齿,字库剪裁

    CSDN好像有问题,文章中图片太多无法继续增加图片,所以文章分两个部分:上半部分地址: <minigui 3.2.0:基于miniStudio应用TrueType字体的过程(1)>,下半部 ...

  2. 关于TrueType字体结构的文章

    转载链接:  http://www.zhaozi.cn/e/DoPrint/?classid=94&id=45 TrueType字体通常包含在单个TrueType字体文件中,其文件后缀为. ...

  3. 关于TrueType字体

    关于TrueType字体结构的文章  分类: C/C++ TrueType字体通常包含在单个TrueType字体文件中,其文件后缀为.TTF.OpenType字体是以类似   于TrueType字体的 ...

  4. Spring3.2.0-mybatis3.2.0 基于全注解搭建的后台框架-基础版

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: Spring3.2.0-mybatis3.2.0 基于全注解搭建的后台框架-基础版 没有什么不可能  之前一直用的是自 ...

  5. 鸿蒙os2.0基于安卓,外媒实测总结,目前华为鸿蒙OS 2.0依旧是基于安卓框架

    华为鸿蒙OS 2.0虽说在小米11的新机来袭之下,热度低了一些,但是鸿蒙OS 2.0给了很多人国产系统的希望,认为华为是唯一一个可以扛起国产系统的厂商,但是华为鸿蒙上为什么可以安装安卓应用,大家都很费 ...

  6. 制造企业3.0 基于流程的新的信息管理范例

    制造企业3.0 基于流程的新的信息管理范例   执行总结 现在是时候来重新评估我们该如何看到我们的信息管理工具集并从流程的角度审视我们的业务了.我们需要将信息和谐地安排进如支持扩展的企业并包含一个沿着 ...

  7. 基于8.0源码解析:startService 启动过程

    基于8.0源码解析:startService 启动过程 首先看一张startService的图,心里有个大概的预估,跟Activity启动流程比,Service的启动稍微简单点,并且我把Service ...

  8. minigui 3.2.0:对mgncs剪裁遇到的问题error: The pkg-config script could not be found or is too old.

    考虑到嵌入式平台的存储和运行空间都有限,在向目标平台移植时肯定要对minigui及其组件进行剪裁,删除掉不需要的功能和特性,以缩小程序体积,对mgncs做剪裁时遇到了一个非常奇怪的问题,虽然解决了,但 ...

  9. JSF 2.0(基于Primefaces 3.4.2) 中文乱码的处理方案

    最近在用JSF 2.0(基于Primefaces 3.4.2)做一个WEB的项目,开发的过程中有两个问题一直烦扰着我 (1)很多时候在需要提交页面中的数据的时候,必须要点两次提交按钮,才可以提交相应的 ...

  10. android 4.0和6.0区别,华为自曝全新EMUI 4.0 基于Android 6.0Mate 8首发

    11月26日,华为要发布年度旗舰Mate 8,同时还有行货版本的智能手表,但是不要把目光都集中在硬件上,因为他们的系统也有大的变化. 华为官方微博已经给出预告,全新的EMUI(EMUI 4.0)将要伴 ...

最新文章

  1. C++中关键字的理解--Static
  2. java类接口的区别_【Java基础】java接口和类的区别-瑶瑶吖的回答
  3. centos下安装nginx
  4. ASP.NET Core 沉思录 - 环境的思考
  5. layui表头样式_js相关:layui中table表头样式修改方法
  6. 企业域名备案流程_2021境外投资备案申报流程(办理企业境外投资证书注意事项)...
  7. 软件工程(2018)第3次团队作业
  8. RecyclerView通过notifyItemChanged方法更新item数据避免闪烁
  9. RAC静默安装与DG搭建
  10. 数字高程模型内插 opencv C++ CSU
  11. 接口”安全机制”的设计
  12. 固高板卡mct2008调试轴回零_固高电机控制调试软件mct2008 v2.0
  13. Jeecg框架 修改首页
  14. javascript 使用canvans 画圆形 椭圆 正方形 长方形签章
  15. 前端需要掌握的网络知识
  16. RSTP 与 STP 的区别
  17. MySQL实现字段自动填充功能
  18. 帝国cms7.5仿《至诚财经网》股票证券门户网站源码+手机版
  19. 2048 根本停不下来的开源HTML5游戏
  20. 解决视频播放器找不到解码器问题

热门文章

  1. 听见丨谷歌DeepMind科学家黄士杰:已离开AlphaGo团队AI芯片初创团队ThinkForce完成4.5亿元A轮融资
  2. 2021-06-22
  3. 路由器上网功能正常但加载不出图片的解决办法
  4. 同学,你这简历上没项目啊!
  5. sails框架配置相关
  6. 《Tableau数据可视化从入门到精通》之读取PDF文件数据
  7. 程序员段子,看不懂不是真的猿
  8. [UE4] LogicDriver状态机基于管线(Conduit)的状态选择器
  9. Kubernetes之ServiceAccount+Secret(超详细汇总)
  10. 手机打开电脑html没有图片,jpg图片手机能看电脑打不开怎么办