change window close button outlook and add select bar drawing.

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@355 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
bernard.xiong 2010-02-01 09:45:33 +00:00
parent 5c2be6f0ea
commit 97d4abe294
9 changed files with 219 additions and 241 deletions

View File

@ -14,7 +14,11 @@ static void open_btn_onbutton(rtgui_widget_t* widget, struct rtgui_event* event)
workbench = RTGUI_WORKBENCH(rtgui_widget_get_toplevel(widget));
rtgui_widget_get_rect(RTGUI_WIDGET(workbench), &rect);
#ifdef _WIN32
view = rtgui_filelist_view_create(workbench, "d:\\", "*.*", &rect);
#else
view = rtgui_filelist_view_create(workbench, "/", "*.*", &rect);
#endif
if (rtgui_view_show(RTGUI_VIEW(view), RT_TRUE) == RTGUI_MODAL_OK)
{
char path[32];

View File

@ -3,6 +3,28 @@
#include <rtgui/widgets/label.h>
#include <rtgui/widgets/slider.h>
static const rt_uint8_t boxChecked[7] = {0x02, 0x06, 0x8E, 0xDC, 0xF8, 0x70, 0x20};
static const rt_uint8_t sysMin[2] = {0x7E, 0x7E};
static const rt_uint8_t sysMax[18] = {0x0F, 0xF8, 0x0F, 0xF8, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x0F, 0xF8
};
static const rt_uint8_t sysNormal[18] = {0x03, 0xF0, 0x03, 0xF0, 0x02, 0x10,
0x0F, 0xD0, 0x0F, 0xD0, 0x08, 0x70,
0x08, 0x40, 0x08, 0x40, 0x0F, 0xC0
};
static const rt_uint8_t sysClose[14] = {0x06, 0x18, 0x03, 0x30, 0x01, 0xE0, 0x00,
0xC0, 0x01, 0xE0, 0x03, 0x30, 0x06, 0x18
};
static const rt_uint8_t viewSYS[28] = {0xFF, 0x1F, 0x3C, 0x06, 0x1C, 0x04, 0x1C,
0x0C, 0x0E, 0x08, 0x0E, 0x18, 0x07, 0x10,
0x07, 0x30, 0x03, 0xA0, 0x03, 0xE0, 0x01,
0xC0, 0x01, 0xC0, 0x00, 0x80, 0x00, 0x80
};
rt_bool_t dc_event_handler(rtgui_widget_t* widget, rtgui_event_t *event)
{
if (event->type == RTGUI_EVENT_PAINT)
@ -35,7 +57,7 @@ rt_bool_t dc_event_handler(rtgui_widget_t* widget, rtgui_event_t *event)
rtgui_dc_set_color(dc, green);
rtgui_dc_fill_circle(dc, rect.x1 + 30, rect.y1 + 10, 10);
/* 画一个圆弧 */
/* »­Ò»¸öÔ²»¡ */
rtgui_dc_set_color(dc, RTGUI_RGB(250, 120, 120));
rtgui_dc_draw_arc(dc, rect.x1 + 120, rect.y1 + 60, 30, 0, 120);
@ -43,6 +65,97 @@ rt_bool_t dc_event_handler(rtgui_widget_t* widget, rtgui_event_t *event)
rtgui_dc_set_color(dc, blue);
rtgui_dc_draw_polygon(dc, vx, vy, 6);
{
rtgui_rect_t item_rect = {0, 0, 14, 14};
rt_uint16_t item_size = 14;
rtgui_rect_moveto(&item_rect, 100, 100);
rtgui_dc_set_color(dc, RTGUI_RGB(0x66, 0x66, 0x66));
rtgui_dc_draw_circle(dc, item_rect.x1 + item_size/2, item_rect.y1 + item_size/2, item_size/2);
rtgui_dc_set_color(dc, RTGUI_RGB(0xff, 0xFF, 0xFF));
rtgui_dc_draw_circle(dc, item_rect.x1 + item_size/2, item_rect.y1 + item_size/2, item_size/2 - 1);
rtgui_dc_set_color(dc, RTGUI_RGB(0x00, 0x00, 0x00));
rtgui_dc_fill_circle(dc, item_rect.x1 + item_size/2, item_rect.y1 + item_size/2, item_size/2 - 3);
}
{
rtgui_rect_t item_rect = {0, 0, 14, 14};
rt_uint16_t item_size = 14;
rtgui_rect_moveto(&item_rect, 120, 120);
rtgui_dc_set_color(dc, RTGUI_RGB(0x66, 0x66, 0x66));
rtgui_dc_draw_circle(dc, item_rect.x1 + item_size/2, item_rect.y1 + item_size/2, item_size/2);
rtgui_dc_set_color(dc, RTGUI_RGB(0xff, 0xFF, 0xFF));
rtgui_dc_draw_circle(dc, item_rect.x1 + item_size/2, item_rect.y1 + item_size/2, item_size/2 - 1);
rtgui_dc_set_color(dc, RTGUI_RGB(0x00, 0x00, 0x00));
}
{
int x, y;
x = 150; y = 150;
rtgui_dc_set_color(dc, black);
rtgui_dc_draw_byte(dc, x, y, 7, boxChecked);
y += 7 + 2;
rtgui_dc_draw_byte(dc, x, y, 2, sysMin);
y += 2 + 2;
rtgui_dc_draw_word(dc, x, y, 9, sysMax);
y += 9 + 2;
rtgui_dc_draw_word(dc, x, y, 9, sysNormal);
y += 9 + 2;
rtgui_dc_draw_word(dc, x, y, 7, sysClose);
y += 7 + 2;
rtgui_dc_draw_word(dc, x, y, 14, viewSYS);
y += 14 + 2;
}
{
rtgui_rect_t rect = {0, 0, 16, 16};
rtgui_rect_moveto(&rect, 30, 120);
rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_RAISE);
rect.x1 += 20; rect.x2 += 20 + 50;
rtgui_dc_draw_text(dc, "raise", &rect);
rect.x1 -= 20; rect.x2 -= 20 + 50;
rect.y1 += 20; rect.y2 += 20;
rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_SIMPLE);
rect.x1 += 20; rect.x2 += 20 + 50;
rtgui_dc_draw_text(dc, "simple", &rect);
rect.x1 -= 20; rect.x2 -= 20 + 50;
rect.y1 += 20; rect.y2 += 20;
rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_SUNKEN);
rect.x1 += 20; rect.x2 += 20 + 50;
rtgui_dc_draw_text(dc, "sunken", &rect);
rect.x1 -= 20; rect.x2 -= 20 + 50;
rect.y1 += 20; rect.y2 += 20;
rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_BOX);
rect.x1 += 20; rect.x2 += 20 + 50;
rtgui_dc_draw_text(dc, "box", &rect);
rect.x1 -= 20; rect.x2 -= 20 + 50;
rect.y1 += 20; rect.y2 += 20;
rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_STATIC);
rect.x1 += 20; rect.x2 += 20 + 50;
rtgui_dc_draw_text(dc, "static", &rect);
rect.x1 -= 20; rect.x2 -= 20 + 50;
rect.y1 += 20; rect.y2 += 20;
rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_EXTRA);
rect.x1 += 20; rect.x2 += 20 + 50;
rtgui_dc_draw_text(dc, "extra", &rect);
rect.x1 -= 20; rect.x2 -= 20 + 50;
rect.y1 += 20; rect.y2 += 20;
}
/* ťćÍźÍęłÉ */
rtgui_dc_end_drawing(dc);
}

