diff --git a/components/gui/include/rtgui/event.h b/components/gui/include/rtgui/event.h index 1113da10ad..78f269a239 100644 --- a/components/gui/include/rtgui/event.h +++ b/components/gui/include/rtgui/event.h @@ -329,7 +329,7 @@ enum rtgui_gesture_type RTGUI_GESTURE_PINCH = 0x0002, RTGUI_GESTURE_DRAG = 0x0004, RTGUI_GESTURE_LONGPRESS = 0x0008, - RTGUI_GESTURE_DRAGGED = 0x0001 | 0x0004 | 0x0008, + RTGUI_GESTURE_DRAGGED = 0x0001 | 0x0004 | 0x0008, /* PINCH, DRAG finished. */ RTGUI_GESTURE_FINISH = 0x8000, /* The corresponding gesture should be canceled. */ @@ -342,6 +342,8 @@ struct rtgui_event_gesture _RTGUI_EVENT_WIN_ELEMENTS enum rtgui_gesture_type type; + + rt_uint32_t win_acti_cnt; /* win id */ }; /* @@ -359,6 +361,8 @@ struct rtgui_event_mouse /* id of touch session(from down to up). Different session should have * different id. id should never be 0. */ rt_uint32_t id; + + rt_uint32_t win_acti_cnt; /* win id */ }; #define RTGUI_MOUSE_BUTTON_LEFT 0x01 #define RTGUI_MOUSE_BUTTON_RIGHT 0x02 @@ -379,6 +383,8 @@ struct rtgui_event_kbd { _RTGUI_EVENT_WIN_ELEMENTS + rt_uint32_t win_acti_cnt; /* win id */ + rt_uint16_t type; /* key down or up */ rt_uint16_t key; /* current key */ rt_uint16_t mod; /* current key modifiers */ diff --git a/components/gui/include/rtgui/rtgui_app.h b/components/gui/include/rtgui/rtgui_app.h index 5cb2c83acc..8d17c9a21d 100644 --- a/components/gui/include/rtgui/rtgui_app.h +++ b/components/gui/include/rtgui/rtgui_app.h @@ -81,6 +81,8 @@ struct rtgui_app rtgui_idle_func_t on_idle; unsigned int window_cnt; + /* window activate count */ + unsigned int win_acti_cnt; void *user_data; }; @@ -115,6 +117,9 @@ 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); struct rtgui_win* rtgui_app_get_main_win(struct rtgui_app *app); +/* get the topwin belong app window activate count */ +unsigned int rtgui_app_get_win_acti_cnt(void); + #ifdef __cplusplus } #endif diff --git a/components/gui/include/rtgui/widgets/window.h b/components/gui/include/rtgui/widgets/window.h index d9a0d2447b..1ef59a3d44 100644 --- a/components/gui/include/rtgui/widgets/window.h +++ b/components/gui/include/rtgui/widgets/window.h @@ -54,6 +54,8 @@ DECLARE_CLASS_TYPE(win); #define RTGUI_WIN_STYLE_ONBTM 0x0080 /* window is in the bottom layer */ #define RTGUI_WIN_STYLE_MAINWIN 0x0106 /* window is a main window */ +#define RTGUI_WIN_MAGIC 0xA5A55A5A /* win magic flag */ + #define RTGUI_WIN_STYLE_DEFAULT (RTGUI_WIN_STYLE_CLOSEBOX | RTGUI_WIN_STYLE_MINIBOX) #define WINTITLE_HEIGHT 20 @@ -88,8 +90,8 @@ struct rtgui_win /* inherit from container */ rtgui_container_t parent; - /* update count */ - rt_base_t update; + /* update count */ + rt_base_t update; /* drawing count */ rt_base_t drawing; @@ -140,11 +142,12 @@ struct rtgui_win /* Private data. */ rt_base_t (*_do_show)(struct rtgui_win *win); - - /* app ref_count */ - rt_uint16_t app_ref_count; - /* win magic flag, magic value is 0xA5A55A5A */ - rt_uint32_t magic; + + /* app ref_count */ + rt_uint16_t app_ref_count; + + /* win magic flag, magic value is 0xA5A55A5A */ + rt_uint32_t magic; }; rtgui_win_t *rtgui_win_create(struct rtgui_win *parent_window, const char *title, diff --git a/components/gui/src/dc.c b/components/gui/src/dc.c index 004195a43f..849f05bb28 100644 --- a/components/gui/src/dc.c +++ b/components/gui/src/dc.c @@ -324,9 +324,9 @@ void rtgui_dc_draw_text(struct rtgui_dc *dc, const char *text, struct rtgui_rect } len = strlen((const char *)text); - if (len == 0) - return; - + if (len == 0) + return; + rtgui_font_draw(font, dc, text, len, rect); } RTM_EXPORT(rtgui_dc_draw_text); @@ -1689,6 +1689,13 @@ void rtgui_dc_get_rect(struct rtgui_dc *dc, rtgui_rect_t *rect) dc_hw = (struct rtgui_dc_hw *) dc; owner = dc_hw->owner; rtgui_widget_get_rect(owner, rect); + + if (owner->extent.x1 + rect->x2 > dc_hw->hw_driver->width) + rect->x2 = dc_hw->hw_driver->width - owner->extent.x1; + + if (owner->extent.y1 + rect->y2 > dc_hw->hw_driver->height) + rect->y2 = dc_hw->hw_driver->height - owner->extent.y1; + break; } case RTGUI_DC_BUFFER: @@ -1806,7 +1813,7 @@ extern void rtgui_mouse_hide_cursor(void); struct rtgui_dc *rtgui_dc_begin_drawing(rtgui_widget_t *owner) { struct rtgui_dc *dc; - struct rtgui_widget *widget; + struct rtgui_widget *widget, *parent; struct rtgui_win *win; RT_ASSERT(owner != RT_NULL); @@ -1815,11 +1822,18 @@ struct rtgui_dc *rtgui_dc_begin_drawing(rtgui_widget_t *owner) if (win == RT_NULL) return RT_NULL; + parent = (struct rtgui_widget *)win; + if (!(win->flag & RTGUI_WIN_FLAG_ACTIVATE) && (win->outer_clip.extents.x1 == win->outer_clip.extents.x2 || win->outer_clip.extents.y1 == win->outer_clip.extents.y2)) return RT_NULL; + if (!(win->flag & RTGUI_WIN_FLAG_ACTIVATE) && + (parent->clip.extents.x1 == parent->clip.extents.x2 || + parent->clip.extents.y1 == parent->clip.extents.y2)) + return RT_NULL; + /* increase drawing count */ if (win->drawing == 0) { diff --git a/components/gui/src/dc_hw.c b/components/gui/src/dc_hw.c index 2af8ae94cf..dfed6f8e9f 100644 --- a/components/gui/src/dc_hw.c +++ b/components/gui/src/dc_hw.c @@ -216,32 +216,22 @@ static void rtgui_dc_hw_fill_rect(struct rtgui_dc *self, struct rtgui_rect *rect return; if (x1 < dc->owner->extent.x1) x1 = dc->owner->extent.x1; - if (x1 < 0) - x1 = 0; - x2 = rect->x2 + dc->owner->extent.x1; if (x2 < dc->owner->extent.x1) return; if (x2 > dc->owner->extent.x2) x2 = dc->owner->extent.x2; - if (x2 > dc->hw_driver->width) - x2 = dc->hw_driver->width; y1 = rect->y1 + dc->owner->extent.y1; if (y1 > dc->owner->extent.y2) return; if (y1 < dc->owner->extent.y1) y1 = dc->owner->extent.y1; - if (y1 < 0) - y1 = 0; - y2 = rect->y2 + dc->owner->extent.y1; if (y2 < dc->owner->extent.y1) return; if (y2 > dc->owner->extent.y2) y2 = dc->owner->extent.y2; - if (y2 > dc->hw_driver->height) - y2 = dc->hw_driver->height; /* fill rect */ for (; y1 < y2; y1++) diff --git a/components/gui/src/font_bmp.c b/components/gui/src/font_bmp.c index 1aba5c34b4..52e12c81a5 100644 --- a/components/gui/src/font_bmp.c +++ b/components/gui/src/font_bmp.c @@ -103,7 +103,7 @@ static void rtgui_bitmap_font_draw_text(struct rtgui_font *font, struct rtgui_dc RT_ASSERT(bmp_font != RT_NULL); - rtgui_font_get_metrics(rtgui_dc_get_gc(dc)->font, text, &text_rect); + rtgui_font_get_metrics(font, text, &text_rect); rtgui_rect_move_to_align(rect, &text_rect, RTGUI_DC_TEXTALIGN(dc)); /* parameter check */ diff --git a/components/gui/src/font_freetype.c b/components/gui/src/font_freetype.c index c4f5993791..0ec954945e 100644 --- a/components/gui/src/font_freetype.c +++ b/components/gui/src/font_freetype.c @@ -275,12 +275,12 @@ static void _rtgui_rect_move_to_align(const rtgui_rect_t *rect, rtgui_rect_t *to to->x1 += dw; to->x2 += dw; } - /* align to center horizontal */ - else if (align & RTGUI_ALIGN_CENTER_HORIZONTAL) - { - to->x1 += dw >> 1; - to->x2 += dw >> 1; - } + /* align to center horizontal */ + else if (align & RTGUI_ALIGN_CENTER_HORIZONTAL) + { + to->x1 += dw >> 1; + to->x2 += dw >> 1; + } /* align to bottom */ if (align & RTGUI_ALIGN_BOTTOM) @@ -393,7 +393,7 @@ static void _get_metrics(struct rtgui_ttf_font *ttf_font, const rt_uint16_t *tex static void _draw_bitmap(struct rtgui_dc *dc, FTC_SBit bitmap, rt_int16_t ox, rt_int16_t btm_y, - rt_uint8_t a, rt_uint8_t r, rt_uint8_t g, rt_uint8_t b) + rtgui_color_t fgc, rt_uint16_t right, rt_uint16_t bottom) { rt_int16_t x_start, y_start; struct rtgui_blit_info info = { 0 }; @@ -403,10 +403,12 @@ static void _draw_bitmap(struct rtgui_dc *dc, x_start = ox + bitmap->left; y_start = btm_y - bitmap->top; - info.a = a; - info.r = r; - info.g = g; - info.b = b; + PINFO(" draw bitmap (x, y) -> (%d, %d)\n", x_start, y_start); + + info.a = RTGUI_RGB_A(fgc); + info.r = RTGUI_RGB_R(fgc); + info.g = RTGUI_RGB_G(fgc); + info.b = RTGUI_RGB_B(fgc); if (dc->type == RTGUI_DC_HW) { @@ -444,18 +446,22 @@ static void _draw_bitmap(struct rtgui_dc *dc, } else if (dc->type == RTGUI_DC_BUFFER) { + int max_right, max_bottom; + dest_buf = (struct rtgui_dc_buffer*)dc; + max_right = right > dest_buf->width ? dest_buf->width : right; + max_bottom = bottom > dest_buf->height ? dest_buf->height : bottom; if (x_start + bitmap->width < 0 || y_start + bitmap->height < 0 - || x_start > dest_buf->width || y_start > dest_buf->height) + || x_start > max_right || y_start > max_bottom) return; /* blit source */ info.src = (rt_uint8_t *)bitmap->buffer; info.src = info.src + (y_start > 0 ? 0 : -y_start) * bitmap->width + (x_start > 0 ? 0 : -x_start); info.src_fmt = RTGRAPHIC_PIXEL_FORMAT_ALPHA; - info.src_w = bitmap->width - (x_start > 0 ? 0 : -x_start) - (x_start + bitmap->width < dest_buf->width ? 0 : x_start + bitmap->width - dest_buf->width); - info.src_h = bitmap->height - (y_start > 0 ? 0 : -y_start) - (y_start + bitmap->height < dest_buf->height ? 0 : y_start + bitmap->height - dest_buf->height); + info.src_w = bitmap->width - (x_start > 0 ? 0 : -x_start) - (x_start + bitmap->width < max_right ? 0 : x_start + bitmap->width - max_right); + info.src_h = bitmap->height - (y_start > 0 ? 0 : -y_start) - (y_start + bitmap->height < max_bottom ? 0 : y_start + bitmap->height - max_bottom); info.src_pitch = bitmap->width; info.src_skip = info.src_pitch - info.src_w; @@ -473,7 +479,13 @@ static void _draw_bitmap(struct rtgui_dc *dc, { struct rtgui_rect text_rect; struct rtgui_point dc_point = { 0, 0 }; - struct rtgui_dc *text_dc = rtgui_dc_buffer_create_pixformat(RTGRAPHIC_PIXEL_FORMAT_ARGB888, bitmap->width, bitmap->height); + struct rtgui_dc *text_dc; + + if (x_start + bitmap->width < 0 || y_start + bitmap->height < 0 + || x_start > right || y_start > bottom) + return; + + text_dc = rtgui_dc_buffer_create_pixformat(RTGRAPHIC_PIXEL_FORMAT_ARGB888, bitmap->width, bitmap->height); if (text_dc) { dest_buf = (struct rtgui_dc_buffer*)text_dc; @@ -503,7 +515,7 @@ static void _draw_bitmap(struct rtgui_dc *dc, text_rect.y1 = y_start; text_rect.y2 = text_rect.y1 + bitmap->height; - rtgui_dc_buffer_set_alpha(text_dc, a); + rtgui_dc_buffer_set_alpha(text_dc, RTGUI_RGB_A(fgc)); rtgui_dc_blit(text_dc, &dc_point, dc, &text_rect); rtgui_dc_destory(text_dc); @@ -515,7 +527,7 @@ static void _draw_text(struct rtgui_dc *dc, struct rtgui_ttf_font *ttf_font, rt_uint16_t *text_short, rt_int16_t begin_x, rt_int16_t btm_y, - rt_uint8_t a, rt_uint8_t r, rt_uint8_t g, rt_uint8_t b) + rtgui_color_t fgc, rt_uint16_t right, rt_uint16_t bottom) { int glyphIndex; FTC_SBit ftcSBit = RT_NULL; @@ -531,7 +543,7 @@ static void _draw_text(struct rtgui_dc *dc, /* render font */ begin_x -= (ftcSBit->left - (abs(ftcSBit->left) + 2) / 2); - _draw_bitmap(dc, ftcSBit, begin_x, btm_y, a, r, g, b); + _draw_bitmap(dc, ftcSBit, begin_x, btm_y, fgc, right, bottom); begin_x += ftcSBit->width + ftcSBit->left; @@ -594,10 +606,6 @@ static void ftc_draw_text(struct rtgui_font *font, #endif fgc = RTGUI_DC_FC(dc); - a = RTGUI_RGB_A(fgc); - r = RTGUI_RGB_R(fgc); - g = RTGUI_RGB_G(fgc); - b = RTGUI_RGB_B(fgc); /* text align */ _get_metrics(ttf_font, text_short, &text_rect); @@ -633,7 +641,7 @@ static void ftc_draw_text(struct rtgui_font *font, goto _out; } - _draw_text(dc, ttf_font, text_short, begin_x, btm_y, a, r, g, b); + _draw_text(dc, ttf_font, text_short, begin_x, btm_y, fgc, rect->x2, rect->y2); _out: /* release unicode buffer */ @@ -698,9 +706,9 @@ static void ftc_get_metrics(struct rtgui_font *font, const char *text, struct rt RT_ASSERT(ttf_font != RT_NULL); len = strlen(text); - if (len == 0) - return; - + if (len == 0) + return; + memset(rect, 0, sizeof(struct rtgui_rect)); /* allocate unicode buffer */ @@ -717,7 +725,7 @@ static void ftc_get_metrics(struct rtgui_font *font, const char *text, struct rt #else rt_memset(text_short, 0x00, (utf8_to_unicode_len(text, len) + 1) * 2); #endif - + /* convert gbk to unicode */ #ifndef UTF8_TO_UNICODE gbk_to_unicode(text_short, text, len); @@ -775,7 +783,7 @@ static struct rtgui_ttf *rtgui_ttf_load(const char *filename) return RT_NULL; } } - + /* face_id init */ ttf->face_id.pathname = rt_strdup(filename); ttf->face_id.face_index = 0; @@ -847,11 +855,11 @@ rtgui_font_t *rtgui_freetype_font_create(const char *filename, rt_size_t size) font = rtgui_font_refer(filename, size); if (font) { - if (font->height == size) - return font; - else - rtgui_font_derefer(font); - } + if (font->height == size) + return font; + else + rtgui_font_derefer(font); + } } font = (struct rtgui_font *)rtgui_malloc(sizeof(struct rtgui_font) + sizeof(struct rtgui_ttf_font)); diff --git a/components/gui/src/rtgui_app.c b/components/gui/src/rtgui_app.c index 9878ff4ea7..c7210c12c4 100644 --- a/components/gui/src/rtgui_app.c +++ b/components/gui/src/rtgui_app.c @@ -29,7 +29,7 @@ #include #include #include -#include "topwin.h" +#include static void _rtgui_app_constructor(struct rtgui_app *app) { @@ -43,6 +43,7 @@ static void _rtgui_app_constructor(struct rtgui_app *app) app->state_flag = RTGUI_APP_FLAG_EXITED; app->ref_count = 0; app->window_cnt = 0; + app->win_acti_cnt = 0; app->exit_code = 0; app->tid = RT_NULL; app->mq = RT_NULL; @@ -203,11 +204,11 @@ rt_inline rt_bool_t _rtgui_application_dest_handle( if (wevent->wid == RT_NULL) return RT_FALSE; - - if (wevent->wid->magic != 0xA5A55A5A) - { - return RT_FALSE; - } + + if (wevent->wid->magic != RTGUI_WIN_MAGIC) + { + return RT_FALSE; + } /* this window has been closed. */ if (wevent->wid != RT_NULL && wevent->wid->flag & RTGUI_WIN_FLAG_CLOSED) @@ -249,19 +250,55 @@ rt_bool_t rtgui_app_event_handler(struct rtgui_object *object, rtgui_event_t *ev switch (event->type) { - case RTGUI_EVENT_PAINT: - case RTGUI_EVENT_VPAINT_REQ: + case RTGUI_EVENT_KBD: + { + struct rtgui_event_kbd *kbd = (struct rtgui_event_kbd*)event; + + if (kbd->win_acti_cnt != app->win_acti_cnt) + break; + + _rtgui_application_dest_handle(app, event); + } + break; + case RTGUI_EVENT_MOUSE_BUTTON: case RTGUI_EVENT_MOUSE_MOTION: - case RTGUI_EVENT_CLIP_INFO: + { + struct rtgui_event_mouse *wevent = (struct rtgui_event_mouse *)event; + + if (wevent->win_acti_cnt != app->win_acti_cnt) + break; + + _rtgui_application_dest_handle(app, event); + } + break; + + case RTGUI_EVENT_GESTURE: + { + struct rtgui_event_gesture *wevent = (struct rtgui_event_gesture *)event; + + if (wevent->win_acti_cnt != app->win_acti_cnt) + break; + + _rtgui_application_dest_handle(app, event); + } + break; + case RTGUI_EVENT_WIN_ACTIVATE: + { + app->win_acti_cnt++; + _rtgui_application_dest_handle(app, event); + } + break; + + case RTGUI_EVENT_PAINT: + case RTGUI_EVENT_VPAINT_REQ: + case RTGUI_EVENT_CLIP_INFO: case RTGUI_EVENT_WIN_DEACTIVATE: case RTGUI_EVENT_WIN_CLOSE: case RTGUI_EVENT_WIN_MOVE: case RTGUI_EVENT_WIN_SHOW: case RTGUI_EVENT_WIN_HIDE: - case RTGUI_EVENT_KBD: - case RTGUI_EVENT_GESTURE: _rtgui_application_dest_handle(app, event); break; @@ -284,14 +321,14 @@ rt_bool_t rtgui_app_event_handler(struct rtgui_object *object, rtgui_event_t *ev case RTGUI_EVENT_TIMER: { - rt_base_t level; + rt_base_t level; struct rtgui_timer *timer; struct rtgui_event_timer *etimer = (struct rtgui_event_timer *) event; timer = etimer->timer; - level = rt_hw_interrupt_disable(); + level = rt_hw_interrupt_disable(); timer->pending_cnt--; - rt_hw_interrupt_enable(level); + rt_hw_interrupt_enable(level); RT_ASSERT(timer->pending_cnt >= 0); if (timer->state == RTGUI_TIMER_ST_DESTROY_PENDING) { @@ -320,21 +357,21 @@ rt_bool_t rtgui_app_event_handler(struct rtgui_object *object, rtgui_event_t *ev if (ecmd->wid != RT_NULL) return _rtgui_application_dest_handle(app, event); - else - { - struct rtgui_topwin *wnd; + else + { + struct rtgui_topwin *wnd; - wnd = rtgui_topwin_get_focus(); - if (wnd != RT_NULL) - { - RT_ASSERT(wnd->flag & WINTITLE_ACTIVATE) + wnd = rtgui_topwin_get_focus(); + if (wnd != RT_NULL) + { + RT_ASSERT(wnd->flag & WINTITLE_ACTIVATE) - /* send to focus window */ - ecmd->wid = wnd->wid; + /* send to focus window */ + ecmd->wid = wnd->wid; - return _rtgui_application_dest_handle(app, event); - } - } + return _rtgui_application_dest_handle(app, event); + } + } } default: return rtgui_object_event_handler(object, event); @@ -507,3 +544,16 @@ struct rtgui_win *rtgui_app_get_main_win(struct rtgui_app *app) } RTM_EXPORT(rtgui_app_get_main_win); +unsigned int rtgui_app_get_win_acti_cnt(void) +{ + struct rtgui_app *app = rtgui_topwin_app_get_focus(); + + if (app) + { + return app->win_acti_cnt; + } + + return 0; +} +RTM_EXPORT(rtgui_app_get_win_acti_cnt); + diff --git a/components/gui/src/topwin.c b/components/gui/src/topwin.c index fe379be60b..91719e0c99 100644 --- a/components/gui/src/topwin.c +++ b/components/gui/src/topwin.c @@ -764,7 +764,7 @@ rt_err_t rtgui_topwin_move(struct rtgui_event_win_move *event) old_rect = topwin->extent; /* move window rect */ - rtgui_rect_move(&(topwin->extent), dx, dy); + rtgui_rect_move(&(topwin->extent), dx, dy); /* move the monitor rect list */ rtgui_list_foreach(node, &(topwin->monitor_list)) @@ -772,7 +772,7 @@ rt_err_t rtgui_topwin_move(struct rtgui_event_win_move *event) struct rtgui_mouse_monitor *monitor = rtgui_list_entry(node, struct rtgui_mouse_monitor, list); - rtgui_rect_move(&(monitor->rect), dx, dy); + rtgui_rect_move(&(monitor->rect), dx, dy); } /* update windows clip info */ @@ -853,6 +853,19 @@ struct rtgui_topwin *rtgui_topwin_get_focus(void) return _rtgui_topwin_get_focus_from_list(&_rtgui_topwin_list); } +struct rtgui_app *rtgui_topwin_app_get_focus(void) +{ + struct rtgui_app *topwin_app = RT_NULL; + struct rtgui_topwin *topwin = rtgui_topwin_get_focus(); + + if (topwin) + { + topwin_app = topwin->app; + } + + return topwin_app; +} + static struct rtgui_topwin *_rtgui_topwin_get_wnd_from_tree(struct rt_list_node *list, int x, int y, rt_bool_t exclude_modaled) @@ -978,7 +991,8 @@ static void _rtgui_topwin_redraw_tree(struct rt_list_node *list, if (rtgui_rect_is_intersect(rect, &(topwin->extent)) == RT_EOK) { epaint->wid = topwin->wid; - rtgui_send(topwin->app, &(epaint->parent), sizeof(*epaint)); + // < XY do !!! > + //rtgui_send(topwin->app, &(epaint->parent), sizeof(*epaint)); } _rtgui_topwin_redraw_tree(&topwin->child_list, rect, epaint); @@ -1026,7 +1040,8 @@ rt_err_t rtgui_topwin_modal_enter(struct rtgui_event_win_modal_enter *event) parent_top->flag |= WINTITLE_MODALED; parent_top->wid->flag |= RTGUI_WIN_FLAG_UNDER_MODAL; parent_top = parent_top->parent; - } while (parent_top); + } + while (parent_top); topwin->flag &= ~WINTITLE_MODALED; topwin->wid->flag &= ~RTGUI_WIN_FLAG_UNDER_MODAL; diff --git a/components/gui/src/topwin.h b/components/gui/src/topwin.h index 35376f889b..1aa3a73141 100644 --- a/components/gui/src/topwin.h +++ b/components/gui/src/topwin.h @@ -64,6 +64,9 @@ void rtgui_topwin_remove_monitor_rect(struct rtgui_win *wid, rtgui_rect_t *rect) /* get the topwin that is currently focused */ struct rtgui_topwin *rtgui_topwin_get_focus(void); +/* get the topwin which app I belong */ +struct rtgui_app *rtgui_topwin_app_get_focus(void); + struct rtgui_topwin *rtgui_topwin_get_topmost_window_shown_all(void); #endif diff --git a/components/gui/src/window.c b/components/gui/src/window.c index 2fe8ae8777..894203e337 100644 --- a/components/gui/src/window.c +++ b/components/gui/src/window.c @@ -41,7 +41,7 @@ static void _rtgui_win_constructor(rtgui_win_t *win) RTGUI_WIDGET(win)->toplevel = win; /* init win property */ - win->update = 0; + win->update = 0; win->drawing = 0; RTGUI_WIDGET(win)->flag |= RTGUI_WIDGET_FLAG_FOCUSABLE; @@ -440,7 +440,7 @@ rt_base_t rtgui_win_show(struct rtgui_win *win, rt_bool_t is_modal) { RTGUI_WIDGET_UNHIDE(win); - win->magic = 0xA5A55A5A; + win->magic = RTGUI_WIN_MAGIC; if (is_modal) win->flag |= RTGUI_WIN_FLAG_MODAL; @@ -548,7 +548,7 @@ void rtgui_win_move(struct rtgui_win *win, int x, int y) dy = y - wgt->extent.y1; rtgui_widget_move_to_logic(wgt, dx, dy); } - rtgui_rect_move(&win->outer_extent, dx, dy); + rtgui_rect_move(&win->outer_extent, dx, dy); if (win->flag & RTGUI_WIN_FLAG_CONNECTED) {