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

Merge pull request #16 from yangfasheng/master

update font.c
Bernard Xiong 7 лет назад
Родитель
Сommit
02c9b8336d
3 измененных файлов с 35 добавлено и 14 удалено
  1. 1 0
      include/rtgui/font.h
  2. 23 13
      src/font.c
  3. 11 1
      src/font_hz_file.c

+ 1 - 0
include/rtgui/font.h

@@ -113,6 +113,7 @@ struct rtgui_font
 typedef struct rtgui_font rtgui_font_t;
 
 void rtgui_font_system_init(void);
+void rtgui_font_fd_uninstall(void);
 void rtgui_font_system_add_font(struct rtgui_font *font);
 void rtgui_font_system_remove_font(struct rtgui_font *font);
 struct rtgui_font *rtgui_font_default(void);

+ 23 - 13
src/font.c

@@ -38,7 +38,7 @@ extern struct rtgui_font rtgui_font_hz16;
 extern struct rtgui_font rtgui_font_hz12;
 #endif
 
-void rtgui_font_system_init()
+void rtgui_font_system_init(void)
 {
     rtgui_list_init(&(_rtgui_font_list));
 
@@ -48,18 +48,38 @@ void rtgui_font_system_init()
 #ifdef GUIENGINE_USING_FONT16
     rtgui_font_system_add_font(&rtgui_font_asc16);
 #ifdef GUIENGINE_USING_FONTHZ
-    rtgui_font_system_add_font(&rtgui_font_hz16);
+    //rtgui_font_system_add_font(&rtgui_font_hz16);
 #endif
 #endif
 
 #ifdef GUIENGINE_USING_FONT12
     rtgui_font_system_add_font(&rtgui_font_asc12);
 #ifdef GUIENGINE_USING_FONTHZ
-    rtgui_font_system_add_font(&rtgui_font_hz12);
+    //rtgui_font_system_add_font(&rtgui_font_hz12);
 #endif
 #endif
 }
 
+void rtgui_font_fd_uninstall(void)
+{
+    struct rtgui_list_node *node;
+    struct rtgui_font *font;
+
+    rtgui_list_foreach(node, &_rtgui_font_list)
+    {
+        font = rtgui_list_entry(node, struct rtgui_font, list);
+        if (rt_strcmp(font->family, "hz") == 0 || rt_strstr(font->family, ".fnt") != RT_NULL || rt_strstr(font->family, ".FNT") != RT_NULL)
+        {
+            struct rtgui_hz_file_font *hz_file_font = (struct rtgui_hz_file_font *)font->data;
+            if (hz_file_font->fd >= 0)
+            {
+                close(hz_file_font->fd);
+                hz_file_font->fd = -1;
+            }
+        }
+    }
+}
+
 void rtgui_font_system_add_font(struct rtgui_font *font)
 {
     rtgui_list_init(&(font->list));
@@ -109,16 +129,6 @@ struct rtgui_font *rtgui_font_refer(const char *family, rt_uint16_t height)
         }
     }
 
-    rtgui_list_foreach(node, &_rtgui_font_list)
-    {
-        font = rtgui_list_entry(node, struct rtgui_font, list);
-        if (rt_strncmp(font->family, family, GUIENGINE_NAME_MAX) == 0)
-        {
-            font->refer_count ++;
-            return font;
-        }
-    }
-
     return RT_NULL;
 }
 RTM_EXPORT(rtgui_font_refer);

+ 11 - 1
src/font_hz_file.c

@@ -103,6 +103,16 @@ static rt_uint8_t *_font_cache_get(struct rtgui_hz_file_font *font, rt_uint16_t
     seek = 94 * (((hz_id & 0xff) - 0xA0) - 1) + ((hz_id >> 8) - 0xA0) - 1;
     seek *= font->font_data_size;
 
+    if (font->fd < 0)
+    {
+        font->fd = open(font->font_fn, O_RDONLY, 0);
+        if (font->fd < 0)
+        {
+            rtgui_free(cache);
+            return RT_NULL;
+        }
+    }
+
     /* read hz font data */
     if ((lseek(font->fd, seek, SEEK_SET) < 0) ||
             read(font->fd, (char *)(cache + 1), font->font_data_size) !=
@@ -240,7 +250,7 @@ static void rtgui_hz_file_font_draw_text(struct rtgui_font *font, struct rtgui_d
         if (len > 0)
         {
             rtgui_font_draw(efont, dc, str, len, &text_rect);
-			text_rect.x1 += (hz_file_font->font_size / 2 * len);
+            text_rect.x1 += (hz_file_font->font_size / 2 * len);
 
             str += len;
             str_len -= len;