风起
1
lvgl 8 如何使用freetype,watch demo中我观察到了字体设置的过程中使用了
lv_ext_set_local_font(label_header, FONT_TITLE, LV_COLOR_WHITE);
函数,这个好像是你们独创的用法啊,然后我在尝试编译freetype的时候遇到了
D:\OpenSiFli\SDK\SiFli-SDK\v2.4.2\middleware\lvgl\lvsf/lv_freetype.h:66:5: error: conflicting types for 'lv_freetype_init'; have 'int(uint8_t, uint32_t)' {aka 'int(unsigned char, long unsigned int)'} 66 | int lv_freetype_init(uint8_t max_faces, uint32_t max_cache_size);
这个问题,这是哪里没配置好冲突了吗 
1 个赞
风起
2
看起来好像是sdk里面魔改了freetype,但是完全不知道用法
lv_ext_set_local_font是对lv_obj_set_style_text_font和lv_obj_set_style_text_color的简单封装
参考example\multimedia\lvgl\watch\src\resource\fonts\SConscript, 将.ttf文件转为.c文件后
# for module compiling
import os
from building import *
import rtconfig
cwd = GetCurrentDir()
list = os.listdir(cwd)
CPPDEFINES = []
if GetDepend('FREETYPE_TINY_FONT_FULL'):
font_name = 'tiny55_full'
elif GetDepend('FREETYPE_TINY_FONT_LITE'):
font_name = 'tiny55_lite'
elif GetDepend('FREETYPE_HANSANS_FONT'):
font_name = 'SourceHanSansCN-Normal'
elif GetDepend('FREETYPE_ARIAL_FONT'):
font_name = 'arial'
else:
font_name = 'DroidSansFallback'
CPPDEFINES += ["FREETYPE_FONT_NAME={}".format(font_name)]
objs = Glob('freetype/{}.ttf'.format(font_name))
objs = Env.FontFile(objs)
if GetOption('no_cc'):
objs = []
objs = DefineGroup('resource', objs, depend = ['PKG_USING_LITTLEVGL2RTT'], CPPDEFINES = CPPDEFINES)
Return ('objs')
生成的C文件里会使用LVSF_FREETYPE_FONT_REGISTER注册字体,这样就可以在LVGL里使用了,lv_ext_set_local_font会根据字号大小自动选择合适的字体
lv_ext_lable_set_fixed_font 这个API还可以指定字体名称,以便区分相同字号不同字体
风起
5
好的,这几天我会进行尝试,并把结果反馈到这个帖子,感谢你的回答
lvsf_get_font_from_size是编成库了吗,想看源代码