Explorar o código

update font_fnt.c 修复加载设计器生成的 asc 点阵字体文件 BUG

Signed-off-by: yangfasheng <yangfasheng@rt-thread.com>
yangfasheng %!s(int64=7) %!d(string=hai) anos
pai
achega
6e6d023168
Modificáronse 1 ficheiros con 35 adicións e 29 borrados
  1. 35 29
      src/font_fnt.c

+ 35 - 29
src/font_fnt.c

@@ -203,9 +203,38 @@ struct rtgui_font *rtgui_fnt_font_create(const char* filename, const char* font_
     /* load font */
     {
         struct rtgui_font_bitmap *asc = (struct rtgui_font_bitmap*)rtgui_malloc(sizeof(struct rtgui_font_bitmap));
-        struct rtgui_hz_file_font *hz = (struct rtgui_hz_file_font*)rtgui_malloc(sizeof(struct rtgui_hz_file_font));
+        struct rtgui_hz_file_font *hz = NULL;
         struct rtgui_font *asc_font = (struct rtgui_font*)rtgui_malloc(sizeof(struct rtgui_font));
-        struct rtgui_font *hz_font = (struct rtgui_font*)rtgui_malloc(sizeof(struct rtgui_font));
+        struct rtgui_font *hz_font = NULL;
+
+#ifdef GUIENGINE_USING_HZ_FILE
+        hz = (struct rtgui_hz_file_font*)rtgui_malloc(sizeof(struct rtgui_hz_file_font));
+        hz_font = (struct rtgui_font*)rtgui_malloc(sizeof(struct rtgui_font));
+        /* load hz */
+        if (hz && hz_font && fnt_header->asc_offset != 0)
+        {
+            struct cache_tree _cache_root = { NULL };
+
+            hz->cache_root = _cache_root;
+            hz->cache_size = 0;
+            hz->font_size = fnt_header->h;
+            hz->font_data_size = (fnt_header->h + 7) / 8 * fnt_header->h;
+            hz->fd = -1;
+            hz->font_fn = rt_strdup(filename);
+
+            hz_font->family = rt_strdup(font_family);
+            hz_font->height = fnt_header->h;
+            hz_font->refer_count = 1;
+            hz_font->engine = &rtgui_hz_file_font_engine;
+            hz_font->data = (void *)hz;
+        }
+        else
+        {
+            rtgui_free(hz);
+            rtgui_free(hz_font);
+            hz_font = RT_NULL;
+        }
+#endif
 
         /* load asc */
         if (asc && asc_font)
@@ -229,7 +258,10 @@ struct rtgui_font *rtgui_fnt_font_create(const char* filename, const char* font_
                 }
                 else
                 {
-                    asc_font->family = rt_strdup("asc");
+                    if (hz_font)
+                        asc_font->family = rt_strdup("asc");
+                    else
+                        asc_font->family = rt_strdup(font_family);
                     asc_font->height = fnt_header->h;
                     asc_font->refer_count = 1;
                     asc_font->engine = &bmp_font_engine;
@@ -239,32 +271,7 @@ struct rtgui_font *rtgui_fnt_font_create(const char* filename, const char* font_
                 }
             }
         }
-#ifdef GUIENGINE_USING_HZ_FILE
-        /* load hz */
-        if (hz && hz_font && fnt_header->asc_offset != 0)
-        {
-            struct cache_tree _cache_root = { NULL };
-
-            hz->cache_root = _cache_root;
-            hz->cache_size = 0;
-            hz->font_size = fnt_header->h;
-            hz->font_data_size = (fnt_header->h + 7) / 8 * fnt_header->h;
-            hz->fd = -1;
-            hz->font_fn = rt_strdup(filename);
 
-            hz_font->family = rt_strdup(font_family);
-            hz_font->height = fnt_header->h;
-            hz_font->refer_count = 1;
-            hz_font->engine = &rtgui_hz_file_font_engine;
-            hz_font->data = (void *)hz;
-        }
-        else
-        {
-            rtgui_free(hz);
-            rtgui_free(hz_font);
-            hz_font = RT_NULL;
-        }
-#endif
         close(fd);
 
         if (hz_font)
@@ -326,7 +333,6 @@ struct rtgui_font *rtgui_hz_fnt_font_create(const char* filename, const char* fo
             rtgui_free(hz);
             rtgui_free(hz_font);
         }
-
     }
 
     return font;