mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-11-09 20:45:41 +08:00
move dc operations as dc engine.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@756 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
1 parent
a1ee019309
commit
3a13964efa
7 files changed
+87
-184
No files matched your search
+30
-132
File diff suppressed because it is too large.
Load diff
@@ -50,33 +50,31 @@ static rtgui_gc_t* rtgui_dc_buffer_get_gc(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_init(struct rtgui_dc_buffer* dc)
|
||||
const static struct rtgui_dc_engine dc_buffer_engine =
|
||||
{
|
||||
if (dc == RT_NULL) return;
|
||||
rtgui_dc_buffer_draw_point,
|
||||
rtgui_dc_buffer_draw_color_point,
|
||||
rtgui_dc_buffer_draw_vline,
|
||||
rtgui_dc_buffer_draw_hline,
|
||||
rtgui_dc_buffer_fill_rect,
|
||||
rtgui_dc_buffer_blit,
|
||||
|
||||
dc->parent.type = RTGUI_DC_BUFFER;
|
||||
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_vline = rtgui_dc_buffer_draw_vline;
|
||||
dc->parent.fill_rect = rtgui_dc_buffer_fill_rect;
|
||||
dc->parent.blit = rtgui_dc_buffer_blit;
|
||||
rtgui_dc_buffer_set_gc,
|
||||
rtgui_dc_buffer_get_gc,
|
||||
|
||||
dc->parent.set_gc = rtgui_dc_buffer_set_gc;
|
||||
dc->parent.get_gc = rtgui_dc_buffer_get_gc;
|
||||
rtgui_dc_buffer_get_visible,
|
||||
rtgui_dc_buffer_get_rect,
|
||||
|
||||
dc->parent.get_visible= rtgui_dc_buffer_get_visible;
|
||||
dc->parent.get_rect = rtgui_dc_buffer_get_rect;
|
||||
|
||||
dc->parent.fini = rtgui_dc_buffer_fini;
|
||||
}
|
||||
rtgui_dc_buffer_fini,
|
||||
};
|
||||
|
||||
struct rtgui_dc* rtgui_dc_buffer_create(int w, int h)
|
||||
{
|
||||
struct rtgui_dc_buffer* dc;
|
||||
|
||||
dc = (struct rtgui_dc_buffer*)rtgui_malloc(sizeof(struct rtgui_dc_buffer));
|
||||
rtgui_dc_buffer_init(dc);
|
||||
dc->parent.type = RTGUI_DC_BUFFER;
|
||||
dc->parent.engine = &dc_buffer_engine;
|
||||
dc->gc.foreground = default_foreground;
|
||||
dc->gc.background = default_background;
|
||||
dc->gc.font = rtgui_font_default();
|
||||
|
||||
@@ -45,26 +45,23 @@ void rtgui_dc_end_drawing(struct rtgui_dc* dc)
|
||||
}
|
||||
}
|
||||
|
||||
void rtgui_dc_hw_init(struct rtgui_dc_hw* dc)
|
||||
const static struct rtgui_dc_engine dc_hw_engine =
|
||||
{
|
||||
if (dc == RT_NULL) return;
|
||||
rtgui_dc_hw_draw_point,
|
||||
rtgui_dc_hw_draw_color_point,
|
||||
rtgui_dc_hw_draw_vline,
|
||||
rtgui_dc_hw_draw_hline,
|
||||
rtgui_dc_hw_fill_rect,
|
||||
rtgui_dc_hw_blit,
|
||||
|
||||
dc->parent.type = RTGUI_DC_HW;
|
||||
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_vline = rtgui_dc_hw_draw_vline;
|
||||
dc->parent.fill_rect = rtgui_dc_hw_fill_rect ;
|
||||
dc->parent.blit = rtgui_dc_hw_blit;
|
||||
rtgui_dc_hw_set_gc,
|
||||
rtgui_dc_hw_get_gc,
|
||||
|
||||
dc->parent.set_gc = rtgui_dc_hw_set_gc;
|
||||
dc->parent.get_gc = rtgui_dc_hw_get_gc;
|
||||
rtgui_dc_hw_get_visible,
|
||||
rtgui_dc_hw_get_rect,
|
||||
|
||||
dc->parent.get_visible= rtgui_dc_hw_get_visible;
|
||||
dc->parent.get_rect = rtgui_dc_hw_get_rect;
|
||||
|
||||
dc->parent.fini = rtgui_dc_hw_fini;
|
||||
}
|
||||
rtgui_dc_hw_fini,
|
||||
};
|
||||
|
||||
extern struct rt_mutex cursor_mutex;
|
||||
#define dc_set_foreground(c) dc->owner->gc.foreground = c
|
||||
@@ -82,7 +79,8 @@ struct rtgui_dc* rtgui_dc_hw_create(rtgui_widget_t* owner)
|
||||
|
||||
/* malloc a dc object */
|
||||
dc = (struct rtgui_dc_hw*) rtgui_malloc(sizeof(struct rtgui_dc_hw));
|
||||
rtgui_dc_hw_init(dc);
|
||||
dc->parent.type = RTGUI_DC_HW;
|
||||
dc->parent.engine = &dc_hw_engine;
|
||||
dc->owner = owner;
|
||||
dc->visible = RT_TRUE;
|
||||
dc->device = rtgui_graphic_driver_get_default();
|
||||
|
||||
@@ -150,7 +150,7 @@ static void rtgui_image_hdc_blit(struct rtgui_image* image, struct rtgui_dc* dc,
|
||||
RT_ASSERT(image != RT_NULL || dc != RT_NULL || dst_rect != RT_NULL);
|
||||
|
||||
/* this dc is not visible */
|
||||
if (dc->get_visible(dc) != RT_TRUE) return;
|
||||
if (rtgui_dc_get_visible(dc) != RT_TRUE) return;
|
||||
|
||||
hdc = (struct rtgui_image_hdc*) image->data;
|
||||
RT_ASSERT(hdc != RT_NULL);
|
||||
@@ -207,7 +207,7 @@ static void rtgui_image_hdcmm_blit(struct rtgui_image* image, struct rtgui_dc* d
|
||||
RT_ASSERT(image != RT_NULL || dc != RT_NULL || dst_rect != RT_NULL);
|
||||
|
||||
/* this dc is not visible */
|
||||
if ((dc->get_visible(dc) != RT_TRUE) || (dc->type != RTGUI_DC_HW)) return;
|
||||
if (rtgui_dc_get_visible(dc) != RT_TRUE || (dc->type != RTGUI_DC_HW)) return;
|
||||
|
||||
hdc = (struct rtgui_image_hdcmm*) image;
|
||||
RT_ASSERT(hdc != RT_NULL);
|
||||
|
||||
@@ -26,12 +26,8 @@ enum rtgui_dc_type
|
||||
RTGUI_DC_IMLIB2,
|
||||
};
|
||||
|
||||
/* the abstract device context */
|
||||
struct rtgui_dc
|
||||
struct rtgui_dc_engine
|
||||
{
|
||||
/* type of device context */
|
||||
rt_uint32_t type;
|
||||
|
||||
/* interface */
|
||||
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);
|
||||
@@ -53,6 +49,16 @@ struct rtgui_dc
|
||||
rt_bool_t (*fini )(struct rtgui_dc* dc);
|
||||
};
|
||||
|
||||
/* the abstract device context */
|
||||
struct rtgui_dc
|
||||
{
|
||||
/* type of device context */
|
||||
rt_uint32_t type;
|
||||
|
||||
/* dc engine */
|
||||
const struct rtgui_dc_engine* engine;
|
||||
};
|
||||
|
||||
#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)
|
||||
@@ -82,7 +88,6 @@ void rtgui_dc_draw_word(struct rtgui_dc*dc, int x, int y, int h, const rt_uint8_
|
||||
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);
|
||||
void rtgui_dc_draw_vertical_line(struct rtgui_dc* dc, int x, int y1, int y2);
|
||||
void rtgui_dc_draw_arrow(struct rtgui_dc* dc, rtgui_rect_t* rect, int kind);
|
||||
void rtgui_dc_draw_focus_rect(struct rtgui_dc* dc, rtgui_rect_t* rect);
|
||||
|
||||
void rtgui_dc_draw_polygon(struct rtgui_dc* dc, const int *vx, const int *vy, int count);
|
||||
@@ -107,7 +112,7 @@ void rtgui_dc_fill_ellipse(struct rtgui_dc *dc, rt_int16_t x, rt_int16_t y, rt_i
|
||||
*/
|
||||
rt_inline void rtgui_dc_draw_point(struct rtgui_dc* dc, int x, int y)
|
||||
{
|
||||
dc->draw_point(dc, x, y);
|
||||
dc->engine->draw_point(dc, x, y);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -115,7 +120,7 @@ rt_inline void rtgui_dc_draw_point(struct rtgui_dc* dc, int x, int y)
|
||||
*/
|
||||
rt_inline void rtgui_dc_draw_color_point(struct rtgui_dc* dc, int x, int y, rtgui_color_t color)
|
||||
{
|
||||
dc->draw_color_point(dc, x, y, color);
|
||||
dc->engine->draw_color_point(dc, x, y, color);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -123,7 +128,7 @@ rt_inline void rtgui_dc_draw_color_point(struct rtgui_dc* dc, int x, int y, rtgu
|
||||
*/
|
||||
rt_inline void rtgui_dc_draw_vline(struct rtgui_dc* dc, int x, int y1, int y2)
|
||||
{
|
||||
dc->draw_vline(dc, x, y1, y2);
|
||||
dc->engine->draw_vline(dc, x, y1, y2);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -131,7 +136,7 @@ rt_inline void rtgui_dc_draw_vline(struct rtgui_dc* dc, int x, int y1, int y2)
|
||||
*/
|
||||
rt_inline void rtgui_dc_draw_hline(struct rtgui_dc* dc, int x1, int x2, int y)
|
||||
{
|
||||
dc->draw_hline(dc, x1, x2, y);
|
||||
dc->engine->draw_hline(dc, x1, x2, y);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -139,7 +144,7 @@ rt_inline void rtgui_dc_draw_hline(struct rtgui_dc* dc, int x1, int x2, int y)
|
||||
*/
|
||||
rt_inline void rtgui_dc_fill_rect (struct rtgui_dc* dc, struct rtgui_rect* rect)
|
||||
{
|
||||
dc->fill_rect(dc, rect);
|
||||
dc->engine->fill_rect(dc, rect);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -149,7 +154,7 @@ rt_inline void rtgui_dc_blit(struct rtgui_dc* dc, struct rtgui_point* dc_point,
|
||||
{
|
||||
if (dest == RT_NULL || rect == RT_NULL) return;
|
||||
|
||||
dc->blit(dc, dc_point, dest, rect);
|
||||
dc->engine->blit(dc, dc_point, dest, rect);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -157,7 +162,7 @@ rt_inline void rtgui_dc_blit(struct rtgui_dc* dc, struct rtgui_point* dc_point,
|
||||
*/
|
||||
rt_inline void rtgui_dc_set_gc(struct rtgui_dc* dc, rtgui_gc_t* gc)
|
||||
{
|
||||
dc->set_gc(dc, gc);
|
||||
dc->engine->set_gc(dc, gc);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -165,7 +170,7 @@ rt_inline void rtgui_dc_set_gc(struct rtgui_dc* dc, rtgui_gc_t* gc)
|
||||
*/
|
||||
rt_inline rtgui_gc_t *rtgui_dc_get_gc(struct rtgui_dc* dc)
|
||||
{
|
||||
return dc->get_gc(dc);
|
||||
return dc->engine->get_gc(dc);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -173,7 +178,7 @@ rt_inline rtgui_gc_t *rtgui_dc_get_gc(struct rtgui_dc* dc)
|
||||
*/
|
||||
rt_inline rt_bool_t rtgui_dc_get_visible(struct rtgui_dc* dc)
|
||||
{
|
||||
return dc->get_visible(dc);
|
||||
return dc->engine->get_visible(dc);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -183,7 +188,7 @@ rt_inline void rtgui_dc_get_rect(struct rtgui_dc*dc, rtgui_rect_t* rect)
|
||||
{
|
||||
if (rect != RT_NULL)
|
||||
{
|
||||
dc->get_rect(dc, rect);
|
||||
dc->engine->get_rect(dc, rect);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -75,8 +75,10 @@ struct rtgui_widget
|
||||
|
||||
/* widget flag */
|
||||
rt_int32_t flag;
|
||||
#ifndef RTGUI_USING_SMALL_SIZE
|
||||
/* widget align */
|
||||
rt_int32_t align;
|
||||
#endif
|
||||
|
||||
/* the graphic context of widget */
|
||||
rtgui_gc_t gc;
|
||||
|
||||
@@ -30,7 +30,9 @@ static void _rtgui_widget_constructor(rtgui_widget_t *widget)
|
||||
widget->gc.background = default_background;
|
||||
widget->gc.font = rtgui_font_default();
|
||||
widget->gc.textalign = RTGUI_ALIGN_LEFT | RTGUI_ALIGN_TOP;
|
||||
#ifndef RTGUI_USING_SMALL_SIZE
|
||||
widget->align = RTGUI_ALIGN_LEFT | RTGUI_ALIGN_TOP;
|
||||
#endif
|
||||
|
||||
/* set parent and toplevel root */
|
||||
widget->parent = RT_NULL;
|
||||
|
||||
Reference in new issue
Block a user