|
@@ -24,170 +24,11 @@
|
|
|
#include <rtgui/rtgui_server.h>
|
|
|
#include <rtgui/rtgui_system.h>
|
|
|
|
|
|
-#define WINTITLE_CB_WIDTH 14
|
|
|
-#define WINTITLE_CB_HEIGHT 14
|
|
|
#define SELECTED_HEIGHT 25
|
|
|
|
|
|
-static const rt_uint8_t *close_unpressed_xpm[] = {
|
|
|
- "14 14 55 1",
|
|
|
- " c None",
|
|
|
- ". c #DCDFEA",
|
|
|
- "+ c #A4ADD3",
|
|
|
- "@ c #8F9ACA",
|
|
|
- "# c #98A2CD",
|
|
|
- "$ c #D2D6E6",
|
|
|
- "% c #F7F7F7",
|
|
|
- "& c #F6F6F6",
|
|
|
- "* c #B9C1D0",
|
|
|
- "= c #7A8AAA",
|
|
|
- "- c #D6DAE2",
|
|
|
- "; c #D8DCE3",
|
|
|
- "> c #7485A5",
|
|
|
- ", c #455C89",
|
|
|
- "' c #516690",
|
|
|
- ") c #D3D8E0",
|
|
|
- "! c #536891",
|
|
|
- "~ c #6D7FA1",
|
|
|
- "{ c #F5F5F5",
|
|
|
- "] c #D1D6DF",
|
|
|
- "^ c #D2D7DF",
|
|
|
- "/ c #D5D9E1",
|
|
|
- "( c #4E648E",
|
|
|
- "_ c #CFD4DE",
|
|
|
- ": c #F4F4F4",
|
|
|
- "< c #D0D5DE",
|
|
|
- "[ c #CED3DD",
|
|
|
- "} c #F3F3F3",
|
|
|
- "| c #CFD4DD",
|
|
|
- "1 c #CDD2DC",
|
|
|
- "2 c #F2F2F2",
|
|
|
- "3 c #D3D7DF",
|
|
|
- "4 c #526790",
|
|
|
- "5 c #D0D5DD",
|
|
|
- "6 c #F1F1F1",
|
|
|
- "7 c #D2D6DE",
|
|
|
- "8 c #CFD4DC",
|
|
|
- "9 c #F0F0F0",
|
|
|
- "0 c #D1D5DD",
|
|
|
- "a c #C9CED8",
|
|
|
- "b c #CDD2DB",
|
|
|
- "c c #50658F",
|
|
|
- "d c #CED3DB",
|
|
|
- "e c #7283A3",
|
|
|
- "f c #6E80A2",
|
|
|
- "g c #EFEFEF",
|
|
|
- "h c #B2BACA",
|
|
|
- "i c #7081A2",
|
|
|
- "j c #C8CDD7",
|
|
|
- "k c #CCD1DA",
|
|
|
- "l c #ACB5C7",
|
|
|
- "m c #D0D4E2",
|
|
|
- "n c #EEEEEE",
|
|
|
- "o c #D2D5E3",
|
|
|
- "p c #97A1CC",
|
|
|
- ".+@@@@@@@@@@+.",
|
|
|
- "#$%%%%%%%%%%$#",
|
|
|
- "@&*=-&&&&;=*&@",
|
|
|
- "@&>,')&&-!,~&@",
|
|
|
- "@{]','^/!,(_{@",
|
|
|
- "@::<','!,([::@",
|
|
|
- "@}}}|',,(1}}}@",
|
|
|
- "@22234,,'5222@",
|
|
|
- "@6674,(','866@",
|
|
|
- "@904,(abc,cd9@",
|
|
|
- "@9e,(a99bc,f9@",
|
|
|
- "@ghijggggkelg@",
|
|
|
- "#mnnnnnnnnnnm#",
|
|
|
- "op@@@@@@@@@@po"};
|
|
|
-
|
|
|
-static const rt_uint8_t *close_pressed_xpm[] = {
|
|
|
- "14 14 66 1",
|
|
|
- " c None",
|
|
|
- ". c #CED4EE",
|
|
|
- "+ c #7E90DD",
|
|
|
- "@ c #6076D7",
|
|
|
- "# c #6C80D9",
|
|
|
- "$ c #BFC8EA",
|
|
|
- "% c #F2F3F5",
|
|
|
- "& c #F0F2F3",
|
|
|
- "* c #A5B6D7",
|
|
|
- "= c #587ABB",
|
|
|
- "- c #C9D3E4",
|
|
|
- "; c #CBD5E4",
|
|
|
- "> c #EEF0F2",
|
|
|
- ", c #5073B7",
|
|
|
- "' c #1746A3",
|
|
|
- ") c #2551A8",
|
|
|
- "! c #C5CFE2",
|
|
|
- "~ c #C8D1E3",
|
|
|
- "{ c #2853A8",
|
|
|
- "] c #496DB4",
|
|
|
- "^ c #ECEEF1",
|
|
|
- "/ c #C0CCE0",
|
|
|
- "( c #C3CEE1",
|
|
|
- "_ c #C6D0E2",
|
|
|
- ": c #224FA7",
|
|
|
- "< c #BEC9DF",
|
|
|
- "[ c #EAECF0",
|
|
|
- "} c #BFCAE0",
|
|
|
- "| c #2551A7",
|
|
|
- "1 c #224EA7",
|
|
|
- "2 c #BCC8DF",
|
|
|
- "3 c #E8EBEE",
|
|
|
- "4 c #BDCADE",
|
|
|
- "5 c #BAC7DD",
|
|
|
- "6 c #E6E9ED",
|
|
|
- "7 c #C1CBDF",
|
|
|
- "8 c #2753A8",
|
|
|
- "9 c #BECADE",
|
|
|
- "0 c #E4E7EB",
|
|
|
- "a c #BFCADD",
|
|
|
- "b c #224EA6",
|
|
|
- "c c #BDC8DC",
|
|
|
- "d c #E1E5EA",
|
|
|
- "e c #2752A8",
|
|
|
- "f c #B3C0D9",
|
|
|
- "g c #B8C5DB",
|
|
|
- "h c #2451A7",
|
|
|
- "i c #BAC6DB",
|
|
|
- "j c #DFE2E8",
|
|
|
- "k c #4C70B4",
|
|
|
- "l c #B2BED8",
|
|
|
- "m c #B6C2D9",
|
|
|
- "n c #2450A7",
|
|
|
- "o c #486BB3",
|
|
|
- "p c #DCE0E7",
|
|
|
- "q c #96A8CE",
|
|
|
- "r c #496CB3",
|
|
|
- "s c #AFBCD7",
|
|
|
- "t c #B4C1D8",
|
|
|
- "u c #4B6FB4",
|
|
|
- "v c #8EA4CC",
|
|
|
- "w c #6C80D8",
|
|
|
- "x c #B4BEDF",
|
|
|
- "y c #DADEE5",
|
|
|
- "z c #B5BEDE",
|
|
|
- "A c #6A7ED7",
|
|
|
- ".+@@@@@@@@@@+.",
|
|
|
- "#$%%%%%%%%%%$#",
|
|
|
- "@&*=-&&&&;=*&@",
|
|
|
- "@>,')!>>~{']>@",
|
|
|
- "@^/)')(_{':<^@",
|
|
|
- "@[[}|'|{'12[[@",
|
|
|
- "@3334|''15333@",
|
|
|
- "@66678''|9666@",
|
|
|
- "@00a8'b|'|c00@",
|
|
|
- "@dce'bfgh'hid@",
|
|
|
- "@jk'bljjmn'oj@",
|
|
|
- "@pqrspppptuvp@",
|
|
|
- "wxyyyyyyyyyyxw",
|
|
|
- "zA@@@@@@@@@@Az"};
|
|
|
-
|
|
|
-static rtgui_image_t* close_pressed = RT_NULL;
|
|
|
-static rtgui_image_t* close_unpressed = RT_NULL;
|
|
|
-
|
|
|
const rtgui_color_t default_foreground = RTGUI_RGB(0x00, 0x00, 0x00);
|
|
|
const rtgui_color_t default_background = RTGUI_RGB(212, 208, 200);
|
|
|
+const rtgui_color_t selected_color = RTGUI_RGB(0xc0, 0xc0, 0xc0);
|
|
|
|
|
|
extern struct rtgui_font rtgui_font_asc16;
|
|
|
extern struct rtgui_font rtgui_font_arial16;
|
|
@@ -197,28 +38,19 @@ extern struct rtgui_font rtgui_font_arial12;
|
|
|
/* init theme */
|
|
|
void rtgui_system_theme_init()
|
|
|
{
|
|
|
- close_pressed = rtgui_image_create_from_mem("xpm",
|
|
|
- (const rt_uint8_t*)close_pressed_xpm, sizeof(close_pressed_xpm), RT_TRUE);
|
|
|
- close_unpressed = rtgui_image_create_from_mem("xpm",
|
|
|
- (const rt_uint8_t*)close_unpressed_xpm, sizeof(close_unpressed_xpm), RT_TRUE);
|
|
|
-
|
|
|
- rtgui_font_set_defaut(&rtgui_font_arial16);
|
|
|
+ rtgui_font_set_defaut(&rtgui_font_asc12);
|
|
|
}
|
|
|
|
|
|
+static const rt_uint8_t close_byte[14] = {0x06, 0x18, 0x03, 0x30, 0x01, 0xE0, 0x00,
|
|
|
+ 0xC0, 0x01, 0xE0, 0x03, 0x30, 0x06, 0x18
|
|
|
+};
|
|
|
+
|
|
|
/* window drawing */
|
|
|
void rtgui_theme_draw_win(struct rtgui_topwin* win)
|
|
|
{
|
|
|
struct rtgui_dc* dc;
|
|
|
rtgui_rect_t rect;
|
|
|
|
|
|
- /* init close box image */
|
|
|
- if (close_pressed == RT_NULL)
|
|
|
- close_pressed = rtgui_image_create_from_mem("xpm",
|
|
|
- (const rt_uint8_t*)close_pressed_xpm, sizeof(close_pressed_xpm), RT_TRUE);
|
|
|
- if (close_unpressed == RT_NULL)
|
|
|
- close_unpressed = rtgui_image_create_from_mem("xpm",
|
|
|
- (const rt_uint8_t*)close_unpressed_xpm, sizeof(close_unpressed_xpm), RT_TRUE);
|
|
|
-
|
|
|
/* begin drawing */
|
|
|
dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(win->title));
|
|
|
|
|
@@ -228,6 +60,7 @@ void rtgui_theme_draw_win(struct rtgui_topwin* win)
|
|
|
/* draw border */
|
|
|
if (win->flag & WINTITLE_BORDER)
|
|
|
{
|
|
|
+ rect.x2 -= 1; rect.y2 -= 1;
|
|
|
RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(win->title)) = RTGUI_RGB(212, 208, 200);
|
|
|
rtgui_dc_draw_hline(dc, rect.x1, rect.x2, rect.y1);
|
|
|
rtgui_dc_draw_vline(dc, rect.x1, rect.y1, rect.y2);
|
|
@@ -241,14 +74,11 @@ void rtgui_theme_draw_win(struct rtgui_topwin* win)
|
|
|
rtgui_dc_draw_vline(dc, rect.x2 - 1, rect.y1 + 1, rect.y2 - 1);
|
|
|
|
|
|
RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(win->title)) = RTGUI_RGB(64, 64, 64);
|
|
|
- rtgui_dc_draw_hline(dc, rect.x1, rect.x2 + 1, rect.y2);
|
|
|
+ rtgui_dc_draw_hline(dc, rect.x1, rect.x2, rect.y2);
|
|
|
rtgui_dc_draw_vline(dc, rect.x2, rect.y1, rect.y2);
|
|
|
|
|
|
/* shrink border */
|
|
|
- rect.x1 += WINTITLE_BORDER_SIZE;
|
|
|
- rect.y1 += WINTITLE_BORDER_SIZE;
|
|
|
- rect.x2 -= WINTITLE_BORDER_SIZE;
|
|
|
- rect.y2 -= WINTITLE_BORDER_SIZE;
|
|
|
+ rtgui_rect_inflate(&rect, -WINTITLE_BORDER_SIZE);
|
|
|
}
|
|
|
|
|
|
/* draw title */
|
|
@@ -291,15 +121,24 @@ void rtgui_theme_draw_win(struct rtgui_topwin* win)
|
|
|
if (win->flag & WINTITLE_CLOSEBOX)
|
|
|
{
|
|
|
/* get close button rect */
|
|
|
- rect.x1 = rtgui_rect_width(RTGUI_WIDGET(win->title)->extent) -
|
|
|
- WINTITLE_BORDER_SIZE - WINTITLE_CB_WIDTH - 3;
|
|
|
- rect.y1 = 3;
|
|
|
- rect.x2 = rect.x1 + WINTITLE_CB_WIDTH;
|
|
|
- rect.y2 = rect.y1 + WINTITLE_CB_HEIGHT;
|
|
|
+ rtgui_rect_t box_rect = {0, 0, WINTITLE_CB_WIDTH, WINTITLE_CB_HEIGHT};
|
|
|
+ rtgui_rect_moveto_align(&rect, &box_rect, RTGUI_ALIGN_CENTER_VERTICAL | RTGUI_ALIGN_RIGHT);
|
|
|
+ box_rect.x1 -= 3; box_rect.x2 -= 3;
|
|
|
+ rtgui_dc_fill_rect(dc, &box_rect);
|
|
|
|
|
|
/* draw close box */
|
|
|
- if(win->flag & WINTITLE_CB_PRESSED) rtgui_image_blit(close_pressed, dc, &rect);
|
|
|
- else rtgui_image_blit(close_unpressed, dc, &rect);
|
|
|
+ if (win->flag & WINTITLE_CB_PRESSED)
|
|
|
+ {
|
|
|
+ rtgui_dc_draw_border(dc, &box_rect, RTGUI_BORDER_SUNKEN);
|
|
|
+ RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(win->title)) = red;
|
|
|
+ rtgui_dc_draw_word(dc, box_rect.x1, box_rect.y1 + 6, 7, close_byte);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ rtgui_dc_draw_border(dc, &box_rect, RTGUI_BORDER_RAISE);
|
|
|
+ RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(win->title)) = black;
|
|
|
+ rtgui_dc_draw_word(dc, box_rect.x1 - 1, box_rect.y1 + 5, 7, close_byte);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -550,10 +389,18 @@ void rtgui_theme_draw_iconbox(rtgui_iconbox_t* iconbox)
|
|
|
rtgui_dc_end_drawing(dc);
|
|
|
}
|
|
|
|
|
|
+#define CHECK_BOX_W 13
|
|
|
+#define CHECK_BOX_H 13
|
|
|
+static const rt_uint8_t checked_byte[7] = {0x02, 0x06, 0x8E, 0xDC, 0xF8, 0x70, 0x20};
|
|
|
+
|
|
|
void rtgui_theme_draw_checkbox(struct rtgui_checkbox* checkbox)
|
|
|
{
|
|
|
struct rtgui_dc* dc;
|
|
|
struct rtgui_rect rect, box_rect;
|
|
|
+ rtgui_color_t bc, fc;
|
|
|
+
|
|
|
+ fc = RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(checkbox));
|
|
|
+ bc = RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(checkbox));
|
|
|
|
|
|
/* begin drawing */
|
|
|
dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(checkbox));
|
|
@@ -575,29 +422,26 @@ void rtgui_theme_draw_checkbox(struct rtgui_checkbox* checkbox)
|
|
|
}
|
|
|
|
|
|
/* draw check box */
|
|
|
- box_rect = rect;
|
|
|
- box_rect.x1 += 2;
|
|
|
- box_rect.y1 += 2;
|
|
|
- box_rect.x2 = rtgui_rect_height(rect) - 4;
|
|
|
- box_rect.y2 = rtgui_rect_height(rect) - 4;
|
|
|
-
|
|
|
- rtgui_dc_draw_rect(dc, &box_rect);
|
|
|
+ box_rect.x1 = 0;
|
|
|
+ box_rect.y1 = 0;
|
|
|
+ box_rect.x2 = CHECK_BOX_W;
|
|
|
+ box_rect.y2 = CHECK_BOX_H;
|
|
|
+ rtgui_rect_moveto_align(&rect, &box_rect, RTGUI_ALIGN_CENTER_VERTICAL);
|
|
|
+
|
|
|
+ rtgui_dc_draw_border(dc, &box_rect, RTGUI_BORDER_BOX);
|
|
|
+ rtgui_rect_inflate(&box_rect, -1);
|
|
|
+ RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(checkbox)) = RTGUI_RGB(247, 247, 246);
|
|
|
+ rtgui_dc_fill_rect(dc, &box_rect);
|
|
|
if (checkbox->status_down == RTGUI_CHECKBOX_STATUS_CHECKED)
|
|
|
{
|
|
|
- rtgui_color_t save;
|
|
|
-
|
|
|
- save = RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(checkbox));
|
|
|
-
|
|
|
- /* swap fore/back color */
|
|
|
- RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(checkbox)) = RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(checkbox));
|
|
|
-
|
|
|
- rtgui_rect_inflate(&box_rect, -4);
|
|
|
- rtgui_dc_fill_rect(dc, &box_rect);
|
|
|
-
|
|
|
- /* restore saved color */
|
|
|
- RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(checkbox)) = save;
|
|
|
+ RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(checkbox)) = RTGUI_RGB(33, 161, 33);
|
|
|
+ rtgui_dc_draw_byte(dc, box_rect.x1 + 2, box_rect.y1 + 2, 7, checked_byte);
|
|
|
}
|
|
|
|
|
|
+ /* restore saved color */
|
|
|
+ RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(checkbox)) = bc;
|
|
|
+ RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(checkbox)) = fc;
|
|
|
+
|
|
|
/* draw text */
|
|
|
rect.x1 += rtgui_rect_height(rect) - 4 + 5;
|
|
|
rtgui_dc_draw_text(dc, rtgui_label_get_text(RTGUI_LABEL(checkbox)), &rect);
|
|
@@ -922,19 +766,22 @@ rt_uint16_t rtgui_theme_get_selected_height()
|
|
|
|
|
|
void rtgui_theme_draw_selected(struct rtgui_dc* dc, rtgui_rect_t *rect)
|
|
|
{
|
|
|
- rtgui_color_t saved;
|
|
|
- rtgui_rect_t focus_rect;
|
|
|
+ rtgui_color_t bc;
|
|
|
+ rt_uint16_t index;
|
|
|
|
|
|
- focus_rect = *rect;
|
|
|
- saved = rtgui_dc_get_color(dc);
|
|
|
- rtgui_dc_set_color(dc, blue);
|
|
|
+ bc = rtgui_dc_get_color(dc);
|
|
|
+ rtgui_dc_set_color(dc, selected_color);
|
|
|
+
|
|
|
+ rtgui_dc_draw_hline(dc, rect->x1 + 3, rect->x2 - 2, rect->y1 + 1);
|
|
|
+ rtgui_dc_draw_hline(dc, rect->x1 + 3, rect->x2 - 2, rect->y2 - 2);
|
|
|
+
|
|
|
+ rtgui_dc_draw_vline(dc, rect->x1 + 2, rect->y1 + 2, rect->y2 - 2);
|
|
|
+ rtgui_dc_draw_vline(dc, rect->x2 - 2, rect->y1 + 2, rect->y2 - 2);
|
|
|
|
|
|
- rtgui_rect_inflate(&focus_rect, -1);
|
|
|
- rtgui_dc_draw_focus_rect(dc, &focus_rect);
|
|
|
- rtgui_rect_inflate(&focus_rect, -1);
|
|
|
- rtgui_dc_draw_focus_rect(dc, &focus_rect);
|
|
|
+ for (index = rect->y1 + 1; index < rect->y2 - 2; index ++)
|
|
|
+ rtgui_dc_draw_hline(dc, rect->x1 + 3, rect->x2 - 2, index);
|
|
|
|
|
|
- rtgui_dc_set_color(dc, saved);
|
|
|
+ rtgui_dc_set_color(dc, bc);
|
|
|
}
|
|
|
|
|
|
/* get default background color */
|