From e1e75c4572cb1e1971d5c636e582d6608ca4aa22 Mon Sep 17 00:00:00 2001 From: "bernard.xiong" Date: Wed, 17 Aug 2011 08:23:59 +0000 Subject: [PATCH] fixed Chinese font issue; fixed keyboard event handler issue in list widgets. git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1673 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- components/rtgui/common/font_hz_bmp.c | 8 ++++---- components/rtgui/common/font_hz_file.c | 2 +- components/rtgui/widgets/list_view.c | 16 ++++++++++++++++ components/rtgui/widgets/listbox.c | 13 ++++++++++++- 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/components/rtgui/common/font_hz_bmp.c b/components/rtgui/common/font_hz_bmp.c index d4b9637e75..fd8ea9b058 100644 --- a/components/rtgui/common/font_hz_bmp.c +++ b/components/rtgui/common/font_hz_bmp.c @@ -19,7 +19,7 @@ static void _rtgui_hz_bitmap_font_draw_text(struct rtgui_font_bitmap* bmp_font, rt_uint8_t* str; rtgui_color_t bc; rt_uint16_t style; - register rt_base_t h, word_bytes; + register rt_base_t h, word_bytes, font_bytes; RT_ASSERT(bmp_font != RT_NULL); @@ -30,6 +30,7 @@ static void _rtgui_hz_bitmap_font_draw_text(struct rtgui_font_bitmap* bmp_font, /* drawing height */ h = (bmp_font->height + rect->y1 > rect->y2)? rect->y2 - rect->y1 : bmp_font->height; word_bytes = (bmp_font->width + 7)/8; + font_bytes = word_bytes * bmp_font->height; str = (rt_uint8_t*)text; @@ -44,15 +45,14 @@ static void _rtgui_hz_bitmap_font_draw_text(struct rtgui_font_bitmap* bmp_font, index = *(str+1) - 0xA0; /* get font pixel data */ - font_ptr = bmp_font->bmp + ( 94*(sect-1) + (index-1) )*(bmp_font->width + bmp_font->height); - + font_ptr = bmp_font->bmp + (94 * (sect - 1) + (index - 1)) * font_bytes; /* draw word */ for (i=0; i < h; i ++) { for (j=0; j < word_bytes; j++) for (k=0; k < 8; k++) { - if ( ((font_ptr[i*2 + j] >> (7-k)) & 0x01) != 0 && + if ( ((font_ptr[i*word_bytes + j] >> (7-k)) & 0x01) != 0 && (rect->x1 + 8 * j + k < rect->x2)) { rtgui_dc_draw_point(dc, rect->x1 + 8*j + k, rect->y1 + i); diff --git a/components/rtgui/common/font_hz_file.c b/components/rtgui/common/font_hz_file.c index ff32b542e9..35e878f24a 100644 --- a/components/rtgui/common/font_hz_file.c +++ b/components/rtgui/common/font_hz_file.c @@ -142,7 +142,7 @@ static void _rtgui_hz_file_font_draw_text(struct rtgui_hz_file_font* hz_file_fon for (j=0; j < word_bytes; j++) for (k=0; k < 8; k++) { - if ( ((font_ptr[i*2 + j] >> (7-k)) & 0x01) != 0 && + if ( ((font_ptr[i*word_bytes + j] >> (7-k)) & 0x01) != 0 && (rect->x1 + 8 * j + k < rect->x2)) { rtgui_dc_draw_point(dc, rect->x1 + 8*j + k, rect->y1 + i); diff --git a/components/rtgui/widgets/list_view.c b/components/rtgui/widgets/list_view.c index 44cfcdf113..bc88062b87 100644 --- a/components/rtgui/widgets/list_view.c +++ b/components/rtgui/widgets/list_view.c @@ -456,6 +456,22 @@ rt_bool_t rtgui_list_view_event_handler(struct rtgui_widget* widget, struct rtgu { rt_uint16_t old_item; + if (view->current_item == -1) + { + /* set a initial item */ + if ((view->items_count > 0) && + (ekbd->key == RTGUIK_UP || ekbd->key == RTGUIK_DOWN)) + { + view->current_item = 0; + if (view->flag == RTGUI_LIST_VIEW_LIST) + rtgui_list_view_update_list(view, -1); + else + rtgui_list_view_update_icon(view, -1); + break; + } + else return RT_FALSE; + } + old_item = view->current_item; switch (ekbd->key) { diff --git a/components/rtgui/widgets/listbox.c b/components/rtgui/widgets/listbox.c index f68ec02efe..0ce5aebe32 100644 --- a/components/rtgui/widgets/listbox.c +++ b/components/rtgui/widgets/listbox.c @@ -266,7 +266,18 @@ rt_bool_t rtgui_listbox_event_handler(struct rtgui_widget* widget, struct rtgui_ { rt_int16_t old_item; - if (box->current_item == -1) return RT_FALSE; + if (box->current_item == -1) + { + /* set a initial item */ + if ((box->items_count > 0) && + (ekbd->key == RTGUIK_UP || ekbd->key == RTGUIK_DOWN)) + { + box->current_item = 0; + rtgui_listbox_update_current(box, -1); + break; + } + else return RT_FALSE; + } old_item = box->current_item; switch (ekbd->key) -- GitLab