From 3a13964efa13c2d28936cb341da672c48d5658f6 Mon Sep 17 00:00:00 2001 From: "bernard.xiong@gmail.com" Date: Tue, 1 Jun 2010 00:07:59 +0000 Subject: move dc operations as dc engine. git-svn-id: https://rt-thread.googlecode.com/svn/trunk@756 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- components/rtgui/include/rtgui/dc.h | 37 ++++++++++++++----------- components/rtgui/include/rtgui/widgets/widget.h | 2 ++ 2 files changed, 23 insertions(+), 16 deletions(-) (limited to 'components/rtgui/include') diff --git a/components/rtgui/include/rtgui/dc.h b/components/rtgui/include/rtgui/dc.h index 54b4820eea..5f442b27ae 100644 --- a/components/rtgui/include/rtgui/dc.h +++ b/components/rtgui/include/rtgui/dc.h @@ -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); } } diff --git a/components/rtgui/include/rtgui/widgets/widget.h b/components/rtgui/include/rtgui/widgets/widget.h index 5601c79a48..cc410ac93c 100644 --- a/components/rtgui/include/rtgui/widgets/widget.h +++ b/components/rtgui/include/rtgui/widgets/widget.h @@ -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; -- cgit v1.3.1