diff options
| author | Grissiom <[email protected]> | 2013-02-01 10:27:10 +0800 |
|---|---|---|
| committer | Grissiom <[email protected]> | 2013-02-01 10:27:10 +0800 |
| commit | f06c70feed0941b5bceedcecf89e9aa22034aca8 (patch) | |
| tree | 89fd3a989b4d88fc72b39eaad6567de3a3d23874 /components/rtgui/include | |
| parent | 4f02e67bef7eacee5102d7730356663d9c889e15 (diff) | |
sync with rtgui-0.6
Diffstat (limited to 'components/rtgui/include')
| -rw-r--r-- | components/rtgui/include/rtgui/dc.h | 8 | ||||
| -rw-r--r-- | components/rtgui/include/rtgui/driver.h | 37 | ||||
| -rw-r--r-- | components/rtgui/include/rtgui/event.h | 6 | ||||
| -rw-r--r-- | components/rtgui/include/rtgui/region.h | 111 | ||||
| -rw-r--r-- | components/rtgui/include/rtgui/rtgui.h | 5 | ||||
| -rw-r--r-- | components/rtgui/include/rtgui/rtgui_app.h | 23 | ||||
| -rw-r--r-- | components/rtgui/include/rtgui/rtgui_server.h | 4 | ||||
| -rw-r--r-- | components/rtgui/include/rtgui/rtgui_system.h | 12 | ||||
| -rw-r--r-- | components/rtgui/include/rtgui/widgets/digfont.h | 36 | ||||
| -rw-r--r-- | components/rtgui/include/rtgui/widgets/digtube.h | 68 | ||||
| -rw-r--r-- | components/rtgui/include/rtgui/widgets/menu.h | 2 | ||||
| -rw-r--r-- | components/rtgui/include/rtgui/widgets/textbox.h | 22 | ||||
| -rw-r--r-- | components/rtgui/include/rtgui/widgets/widget.h | 199 | ||||
| -rw-r--r-- | components/rtgui/include/rtgui/widgets/window.h | 2 |
14 files changed, 354 insertions, 181 deletions
diff --git a/components/rtgui/include/rtgui/dc.h b/components/rtgui/include/rtgui/dc.h index 7ee7f6dd93..4a36465e89 100644 --- a/components/rtgui/include/rtgui/dc.h +++ b/components/rtgui/include/rtgui/dc.h @@ -60,6 +60,14 @@ struct rtgui_dc const struct rtgui_dc_engine *engine; }; +/* hardware device context */ +struct rtgui_dc_hw +{ + struct rtgui_dc parent; + rtgui_widget_t *owner; + const struct rtgui_graphic_driver *hw_driver; +}; + #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) diff --git a/components/rtgui/include/rtgui/driver.h b/components/rtgui/include/rtgui/driver.h index 6b77aa804f..2259853448 100644 --- a/components/rtgui/include/rtgui/driver.h +++ b/components/rtgui/include/rtgui/driver.h @@ -17,6 +17,7 @@ #include <rtgui/list.h> #include <rtgui/color.h> +/* graphic driver operations */ struct rtgui_graphic_driver_ops { /* set and get pixel in (x, y) */ @@ -30,6 +31,22 @@ struct rtgui_graphic_driver_ops void (*draw_raw_hline)(rt_uint8_t *pixels, int x1, int x2, int y); }; +/* graphic extension operations */ +struct rtgui_graphic_ext_ops +{ + /* some 2D operations */ + void (*draw_line)(rtgui_color_t *c, int x1, int y1, int x2, int y2); + + void (*draw_rect)(rtgui_color_t *c, int x1, int y1, int x2, int y2); + void (*fill_rect)(rtgui_color_t *c, int x1, int y1, int x2, int y2); + + void (*draw_circle)(rtgui_color_t *c, int x, int y, int r); + void (*fill_circle)(rtgui_color_t *c, int x, int y, int r); + + void (*draw_ellipse)(rtgui_color_t *c, int x, int y, int rx, int ry); + void (*fill_ellipse)(rtgui_color_t *c, int x, int y, int rx, int ry); +}; + struct rtgui_graphic_driver { /* pixel format and byte per pixel */ @@ -43,12 +60,12 @@ struct rtgui_graphic_driver /* framebuffer address and ops */ volatile rt_uint8_t *framebuffer; - rt_device_t device; + struct rt_device* device; + const struct rtgui_graphic_driver_ops *ops; + const struct rtgui_graphic_ext_ops *ext_ops; }; -void rtgui_graphic_driver_add(const struct rtgui_graphic_driver *driver); - struct rtgui_graphic_driver *rtgui_graphic_driver_get_default(void); void rtgui_graphic_driver_get_rect(const struct rtgui_graphic_driver *driver, rtgui_rect_t *rect); @@ -64,5 +81,19 @@ rt_inline struct rtgui_graphic_driver *rtgui_graphic_get_device() return &_driver; } +#ifdef RTGUI_USING_HW_CURSOR +/* + * hardware cursor + */ +enum rtgui_cursor_type +{ + RTGUI_CURSOR_ARROW, + RTGUI_CURSOR_HAND, +}; + +void rtgui_cursor_set_device(const char* device_name); +void rtgui_cursor_set_position(rt_uint16_t x, rt_uint16_t y); +void rtgui_cursor_set_image(enum rtgui_cursor_type type); #endif +#endif diff --git a/components/rtgui/include/rtgui/event.h b/components/rtgui/include/rtgui/event.h index c0f4e5b7bf..cb83fdb85b 100644 --- a/components/rtgui/include/rtgui/event.h +++ b/components/rtgui/include/rtgui/event.h @@ -90,7 +90,7 @@ struct rtgui_event rt_uint16_t user; /* the event sender */ - rt_thread_t sender; + struct rtgui_app *sender; /* mailbox to acknowledge request */ rt_mailbox_t ack; @@ -98,11 +98,13 @@ struct rtgui_event typedef struct rtgui_event rtgui_event_t; #define RTGUI_EVENT(e) ((struct rtgui_event*)(e)) +extern struct rtgui_app* rtgui_app_self(void); + #define RTGUI_EVENT_INIT(e, t) do \ { \ (e)->type = (t); \ (e)->user = 0; \ - (e)->sender = rt_thread_self(); \ + (e)->sender = rtgui_app_self(); \ (e)->ack = RT_NULL; \ } while (0) diff --git a/components/rtgui/include/rtgui/region.h b/components/rtgui/include/rtgui/region.h index 42a78b8da4..ab36acccfb 100644 --- a/components/rtgui/include/rtgui/region.h +++ b/components/rtgui/include/rtgui/region.h @@ -20,81 +20,82 @@ extern "C" { #endif - typedef struct rtgui_region_data rtgui_region_data_t; +typedef struct rtgui_region_data rtgui_region_data_t; - struct rtgui_region_data - { - rt_uint32_t size; - rt_uint32_t numRects; - /* XXX: And why, exactly, do we have this bogus struct definition? */ - /* rtgui_rect_t rects[size]; in memory but not explicitly declared */ - }; +struct rtgui_region_data +{ + rt_uint32_t size; + rt_uint32_t numRects; + /* XXX: And why, exactly, do we have this bogus struct definition? */ + /* rtgui_rect_t rects[size]; in memory but not explicitly declared */ +}; - typedef struct rtgui_region - { - rtgui_rect_t extents; - rtgui_region_data_t *data; - } rtgui_region_t; +typedef struct rtgui_region +{ + rtgui_rect_t extents; + rtgui_region_data_t *data; +} rtgui_region_t; - typedef enum - { - RTGUI_REGION_STATUS_FAILURE, - RTGUI_REGION_STATUS_SUCCESS - } rtgui_region_status_t; +typedef enum +{ + RTGUI_REGION_STATUS_FAILURE, + RTGUI_REGION_STATUS_SUCCESS +} rtgui_region_status_t; - /* creation/destruction */ +/* creation/destruction */ - void rtgui_region_init(rtgui_region_t *region); - void rtgui_region_init_rect(rtgui_region_t *region, - int x, int y, unsigned int width, unsigned int height); - void rtgui_region_init_with_extents(rtgui_region_t *region, const rtgui_rect_t *extents); - void rtgui_region_fini(rtgui_region_t *region); +void rtgui_region_init(rtgui_region_t *region); +void rtgui_region_init_rect(rtgui_region_t *region, + int x, int y, unsigned int width, unsigned int height); +void rtgui_region_init_with_extents(rtgui_region_t *region, const rtgui_rect_t *extents); +void rtgui_region_fini(rtgui_region_t *region); - void rtgui_region_translate(rtgui_region_t *region, int x, int y); +void rtgui_region_translate(rtgui_region_t *region, int x, int y); - rtgui_region_status_t rtgui_region_copy(rtgui_region_t *dest, rtgui_region_t *source); +rtgui_region_status_t rtgui_region_copy(rtgui_region_t *dest, rtgui_region_t *source); - rtgui_region_status_t rtgui_region_intersect(rtgui_region_t *newReg, rtgui_region_t *reg1, rtgui_region_t *reg2); - rtgui_region_status_t rtgui_region_intersect_rect(rtgui_region_t *newReg, rtgui_region_t *reg1, rtgui_rect_t *rect); - rtgui_region_status_t rtgui_region_union(rtgui_region_t *newReg, rtgui_region_t *reg1, rtgui_region_t *reg2); - rtgui_region_status_t rtgui_region_union_rect(rtgui_region_t *dest, rtgui_region_t *source, rtgui_rect_t *rect); - rtgui_region_status_t rtgui_region_subtract(rtgui_region_t *regD, rtgui_region_t *regM, rtgui_region_t *regS); - rtgui_region_status_t rtgui_region_subtract_rect(rtgui_region_t *regD, rtgui_region_t *regM, rtgui_rect_t *rect); - rtgui_region_status_t rtgui_region_inverse(rtgui_region_t *newReg, rtgui_region_t *reg1, rtgui_rect_t *invRect); +rtgui_region_status_t rtgui_region_intersect(rtgui_region_t *newReg, rtgui_region_t *reg1, rtgui_region_t *reg2); +rtgui_region_status_t rtgui_region_intersect_rect(rtgui_region_t *newReg, rtgui_region_t *reg1, rtgui_rect_t *rect); +rtgui_region_status_t rtgui_region_union(rtgui_region_t *newReg, rtgui_region_t *reg1, rtgui_region_t *reg2); +rtgui_region_status_t rtgui_region_union_rect(rtgui_region_t *dest, rtgui_region_t *source, rtgui_rect_t *rect); +rtgui_region_status_t rtgui_region_subtract(rtgui_region_t *regD, rtgui_region_t *regM, rtgui_region_t *regS); +rtgui_region_status_t rtgui_region_subtract_rect(rtgui_region_t *regD, rtgui_region_t *regM, rtgui_rect_t *rect); +rtgui_region_status_t rtgui_region_inverse(rtgui_region_t *newReg, rtgui_region_t *reg1, rtgui_rect_t *invRect); - int rtgui_region_num_rects(rtgui_region_t *region); +int rtgui_region_num_rects(rtgui_region_t *region); - rtgui_rect_t *rtgui_region_rects(rtgui_region_t *region); +rtgui_rect_t *rtgui_region_rects(rtgui_region_t *region); #define RTGUI_REGION_OUT 0 #define RTGUI_REGION_IN 1 #define RTGUI_REGION_PART 2 - int rtgui_region_contains_point(rtgui_region_t *region, int x, int y, rtgui_rect_t *box); - int rtgui_region_contains_rectangle(rtgui_region_t *rtgui_region_t, rtgui_rect_t *prect); +int rtgui_region_contains_point(rtgui_region_t *region, int x, int y, rtgui_rect_t *box); +int rtgui_region_contains_rectangle(rtgui_region_t *rtgui_region_t, rtgui_rect_t *prect); - int rtgui_region_not_empty(rtgui_region_t *region); - rtgui_rect_t *rtgui_region_extents(rtgui_region_t *region); +int rtgui_region_not_empty(rtgui_region_t *region); +rtgui_rect_t *rtgui_region_extents(rtgui_region_t *region); - rtgui_region_status_t rtgui_region_append(rtgui_region_t *dest, rtgui_region_t *region); - rtgui_region_status_t rtgui_region_validate(rtgui_region_t *badreg, int *pOverlap); +rtgui_region_status_t rtgui_region_append(rtgui_region_t *dest, rtgui_region_t *region); +rtgui_region_status_t rtgui_region_validate(rtgui_region_t *badreg, int *pOverlap); - 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); - int rtgui_region_is_flat(rtgui_region_t *region); +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); +int rtgui_region_is_flat(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(const rtgui_rect_t *rect, int x, int y); - int rtgui_rect_is_intersect(const rtgui_rect_t *rect1, const rtgui_rect_t *rect2); - int rtgui_rect_is_equal(const rtgui_rect_t *rect1, const rtgui_rect_t *rect2); - rt_bool_t rtgui_rect_is_empty(const rtgui_rect_t *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(const rtgui_rect_t *rect, int x, int y); +int rtgui_rect_is_intersect(const rtgui_rect_t *rect1, const rtgui_rect_t *rect2); +int rtgui_rect_is_equal(const rtgui_rect_t *rect1, const rtgui_rect_t *rect2); +rtgui_rect_t *rtgui_rect_set(rtgui_rect_t *rect, int x, int y, int w, int h); +rt_bool_t rtgui_rect_is_empty(const rtgui_rect_t *rect); #if defined(__cplusplus) || defined(c_plusplus) } diff --git a/components/rtgui/include/rtgui/rtgui.h b/components/rtgui/include/rtgui/rtgui.h index 066262d34c..fc00d4559f 100644 --- a/components/rtgui/include/rtgui/rtgui.h +++ b/components/rtgui/include/rtgui/rtgui.h @@ -17,6 +17,11 @@ #include <rtthread.h> #include <rtgui/rtgui_config.h> +#define RTGUI_VERSION 0L /**< major version number */ +#define RTGUI_SUBVERSION 6L /**< minor version number */ +#define RTGUI_REVISION 0L /**< revise version number */ +#define RTGUI_CODENAME "Newton" /**< code name */ + #define RT_INT16_MAX 32767 #define RT_INT16_MIN (-RT_INT16_MAX-1) #define RTGUI_NOT_FOUND (-1) diff --git a/components/rtgui/include/rtgui/rtgui_app.h b/components/rtgui/include/rtgui/rtgui_app.h index 50087e07a2..67f5e0ae4c 100644 --- a/components/rtgui/include/rtgui/rtgui_app.h +++ b/components/rtgui/include/rtgui/rtgui_app.h @@ -52,9 +52,6 @@ struct rtgui_app /* the thread id */ rt_thread_t tid; - /* the RTGUI server id */ - rt_thread_t server; - /* the message queue of thread */ rt_mq_t mq; /* event buffer */ @@ -70,9 +67,13 @@ struct rtgui_app }; /** - * create an application named @myname on thread @param tid + * create an application named @myname on current thread. + * + * @param name the name of the application + * + * @return a pointer to struct rtgui_app on success. RT_NULL on failure. */ -struct rtgui_app *rtgui_app_create(rt_thread_t tid, const char *title); +struct rtgui_app *rtgui_app_create(const char *name); void rtgui_app_destroy(struct rtgui_app *app); rt_bool_t rtgui_app_event_handler(struct rtgui_object *obj, rtgui_event_t *event); @@ -81,11 +82,15 @@ void rtgui_app_exit(struct rtgui_app *app, rt_uint16_t code); void rtgui_app_activate(struct rtgui_app *app); void rtgui_app_close(struct rtgui_app *app); -void rtgui_app_set_onidle(rtgui_idle_func_t onidle); -rtgui_idle_func_t rtgui_app_get_onidle(void); +void rtgui_app_set_onidle(struct rtgui_app *app, rtgui_idle_func_t onidle); +rtgui_idle_func_t rtgui_app_get_onidle(struct rtgui_app *app); + +/** + * return the rtgui_app struct on current thread + */ struct rtgui_app *rtgui_app_self(void); -rt_err_t rtgui_app_set_as_wm(void); -void rtgui_app_set_main_win(struct rtgui_win *win); +rt_err_t rtgui_app_set_as_wm(struct rtgui_app *app); +void rtgui_app_set_main_win(struct rtgui_app *app, struct rtgui_win *win); #endif /* end of include guard: __RTGUI_APP_H__ */ diff --git a/components/rtgui/include/rtgui/rtgui_server.h b/components/rtgui/include/rtgui/rtgui_server.h index 9914a5b8ef..de459bf29e 100644 --- a/components/rtgui/include/rtgui/rtgui_server.h +++ b/components/rtgui/include/rtgui/rtgui_server.h @@ -56,8 +56,8 @@ struct rtgui_topwin /* the window id */ struct rtgui_win *wid; - /* the thread id */ - rt_thread_t tid; + /* which app I belong */ + struct rtgui_app *app; /* the extent information */ rtgui_rect_t extent; diff --git a/components/rtgui/include/rtgui/rtgui_system.h b/components/rtgui/include/rtgui/rtgui_system.h index 975b1e0be5..8f8edaaacc 100644 --- a/components/rtgui/include/rtgui/rtgui_system.h +++ b/components/rtgui/include/rtgui/rtgui_system.h @@ -26,8 +26,8 @@ typedef void (*rtgui_timeout_func)(struct rtgui_timer *timer, void *parameter); struct rtgui_timer { - /* context thread id */ - rt_thread_t tid; + /* the rtgui application it runs on */ + struct rtgui_app* app; /* rt timer */ struct rt_timer timer; @@ -58,7 +58,7 @@ void *rtgui_realloc(void *ptr, rt_size_t size); #define rtgui_exit_critical rt_exit_critical #endif -rt_thread_t rtgui_get_server(void); +struct rtgui_app* rtgui_get_server(void); void rtgui_set_mainwin_rect(struct rtgui_rect *rect); void rtgui_get_mainwin_rect(struct rtgui_rect *rect); void rtgui_get_screen_rect(struct rtgui_rect *rect); @@ -67,9 +67,9 @@ void rtgui_screen_lock(rt_int32_t timeout); void rtgui_screen_unlock(void); struct rtgui_event; -rt_err_t rtgui_send(rt_thread_t tid, struct rtgui_event *event, rt_size_t event_size); -rt_err_t rtgui_send_urgent(rt_thread_t tid, struct rtgui_event *event, rt_size_t event_size); -rt_err_t rtgui_send_sync(rt_thread_t tid, struct rtgui_event *event, rt_size_t event_size); +rt_err_t rtgui_send(struct rtgui_app* app, struct rtgui_event *event, rt_size_t event_size); +rt_err_t rtgui_send_urgent(struct rtgui_app* app, struct rtgui_event *event, rt_size_t event_size); +rt_err_t rtgui_send_sync(struct rtgui_app* app, struct rtgui_event *event, rt_size_t event_size); rt_err_t rtgui_ack(struct rtgui_event *event, rt_int32_t status); rt_err_t rtgui_recv(struct rtgui_event *event, rt_size_t event_size); rt_err_t rtgui_recv_nosuspend(struct rtgui_event *event, rt_size_t event_size); diff --git a/components/rtgui/include/rtgui/widgets/digfont.h b/components/rtgui/include/rtgui/widgets/digfont.h new file mode 100644 index 0000000000..6765ed06c3 --- /dev/null +++ b/components/rtgui/include/rtgui/widgets/digfont.h @@ -0,0 +1,36 @@ +#ifndef DIG_FONT_H +#define DIG_FONT_H + +struct rtgui_digitfont_data +{ + rt_uint16_t x; + rt_uint16_t y; + rt_uint16_t len; + rt_uint16_t type; //ˮƽ�ʹ�ֱ +}; + +struct rtgui_digitfont +{ + int seg1_len; + int seg1_hspace; + int seg1_vspace; + int seg1_nr; //9 + + int seg2_len; + + int seg3_len; + struct rtgui_digitfont_data *data; +}; + + +typedef struct rtgui_digitfont rtgui_digitfont_t; + +extern struct rtgui_digitfont digitfont_40; +extern const char digtube_code_table[]; + +int rtgui_digitfont_create(struct rtgui_digitfont *font); +int rtgui_dc_draw_digitfont(struct rtgui_dc *dc, struct rtgui_digitfont *font, rtgui_rect_t *rect); +int rtgui_get_digfont_metrics(struct rtgui_digitfont * font, rtgui_rect_t * rect); +int rtgui_dc_draw_digitfont_code(struct rtgui_dc *dc, struct rtgui_digitfont * font, rtgui_rect_t * rect, char code); + +#endif
\ No newline at end of file diff --git a/components/rtgui/include/rtgui/widgets/digtube.h b/components/rtgui/include/rtgui/widgets/digtube.h new file mode 100644 index 0000000000..c29a907f48 --- /dev/null +++ b/components/rtgui/include/rtgui/widgets/digtube.h @@ -0,0 +1,68 @@ +/* + * File : digfont.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006 - 2012, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2012-12-21 pife first version + */ +#ifndef __RTGUI_DIGTUBE_H__ +#define __RTGUI_DIGTUBE_H__ + +#include <rtgui/rtgui.h> +#include <rtgui/rtgui_system.h> +#include <rtgui/widgets/widget.h> +#include <rtgui/widgets/digfont.h> + +DECLARE_CLASS_TYPE(digtube); + +/** Gets the type of a digit tubes */ +#define RTGUI_DIGTUBE_TYPE (RTGUI_TYPE(digtube)) +/** Casts the object to an rtgui_digtube */ +#define RTGUI_DIGTUBE(obj) (RTGUI_OBJECT_CAST((obj), RTGUI_DIGTUBE_TYPE, rtgui_digtube_t)) +/** Checks if the object is an rtgui_digtube */ +#define RTGUI_IS_DIGTUBE(obj) (RTGUI_OBJECT_CHECK_TYPE((obj), RTGUI_DIGTUBE_TYPE)) + +/* + * the digit tube widget + */ +struct rtgui_digtube +{ + struct rtgui_widget parent; + + struct rtgui_digitfont digitfont; + + /* number of tubes */ + rt_uint8_t tube_count; + rt_uint8_t tube_style; + rt_uint8_t digit_hight; + rt_uint8_t digit_width; + rt_uint8_t digit_space; + rtgui_color_t digit_bc; + void * value; +}; +typedef struct rtgui_digtube rtgui_digtube_t; + +rtgui_digtube_t *rtgui_digtube_create( struct rtgui_digitfont * digitfont, int count, void * value, int style); +void rtgui_digtube_destroy(rtgui_digtube_t *digtube); + +rt_bool_t rtgui_digtube_event_handler(struct rtgui_object *object, struct rtgui_event *event); + +#define RTGUI_DIGTUBE_DEFAULT_BC RTGUI_RGB(0, 0, 0) +#define RTGUI_DIGTUBE_DEFAULT_FC RTGUI_RGB(0xFF, 0, 0) +#define RTGUI_DIGTUBE_DEFAULT_DIGIT_BC RTGUI_RGB(100, 100, 100) + +#define RTGUI_DIGTUBE_DEFAULT_SPACE 10 + +#define RTGUI_DIGTUBE_STYLE_NOBACKFONT 0x01 +#define RTGUI_DIGTUBE_STYLE_DISHEXNUM 0x02 +#define RTGUI_DIGTUBE_STYLE_DISCODES 0x04 + +//void rtgui_digtube_set_text(rtgui_digtube_t *digtube, const char *text); +//char *rtgui_digtube_get_text(rtgui_digtube_t *digtube); +#endif
\ No newline at end of file diff --git a/components/rtgui/include/rtgui/widgets/menu.h b/components/rtgui/include/rtgui/widgets/menu.h index 0a40890b0f..1a6e85b387 100644 --- a/components/rtgui/include/rtgui/widgets/menu.h +++ b/components/rtgui/include/rtgui/widgets/menu.h @@ -72,7 +72,7 @@ void rtgui_menu_set_onmenupop(struct rtgui_menu *menu, rtgui_event_handler_ptr h void rtgui_menu_set_onmenuhide(struct rtgui_menu *menu, rtgui_event_handler_ptr handler); void rtgui_menu_pop(struct rtgui_menu *menu, int x, int y); -void rtgui_menu_hiden(struct rtgui_menu *menu); +void rtgui_menu_hide(struct rtgui_menu *menu); #endif diff --git a/components/rtgui/include/rtgui/widgets/textbox.h b/components/rtgui/include/rtgui/widgets/textbox.h index e6c1d008ab..989c170efb 100644 --- a/components/rtgui/include/rtgui/widgets/textbox.h +++ b/components/rtgui/include/rtgui/widgets/textbox.h @@ -34,6 +34,8 @@ DECLARE_CLASS_TYPE(textbox); #define RTGUI_TEXTBOX_DEFAULT_WIDTH 80 #define RTGUI_TEXTBOX_DEFAULT_HEIGHT 20 +#define RTGUI_TEXTBOX_BORDER_WIDTH 1 + #define RTGUI_TEXTBOX_SINGLE 0x00 #define RTGUI_TEXTBOX_MULTI 0x01 /* multiline */ #define RTGUI_TEXTBOX_MASK 0x02 /* ciphertext */ @@ -52,10 +54,13 @@ struct rtgui_textbox rt_uint32_t flag; /* current line and position */ - rt_uint16_t line, line_begin, position, line_length; + rt_uint16_t line, line_begin, position; + /** maximum chars a line could hold excluding the NULL byte */ + rt_uint16_t line_length; rt_uint16_t dis_length; /*may be display length.*/ rt_uint16_t first_pos; char mask_char; + /** a NULL terminated string that the textbox is holding */ char *text; rt_size_t font_width; @@ -77,7 +82,20 @@ void rtgui_textbox_set_value(struct rtgui_textbox *box, const char *text); const char *rtgui_textbox_get_value(struct rtgui_textbox *box); void rtgui_textbox_set_mask_char(rtgui_textbox_t *box, const char ch); char rtgui_textbox_get_mask_char(rtgui_textbox_t *box); -void rtgui_textbox_set_line_length(struct rtgui_textbox *box, rt_size_t length); +/** set the maximum chars a line could hold excluding the NULL byte + * + * It will truncate the current line if the length is smaller than the chars + * the box is currently holding. But the box->text is guaranteed to be NULL + * terminated anyway. + * + * @param box the text box it operate on + * @param length the new line length. It should be greater than 0. + * + * @return -RT_ERROR on invalid length; -RT_ENOMEM if there is no enough memory + * to allocate the new buffer. On returning -RT_ENOMEM, the original text would + * remain unchanged. + */ +rt_err_t rtgui_textbox_set_line_length(struct rtgui_textbox *box, rt_size_t length); void rtgui_textbox_get_edit_rect(struct rtgui_textbox *box, rtgui_rect_t *rect); diff --git a/components/rtgui/include/rtgui/widgets/widget.h b/components/rtgui/include/rtgui/widgets/widget.h index 7dd65898c4..60d388cc1a 100644 --- a/components/rtgui/include/rtgui/widgets/widget.h +++ b/components/rtgui/include/rtgui/widgets/widget.h @@ -62,139 +62,138 @@ extern "C" { #define RTGUI_WIDGET_DC_SET_UNVISIBLE(w) RTGUI_WIDGET_FLAG(w) &= ~RTGUI_WIDGET_FLAG_DC_VISIBLE #define RTGUI_WIDGET_DC(w) ((struct rtgui_dc*)&((w)->dc_type)) - DECLARE_CLASS_TYPE(widget); +DECLARE_CLASS_TYPE(widget); - /** Gets the type of a widget */ +/** Gets the type of a widget */ #define RTGUI_WIDGET_TYPE (RTGUI_TYPE(widget)) - /** Casts the object to a rtgui_widget */ +/** Casts the object to a rtgui_widget */ #define RTGUI_WIDGET(obj) (RTGUI_OBJECT_CAST((obj), RTGUI_WIDGET_TYPE, rtgui_widget_t)) - /** 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)) - /* - * the base widget object - */ - struct rtgui_widget - { - /* inherit from rtgui_object */ - struct rtgui_object object; +/* + * the base widget object + */ +struct rtgui_widget +{ + /* inherit from rtgui_object */ + struct rtgui_object object; - /* the widget that contains this widget */ - struct rtgui_widget *parent; - /* the window that contains this widget */ - struct rtgui_win *toplevel; - /* the widget children and sibling */ - rtgui_list_t sibling; + /* the widget that contains this widget */ + struct rtgui_widget *parent; + /* the window that contains this widget */ + struct rtgui_win *toplevel; + /* the widget children and sibling */ + rtgui_list_t sibling; - /* widget flag */ - rt_int32_t flag; + /* widget flag */ + rt_int32_t flag; - /* hardware device context */ - rt_uint32_t dc_type; - const struct rtgui_dc_engine *dc_engine; + /* hardware device context */ + rt_uint32_t dc_type; + const struct rtgui_dc_engine *dc_engine; - /* the graphic context of widget */ - rtgui_gc_t gc; + /* the graphic context of widget */ + rtgui_gc_t gc; - /* the widget extent */ - rtgui_rect_t extent; + /* the widget extent */ + rtgui_rect_t extent; - /* minimal width and height of widget */ - rt_int16_t mini_width, mini_height; - /* widget align */ - rt_int32_t align; - rt_uint16_t border; - rt_uint16_t border_style; - /* the rect clip */ - rtgui_region_t clip; + /* minimal width and height of widget */ + rt_int16_t min_width, min_height; + /* widget align */ + rt_int32_t align; + rt_uint16_t border; + rt_uint16_t border_style; + /* the rect clip */ + rtgui_region_t clip; - /* call back */ - rt_bool_t (*on_focus_in)(struct rtgui_object *widget, struct rtgui_event *event); - rt_bool_t (*on_focus_out)(struct rtgui_object *widget, struct rtgui_event *event); + /* call back */ + rt_bool_t (*on_focus_in)(struct rtgui_object *widget, struct rtgui_event *event); + rt_bool_t (*on_focus_out)(struct rtgui_object *widget, struct rtgui_event *event); #ifndef RTGUI_USING_SMALL_SIZE - rt_bool_t (*on_draw)(struct rtgui_object *widget, struct rtgui_event *event); - rt_bool_t (*on_mouseclick)(struct rtgui_object *widget, struct rtgui_event *event); - rt_bool_t (*on_key)(struct rtgui_object *widget, struct rtgui_event *event); - rt_bool_t (*on_size)(struct rtgui_object *widget, struct rtgui_event *event); - rt_bool_t (*on_command)(struct rtgui_object *widget, struct rtgui_event *event); + rt_bool_t (*on_draw)(struct rtgui_object *widget, struct rtgui_event *event); + rt_bool_t (*on_mouseclick)(struct rtgui_object *widget, struct rtgui_event *event); + rt_bool_t (*on_key)(struct rtgui_object *widget, struct rtgui_event *event); + rt_bool_t (*on_size)(struct rtgui_object *widget, struct rtgui_event *event); + rt_bool_t (*on_command)(struct rtgui_object *widget, struct rtgui_event *event); #endif - /* user private data */ - rt_uint32_t user_data; - }; - typedef struct rtgui_widget rtgui_widget_t; + /* user private data */ + rt_uint32_t user_data; +}; +typedef struct rtgui_widget rtgui_widget_t; - rtgui_widget_t *rtgui_widget_create(rtgui_type_t *widget_type); - void rtgui_widget_destroy(rtgui_widget_t *widget); +rtgui_widget_t *rtgui_widget_create(rtgui_type_t *widget_type); +void rtgui_widget_destroy(rtgui_widget_t *widget); - rt_bool_t rtgui_widget_event_handler(struct rtgui_object *object, rtgui_event_t *event); +rt_bool_t rtgui_widget_event_handler(struct rtgui_object *object, rtgui_event_t *event); - /* focus and unfocus */ - void rtgui_widget_focus(rtgui_widget_t *widget); - void rtgui_widget_unfocus(rtgui_widget_t *widget); +/* focus and unfocus */ +void rtgui_widget_focus(rtgui_widget_t *widget); +void rtgui_widget_unfocus(rtgui_widget_t *widget); - /* event handler for each command */ - void rtgui_widget_set_onfocus(rtgui_widget_t *widget, rtgui_event_handler_ptr handler); - void rtgui_widget_set_onunfocus(rtgui_widget_t *widget, rtgui_event_handler_ptr handler); +/* event handler for each command */ +void rtgui_widget_set_onfocus(rtgui_widget_t *widget, rtgui_event_handler_ptr handler); +void rtgui_widget_set_onunfocus(rtgui_widget_t *widget, rtgui_event_handler_ptr handler); #ifndef RTGUI_USING_SMALL_SIZE - void rtgui_widget_set_ondraw(rtgui_widget_t *widget, rtgui_event_handler_ptr handler); - void rtgui_widget_set_onmouseclick(rtgui_widget_t *widget, rtgui_event_handler_ptr handler); - void rtgui_widget_set_onkey(rtgui_widget_t *widget, rtgui_event_handler_ptr handler); - void rtgui_widget_set_onsize(rtgui_widget_t *widget, rtgui_event_handler_ptr handler); - void rtgui_widget_set_oncommand(rtgui_widget_t *widget, rtgui_event_handler_ptr handler); +void rtgui_widget_set_ondraw(rtgui_widget_t *widget, rtgui_event_handler_ptr handler); +void rtgui_widget_set_onmouseclick(rtgui_widget_t *widget, rtgui_event_handler_ptr handler); +void rtgui_widget_set_onkey(rtgui_widget_t *widget, rtgui_event_handler_ptr handler); +void rtgui_widget_set_onsize(rtgui_widget_t *widget, rtgui_event_handler_ptr handler); +void rtgui_widget_set_oncommand(rtgui_widget_t *widget, rtgui_event_handler_ptr handler); #endif - /* get and set rect of widget */ - void rtgui_widget_get_rect(rtgui_widget_t *widget, rtgui_rect_t *rect); - void rtgui_widget_set_border(rtgui_widget_t *widget, rt_uint32_t style); - void rtgui_widget_set_rect(rtgui_widget_t *widget, const rtgui_rect_t *rect); - void rtgui_widget_set_rectangle(rtgui_widget_t *widget, int x, int y, int width, int height); - void rtgui_widget_get_extent(rtgui_widget_t *widget, rtgui_rect_t *rect); +/* get and set rect of widget */ +void rtgui_widget_get_rect(rtgui_widget_t *widget, rtgui_rect_t *rect); +void rtgui_widget_set_border(rtgui_widget_t *widget, rt_uint32_t style); +void rtgui_widget_set_rect(rtgui_widget_t *widget, const rtgui_rect_t *rect); +void rtgui_widget_set_rectangle(rtgui_widget_t *widget, int x, int y, int width, int height); +void rtgui_widget_get_extent(rtgui_widget_t *widget, rtgui_rect_t *rect); -#ifndef RTGUI_USING_SMALL_SIZE - void rtgui_widget_set_miniwidth(rtgui_widget_t *widget, int width); - void rtgui_widget_set_miniheight(rtgui_widget_t *widget, int height); -#endif +void rtgui_widget_set_minsize(rtgui_widget_t *widget, int width, int height); +void rtgui_widget_set_minwidth(rtgui_widget_t *widget, int width); +void rtgui_widget_set_minheight(rtgui_widget_t *widget, int height); - void rtgui_widget_set_parent(rtgui_widget_t *widget, rtgui_widget_t *parent); +void rtgui_widget_set_parent(rtgui_widget_t *widget, rtgui_widget_t *parent); - /* get the physical position of a logic point on widget */ - void rtgui_widget_point_to_device(rtgui_widget_t *widget, rtgui_point_t *point); - /* get the physical position of a logic rect on widget */ - void rtgui_widget_rect_to_device(rtgui_widget_t *widget, rtgui_rect_t *rect); +/* get the physical position of a logic point on widget */ +void rtgui_widget_point_to_device(rtgui_widget_t *widget, rtgui_point_t *point); +/* get the physical position of a logic rect on widget */ +void rtgui_widget_rect_to_device(rtgui_widget_t *widget, rtgui_rect_t *rect); - /* get the logic position of a physical point on widget */ - void rtgui_widget_point_to_logic(rtgui_widget_t *widget, rtgui_point_t *point); - /* get the logic position of a physical rect on widget */ - void rtgui_widget_rect_to_logic(rtgui_widget_t *widget, rtgui_rect_t *rect); +/* get the logic position of a physical point on widget */ +void rtgui_widget_point_to_logic(rtgui_widget_t *widget, rtgui_point_t *point); +/* get the logic position of a physical rect on widget */ +void rtgui_widget_rect_to_logic(rtgui_widget_t *widget, rtgui_rect_t *rect); - /* move widget and its children to a logic point */ - void rtgui_widget_move_to_logic(rtgui_widget_t *widget, int dx, int dy); +/* move widget and its children to a logic point */ +void rtgui_widget_move_to_logic(rtgui_widget_t *widget, int dx, int dy); - /* update the clip info of widget */ - void rtgui_widget_update_clip(rtgui_widget_t *widget); +/* update the clip info of widget */ +void rtgui_widget_update_clip(rtgui_widget_t *widget); - /* get the toplevel widget of widget */ - struct rtgui_win *rtgui_widget_get_toplevel(rtgui_widget_t *widget); - rt_bool_t rtgui_widget_onupdate_toplvl(struct rtgui_object *object, struct rtgui_event *event); +/* get the toplevel widget of widget */ +struct rtgui_win *rtgui_widget_get_toplevel(rtgui_widget_t *widget); +rt_bool_t rtgui_widget_onupdate_toplvl(struct rtgui_object *object, struct rtgui_event *event); - void rtgui_widget_show(rtgui_widget_t *widget); - rt_bool_t rtgui_widget_onshow(struct rtgui_object *object, struct rtgui_event *event); - void rtgui_widget_hide(rtgui_widget_t *widget); - rt_bool_t rtgui_widget_onhide(struct rtgui_object *object, struct rtgui_event *event); - void rtgui_widget_update(rtgui_widget_t *widget); +void rtgui_widget_show(rtgui_widget_t *widget); +rt_bool_t rtgui_widget_onshow(struct rtgui_object *object, struct rtgui_event *event); +void rtgui_widget_hide(rtgui_widget_t *widget); +rt_bool_t rtgui_widget_onhide(struct rtgui_object *object, struct rtgui_event *event); +void rtgui_widget_update(rtgui_widget_t *widget); - /* get parent color */ - rtgui_color_t rtgui_widget_get_parent_foreground(rtgui_widget_t *widget); - rtgui_color_t rtgui_widget_get_parent_background(rtgui_widget_t *widget); +/* get parent color */ +rtgui_color_t rtgui_widget_get_parent_foreground(rtgui_widget_t *widget); +rtgui_color_t rtgui_widget_get_parent_background(rtgui_widget_t *widget); - /* get the next sibling of widget */ - rtgui_widget_t *rtgui_widget_get_next_sibling(rtgui_widget_t *widget); - /* get the prev sibling of widget */ - rtgui_widget_t *rtgui_widget_get_prev_sibling(rtgui_widget_t *widget); +/* get the next sibling of widget */ +rtgui_widget_t *rtgui_widget_get_next_sibling(rtgui_widget_t *widget); +/* get the prev sibling of widget */ +rtgui_widget_t *rtgui_widget_get_prev_sibling(rtgui_widget_t *widget); - /* dump widget information */ - void rtgui_widget_dump(rtgui_widget_t *widget); +/* dump widget information */ +void rtgui_widget_dump(rtgui_widget_t *widget); #ifdef __cplusplus } diff --git a/components/rtgui/include/rtgui/widgets/window.h b/components/rtgui/include/rtgui/widgets/window.h index 6c8a37cf7f..f0642004a0 100644 --- a/components/rtgui/include/rtgui/widgets/window.h +++ b/components/rtgui/include/rtgui/widgets/window.h @@ -130,7 +130,7 @@ void rtgui_win_destroy(rtgui_win_t *win); rt_bool_t rtgui_win_close(struct rtgui_win *win); rt_base_t rtgui_win_show(struct rtgui_win *win, rt_bool_t is_modal); -void rtgui_win_hiden(rtgui_win_t *win); +void rtgui_win_hide(rtgui_win_t *win); void rtgui_win_end_modal(rtgui_win_t *win, rtgui_modal_code_t modal_code); rt_err_t rtgui_win_activate(struct rtgui_win *win); rt_bool_t rtgui_win_is_activated(struct rtgui_win *win); |
