diff options
| author | [email protected] <[email protected]> | 2010-05-30 22:44:21 +0000 |
|---|---|---|
| committer | [email protected] <[email protected]> | 2010-05-30 22:44:21 +0000 |
| commit | a1ee019309d171f9dc641c7ef09d545a49edc1a1 (patch) | |
| tree | 34f73bfd97dc5ae77372275f28d653a81297a1b2 /components/rtgui/include | |
| parent | ea6e5155ef903c6353d8f317dd73b3838658c971 (diff) | |
move the basic routine of dc to inline; add hdc memory image type; move event buffer from stack to gui thread structure.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@755 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'components/rtgui/include')
| -rw-r--r-- | components/rtgui/include/rtgui/dc.h | 108 | ||||
| -rw-r--r-- | components/rtgui/include/rtgui/image.h | 2 | ||||
| -rw-r--r-- | components/rtgui/include/rtgui/image_hdc.h | 2 | ||||
| -rw-r--r-- | components/rtgui/include/rtgui/region.h | 18 | ||||
| -rw-r--r-- | components/rtgui/include/rtgui/rtgui_system.h | 10 |
5 files changed, 114 insertions, 26 deletions
diff --git a/components/rtgui/include/rtgui/dc.h b/components/rtgui/include/rtgui/dc.h index a4abda7cc3..54b4820eea 100644 --- a/components/rtgui/include/rtgui/dc.h +++ b/components/rtgui/include/rtgui/dc.h @@ -69,25 +69,13 @@ void rtgui_dc_end_drawing(struct rtgui_dc* dc); /* destroy a 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_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_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_blit(struct rtgui_dc* dc, struct rtgui_point* dc_point, struct rtgui_dc* dest, rtgui_rect_t* rect);
-
-void rtgui_dc_set_gc(struct rtgui_dc* dc, rtgui_gc_t* gc);
-rtgui_gc_t *rtgui_dc_get_gc(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_draw_line (struct rtgui_dc* dc, int x1, int y1, int x2, int y2);
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 char* text, struct rtgui_rect* rect);
+
+void rtgui_dc_draw_mono_bmp(struct rtgui_dc* dc, int x, int y, int w, int h, const 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);
@@ -107,4 +95,96 @@ void rtgui_dc_draw_arc(struct rtgui_dc *dc, rt_int16_t x, rt_int16_t y, rt_int16 void rtgui_dc_draw_ellipse(struct rtgui_dc* dc, rt_int16_t x, rt_int16_t y, rt_int16_t rx, rt_int16_t ry);
void rtgui_dc_fill_ellipse(struct rtgui_dc *dc, rt_int16_t x, rt_int16_t y, rt_int16_t rx, rt_int16_t ry);
+/*
+ * dc inline function
+ *
+ * Note:
+ * In order to improve drawing speed, put most of common function of dc to inline
+ */
+
+/*
+ * draw a point on dc
+ */
+rt_inline void rtgui_dc_draw_point(struct rtgui_dc* dc, int x, int y)
+{
+ dc->draw_point(dc, x, y);
+}
+
+/*
+ * draw a color point on dc
+ */
+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);
+}
+
+/*
+ * draw a vertical line on dc
+ */
+rt_inline void rtgui_dc_draw_vline(struct rtgui_dc* dc, int x, int y1, int y2)
+{
+ dc->draw_vline(dc, x, y1, y2);
+}
+
+/*
+ * draw a horizontal line on dc
+ */
+rt_inline void rtgui_dc_draw_hline(struct rtgui_dc* dc, int x1, int x2, int y)
+{
+ dc->draw_hline(dc, x1, x2, y);
+}
+
+/*
+ * fill a rect with background color
+ */
+rt_inline void rtgui_dc_fill_rect (struct rtgui_dc* dc, struct rtgui_rect* rect)
+{
+ dc->fill_rect(dc, rect);
+}
+
+/*
+ * blit a dc on hardware dc
+ */
+rt_inline void rtgui_dc_blit(struct rtgui_dc* dc, struct rtgui_point* dc_point, struct rtgui_dc* dest, rtgui_rect_t* rect)
+{
+ if (dest == RT_NULL || rect == RT_NULL) return;
+
+ dc->blit(dc, dc_point, dest, rect);
+}
+
+/*
+ * set gc of dc
+ */
+rt_inline void rtgui_dc_set_gc(struct rtgui_dc* dc, rtgui_gc_t* gc)
+{
+ dc->set_gc(dc, gc);
+}
+
+/*
+ * get gc of dc
+ */
+rt_inline rtgui_gc_t *rtgui_dc_get_gc(struct rtgui_dc* dc)
+{
+ return dc->get_gc(dc);
+}
+
+/*
+ * get visible status of dc
+ */
+rt_inline rt_bool_t rtgui_dc_get_visible(struct rtgui_dc* dc)
+{
+ return dc->get_visible(dc);
+}
+
+/*
+ * get rect of dc
+ */
+rt_inline void rtgui_dc_get_rect(struct rtgui_dc*dc, rtgui_rect_t* rect)
+{
+ if (rect != RT_NULL)
+ {
+ dc->get_rect(dc, rect);
+ }
+}
+
#endif
diff --git a/components/rtgui/include/rtgui/image.h b/components/rtgui/include/rtgui/image.h index d6245d4881..5c63747f13 100644 --- a/components/rtgui/include/rtgui/image.h +++ b/components/rtgui/include/rtgui/image.h @@ -39,7 +39,7 @@ struct rtgui_image rt_uint16_t w, h;
/* image engine */
- struct rtgui_image_engine* engine;
+ const struct rtgui_image_engine* engine;
/* image private data */
void* data;
diff --git a/components/rtgui/include/rtgui/image_hdc.h b/components/rtgui/include/rtgui/image_hdc.h index eab22da980..8d253631f1 100644 --- a/components/rtgui/include/rtgui/image_hdc.h +++ b/components/rtgui/include/rtgui/image_hdc.h @@ -28,7 +28,7 @@ struct rtgui_image_hdcmm };
void rtgui_image_hdc_init(void);
-extern struct rtgui_image_engine rtgui_image_hdcmm_engine;
+extern const struct rtgui_image_engine rtgui_image_hdcmm_engine;
#define HDC_HEADER_SIZE (5 * 4)
#define RTGUI_IMAGE_HDC_DEF(bpp, w, h, pixels) \
diff --git a/components/rtgui/include/rtgui/region.h b/components/rtgui/include/rtgui/region.h index 72c06653e3..c822212bff 100644 --- a/components/rtgui/include/rtgui/region.h +++ b/components/rtgui/include/rtgui/region.h @@ -14,7 +14,7 @@ #ifndef __RTGUI_REGION_H__ #define __RTGUI_REGION_H__ -#include <rtgui/rtgui.h>
+#include <rtgui/rtgui.h> #if defined(__cplusplus) || defined(c_plusplus) extern "C" { @@ -83,15 +83,15 @@ void rtgui_region_reset(rtgui_region_t *region, rtgui_rect_t* rect); void rtgui_region_empty (rtgui_region_t *region); void rtgui_region_dump(rtgui_region_t* region); -/* rect functions */
-extern rtgui_rect_t rtgui_empty_rect;
-
+/* rect functions */ +extern rtgui_rect_t rtgui_empty_rect; + void rtgui_rect_moveto(rtgui_rect_t *rect, int x, int y); -void rtgui_rect_moveto_align(rtgui_rect_t *rect, rtgui_rect_t *to, int align);
-void rtgui_rect_inflate(rtgui_rect_t *rect, int d);
-void rtgui_rect_intersect(rtgui_rect_t *src, rtgui_rect_t *dest);
-int rtgui_rect_contains_point(rtgui_rect_t *rect, int x, int y); -int rtgui_rect_is_intersect(rtgui_rect_t *rect1, rtgui_rect_t *rect2);
+void rtgui_rect_moveto_align(rtgui_rect_t *rect, rtgui_rect_t *to, int align); +void rtgui_rect_inflate(rtgui_rect_t *rect, int d); +void rtgui_rect_intersect(rtgui_rect_t *src, rtgui_rect_t *dest); +int rtgui_rect_contains_point(const rtgui_rect_t *rect, int x, int y); +int rtgui_rect_is_intersect(const rtgui_rect_t *rect1, const rtgui_rect_t *rect2); #if defined(__cplusplus) || defined(c_plusplus) } diff --git a/components/rtgui/include/rtgui/rtgui_system.h b/components/rtgui/include/rtgui/rtgui_system.h index 8c5bef7cc7..4afc65e4e0 100644 --- a/components/rtgui/include/rtgui/rtgui_system.h +++ b/components/rtgui/include/rtgui/rtgui_system.h @@ -21,6 +21,12 @@ struct rtgui_dc; struct rtgui_event;
struct rtgui_widget;
+#ifdef RTGUI_USING_SMALL_SIZE
+#define RTGUI_EVENT_BUFFER_SIZE 64
+#else
+#define RTGUI_EVENT_BUFFER_SIZE 256
+#endif
+
struct rtgui_thread
{
/* the thread id */
@@ -31,6 +37,8 @@ struct rtgui_thread /* the owner of thread */
struct rtgui_widget* widget;
+ /* event buffer */
+ rt_uint8_t event_buffer[RTGUI_EVENT_BUFFER_SIZE];
};
typedef struct rtgui_thread rtgui_thread_t;
struct rtgui_timer;
@@ -55,9 +63,9 @@ void rtgui_timer_destory(rtgui_timer_t* timer); void rtgui_timer_start(rtgui_timer_t* timer);
void rtgui_timer_stop (rtgui_timer_t* timer);
-void rtgui_thread_system_init(void);
rtgui_thread_t* rtgui_thread_register(rt_thread_t tid, rt_mq_t mq);
void rtgui_thread_deregister(rt_thread_t tid);
+rtgui_thread_t* rtgui_thread_self(void);
rt_thread_t rtgui_thread_get_server(void);
|
