diff options
| author | bernard.xiong <[email protected]> | 2010-01-25 00:01:18 +0000 |
|---|---|---|
| committer | bernard.xiong <[email protected]> | 2010-01-25 00:01:18 +0000 |
| commit | 143d95a9980a308ad1540e72068d9bfbb35ee0aa (patch) | |
| tree | e4ce87a51cdf80d39d7a9e02e88900209df7fac6 | |
| parent | e1f252541640ead93211b87ef858fb02c5d40766 (diff) | |
fix some widgets drawing routine.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@333 bbd45198-f89e-11dd-88c7-29a3b14d5316
| -rw-r--r-- | rtgui/common/rtgui_theme.c | 36 | ||||
| -rw-r--r-- | rtgui/include/rtgui/rtgui.h | 1 | ||||
| -rw-r--r-- | rtgui/include/rtgui/rtgui_config.h | 11 | ||||
| -rw-r--r-- | rtgui/include/rtgui/widgets/textbox.h | 1 | ||||
| -rw-r--r-- | rtgui/server/server.c | 10 | ||||
| -rw-r--r-- | rtgui/widgets/radiobox.c | 5 | ||||
| -rw-r--r-- | rtgui/widgets/staticline.c | 3 | ||||
| -rw-r--r-- | rtgui/widgets/textbox.c | 10 | ||||
| -rw-r--r-- | rtgui/widgets/title.c | 1 |
9 files changed, 65 insertions, 13 deletions
diff --git a/rtgui/common/rtgui_theme.c b/rtgui/common/rtgui_theme.c index 294a7c5de5..15f9b301a3 100644 --- a/rtgui/common/rtgui_theme.c +++ b/rtgui/common/rtgui_theme.c @@ -259,12 +259,12 @@ void rtgui_theme_draw_win(struct rtgui_topwin* win) if (win->flag & WINTITLE_ACTIVATE) { r = 10; g = 36; b = 106; - delta = (float)(rect.x2 - rect.x1) / 160; + delta = 150 / (float)(rect.x2 - rect.x1); } else { r = 128; g = 128; b = 128; - delta = (float)(rect.x2 - rect.x1) / 64; + delta = 64 / (float)(rect.x2 - rect.x1); } for (index = rect.x1; index < rect.x2; index ++) @@ -450,6 +450,7 @@ void rtgui_theme_draw_textbox(rtgui_textbox_t* box) /* draw button */ struct rtgui_dc* dc; struct rtgui_rect rect; + rtgui_color_t fc; /* begin drawing */ dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(box)); @@ -457,19 +458,39 @@ void rtgui_theme_draw_textbox(rtgui_textbox_t* box) /* get widget rect */ rtgui_widget_get_rect(RTGUI_WIDGET(box), &rect); + fc = RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(box)); - /* fill widget rect with background color */ + /* fill widget rect with white color */ + RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(box)) = white; rtgui_dc_fill_rect(dc, &rect); /* draw border */ - rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_STATIC); + RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(box)) = RTGUI_RGB(123, 158, 189); + rtgui_dc_draw_rect(dc, &rect); /* draw text */ + RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(box)) = fc; if (box->text != RT_NULL) { rect.x1 += RTGUI_TEXTBOX_MARGIN; - rtgui_dc_draw_text(dc, box->text, &rect); + if (box->flag & RTGUI_TEXTBOX_MASK) + { + /* draw '*' */ + rt_size_t len = rt_strlen(box->text); + if (len > 0) + { + char *text_mask = rtgui_malloc(len); + rt_memset(text_mask, '*', len); + text_mask[len] = 0; + rtgui_dc_draw_text(dc, text_mask, &rect); + rt_free(text_mask); + } + } + else + { + rtgui_dc_draw_text(dc, box->text, &rect); + } /* draw caret */ if (box->flag & RTGUI_TEXTBOX_CARET_SHOW) @@ -477,8 +498,10 @@ void rtgui_theme_draw_textbox(rtgui_textbox_t* box) rect.x1 += box->position * box->font_width; rect.x2 = rect.x1 + box->font_width; + rect.y2 -= 2; rect.y1 = rect.y2 - 3; + RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(box)) = black; rtgui_dc_fill_rect(dc, &rect); } } @@ -669,6 +692,7 @@ void rtgui_theme_draw_radiobox(struct rtgui_radiobox* radiobox) { /* set the first text rect */ item_rect.x2 = item_rect.x1 + item_size; + item_rect.y2 = item_rect.y1 + bord_size; /* draw each radio button */ for (index = 0; index < radiobox->item_count; index ++) @@ -866,7 +890,9 @@ void rtgui_theme_draw_staticline(struct rtgui_staticline* staticline) /* begin drawing */ dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(staticline)); if (dc == RT_NULL) return ; + rtgui_widget_get_rect(RTGUI_WIDGET(staticline), &rect); + rtgui_dc_fill_rect(dc, &rect); if (staticline->orientation == RTGUI_HORIZONTAL) { diff --git a/rtgui/include/rtgui/rtgui.h b/rtgui/include/rtgui/rtgui.h index 50e3b5b59b..62b229c4e6 100644 --- a/rtgui/include/rtgui/rtgui.h +++ b/rtgui/include/rtgui/rtgui.h @@ -15,7 +15,6 @@ #define __RT_GUI_H__ #include <rtthread.h> - #include <rtgui/rtgui_config.h> #define RT_INT16_MAX 32767 diff --git a/rtgui/include/rtgui/rtgui_config.h b/rtgui/include/rtgui/rtgui_config.h index add5a4b9f8..ea990c2486 100644 --- a/rtgui/include/rtgui/rtgui_config.h +++ b/rtgui/include/rtgui/rtgui_config.h @@ -42,9 +42,18 @@ #define RTGUI_SVR_THREAD_PRIORITY 15
#define RTGUI_SVR_THREAD_TIMESLICE 5
+#ifdef RTGUI_USING_SMALL_SIZE
+#define RTGUI_SVR_THREAD_STACK_SIZE 1024
+#else
#define RTGUI_SVR_THREAD_STACK_SIZE 2048
+#endif
#define RTGUI_APP_THREAD_PRIORITY 25
-#define RTGUI_APP_THREAD_TIMESLICE 8
+#define RTGUI_APP_THREAD_TIMESLICE 5
+#ifdef RTGUI_USING_SMALL_SIZE
+#define RTGUI_APP_THREAD_STACK_SIZE 1024
+#else
+#define RTGUI_APP_THREAD_STACK_SIZE 2048
+#endif
#endif
diff --git a/rtgui/include/rtgui/widgets/textbox.h b/rtgui/include/rtgui/widgets/textbox.h index 95259e9b0e..c1378fd2fc 100644 --- a/rtgui/include/rtgui/widgets/textbox.h +++ b/rtgui/include/rtgui/widgets/textbox.h @@ -29,6 +29,7 @@ #define RTGUI_TEXTBOX_SINGLE 0x00
#define RTGUI_TEXTBOX_MULTI 0x01
+#define RTGUI_TEXTBOX_MASK 0x02
#define RTGUI_TEXTBOX_CARET_SHOW 0x10
#define RTGUI_TEXTBOX_CARET_HIDE 0x00
diff --git a/rtgui/server/server.c b/rtgui/server/server.c index 48dff11fcf..43694198e8 100644 --- a/rtgui/server/server.c +++ b/rtgui/server/server.c @@ -480,9 +480,15 @@ static void rtgui_server_entry(void* parameter) SetThreadPriority(hCurrentThread, THREAD_PRIORITY_HIGHEST); #endif +#ifdef RTGUI_USING_SMALL_SIZE + /* create rtgui server msgq */ + rtgui_server_mq = rt_mq_create("rtgui", + 64, 8, RT_IPC_FLAG_FIFO); +#else /* create rtgui server msgq */ rtgui_server_mq = rt_mq_create("rtgui", 256, 8, RT_IPC_FLAG_FIFO); +#endif /* register rtgui server thread */ rtgui_thread_register(rtgui_server_tid, rtgui_server_mq); @@ -495,7 +501,11 @@ static void rtgui_server_entry(void* parameter) while (1) { /* the buffer uses to receive event */ +#ifdef RTGUI_USING_SMALL_SIZE + char event_buf[64]; +#else char event_buf[256]; +#endif struct rtgui_event* event = (struct rtgui_event*)&(event_buf[0]); if (rtgui_thread_recv(event, sizeof(event_buf)) == RT_EOK) diff --git a/rtgui/widgets/radiobox.c b/rtgui/widgets/radiobox.c index 3f333fd1d7..d5bd39f841 100644 --- a/rtgui/widgets/radiobox.c +++ b/rtgui/widgets/radiobox.c @@ -49,8 +49,9 @@ static void rtgui_radiobox_onmouse(struct rtgui_radiobox* radiobox, struct rtgui /* focus widgets */
rtgui_widget_focus(RTGUI_WIDGET(radiobox));
- /* get widget rect */
+ /* get widget physical rect */
rtgui_widget_get_rect(RTGUI_WIDGET(radiobox), &rect);
+ rtgui_widget_rect_to_device(RTGUI_WIDGET(radiobox), &rect);
/* get board size */
if (radiobox->orient == RTGUI_VERTICAL)
@@ -187,7 +188,7 @@ struct rtgui_radiobox* rtgui_radiobox_create(const char* label, int orient, char for (index = 0; index < number; index ++)
{
rtgui_font_get_metrics(font, radio_items[index], &rect);
- if (rtgui_rect_width(rect) > radiobox->item_size)
+ if ( (board_size + 3 + rtgui_rect_width(rect)) > radiobox->item_size)
radiobox->item_size = board_size + 3 + rtgui_rect_width(rect);
}
}
diff --git a/rtgui/widgets/staticline.c b/rtgui/widgets/staticline.c index a8217457b0..055bb353d8 100644 --- a/rtgui/widgets/staticline.c +++ b/rtgui/widgets/staticline.c @@ -10,9 +10,6 @@ static void _rtgui_staticline_constructor(rtgui_staticline_t *staticline) rtgui_widget_set_rect(RTGUI_WIDGET(staticline), &rect);
staticline->orientation= RTGUI_HORIZONTAL;
- /* set background color */
- RTGUI_WIDGET(staticline)->gc.background = RTGUI_RGB(64, 64, 64);
-
rtgui_widget_set_event_handler(RTGUI_WIDGET(staticline), rtgui_staticline_event_handler);
}
diff --git a/rtgui/widgets/textbox.c b/rtgui/widgets/textbox.c index e91b046a71..c28f193b37 100644 --- a/rtgui/widgets/textbox.c +++ b/rtgui/widgets/textbox.c @@ -127,8 +127,13 @@ static void rtgui_textbox_onmouse(struct rtgui_textbox* box, struct rtgui_event_ box->position = x / box->font_width; } + /* set caret to show */ + box->flag |= RTGUI_TEXTBOX_CARET_SHOW; + /* set widget focus */ rtgui_widget_focus(RTGUI_WIDGET(box)); + /* re-draw text box */ + rtgui_theme_draw_textbox(box); } } @@ -236,6 +241,8 @@ static rt_bool_t rtgui_textbox_onfocus(struct rtgui_widget* widget, struct rtgui { struct rtgui_textbox* box = (struct rtgui_textbox*)widget; + /* set caret to show */ + box->flag |= RTGUI_TEXTBOX_CARET_SHOW; /* start caret timer */ rtgui_timer_start(box->caret_timer); @@ -248,7 +255,8 @@ static rt_bool_t rtgui_textbox_onunfocus(struct rtgui_widget* widget, struct rtg /* stop caret timer */ rtgui_timer_stop(box->caret_timer); - /* hide caret */ + /* set caret to hide */ + box->flag &= ~RTGUI_TEXTBOX_CARET_SHOW; return RT_TRUE; } diff --git a/rtgui/widgets/title.c b/rtgui/widgets/title.c index 2a38c703a5..005f125ee2 100644 --- a/rtgui/widgets/title.c +++ b/rtgui/widgets/title.c @@ -19,6 +19,7 @@ static void _rtgui_wintitle_constructor(rtgui_wintitle_t* wintitle) { wintitle->title = RT_NULL; RTGUI_WIDGET(wintitle)->flag = RTGUI_WIDGET_FLAG_DEFAULT; + RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(wintitle)) = RTGUI_ALIGN_CENTER_VERTICAL; } static void _rtgui_wintitle_deconstructor(rtgui_wintitle_t* wintitle) |