View File

@ -226,11 +226,11 @@ void rtgui_dc_draw_text (struct rtgui_dc* dc, const rt_uint8_t* text, struct rtg
#endif
}
void rtgui_dc_draw_byte(struct rtgui_dc*dc, int x, int y, int h, rt_uint8_t* data)
void rtgui_dc_draw_byte(struct rtgui_dc*dc, int x, int y, int h, const rt_uint8_t* data)
{
int i, k;
/* draw word */
/* draw byte */
for (i=0; i < h; i ++)
{
for (k=0; k < 8; k++)
@ -243,6 +243,24 @@ void rtgui_dc_draw_byte(struct rtgui_dc*dc, int x, int y, int h, rt_uint8_t* dat
}
}
void rtgui_dc_draw_word(struct rtgui_dc*dc, int x, int y, int h, const rt_uint8_t* data)
{
int i, j, k;
/* draw word */
for (i=0; i < h; i ++)
{
for (j=0; j < 2; j++)
for (k=0; k < 8; k++)
{
if (((data[i * 2 + j] >> (7-k)) & 0x01) != 0)
{
rtgui_dc_draw_point(dc, x + 8*j + k, y + i);
}
}
}
}
void rtgui_dc_set_color(struct rtgui_dc* dc, rtgui_color_t color)
{
if (dc != RT_NULL)
@ -791,7 +809,7 @@ void rtgui_dc_draw_arc(struct rtgui_dc *dc, rt_int16_t x, rt_int16_t y, rt_int16
/* Sanity check radius */
if (r < 0) return ;
/* Special case for r=0 - draw a point */
if (r == 0)
if (r == 0)
{
rtgui_dc_draw_point(dc, x, y);
return;
@ -802,11 +820,11 @@ void rtgui_dc_draw_arc(struct rtgui_dc *dc, rt_int16_t x, rt_int16_t y, rt_int16
end = end % 360;
/*
* Draw arc
* Draw arc
*/
// Octant labelling
//
//
// \ 5 | 6 /
// \ | /
// 4 \ | / 7
@ -840,7 +858,7 @@ void rtgui_dc_draw_arc(struct rtgui_dc *dc, rt_int16_t x, rt_int16_t y, rt_int16
if (oct == startoct)
{
// need to compute stopval_start for this octant. Look at picture above if this is unclear
switch (oct)
switch (oct)
{
case 0:
case 3:
@ -902,15 +920,15 @@ void rtgui_dc_draw_arc(struct rtgui_dc *dc, rt_int16_t x, rt_int16_t y, rt_int16
// otherwise: we only draw in this octant, so initialize it to false, it will get set back to true
if (start > end)
{
// unfortunately, if we're in the same octant and need to draw over the whole circle,
// unfortunately, if we're in the same octant and need to draw over the whole circle,
// we need to set the rest to true, because the while loop will end at the bottom.
drawoct = 255;
}
}
else
{
drawoct &= 255 - (1 << oct);
}
}
}
else if (oct % 2) drawoct &= 255 - (1 << oct);
else drawoct |= (1 << oct);
} else if (oct != startoct) { // already verified that it's != endoct
@ -962,7 +980,7 @@ void rtgui_dc_draw_arc(struct rtgui_dc *dc, rt_int16_t x, rt_int16_t y, rt_int16
if (stopval_start == cx)
{
// works like an on-off switch because start & end may be in the same octant.
if (drawoct & (1 << startoct)) drawoct &= 255 - (1 << startoct);
if (drawoct & (1 << startoct)) drawoct &= 255 - (1 << startoct);
else drawoct |= (1 << startoct);
}
if (stopval_end == cx)

View File

@ -32,9 +32,6 @@ void rtgui_system_server_init()
/* init rtgui_thread */
rtgui_thread_system_init();
/* init theme */
rtgui_system_theme_init();
/* init image */
rtgui_system_image_init();
/* init font */
@ -44,6 +41,9 @@ void rtgui_system_server_init()
rtgui_panel_init();
rtgui_topwin_init();
rtgui_server_init();
/* init theme */
rtgui_system_theme_init();
}
/************************************************************************/

View File

@ -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;
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_rect(dc, &box_rect);
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_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);
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_set_color(dc, saved);
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);
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, bc);
}
/* get default background color */

View File

@ -107,7 +107,8 @@ void rtgui_dc_draw_rect (struct rtgui_dc* dc, struct rtgui_rect* rect);
void rtgui_dc_draw_round_rect(struct rtgui_dc* dc, struct rtgui_rect* rect);
void rtgui_dc_draw_text (struct rtgui_dc* dc, const rt_uint8_t* text, struct rtgui_rect* rect);
void rtgui_dc_draw_byte(struct rtgui_dc*dc, int x, int y, int h, rt_uint8_t* data);
void rtgui_dc_draw_byte(struct rtgui_dc*dc, int x, int y, int h, const rt_uint8_t* data);
void rtgui_dc_draw_word(struct rtgui_dc*dc, int x, int y, int h, const rt_uint8_t* data);
void rtgui_dc_draw_border(struct rtgui_dc* dc, rtgui_rect_t* rect, int flag);
void rtgui_dc_draw_horizontal_line(struct rtgui_dc* dc, int x1, int x2, int y);

View File

@ -61,7 +61,9 @@ enum RTGUI_BORDER_STYLE
RTGUI_BORDER_SUNKEN,
RTGUI_BORDER_BOX,
RTGUI_BORDER_STATIC,
RTGUI_BORDER_EXTRA
RTGUI_BORDER_EXTRA,
RTGUI_BORDER_UP,
RTGUI_BORDER_DOWN
};
#define RTGUI_BORDER_DEFAULT_WIDTH 2
#define RTGUI_WIDGET_DEFAULT_MARGIN 3

View File

@ -31,6 +31,8 @@ enum
};
#define WINTITLE_HEIGHT 20
#define WINTITLE_CB_WIDTH 16
#define WINTITLE_CB_HEIGHT 16
#define WINTITLE_BORDER_SIZE 2
struct rtgui_topwin

View File

@ -30,9 +30,6 @@ static struct rt_semaphore _rtgui_topwin_lock;
static void rtgui_topwin_update_clip(void);
static void rtgui_topwin_redraw(struct rtgui_rect* rect);
#define WINTITLE_CB_WIDTH 14
#define WINTITLE_CB_HEIGHT 14
void rtgui_topwin_init()
{
/* init window list */
@ -90,10 +87,7 @@ rt_err_t rtgui_topwin_add(struct rtgui_event_win_create* event)
/* add border rect */
if (topwin->flag & WINTITLE_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);
}
/* add title rect */
@ -688,10 +682,7 @@ void rtgui_topwin_resize(struct rtgui_win* wid, rtgui_rect_t* r)
/* add border rect */
if (topwin->flag & WINTITLE_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);
}
/* add title rect */