From 094e823e0a5dec382a43b9d93c3611cca09c9414 Mon Sep 17 00:00:00 2001 From: xianjimli Date: Wed, 21 Nov 2018 18:13:41 +0800 Subject: [PATCH] fix dirty rect when show_fps --- demos/assets.c | 16 ++++++++-------- src/base/canvas.c | 5 ++--- src/base/window_manager.c | 24 ++++++++++++++---------- 3 files changed, 24 insertions(+), 21 deletions(-) diff --git a/demos/assets.c b/demos/assets.c index 047f0a897..f6e49b5dd 100644 --- a/demos/assets.c +++ b/demos/assets.c @@ -281,7 +281,7 @@ #include "assets/inc/images/3.data" #include "assets/inc/images/arrow_left_n.data" #include "assets/inc/images/edit_clear_p.data" -#endif/*WITH_STB_IMAGE*/ +#endif /*WITH_STB_IMAGE*/ #ifdef WITH_VGCANVAS #include "assets/inc/images/pointer_4.bsvg" #include "assets/inc/images/pointer_2.bsvg" @@ -294,17 +294,17 @@ #include "assets/inc/images/pointer_red.bsvg" #include "assets/inc/images/pointer_big.bsvg" #include "assets/inc/images/girl.bsvg" -#endif/*WITH_VGCANVAS*/ +#endif /*WITH_VGCANVAS*/ #ifdef WITH_STB_FONT #ifdef WITH_MINI_FONT #include "assets/inc/fonts/default.mini.res" -#else/*WITH_MINI_FONT*/ +#else /*WITH_MINI_FONT*/ #include "assets/inc/fonts/default.res" -#endif/*WITH_MINI_FONT*/ -#else/*WITH_STB_FONT*/ +#endif /*WITH_MINI_FONT*/ +#else /*WITH_STB_FONT*/ #include "assets/inc/fonts/default.data" -#endif/*WITH_STB_FONT*/ -#endif/*WITH_FS_RES*/ +#endif /*WITH_STB_FONT*/ +#endif /*WITH_FS_RES*/ ret_t assets_init(void) { assets_manager_t* rm = assets_manager(); @@ -508,7 +508,7 @@ ret_t assets_init(void) { assets_manager_add(rm, image_pointer_red); assets_manager_add(rm, image_pointer_big); assets_manager_add(rm, image_girl); -#endif/*WITH_VGCANVAS*/ +#endif /*WITH_VGCANVAS*/ #endif tk_init_assets(); diff --git a/src/base/canvas.c b/src/base/canvas.c index 4e1828136..46c00c272 100644 --- a/src/base/canvas.c +++ b/src/base/canvas.c @@ -1152,21 +1152,20 @@ ret_t canvas_set_fps(canvas_t* c, bool_t show_fps, uint32_t fps) { static ret_t canvas_draw_fps(canvas_t* c) { lcd_t* lcd = c->lcd; - if (c->show_fps && c->lcd->draw_mode != LCD_DRAW_OFFLINE) { + if (c->show_fps && c->lcd->draw_mode == LCD_DRAW_NORMAL) { rect_t r; char fps[20]; wchar_t wfps[20]; r = rect_init(0, 0, 60, 30); canvas_set_font(c, NULL, 16); - canvas_set_clip_rect(c, NULL); canvas_set_text_color(c, color_init(0xf0, 0xf0, 0xf0, 0xff)); canvas_set_fill_color(c, color_init(0x20, 0x20, 0x20, 0xff)); lcd->fps_rect = r; tk_snprintf(fps, sizeof(fps), "%dfps", (int)(c->fps)); - utf8_to_utf16(fps, wfps, strlen(fps) + 1); + utf8_to_utf16(fps, wfps, strlen(fps) + 1); canvas_fill_rect(c, r.x, r.y, r.w, r.h); canvas_draw_text(c, wfps, wcslen(wfps), r.x + 8, r.y + 8); } else { diff --git a/src/base/window_manager.c b/src/base/window_manager.c index cdce690c2..babd28aea 100644 --- a/src/base/window_manager.c +++ b/src/base/window_manager.c @@ -272,10 +272,11 @@ static ret_t window_manager_paint_cursor(widget_t* widget, canvas_t* c) { bitmap_t bitmap; window_manager_t* wm = WINDOW_MANAGER(widget); - return_value_if_fail(image_manager_load(image_manager(), wm->cursor, &bitmap) == RET_OK, - RET_BAD_PARAMS); - - canvas_draw_icon(c, &bitmap, wm->r_cursor.x, wm->r_cursor.y); + if (wm->cursor != NULL) { + return_value_if_fail(image_manager_load(image_manager(), wm->cursor, &bitmap) == RET_OK, + RET_BAD_PARAMS); + canvas_draw_icon(c, &bitmap, wm->r_cursor.x, wm->r_cursor.y); + } return RET_OK; } @@ -313,23 +314,26 @@ static ret_t window_manager_paint_normal(widget_t* widget, canvas_t* c) { window_manager_inc_fps(widget); - if ((dr->w && dr->h) || wm->show_fps) { + if (wm->show_fps) { + rect_t fps_rect = rect_init(0, 0, 60, 30); + widget_invalidate(widget, &fps_rect); + } + + if (dr->w && dr->h) { uint32_t start_time = time_now_ms(); rect_t r = window_manager_calc_dirty_rect(wm); - if ((r.w > 0 && r.h > 0) || wm->show_fps) { + if (r.w > 0 && r.h > 0) { ENSURE(canvas_begin_frame(c, &r, LCD_DRAW_NORMAL) == RET_OK); ENSURE(widget_paint(WIDGET(wm), c) == RET_OK); - if (wm->cursor != NULL) { - window_manager_paint_cursor(widget, c); - } + window_manager_paint_cursor(widget, c); ENSURE(canvas_end_frame(c) == RET_OK); wm->last_paint_cost = time_now_ms() - start_time; + wm->last_dirty_rect = wm->dirty_rect; /* log_debug("%s x=%d y=%d w=%d h=%d cost=%d\n", __FUNCTION__, (int)(r.x), (int)(r.y), (int)(r.w), (int)(r.h), (int)wm->last_paint_cost); */ - wm->last_dirty_rect = wm->dirty_rect; } }