Browse Source

update hz font fd

yangfasheng 7 years ago
parent
commit
0592de80c0
3 changed files with 33 additions and 2 deletions
  1. 1 0
      include/rtgui/font.h
  2. 21 1
      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);

+ 21 - 1
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));
 
@@ -60,6 +60,26 @@ void rtgui_font_system_init()
 #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));

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