lvgl 8 如何使用freetype

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);

这个问题,这是哪里没配置好冲突了吗 :smiling_face_with_tear:

1 个赞

看起来好像是sdk里面魔改了freetype,但是完全不知道用法

lv_ext_set_local_font是对lv_obj_set_style_text_fontlv_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还可以指定字体名称,以便区分相同字号不同字体

好的,这几天我会进行尝试,并把结果反馈到这个帖子,感谢你的回答

lvsf_get_font_from_size是编成库了吗,想看源代码