Просмотр исходного кода

change: 调整fonts库的API命名,为统一字体做预留

Wendal Chen 3 лет назад
Родитель
Сommit
418b5bad54
1 измененных файлов с 95 добавлено и 45 удалено
  1. 95 45
      components/luatfonts/luat_lib_fonts.c

+ 95 - 45
components/luatfonts/luat_lib_fonts.c

@@ -67,19 +67,7 @@ static const u8g2_font_t u8g2_fonts[] = {
     {.name="", .font=NULL},
 };
 
-/*
-获取u8g2字体
-@api fonts.u8g2_get(name)
-@string 字体名称, 例如opposansm8_chinese unifont_t_symbols
-@return userdata 若字体存放,返回字体指针, 否则返回nil
-@usage
-oppo_8 = fonts.u8g2_get("opposansm8_chinese")
-if oppo_8 then
-    u8g2.SetFont(oppo_8)
-else
-    log.warn("fonts", "no such font opposansm8_chinese")
-end
-*/
+
 static int l_fonts_u8g2_get(lua_State *L) {
     const char* name = luaL_checkstring(L,  1);
     const u8g2_font_t *font = u8g2_fonts;
@@ -93,23 +81,6 @@ static int l_fonts_u8g2_get(lua_State *L) {
     return 0;
 }
 
-/*
-从文件加载u8g2字体
-@api fonts.u8g2_load(path)
-@string 字体路径, 例如 /luadb/abc.bin
-@return userdata 若字体存放,返回字体指针, 否则返回nil
-@usage
--- API新增于2022-07-11
--- 提醒: 若文件位于/luadb下, 不需要占用内存
--- 若文件处于其他路径, 例如tf/sd卡, spi flash, 会自动加载到内存, 消耗lua vm的内存空间
--- 加载后请适当引用, 不必反复加载同一个字体文件
-oppo12 = fonts.u8g2_load("/luadb/oppo12.bin")
-if oppo12 then
-    u8g2.SetFont(oppo12)
-else
-    log.warn("fonts", "no such font file oppo12.bin")
-end
-*/
 static int l_fonts_u8g2_load(lua_State *L) {
     char* ptr = NULL;
     // 从文件加载
@@ -158,16 +129,7 @@ static int l_fonts_u8g2_load(lua_State *L) {
     return 1;
 }
 
-/*
-返回固件支持的u8g2字体列表
-@api fonts.u8g2_list()
-@return table 字体列表
-@usage
--- API新增于2022-07-12
-if fonts.u8g2_list then
-    log.info("fonts", "u8g2", json.encode(fonts.u8g2_list()))
-end
-*/
+
 static int l_fonts_u8g2_list(lua_State *L) {
     const u8g2_font_t *font = u8g2_fonts;
     lua_createtable(L, 10, 0);
@@ -266,17 +228,105 @@ static int l_fonts_lvgl_list(lua_State *L) {
 
 #endif
 
+/*
+返回固件支持的字体列表
+@api fonts.list(tp)
+@string 类型, 默认 u8g2, 还可以是lvgl
+@return table 字体列表
+@usage
+-- API新增于2022-07-12
+if fonts.list then
+    log.info("fonts", "u8g2", json.encode(fonts.list("u8g2")))
+end
+*/
+static int l_fonts_list(lua_State *L) {
+    const char* tp = luaL_optstring(L, 1, "u8g2");
+#ifdef LUAT_USE_LVGL
+    if (!strcmp("lvgl", tp)) {
+        return l_fonts_lvgl_list(L);
+    }
+#endif
+    return l_fonts_u8g2_list(L);
+}
+
+/*
+获取字体
+@api fonts.u8g2_get(name, tp)
+@string 字体名称, 例如opposansm8_chinese unifont_t_symbols
+@string 类型, 默认 u8g2, 还可以是lvgl
+@return userdata 若字体存放,返回字体指针, 否则返回nil
+@usage
+oppo_8 = fonts.get("opposansm8_chinese", "u8g2")
+if oppo_8 then
+    u8g2.SetFont(oppo_8)
+else
+    log.warn("fonts", "no such font opposansm8_chinese")
+end
+-- 若使用云编译的自定义字库, 使用方式如下
+oppo_8 = fonts.get("oppo_bold_8", "u8g2") -- oppo_bold_8 是云编译界面的字库命名
+if oppo_8 then
+    u8g2.SetFont(oppo_8)
+else
+    log.warn("fonts", "no such font opposansm8_chinese")
+end
+*/
+static int l_fonts_get(lua_State *L) {
+    const char* tp = luaL_optstring(L, 2, "u8g2");
+#ifdef LUAT_USE_LVGL
+    if (!strcmp("lvgl", tp)) {
+        return l_fonts_lvgl_get(L);
+    }
+#endif
+    return l_fonts_u8g2_get(L);
+}
+
+/*
+从文件加载字体
+@api fonts.u8g2_load(path, path)
+@string 字体路径, 例如 /luadb/abc.bin
+@string 类型, 默认 u8g2. 也支持lvgl
+@return userdata 若字体存放,返回字体指针, 否则返回nil
+@usage
+-- API新增于2022-07-11
+-- 提醒: 若文件位于/luadb下, 不需要占用内存
+-- 若文件处于其他路径, 例如tf/sd卡, spi flash, 会自动加载到内存, 消耗lua vm的内存空间
+-- 加载后请适当引用, 不必反复加载同一个字体文件
+oppo12 = fonts.load("/luadb/oppo12.bin")
+if oppo12 then
+    u8g2.SetFont(oppo12)
+else
+    log.warn("fonts", "no such font file oppo12.bin")
+end
+*/
+static int l_fonts_load(lua_State *L) {
+    const char* tp = luaL_optstring(L, 2, "u8g2");
+#ifdef LUAT_USE_LVGL
+    if (!strcmp("lvgl", tp)) {
+        const char* fontname = luaL_checkstring(L, 1);
+        lv_font_t* font = lv_font_load(fontname);
+        if (font == NULL) {
+            return 0;
+        }
+        lua_pushlightuserdata(L, font);
+        return 1;
+    }
+#endif
+    return l_fonts_u8g2_get(L);
+}
+
 #include "rotable2.h"
 static const rotable_Reg_t reg_fonts[] =
 {
-    { "u8g2_get" ,       ROREG_FUNC(l_fonts_u8g2_get)},
-    { "u8g2_load" ,      ROREG_FUNC(l_fonts_u8g2_load)},
-    { "u8g2_list" ,      ROREG_FUNC(l_fonts_u8g2_list)},
+    // { "u8g2_get" ,       ROREG_FUNC(l_fonts_u8g2_get)},
+    // { "u8g2_list" ,      ROREG_FUNC(l_fonts_u8g2_list)},
 
 #ifdef LUAT_USE_LVGL
-    { "lvgl_get" ,       ROREG_FUNC(l_fonts_lvgl_get)},
-    { "lvgl_list" ,      ROREG_FUNC(l_fonts_lvgl_list)},
+    // { "lvgl_get" ,       ROREG_FUNC(l_fonts_lvgl_get)},
+    // { "lvgl_list" ,      ROREG_FUNC(l_fonts_lvgl_list)},
 #endif
+    { "get" ,       ROREG_FUNC(l_fonts_get)},
+    { "list" ,      ROREG_FUNC(l_fonts_list)},
+    { "load" ,      ROREG_FUNC(l_fonts_load)},
 	{ NULL,              ROREG_INT(0)},
 };