提交 4fd321c3 编写于 作者: B bernard.xiong

add rtgui_dc_draw_color_point function.

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@606 bbd45198-f89e-11dd-88c7-29a3b14d5316
上级 553d24f8
...@@ -41,6 +41,16 @@ void rtgui_dc_draw_point(struct rtgui_dc* dc, int x, int y) ...@@ -41,6 +41,16 @@ void rtgui_dc_draw_point(struct rtgui_dc* dc, int x, int y)
dc->draw_point(dc, x, y); dc->draw_point(dc, x, y);
} }
/*
* draw a color point on dc
*/
void rtgui_dc_draw_color_point(struct rtgui_dc* dc, int x, int y, rtgui_color_t color)
{
if (dc == RT_NULL) return;
dc->draw_color_point(dc, x, y, color);
}
/* /*
* draw a vertical line on dc * draw a vertical line on dc
*/ */
...@@ -178,7 +188,7 @@ void rtgui_dc_draw_text (struct rtgui_dc* dc, const char* text, struct rtgui_rec ...@@ -178,7 +188,7 @@ void rtgui_dc_draw_text (struct rtgui_dc* dc, const char* text, struct rtgui_rec
RT_ASSERT(dc != RT_NULL); RT_ASSERT(dc != RT_NULL);
font = rtgui_dc_get_font(dc); font = RTGUI_DC_FONT(dc);
if (font == RT_NULL) if (font == RT_NULL)
{ {
/* use system default font */ /* use system default font */
...@@ -195,7 +205,7 @@ void rtgui_dc_draw_text (struct rtgui_dc* dc, const char* text, struct rtgui_rec ...@@ -195,7 +205,7 @@ void rtgui_dc_draw_text (struct rtgui_dc* dc, const char* text, struct rtgui_rec
/* text align */ /* text align */
rtgui_font_get_metrics(font, text, &text_rect); rtgui_font_get_metrics(font, text, &text_rect);
rtgui_rect_moveto_align(rect, &text_rect, rtgui_dc_get_textalign(dc)); rtgui_rect_moveto_align(rect, &text_rect, RTGUI_DC_TEXTALIGN(dc));
#ifdef RTGUI_USING_FONTHZ #ifdef RTGUI_USING_FONTHZ
while (*text) while (*text)
...@@ -261,60 +271,24 @@ void rtgui_dc_draw_word(struct rtgui_dc*dc, int x, int y, int h, const rt_uint8_ ...@@ -261,60 +271,24 @@ void rtgui_dc_draw_word(struct rtgui_dc*dc, int x, int y, int h, const rt_uint8_
} }
} }
void rtgui_dc_set_color(struct rtgui_dc* dc, rtgui_color_t color) void rtgui_dc_set_gc(struct rtgui_dc* dc, rtgui_gc_t* gc)
{ {
if (dc != RT_NULL) if (dc != RT_NULL)
{ {
dc->set_color(dc, color); dc->set_gc(dc, gc);
} }
} }
rtgui_color_t rtgui_dc_get_color(struct rtgui_dc* dc) rtgui_gc_t *rtgui_dc_get_gc(struct rtgui_dc* dc)
{ {
if (dc != RT_NULL) if (dc != RT_NULL)
{ {
return dc->get_color(dc); return dc->get_gc(dc);
}
return white;
}
void rtgui_dc_set_font(struct rtgui_dc* dc, rtgui_font_t* font)
{
if (dc != RT_NULL)
{
dc->set_font(dc, font);
}
}
rtgui_font_t* rtgui_dc_get_font(struct rtgui_dc* dc)
{
if (dc != RT_NULL)
{
return dc->get_font(dc);
} }
return RT_NULL; return RT_NULL;
} }
void rtgui_dc_set_textalign(struct rtgui_dc* dc, rt_int32_t align)
{
if (dc != RT_NULL)
{
dc->set_textalign(dc, align);
}
}
rt_int32_t rtgui_dc_get_textalign(struct rtgui_dc* dc)
{
if (dc != RT_NULL)
{
return dc->get_textalign(dc);
}
return RTGUI_ALIGN_NOT;
}
rt_bool_t rtgui_dc_get_visible(struct rtgui_dc* dc) rt_bool_t rtgui_dc_get_visible(struct rtgui_dc* dc)
{ {
if (dc != RT_NULL) if (dc != RT_NULL)
...@@ -330,11 +304,11 @@ void rtgui_dc_draw_shaded_rect(struct rtgui_dc* dc, rtgui_rect_t* rect, ...@@ -330,11 +304,11 @@ void rtgui_dc_draw_shaded_rect(struct rtgui_dc* dc, rtgui_rect_t* rect,
{ {
RT_ASSERT(dc != RT_NULL); RT_ASSERT(dc != RT_NULL);
rtgui_dc_set_color(dc, c1); RTGUI_DC_FC(dc) = c1;
rtgui_dc_draw_vline(dc, rect->x1, rect->y1, rect->y2); rtgui_dc_draw_vline(dc, rect->x1, rect->y1, rect->y2);
rtgui_dc_draw_hline(dc, rect->x1 + 1, rect->x2, rect->y1); rtgui_dc_draw_hline(dc, rect->x1 + 1, rect->x2, rect->y1);
rtgui_dc_set_color(dc, c2); RTGUI_DC_FC(dc) = c2;
rtgui_dc_draw_vline(dc, rect->x2, rect->y1, rect->y2); rtgui_dc_draw_vline(dc, rect->x2, rect->y1, rect->y2);
rtgui_dc_draw_hline(dc, rect->x1, rect->x2 + 1, rect->y2); rtgui_dc_draw_hline(dc, rect->x1, rect->x2 + 1, rect->y2);
} }
...@@ -347,7 +321,7 @@ void rtgui_dc_draw_border(struct rtgui_dc* dc, rtgui_rect_t* rect, int flag) ...@@ -347,7 +321,7 @@ void rtgui_dc_draw_border(struct rtgui_dc* dc, rtgui_rect_t* rect, int flag)
if (dc == RT_NULL) return ; if (dc == RT_NULL) return ;
/* save old color */ /* save old color */
color = rtgui_dc_get_color(dc); color = RTGUI_DC_FC(dc);
r = *rect; r = *rect;
switch (flag) switch (flag)
...@@ -375,12 +349,12 @@ void rtgui_dc_draw_border(struct rtgui_dc* dc, rtgui_rect_t* rect, int flag) ...@@ -375,12 +349,12 @@ void rtgui_dc_draw_border(struct rtgui_dc* dc, rtgui_rect_t* rect, int flag)
break; break;
case RTGUI_BORDER_EXTRA: case RTGUI_BORDER_EXTRA:
rtgui_dc_set_color(dc, light_grey); RTGUI_DC_FC(dc) = light_grey;
rtgui_dc_draw_rect(dc, &r); rtgui_dc_draw_rect(dc, &r);
break; break;
case RTGUI_BORDER_SIMPLE: case RTGUI_BORDER_SIMPLE:
rtgui_dc_set_color(dc, black); RTGUI_DC_FC(dc) = black;
rtgui_dc_draw_rect(dc, &r); rtgui_dc_draw_rect(dc, &r);
break; break;
...@@ -389,7 +363,7 @@ void rtgui_dc_draw_border(struct rtgui_dc* dc, rtgui_rect_t* rect, int flag) ...@@ -389,7 +363,7 @@ void rtgui_dc_draw_border(struct rtgui_dc* dc, rtgui_rect_t* rect, int flag)
} }
/* restore color */ /* restore color */
rtgui_dc_set_color(dc, color); RTGUI_DC_FC(dc) = color;
} }
void rtgui_dc_draw_horizontal_line(struct rtgui_dc* dc, int x1, int x2, int y) void rtgui_dc_draw_horizontal_line(struct rtgui_dc* dc, int x1, int x2, int y)
...@@ -399,18 +373,18 @@ void rtgui_dc_draw_horizontal_line(struct rtgui_dc* dc, int x1, int x2, int y) ...@@ -399,18 +373,18 @@ void rtgui_dc_draw_horizontal_line(struct rtgui_dc* dc, int x1, int x2, int y)
if (dc == RT_NULL) return ; if (dc == RT_NULL) return ;
/* save old color */ /* save old color */
color = rtgui_dc_get_color(dc); color = RTGUI_DC_FC(dc);
rtgui_dc_set_color(dc, dark_grey); RTGUI_DC_FC(dc) = dark_grey;
rtgui_dc_draw_hline(dc, x1, x2, y); rtgui_dc_draw_hline(dc, x1, x2, y);
y ++; y ++;
rtgui_dc_set_color(dc, high_light); RTGUI_DC_FC(dc) = high_light;
rtgui_dc_draw_hline(dc, x1, x2, y); rtgui_dc_draw_hline(dc, x1, x2, y);
/* restore color */ /* restore color */
rtgui_dc_set_color(dc, color); RTGUI_DC_FC(dc) = color;
} }
void rtgui_dc_draw_vertical_line(struct rtgui_dc* dc, int x, int y1, int y2) void rtgui_dc_draw_vertical_line(struct rtgui_dc* dc, int x, int y1, int y2)
...@@ -420,18 +394,18 @@ void rtgui_dc_draw_vertical_line(struct rtgui_dc* dc, int x, int y1, int y2) ...@@ -420,18 +394,18 @@ void rtgui_dc_draw_vertical_line(struct rtgui_dc* dc, int x, int y1, int y2)
if (dc == RT_NULL) return ; if (dc == RT_NULL) return ;
/* save old color */ /* save old color */
color = rtgui_dc_get_color(dc); color = RTGUI_DC_FC(dc);
rtgui_dc_set_color(dc, dark_grey); RTGUI_DC_FC(dc) = dark_grey;
rtgui_dc_draw_hline(dc, x, y1, y2); rtgui_dc_draw_hline(dc, x, y1, y2);
x ++; x ++;
rtgui_dc_set_color(dc, high_light); RTGUI_DC_FC(dc) = high_light;
rtgui_dc_draw_hline(dc, x, y1, y2); rtgui_dc_draw_hline(dc, x, y1, y2);
/* restore color */ /* restore color */
rtgui_dc_set_color(dc, color); RTGUI_DC_FC(dc) = color;
} }
void rtgui_dc_draw_arrow(struct rtgui_dc* dc, rtgui_rect_t* rect, int kind) void rtgui_dc_draw_arrow(struct rtgui_dc* dc, rtgui_rect_t* rect, int kind)
......
...@@ -21,6 +21,9 @@ struct rtgui_dc_buffer ...@@ -21,6 +21,9 @@ struct rtgui_dc_buffer
{ {
struct rtgui_dc parent; struct rtgui_dc parent;
/* graphic context */
rtgui_gc_t gc;
/* color and font */ /* color and font */
rtgui_color_t color; rtgui_color_t color;
struct rtgui_font* font; struct rtgui_font* font;
...@@ -41,17 +44,16 @@ struct rtgui_dc_buffer ...@@ -41,17 +44,16 @@ struct rtgui_dc_buffer
static rt_bool_t rtgui_dc_buffer_fini(struct rtgui_dc* dc); static rt_bool_t rtgui_dc_buffer_fini(struct rtgui_dc* dc);
static void rtgui_dc_buffer_draw_point(struct rtgui_dc* dc, int x, int y); static void rtgui_dc_buffer_draw_point(struct rtgui_dc* dc, int x, int y);
static void rtgui_dc_buffer_draw_color_point(struct rtgui_dc* dc, int x, int y, rtgui_color_t color);
static void rtgui_dc_buffer_draw_vline(struct rtgui_dc* dc, int x, int y1, int y2); static void rtgui_dc_buffer_draw_vline(struct rtgui_dc* dc, int x, int y1, int y2);
static void rtgui_dc_buffer_draw_hline(struct rtgui_dc* dc, int x1, int x2, int y); static void rtgui_dc_buffer_draw_hline(struct rtgui_dc* dc, int x1, int x2, int y);
static void rtgui_dc_buffer_fill_rect (struct rtgui_dc* dc, struct rtgui_rect* rect); static void rtgui_dc_buffer_fill_rect (struct rtgui_dc* dc, struct rtgui_rect* rect);
static void rtgui_dc_buffer_blit(struct rtgui_dc* self, struct rtgui_point* dc_point, static void rtgui_dc_buffer_blit(struct rtgui_dc* self, struct rtgui_point* dc_point,
struct rtgui_dc* dest, rtgui_rect_t* rect); struct rtgui_dc* dest, rtgui_rect_t* rect);
static void rtgui_dc_buffer_set_color (struct rtgui_dc* dc, rtgui_color_t color);
static rtgui_color_t rtgui_dc_buffer_get_color(struct rtgui_dc* dc); static void rtgui_dc_buffer_set_gc (struct rtgui_dc* dc, rtgui_gc_t *gc);
static void rtgui_dc_buffer_set_font(struct rtgui_dc* dc, rtgui_font_t* font); static rtgui_gc_t* rtgui_dc_buffer_get_gc(struct rtgui_dc* dc);
static rtgui_font_t* rtgui_dc_buffer_get_font(struct rtgui_dc* dc);
static void rtgui_dc_buffer_set_textalign(struct rtgui_dc* dc, rt_int32_t textalign);
static rt_int32_t rtgui_dc_buffer_get_textalign(struct rtgui_dc* dc);
static rt_bool_t rtgui_dc_buffer_get_visible(struct rtgui_dc* dc); static rt_bool_t rtgui_dc_buffer_get_visible(struct rtgui_dc* dc);
static void rtgui_dc_buffer_get_rect(struct rtgui_dc* dc, rtgui_rect_t* rect); static void rtgui_dc_buffer_get_rect(struct rtgui_dc* dc, rtgui_rect_t* rect);
...@@ -61,18 +63,14 @@ static void rtgui_dc_buffer_init(struct rtgui_dc_buffer* dc) ...@@ -61,18 +63,14 @@ static void rtgui_dc_buffer_init(struct rtgui_dc_buffer* dc)
dc->parent.type = RTGUI_DC_BUFFER; dc->parent.type = RTGUI_DC_BUFFER;
dc->parent.draw_point = rtgui_dc_buffer_draw_point; dc->parent.draw_point = rtgui_dc_buffer_draw_point;
dc->parent.draw_color_point = rtgui_dc_buffer_draw_color_point;
dc->parent.draw_hline = rtgui_dc_buffer_draw_hline; dc->parent.draw_hline = rtgui_dc_buffer_draw_hline;
dc->parent.draw_vline = rtgui_dc_buffer_draw_vline; dc->parent.draw_vline = rtgui_dc_buffer_draw_vline;
dc->parent.fill_rect = rtgui_dc_buffer_fill_rect; dc->parent.fill_rect = rtgui_dc_buffer_fill_rect;
dc->parent.blit = rtgui_dc_buffer_blit; dc->parent.blit = rtgui_dc_buffer_blit;
dc->parent.set_color = rtgui_dc_buffer_set_color; dc->parent.set_gc = rtgui_dc_buffer_set_gc;
dc->parent.get_color = rtgui_dc_buffer_get_color; dc->parent.get_gc = rtgui_dc_buffer_get_gc;
dc->parent.set_font = rtgui_dc_buffer_set_font;
dc->parent.get_font = rtgui_dc_buffer_get_font;
dc->parent.set_textalign = rtgui_dc_buffer_set_textalign;
dc->parent.get_textalign = rtgui_dc_buffer_get_textalign;
dc->parent.get_visible= rtgui_dc_buffer_get_visible; dc->parent.get_visible= rtgui_dc_buffer_get_visible;
dc->parent.get_rect = rtgui_dc_buffer_get_rect; dc->parent.get_rect = rtgui_dc_buffer_get_rect;
...@@ -137,6 +135,19 @@ static void rtgui_dc_buffer_draw_point(struct rtgui_dc* self, int x, int y) ...@@ -137,6 +135,19 @@ static void rtgui_dc_buffer_draw_point(struct rtgui_dc* self, int x, int y)
*ptr = dc->color; *ptr = dc->color;
} }
static void rtgui_dc_buffer_draw_color_point(struct rtgui_dc* self, int x, int y, rtgui_color_t color)
{
rtgui_color_t* ptr;
struct rtgui_dc_buffer* dc;
dc = (struct rtgui_dc_buffer*)self;
/* note: there is no parameter check in this function */
ptr = (rtgui_color_t*)(dc->pixel + y * dc->pitch + x * sizeof(rtgui_color_t));
*ptr = color;
}
static void rtgui_dc_buffer_draw_vline(struct rtgui_dc* self, int x, int y1, int y2) static void rtgui_dc_buffer_draw_vline(struct rtgui_dc* self, int x, int y1, int y2)
{ {
rtgui_color_t* ptr; rtgui_color_t* ptr;
...@@ -252,7 +263,7 @@ static void rtgui_dc_buffer_blit(struct rtgui_dc* self, struct rtgui_point* dc_p ...@@ -252,7 +263,7 @@ static void rtgui_dc_buffer_blit(struct rtgui_dc* self, struct rtgui_point* dc_p
if (dc_point == RT_NULL) dc_point = &rtgui_empty_point; if (dc_point == RT_NULL) dc_point = &rtgui_empty_point;
if ((dest->type == RTGUI_DC_HW) && rtgui_dc_get_visible(dest) == RT_TRUE) if (dest->type == RTGUI_DC_HW)
{ {
rtgui_color_t* pixel; rtgui_color_t* pixel;
rt_uint8_t *line_ptr; rt_uint8_t *line_ptr;
...@@ -312,46 +323,19 @@ static void rtgui_dc_buffer_blit(struct rtgui_dc* self, struct rtgui_point* dc_p ...@@ -312,46 +323,19 @@ static void rtgui_dc_buffer_blit(struct rtgui_dc* self, struct rtgui_point* dc_p
} }
} }
static void rtgui_dc_buffer_set_color (struct rtgui_dc* self, rtgui_color_t color)
{
struct rtgui_dc_buffer* dc = (struct rtgui_dc_buffer*)self;
dc->color = color;
}
static rtgui_color_t rtgui_dc_buffer_get_color(struct rtgui_dc* self)
{
struct rtgui_dc_buffer* dc = (struct rtgui_dc_buffer*)self;
return dc->color;
}
static void rtgui_dc_buffer_set_font(struct rtgui_dc* self, rtgui_font_t* font)
{
struct rtgui_dc_buffer* dc = (struct rtgui_dc_buffer*)self;
dc->font = font;
}
static rtgui_font_t* rtgui_dc_buffer_get_font(struct rtgui_dc* self)
{
struct rtgui_dc_buffer* dc = (struct rtgui_dc_buffer*)self;
return dc->font;
}
static void rtgui_dc_buffer_set_textalign(struct rtgui_dc* self, rt_int32_t textalign) static void rtgui_dc_buffer_set_gc(struct rtgui_dc* self, rtgui_gc_t *gc)
{ {
struct rtgui_dc_buffer* dc = (struct rtgui_dc_buffer*)self; struct rtgui_dc_buffer* dc = (struct rtgui_dc_buffer*)self;
dc->align = textalign; dc->gc = *gc;
} }
static rt_int32_t rtgui_dc_buffer_get_textalign(struct rtgui_dc* self) static rtgui_gc_t *rtgui_dc_buffer_get_gc(struct rtgui_dc* self)
{ {
struct rtgui_dc_buffer* dc = (struct rtgui_dc_buffer*)self; struct rtgui_dc_buffer* dc = (struct rtgui_dc_buffer*)self;
return dc->align; return &dc->gc;
} }
static rt_bool_t rtgui_dc_buffer_get_visible(struct rtgui_dc* dc) static rt_bool_t rtgui_dc_buffer_get_visible(struct rtgui_dc* dc)
......
...@@ -21,16 +21,13 @@ ...@@ -21,16 +21,13 @@
#include <rtgui/widgets/title.h> #include <rtgui/widgets/title.h>
static void rtgui_dc_hw_draw_point(struct rtgui_dc* dc, int x, int y); static void rtgui_dc_hw_draw_point(struct rtgui_dc* dc, int x, int y);
static void rtgui_dc_hw_draw_color_point(struct rtgui_dc* dc, int x, int y, rtgui_color_t color);
static void rtgui_dc_hw_draw_hline(struct rtgui_dc* dc, int x1, int x2, int y); static void rtgui_dc_hw_draw_hline(struct rtgui_dc* dc, int x1, int x2, int y);
static void rtgui_dc_hw_draw_vline(struct rtgui_dc* dc, int x, int y1, int y2); static void rtgui_dc_hw_draw_vline(struct rtgui_dc* dc, int x, int y1, int y2);
static void rtgui_dc_hw_fill_rect (struct rtgui_dc* dc, rtgui_rect_t* rect); static void rtgui_dc_hw_fill_rect (struct rtgui_dc* dc, rtgui_rect_t* rect);
static void rtgui_dc_hw_blit (struct rtgui_dc* dc, struct rtgui_point* dc_point, struct rtgui_dc* dest, rtgui_rect_t* rect); static void rtgui_dc_hw_blit (struct rtgui_dc* dc, struct rtgui_point* dc_point, struct rtgui_dc* dest, rtgui_rect_t* rect);
static void rtgui_dc_hw_set_color (struct rtgui_dc* dc, rtgui_color_t color); static void rtgui_dc_hw_set_gc (struct rtgui_dc* dc, rtgui_gc_t *gc);
static rtgui_color_t rtgui_dc_hw_get_color (struct rtgui_dc* dc); static rtgui_gc_t *rtgui_dc_hw_get_gc (struct rtgui_dc* dc);
static void rtgui_dc_hw_set_font(struct rtgui_dc* dc, rtgui_font_t* font);
static rtgui_font_t* rtgui_dc_hw_get_font(struct rtgui_dc* dc);
static void rtgui_dc_hw_set_textalign(struct rtgui_dc* dc, rt_int32_t textalign);
static rt_int32_t rtgui_dc_hw_get_textalign(struct rtgui_dc* dc);
static rt_bool_t rtgui_dc_hw_fini(struct rtgui_dc* dc); static rt_bool_t rtgui_dc_hw_fini(struct rtgui_dc* dc);
static rt_bool_t rtgui_dc_hw_get_visible(struct rtgui_dc* dc); static rt_bool_t rtgui_dc_hw_get_visible(struct rtgui_dc* dc);
static void rtgui_dc_hw_get_rect(struct rtgui_dc* dc, rtgui_rect_t* rect); static void rtgui_dc_hw_get_rect(struct rtgui_dc* dc, rtgui_rect_t* rect);
...@@ -54,18 +51,14 @@ void rtgui_dc_hw_init(struct rtgui_dc_hw* dc) ...@@ -54,18 +51,14 @@ void rtgui_dc_hw_init(struct rtgui_dc_hw* dc)
dc->parent.type = RTGUI_DC_HW; dc->parent.type = RTGUI_DC_HW;
dc->parent.draw_point = rtgui_dc_hw_draw_point; dc->parent.draw_point = rtgui_dc_hw_draw_point;
dc->parent.draw_color_point = rtgui_dc_hw_draw_color_point;
dc->parent.draw_hline = rtgui_dc_hw_draw_hline; dc->parent.draw_hline = rtgui_dc_hw_draw_hline;
dc->parent.draw_vline = rtgui_dc_hw_draw_vline; dc->parent.draw_vline = rtgui_dc_hw_draw_vline;
dc->parent.fill_rect = rtgui_dc_hw_fill_rect ; dc->parent.fill_rect = rtgui_dc_hw_fill_rect ;
dc->parent.blit = rtgui_dc_hw_blit; dc->parent.blit = rtgui_dc_hw_blit;
dc->parent.set_color = rtgui_dc_hw_set_color; dc->parent.set_gc = rtgui_dc_hw_set_gc;
dc->parent.get_color = rtgui_dc_hw_get_color; dc->parent.get_gc = rtgui_dc_hw_get_gc;
dc->parent.set_font = rtgui_dc_hw_set_font;
dc->parent.get_font = rtgui_dc_hw_get_font;
dc->parent.set_textalign = rtgui_dc_hw_set_textalign;
dc->parent.get_textalign = rtgui_dc_hw_get_textalign;
dc->parent.get_visible= rtgui_dc_hw_get_visible; dc->parent.get_visible= rtgui_dc_hw_get_visible;
dc->parent.get_rect = rtgui_dc_hw_get_rect; dc->parent.get_rect = rtgui_dc_hw_get_rect;
...@@ -240,6 +233,24 @@ static void rtgui_dc_hw_draw_point(struct rtgui_dc* self, int x, int y) ...@@ -240,6 +233,24 @@ static void rtgui_dc_hw_draw_point(struct rtgui_dc* self, int x, int y)
} }
} }
static void rtgui_dc_hw_draw_color_point(struct rtgui_dc* self, int x, int y, rtgui_color_t color)
{
struct rtgui_dc_hw* dc;
rtgui_rect_t rect;
dc = (struct rtgui_dc_hw*)self;
if (dc == RT_NULL || dc->visible != RT_TRUE) return;
x = x + dc->owner->extent.x1;
y = y + dc->owner->extent.y1;
if (rtgui_region_contains_point(&(dc->owner->clip), x, y, &rect) == RT_EOK)
{
/* draw this point */
dc->device->set_pixel(&color, x, y);
}
}
/* /*
* draw a logic vertical line on device * draw a logic vertical line on device
*/ */
...@@ -376,52 +387,21 @@ static void rtgui_dc_hw_blit(struct rtgui_dc* dc, struct rtgui_point* dc_point, ...@@ -376,52 +387,21 @@ static void rtgui_dc_hw_blit(struct rtgui_dc* dc, struct rtgui_point* dc_point,
return ; return ;
} }
static void rtgui_dc_hw_set_color(struct rtgui_dc* self, rtgui_color_t color) static void rtgui_dc_hw_set_gc(struct rtgui_dc* self, rtgui_gc_t *gc)
{
struct rtgui_dc_hw* dc = (struct rtgui_dc_hw*)self;
if (self != RT_NULL)
{
dc->owner->gc.foreground = color;
}
}
static rtgui_color_t rtgui_dc_hw_get_color(struct rtgui_dc* self)
{
struct rtgui_dc_hw* dc = (struct rtgui_dc_hw*)self;
return self != RT_NULL? dc->owner->gc.foreground : white;
}
static void rtgui_dc_hw_set_font(struct rtgui_dc* self, rtgui_font_t* font)
{ {
struct rtgui_dc_hw* dc = (struct rtgui_dc_hw*)self; struct rtgui_dc_hw* dc = (struct rtgui_dc_hw*)self;
if (self != RT_NULL) if (self != RT_NULL)
{ {
dc->owner->gc.font = font; dc->owner->gc = *gc;
} }
} }
static rtgui_font_t* rtgui_dc_hw_get_font(struct rtgui_dc* self) static rtgui_gc_t* rtgui_dc_hw_get_gc(struct rtgui_dc* self)
{ {
struct rtgui_dc_hw* dc = (struct rtgui_dc_hw*)self; struct rtgui_dc_hw* dc = (struct rtgui_dc_hw*)self;
return self != RT_NULL? dc->owner->gc.font : RT_NULL; return self != RT_NULL? &(dc->owner->gc) : RT_NULL;
}
static void rtgui_dc_hw_set_textalign(struct rtgui_dc* self, rt_int32_t textalign)
{
struct rtgui_dc_hw* dc = (struct rtgui_dc_hw*)self;
dc->owner->gc.textalign = textalign;
}
static rt_int32_t rtgui_dc_hw_get_textalign(struct rtgui_dc* self)
{
struct rtgui_dc_hw* dc = (struct rtgui_dc_hw*)self;
return dc->owner->gc.textalign;
} }
static rt_bool_t rtgui_dc_hw_get_visible(struct rtgui_dc* self) static rt_bool_t rtgui_dc_hw_get_visible(struct rtgui_dc* self)
...@@ -441,14 +421,14 @@ static void rtgui_dc_hw_get_rect(struct rtgui_dc* self, rtgui_rect_t* rect) ...@@ -441,14 +421,14 @@ static void rtgui_dc_hw_get_rect(struct rtgui_dc* self, rtgui_rect_t* rect)
void rtgui_dc_hw_draw_raw_hline(struct rtgui_dc_hw* dc, rt_uint8_t* raw_ptr, int x1, int x2, int y) void rtgui_dc_hw_draw_raw_hline(struct rtgui_dc_hw* dc, rt_uint8_t* raw_ptr, int x1, int x2, int y)
{ {
register rt_base_t index; register rt_base_t index;
register rt_base_t bpp;
if (dc == RT_NULL || dc->visible != RT_TRUE) return;
/* convert logic to device */ /* convert logic to device */
x1 = x1 + dc->owner->extent.x1; x1 = x1 + dc->owner->extent.x1;
x2 = x2 + dc->owner->extent.x1; x2 = x2 + dc->owner->extent.x1;
y = y + dc->owner->extent.y1; y = y + dc->owner->extent.y1;
bpp = dc->device->byte_per_pixel;
if (dc->owner->clip.data == RT_NULL) if (dc->owner->clip.data == RT_NULL)
{ {
rtgui_rect_t* prect; rtgui_rect_t* prect;
...@@ -482,6 +462,6 @@ void rtgui_dc_hw_draw_raw_hline(struct rtgui_dc_hw* dc, rt_uint8_t* raw_ptr, int ...@@ -482,6 +462,6 @@ void rtgui_dc_hw_draw_raw_hline(struct rtgui_dc_hw* dc, rt_uint8_t* raw_ptr, int
if (prect->x2 < x2) draw_x2 = prect->x2; if (prect->x2 < x2) draw_x2 = prect->x2;
/* draw raw hline */ /* draw raw hline */
dc->device->draw_raw_hline(raw_ptr + (draw_x1 - x1) * bpp, draw_x1, draw_x2, y); dc->device->draw_raw_hline(raw_ptr + (draw_x1 - x1) * dc->device->byte_per_pixel, draw_x1, draw_x2, y);
} }
} }
...@@ -365,7 +365,6 @@ static void rtgui_image_jpeg_blit(struct rtgui_image* image, struct rtgui_dc* dc ...@@ -365,7 +365,6 @@ static void rtgui_image_jpeg_blit(struct rtgui_image* image, struct rtgui_dc* dc
{ {
rt_uint16_t x, y; rt_uint16_t x, y;
rtgui_color_t* ptr; rtgui_color_t* ptr;
rtgui_color_t foreground;
struct rtgui_image_jpeg* jpeg; struct rtgui_image_jpeg* jpeg;
RT_ASSERT(image != RT_NULL && dc != RT_NULL && rect != RT_NULL); RT_ASSERT(image != RT_NULL && dc != RT_NULL && rect != RT_NULL);
...@@ -373,9 +372,6 @@ static void rtgui_image_jpeg_blit(struct rtgui_image* image, struct rtgui_dc* dc ...@@ -373,9 +372,6 @@ static void rtgui_image_jpeg_blit(struct rtgui_image* image, struct rtgui_dc* dc
jpeg = (struct rtgui_image_jpeg*) image->data; jpeg = (struct rtgui_image_jpeg*) image->data;
RT_ASSERT(jpeg != RT_NULL); RT_ASSERT(jpeg != RT_NULL);
/* save foreground color */
foreground = rtgui_dc_get_color(dc);
if (jpeg->pixels != RT_NULL) if (jpeg->pixels != RT_NULL)
{ {
ptr = (rtgui_color_t*) jpeg->pixels; ptr = (rtgui_color_t*) jpeg->pixels;
...@@ -388,8 +384,7 @@ static void rtgui_image_jpeg_blit(struct rtgui_image* image, struct rtgui_dc* dc ...@@ -388,8 +384,7 @@ static void rtgui_image_jpeg_blit(struct rtgui_image* image, struct rtgui_dc* dc
/* not alpha */ /* not alpha */
if ((*ptr >> 24) != 255) if ((*ptr >> 24) != 255)
{ {
rtgui_dc_set_color(dc, *ptr); rtgui_dc_draw_color_point(dc, x + rect->x1, y + rect->y1, *ptr);
rtgui_dc_draw_point(dc, x + rect->x1, y + rect->y1);
} }
/* move to next color buffer */ /* move to next color buffer */
...@@ -411,8 +406,7 @@ static void rtgui_image_jpeg_blit(struct rtgui_image* image, struct rtgui_dc* dc ...@@ -411,8 +406,7 @@ static void rtgui_image_jpeg_blit(struct rtgui_image* image, struct rtgui_dc* dc
/* not alpha */ /* not alpha */
if ((*ptr >> 24) != 255) if ((*ptr >> 24) != 255)
{ {
rtgui_dc_set_color(dc, *ptr); rtgui_dc_draw_color_point(dc, x + rect->x1, y + rect->y1, *ptr);
rtgui_dc_draw_point(dc, x + rect->x1, y + rect->y1);
} }
/* move to next color buffer */ /* move to next color buffer */
...@@ -420,9 +414,6 @@ static void rtgui_image_jpeg_blit(struct rtgui_image* image, struct rtgui_dc* dc ...@@ -420,9 +414,6 @@ static void rtgui_image_jpeg_blit(struct rtgui_image* image, struct rtgui_dc* dc
} }
} }
} }
/* restore foreground */
rtgui_dc_set_color(dc, foreground);
} }
static rt_bool_t rtgui_image_jpeg_check(struct rtgui_filerw* file) static rt_bool_t rtgui_image_jpeg_check(struct rtgui_filerw* file)
......
...@@ -42,7 +42,7 @@ static void rtgui_image_png_read_data(png_structp png_ptr, png_bytep data, png_s ...@@ -42,7 +42,7 @@ static void rtgui_image_png_read_data(png_structp png_ptr, png_bytep data, png_s
static rt_bool_t rtgui_image_png_process(png_structp png_ptr, png_infop info_ptr, struct rtgui_image_png* png) static rt_bool_t rtgui_image_png_process(png_structp png_ptr, png_infop info_ptr, struct rtgui_image_png* png)
{ {
int x, y; rt_uint32_t x, y;
png_bytep row; png_bytep row;
png_bytep data; png_bytep data;
rtgui_color_t *ptr; rtgui_color_t *ptr;
...@@ -229,7 +229,6 @@ static void rtgui_image_png_blit(struct rtgui_image* image, struct rtgui_dc* dc, ...@@ -229,7 +229,6 @@ static void rtgui_image_png_blit(struct rtgui_image* image, struct rtgui_dc* dc,
{ {
rt_uint16_t x, y, w, h; rt_uint16_t x, y, w, h;
rtgui_color_t* ptr; rtgui_color_t* ptr;
rtgui_color_t foreground;
struct rtgui_image_png* png; struct rtgui_image_png* png;
RT_ASSERT(image != RT_NULL && dc != RT_NULL && rect != RT_NULL); RT_ASSERT(image != RT_NULL && dc != RT_NULL && rect != RT_NULL);
...@@ -242,9 +241,6 @@ static void rtgui_image_png_blit(struct rtgui_image* image, struct rtgui_dc* dc, ...@@ -242,9 +241,6 @@ static void rtgui_image_png_blit(struct rtgui_image* image, struct rtgui_dc* dc,
if (image->h < rtgui_rect_height(*rect)) h = image->h; if (image->h < rtgui_rect_height(*rect)) h = image->h;
else h = rtgui_rect_height(*rect); else h = rtgui_rect_height(*rect);
/* save foreground color */
foreground = rtgui_dc_get_color(dc);
if (png->pixels != RT_NULL) if (png->pixels != RT_NULL)
{ {
ptr = (rtgui_color_t*)png->pixels; ptr = (rtgui_color_t*)png->pixels;
...@@ -256,8 +252,7 @@ static void rtgui_image_png_blit(struct rtgui_image* image, struct rtgui_dc* dc, ...@@ -256,8 +252,7 @@ static void rtgui_image_png_blit(struct rtgui_image* image, struct rtgui_dc* dc,
/* not alpha */ /* not alpha */
if ((*ptr >> 24) != 255) if ((*ptr >> 24) != 255)
{ {
rtgui_dc_set_color(dc, *ptr); rtgui_dc_draw_color_point(dc, x + rect->x1, y + rect->y1, *ptr);
rtgui_dc_draw_point(dc, x + rect->x1, y + rect->y1);
} }
/* move to next color buffer */ /* move to next color buffer */
...@@ -284,8 +279,8 @@ static void rtgui_image_png_blit(struct rtgui_image* image, struct rtgui_dc* dc, ...@@ -284,8 +279,8 @@ static void rtgui_image_png_blit(struct rtgui_image* image, struct rtgui_dc* dc,
data = &(row[x * 4]); data = &(row[x * 4]);
if (data[3] != 0) if (data[3] != 0)
{ {
rtgui_dc_set_color(dc, RTGUI_ARGB((255 - data[3]), data[0], data[1], data[2])); rtgui_dc_draw_color_point(dc, x + rect->x1, y + rect->y1,
rtgui_dc_draw_point(dc, x + rect->x1, y + rect->y1); RTGUI_ARGB((255 - data[3]), data[0], data[1], data[2]));
} }
} }
} }
...@@ -300,10 +295,10 @@ static void rtgui_image_png_blit(struct rtgui_image* image, struct rtgui_dc* dc, ...@@ -300,10 +295,10 @@ static void rtgui_image_png_blit(struct rtgui_image* image, struct rtgui_dc* dc,
{ {
data = &(row[x]); data = &(row[x]);
rtgui_dc_set_color(dc, RTGUI_ARGB(0, png->info_ptr->palette[data[0]].red, rtgui_dc_draw_color_point(dc, x + rect->x1, y + rect->y1,
png->info_ptr->palette[data[0]].green, RTGUI_ARGB(0, png->info_ptr->palette[data[0]].red,
png->info_ptr->palette[data[0]].blue)); png->info_ptr->palette[data[0]].green,
rtgui_dc_draw_point(dc, x + rect->x1, y + rect->y1); png->info_ptr->palette[data[0]].blue));
} }
} }
...@@ -313,9 +308,6 @@ static void rtgui_image_png_blit(struct rtgui_image* image, struct rtgui_dc* dc, ...@@ -313,9 +308,6 @@ static void rtgui_image_png_blit(struct rtgui_image* image, struct rtgui_dc* dc,
rtgui_free(row); rtgui_free(row);
} }
/* restore foreground */
rtgui_dc_set_color(dc, foreground);
} }
void rtgui_image_png_init() void rtgui_image_png_init()
......
...@@ -585,16 +585,12 @@ static void rtgui_image_xpm_blit(struct rtgui_image* image, struct rtgui_dc* dc, ...@@ -585,16 +585,12 @@ static void rtgui_image_xpm_blit(struct rtgui_image* image, struct rtgui_dc* dc,
{ {
rt_uint16_t x, y; rt_uint16_t x, y;
rtgui_color_t* ptr; rtgui_color_t* ptr;
rtgui_color_t foreground;
RT_ASSERT(image != RT_NULL && dc != RT_NULL && rect != RT_NULL); RT_ASSERT(image != RT_NULL && dc != RT_NULL && rect != RT_NULL);
RT_ASSERT(image->data != RT_NULL); RT_ASSERT(image->data != RT_NULL);
ptr = (rtgui_color_t*) image->data; ptr = (rtgui_color_t*) image->data;
/* save foreground color */
foreground = rtgui_dc_get_color(dc);
/* draw each point within dc */ /* draw each point within dc */
for (y = 0; y < image->h; y ++) for (y = 0; y < image->h; y ++)
{ {
...@@ -603,16 +599,12 @@ static void rtgui_image_xpm_blit(struct rtgui_image* image, struct rtgui_dc* dc, ...@@ -603,16 +599,12 @@ static void rtgui_image_xpm_blit(struct rtgui_image* image, struct rtgui_dc* dc,
/* not alpha */ /* not alpha */
if ((*ptr >> 24) != 255) if ((*ptr >> 24) != 255)
{ {
rtgui_dc_set_color(dc, *ptr); rtgui_dc_draw_color_point(dc, x + rect->x1, y + rect->y1, *ptr);
rtgui_dc_draw_point(dc, x + rect->x1, y + rect->y1);
} }
/* move to next color buffer */ /* move to next color buffer */
ptr ++; ptr ++;
} }
} }
/* restore foreground */
rtgui_dc_set_color(dc, foreground);
} }
...@@ -505,7 +505,7 @@ void rtgui_theme_draw_radiobox(struct rtgui_radiobox* radiobox) ...@@ -505,7 +505,7 @@ void rtgui_theme_draw_radiobox(struct rtgui_radiobox* radiobox)
bord_size = item_size; bord_size = item_size;
else else
{ {
rtgui_font_get_metrics(rtgui_dc_get_font(dc), "H", &item_rect); rtgui_font_get_metrics(RTGUI_DC_FONT(dc), "H", &item_rect);
bord_size = rtgui_rect_height(item_rect); bord_size = rtgui_rect_height(item_rect);
} }
...@@ -529,7 +529,7 @@ void rtgui_theme_draw_radiobox(struct rtgui_radiobox* radiobox) ...@@ -529,7 +529,7 @@ void rtgui_theme_draw_radiobox(struct rtgui_radiobox* radiobox)
struct rtgui_rect text_rect; struct rtgui_rect text_rect;
/* draw group text */ /* draw group text */
rtgui_font_get_metrics(rtgui_dc_get_font(dc), radiobox->text, &text_rect); rtgui_font_get_metrics(RTGUI_DC_FONT(dc), radiobox->text, &text_rect);
rtgui_rect_moveto(&text_rect, rect.x1 + bord_size + 5, rect.y1); rtgui_rect_moveto(&text_rect, rect.x1 + bord_size + 5, rect.y1);
rect.x1 -= 5; rect.x2 += 5; rect.x1 -= 5; rect.x2 += 5;
rtgui_dc_fill_rect(dc, &text_rect); rtgui_dc_fill_rect(dc, &text_rect);
...@@ -804,8 +804,8 @@ void rtgui_theme_draw_selected(struct rtgui_dc* dc, rtgui_rect_t *rect) ...@@ -804,8 +804,8 @@ void rtgui_theme_draw_selected(struct rtgui_dc* dc, rtgui_rect_t *rect)
rtgui_color_t bc; rtgui_color_t bc;
rt_uint16_t index; rt_uint16_t index;
bc = rtgui_dc_get_color(dc); bc = RTGUI_DC_FC(dc);
rtgui_dc_set_color(dc, selected_color); RTGUI_DC_FC(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->y1 + 1);
rtgui_dc_draw_hline(dc, rect->x1 + 3, rect->x2 - 2, rect->y2 - 2); rtgui_dc_draw_hline(dc, rect->x1 + 3, rect->x2 - 2, rect->y2 - 2);
...@@ -816,7 +816,7 @@ void rtgui_theme_draw_selected(struct rtgui_dc* dc, rtgui_rect_t *rect) ...@@ -816,7 +816,7 @@ void rtgui_theme_draw_selected(struct rtgui_dc* dc, rtgui_rect_t *rect)
for (index = rect->y1 + 1; index < rect->y2 - 2; index ++) for (index = rect->y1 + 1; index < rect->y2 - 2; index ++)
rtgui_dc_draw_hline(dc, rect->x1 + 3, rect->x2 - 2, index); rtgui_dc_draw_hline(dc, rect->x1 + 3, rect->x2 - 2, index);
rtgui_dc_set_color(dc, bc); RTGUI_DC_FC(dc) = bc;
} }
/* get default background color */ /* get default background color */
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
#include <rtgui/rtgui.h> #include <rtgui/rtgui.h>
typedef unsigned long rtgui_color_t;
#define RTGUI_ARGB(a, r, g, b) \ #define RTGUI_ARGB(a, r, g, b) \
((rtgui_color_t)(((rt_uint8_t)(r)|\ ((rtgui_color_t)(((rt_uint8_t)(r)|\
(((unsigned)(rt_uint8_t)(g))<<8))|\ (((unsigned)(rt_uint8_t)(g))<<8))|\
......
...@@ -34,20 +34,15 @@ struct rtgui_dc ...@@ -34,20 +34,15 @@ struct rtgui_dc
/* interface */ /* interface */
void (*draw_point)(struct rtgui_dc* dc, int x, int y); void (*draw_point)(struct rtgui_dc* dc, int x, int y);
void (*draw_color_point)(struct rtgui_dc* dc, int x, int y, rtgui_color_t color);
void (*draw_vline)(struct rtgui_dc* dc, int x, int y1, int y2); void (*draw_vline)(struct rtgui_dc* dc, int x, int y1, int y2);
void (*draw_hline)(struct rtgui_dc* dc, int x1, int x2, int y); void (*draw_hline)(struct rtgui_dc* dc, int x1, int x2, int y);
void (*fill_rect )(struct rtgui_dc* dc, rtgui_rect_t* rect); void (*fill_rect )(struct rtgui_dc* dc, rtgui_rect_t* rect);
void (*blit )(struct rtgui_dc* dc, struct rtgui_point* dc_point, struct rtgui_dc* dest, rtgui_rect_t* rect); void (*blit )(struct rtgui_dc* dc, struct rtgui_point* dc_point, struct rtgui_dc* dest, rtgui_rect_t* rect);
/* set and get color */ /* set and get graphic context */
void (*set_color )(struct rtgui_dc* dc, rtgui_color_t color); void (*set_gc)(struct rtgui_dc* dc, struct rtgui_gc *gc);
rtgui_color_t (*get_color)(struct rtgui_dc* dc); struct rtgui_gc* (*get_gc)(struct rtgui_dc* dc);
/* set and get font */
void (*set_font )(struct rtgui_dc* dc, rtgui_font_t* font);
rtgui_font_t* (*get_font)(struct rtgui_dc* dc);
void (*set_textalign)(struct rtgui_dc* dc, rt_int32_t align);
rt_int32_t (*get_textalign)(struct rtgui_dc* dc);
/* get dc visible */ /* get dc visible */
rt_bool_t (*get_visible)(struct rtgui_dc* dc); rt_bool_t (*get_visible)(struct rtgui_dc* dc);
...@@ -58,27 +53,32 @@ struct rtgui_dc ...@@ -58,27 +53,32 @@ struct rtgui_dc
rt_bool_t (*fini )(struct rtgui_dc* dc); rt_bool_t (*fini )(struct rtgui_dc* dc);
}; };
#define RTGUI_DC_FC(dc) (rtgui_dc_get_gc(dc)->foreground)
#define RTGUI_DC_BC(dc) (rtgui_dc_get_gc(dc)->background)
#define RTGUI_DC_FONT(dc) (rtgui_dc_get_gc(dc)->font)
#define RTGUI_DC_TEXTALIGN(dc) (rtgui_dc_get_gc(dc)->textalign)
/* create a buffer dc */ /* create a buffer dc */
struct rtgui_dc* rtgui_dc_buffer_create(int width, int height); struct rtgui_dc* rtgui_dc_buffer_create(int width, int height);
rt_uint8_t* rtgui_dc_buffer_get_pixel(struct rtgui_dc* dc); rt_uint8_t* rtgui_dc_buffer_get_pixel(struct rtgui_dc* dc);
/* begin and end a drawing */
struct rtgui_dc* rtgui_dc_begin_drawing(rtgui_widget_t* owner);
void rtgui_dc_end_drawing(struct rtgui_dc* dc);
/* destroy a dc */ /* destroy a dc */
void rtgui_dc_destory(struct rtgui_dc* dc); void rtgui_dc_destory(struct rtgui_dc* dc);
void rtgui_dc_draw_point(struct rtgui_dc* dc, int x, int y); void rtgui_dc_draw_point(struct rtgui_dc* dc, int x, int y);
void rtgui_dc_draw_color_point(struct rtgui_dc* dc, int x, int y, rtgui_color_t color);
void rtgui_dc_draw_vline(struct rtgui_dc* dc, int x, int y1, int y2); void rtgui_dc_draw_vline(struct rtgui_dc* dc, int x, int y1, int y2);
void rtgui_dc_draw_hline(struct rtgui_dc* dc, int x1, int x2, int y); void rtgui_dc_draw_hline(struct rtgui_dc* dc, int x1, int x2, int y);
void rtgui_dc_fill_rect (struct rtgui_dc* dc, struct rtgui_rect* rect); void rtgui_dc_fill_rect (struct rtgui_dc* dc, struct rtgui_rect* rect);
void rtgui_dc_blit(struct rtgui_dc* dc, struct rtgui_point* dc_point, struct rtgui_dc* dest, rtgui_rect_t* rect); void rtgui_dc_blit(struct rtgui_dc* dc, struct rtgui_point* dc_point, struct rtgui_dc* dest, rtgui_rect_t* rect);
void rtgui_dc_set_color(struct rtgui_dc* dc, rtgui_color_t color); void rtgui_dc_set_gc(struct rtgui_dc* dc, rtgui_gc_t* gc);
rtgui_color_t rtgui_dc_get_color(struct rtgui_dc* dc); rtgui_gc_t *rtgui_dc_get_gc(struct rtgui_dc* dc);
void rtgui_dc_set_font(struct rtgui_dc* dc, rtgui_font_t* font);
rtgui_font_t* rtgui_dc_get_font(struct rtgui_dc* dc);
void rtgui_dc_set_textalign(struct rtgui_dc* dc, rt_int32_t align);
rt_int32_t rtgui_dc_get_textalign(struct rtgui_dc* dc);
rt_bool_t rtgui_dc_get_visible(struct rtgui_dc* dc); rt_bool_t rtgui_dc_get_visible(struct rtgui_dc* dc);
void rtgui_dc_get_rect(struct rtgui_dc*dc, rtgui_rect_t* rect); void rtgui_dc_get_rect(struct rtgui_dc*dc, rtgui_rect_t* rect);
......
...@@ -33,8 +33,6 @@ struct rtgui_dc_hw ...@@ -33,8 +33,6 @@ struct rtgui_dc_hw
/* create a hardware dc */ /* create a hardware dc */
struct rtgui_dc* rtgui_dc_hw_create(rtgui_widget_t* owner); struct rtgui_dc* rtgui_dc_hw_create(rtgui_widget_t* owner);
struct rtgui_dc* rtgui_dc_begin_drawing(rtgui_widget_t* owner);
void rtgui_dc_end_drawing(struct rtgui_dc* dc);
/* draw a hline with raw pixel data */ /* draw a hline with raw pixel data */
void rtgui_dc_hw_draw_raw_hline(struct rtgui_dc_hw* dc, rt_uint8_t* raw_ptr, int x1, int x2, int y); void rtgui_dc_hw_draw_raw_hline(struct rtgui_dc_hw* dc, rt_uint8_t* raw_ptr, int x1, int x2, int y);
......
...@@ -25,6 +25,7 @@ struct rtgui_event; ...@@ -25,6 +25,7 @@ struct rtgui_event;
struct rtgui_widget; struct rtgui_widget;
struct rtgui_win; struct rtgui_win;
struct rtgui_font;
typedef struct rtgui_panel rtgui_panel_t; typedef struct rtgui_panel rtgui_panel_t;
typedef struct rtgui_win rtgui_win_t; typedef struct rtgui_win rtgui_win_t;
...@@ -46,6 +47,21 @@ typedef struct rtgui_rect rtgui_rect_t; ...@@ -46,6 +47,21 @@ typedef struct rtgui_rect rtgui_rect_t;
#define rtgui_rect_width(r) ((r).x2 - (r).x1) #define rtgui_rect_width(r) ((r).x2 - (r).x1)
#define rtgui_rect_height(r) ((r).y2 - (r).y1) #define rtgui_rect_height(r) ((r).y2 - (r).y1)
typedef unsigned long rtgui_color_t;
struct rtgui_gc
{
/* foreground and background color */
rtgui_color_t foreground, background;
/* text align */
rt_base_t textalign;
/* font */
struct rtgui_font* font;
};
typedef struct rtgui_gc rtgui_gc_t;
enum RTGUI_MARGIN_STYLE enum RTGUI_MARGIN_STYLE
{ {
RTGUI_MARGIN_LEFT = 0x01, RTGUI_MARGIN_LEFT = 0x01,
...@@ -86,7 +102,13 @@ enum RTGUI_ALIGN ...@@ -86,7 +102,13 @@ enum RTGUI_ALIGN
RTGUI_ALIGN_BOTTOM = 0x04, RTGUI_ALIGN_BOTTOM = 0x04,
RTGUI_ALIGN_CENTER_VERTICAL = 0x08, RTGUI_ALIGN_CENTER_VERTICAL = 0x08,
RTGUI_ALIGN_EXPAND = 0x10, RTGUI_ALIGN_EXPAND = 0x10,
RTGUI_ALIGN_STRETCH = 0x20 RTGUI_ALIGN_STRETCH = 0x20,
};
enum RTGUI_TEXTATTR
{
RTGUI_TEXTATTR_NORMAL = 0x0000,
RTGUI_TEXTATTR_
}; };
enum RTGUI_ARRAW enum RTGUI_ARRAW
......
...@@ -60,19 +60,6 @@ extern "C" { ...@@ -60,19 +60,6 @@ extern "C" {
/** Check if the object is a rtgui_widget */ /** Check if the object is a rtgui_widget */
#define RTGUI_IS_WIDGET(obj) (RTGUI_OBJECT_CHECK_TYPE((obj), RTGUI_WIDGET_TYPE)) #define RTGUI_IS_WIDGET(obj) (RTGUI_OBJECT_CHECK_TYPE((obj), RTGUI_WIDGET_TYPE))
struct rtgui_gc
{
/* foreground and background color */
rtgui_color_t foreground, background;
/* text align */
rt_base_t textalign;
/* font */
rtgui_font_t* font;
};
typedef struct rtgui_gc rtgui_gc_t;
/* /*
* the base widget object * the base widget object
*/ */
......
...@@ -63,9 +63,9 @@ void rtgui_about_view_ondraw(struct rtgui_about_view* view) ...@@ -63,9 +63,9 @@ void rtgui_about_view_ondraw(struct rtgui_about_view* view)
if (view->description != RT_NULL) if (view->description != RT_NULL)
rtgui_dc_draw_text(dc, view->description, &rect); rtgui_dc_draw_text(dc, view->description, &rect);
rect.y1 += rtgui_dc_get_font(dc)->height; rect.y1 += rtgui_dc_get_gc(dc)->font->height;
rtgui_dc_draw_hline(dc, rect.x1 + 3, rect.x2 - 3, rect.y1); rtgui_dc_draw_hline(dc, rect.x1 + 3, rect.x2 - 3, rect.y1);
rtgui_dc_set_color(dc, white); RTGUI_DC_FC(dc) = white;
rtgui_dc_draw_hline(dc, rect.x1 + 4, rect.x2 - 2, rect.y1 + 1); rtgui_dc_draw_hline(dc, rect.x1 + 4, rect.x2 - 2, rect.y1 + 1);
rtgui_dc_end_drawing(dc); rtgui_dc_end_drawing(dc);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册