在RT1050 LittleVgl GUI中嵌入中文输入法框架( 二 )


3. lv_font_NotoSansCJKsc_Regular.c字体文件,虽然littleVgl官方源码包里自带了一个中文字体文件(lvglsrclv_fontlv_font_simsun_16_cjk.c),但是它只包含了1000个左右最常用的字,我实际体验了下很多我们想用的字都找不到,所以这个时候就需要自己去做一个更全一点的字体库了 。这里面涉及到两个问题需要考虑,第一是很多我们常见的中文字体是收费的(咱PC机的Microsoft office套件里的中文字体都是微软付费买的,所以咱也理解下早年正版windows为啥辣么贵了,那你问为啥现在便宜了?因为人家现在不靠这个赚钱了呗),第二个是字体转换工具的问题,我们网上找到的字体都是TTF或者OTF格式的,但littleVgl是不认的,需要转换成它支持的字体格式 。
对于第一个问题,我网上搜了好久最终选择了目前用的比较多的google开源免费的字体,Google真乃金主也,它维护的网站里面字体各种各样啥都有且是开源免费的,如下链接,我选择的是NotoSansCJKsc字体(最后面的sc表示simplified Chinese,简体中文),然后它里面又包含了各种字形(regular, bold, light等),可以根据需要自行选择,整个包很大(100多MB),拆分成不同字形的就小了(每个14~16MB左右);
https://www.google.com/get/noto/

在RT1050 LittleVgl GUI中嵌入中文输入法框架

文章插图
对于第二个字体转换工具的问题,LittleVgl官方自带了一个字体转换工具(online font converter),我个人觉着不太好用(对OTF字体支持的不行),这里推荐阿里大神自己做的一个LittleVgl字体转换工具(LvglFontTool),非常方便好用,且支持加入Awesome图标;
http://www.lfly.xyz/forum.php?mod=viewthread&tid=24&extra=page%3D1
在RT1050 LittleVgl GUI中嵌入中文输入法框架

文章插图
关于字体这部分我需要再补充个问题,就是它占用的memory大小,毕竟我们是在嵌入式MCU平台Flash和RAM的资源是受限的,如下图所示,该字体文件占用大概1Mbytes的rodata空间(即可寻址的Flash空间,当然该大小可以通过在上图转换工具中增减一些文字来调 整),所以在移植本套输入法之前需要预留足够的Flash空间,当然对RT平台来说这部分还好,毕竟其本身就外扩至少几MB空间的QSPI Flash作为存储空间的 。
在RT1050 LittleVgl GUI中嵌入中文输入法框架

文章插图
4. lv_demo_chineseinput.c/.h文件,这两个文件属于应用层实现了,主要关注该文件中下图的ta_event_cb函数(即textarea事件的callback,点击文本框的输入时回调),在里面我们需要按照1,2,3去调用即可(这三步的API均在lv_chs_keyboard.c/h文件里实现);
在RT1050 LittleVgl GUI中嵌入中文输入法框架

文章插图
      至此,这套全键盘拼音中文输入法框架所需的几个文件就介绍完了,用户只需要把这几个文件放到自己的工程设置好文件搜索路径,并参考随本文档附带的代码工程示例,再结合自己产品的GUI样式,把这套中文输入法嵌入到自己应用当中 。下面链接为本项目github仓库,觉着不错的别吝啬您的小星星,star me!好了,就扯到这儿了,本文首发ChinaAET,续发于CSDN和博客园,未完待续!
Github-Chinese Input Method Framework on MCU based on LittleVgl
在RT1050 LittleVgl GUI中嵌入中文输入法框架

文章插图

【在RT1050 LittleVgl GUI中嵌入中文输入法框架】


推荐阅读