Bladeren bron

Merge pull request #53 from yangfasheng/master

Signed-off-by: yangfasheng yangfasheng@rt-thread.com
yangfasheng 7 jaren geleden
bovenliggende
commit
4f08154237
3 gewijzigde bestanden met toevoegingen van 57 en 37 verwijderingen
  1. 7 4
      src/dc.c
  2. 35 29
      src/font_fnt.c
  3. 15 4
      src/rtgui_driver.c

+ 7 - 4
src/dc.c

@@ -1949,11 +1949,14 @@ void rtgui_dc_end_drawing(struct rtgui_dc *dc, rt_bool_t update)
             else
             {
                 /* send to server for window update */
-                struct rtgui_event_update_end eupdate;
-                RTGUI_EVENT_UPDATE_END_INIT(&(eupdate));
-                eupdate.rect = owner->extent;
+                //struct rtgui_event_update_end eupdate;
+                //RTGUI_EVENT_UPDATE_END_INIT(&(eupdate));
+                //eupdate.rect = owner->extent;
 
-                rtgui_server_post_event((struct rtgui_event *)&eupdate, sizeof(eupdate));
+                //rtgui_server_post_event((struct rtgui_event *)&eupdate, sizeof(eupdate));
+
+                /* update screen */
+                rtgui_graphic_driver_screen_update(rtgui_graphic_driver_get_default(), &(owner->extent));
             }
         }
     }

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

+ 15 - 4
src/rtgui_driver.c

@@ -245,10 +245,21 @@ void rtgui_graphic_driver_screen_update(const struct rtgui_graphic_driver *drive
     {
         struct rt_device_rect_info rect_info;
 
-        rect_info.x = rect->x1;
-        rect_info.y = rect->y1;
-        rect_info.width = rect->x2 - rect->x1;
-        rect_info.height = rect->y2 - rect->y1;
+        if (rect->x1 >= driver->width || rect->y1 >= driver->height)
+            return;
+        
+        if (rect->x2 <= 0 || rect->y2 <= 0)
+            return;
+    
+        rect_info.x = rect->x1 > 0 ? rect->x1 : 0;
+        rect_info.y = rect->y1 > 0 ? rect->y1 : 0;
+        
+        rect_info.width = rect->x2 > driver->width ? driver->width : rect->x2;
+        rect_info.height = rect->y2 > driver->height ? driver->height : rect->y2;
+        
+        rect_info.width -= rect_info.x;
+        rect_info.height -= rect_info.y;
+
         rt_device_control(driver->device, RTGRAPHIC_CTRL_RECT_UPDATE, &rect_info);
     }
 }