diff options
-rw-r--r-- | apps/examples/nxtext/nxtext_bkgd.c | 55 | ||||
-rw-r--r-- | apps/examples/nxtext/nxtext_internal.h | 1 | ||||
-rw-r--r-- | apps/examples/nxtext/nxtext_popup.c | 15 | ||||
-rw-r--r-- | nuttx/ChangeLog | 3 | ||||
-rw-r--r-- | nuttx/TODO | 6 | ||||
-rw-r--r-- | nuttx/graphics/nxbe/nxbe_closewindow.c | 9 |
6 files changed, 38 insertions, 51 deletions
diff --git a/apps/examples/nxtext/nxtext_bkgd.c b/apps/examples/nxtext/nxtext_bkgd.c index d75dfae04..d94f19dc1 100644 --- a/apps/examples/nxtext/nxtext_bkgd.c +++ b/apps/examples/nxtext/nxtext_bkgd.c @@ -116,6 +116,31 @@ NXHANDLE g_bgwnd; ****************************************************************************/ /**************************************************************************** + * Name: nxbg_redrawrect + ****************************************************************************/ + +static void nxbg_redrawrect(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect) +{ + int ret; + int i; + + ret = nx_fill(hwnd, rect, g_bgstate.wcolor); + if (ret < 0) + { + message("nxbg_redrawrect: nx_fill failed: %d\n", errno); + } + + /* Fill each character on the display (Only the characters within rect + * will actually be redrawn). + */ + + for (i = 0; i < g_bgstate.nchars; i++) + { + nxtext_fillchar(hwnd, rect, &g_bgstate, &g_bgstate.bm[i]); + } +} + +/**************************************************************************** * Name: nxbg_redraw ****************************************************************************/ @@ -290,7 +315,7 @@ static inline void nxbg_movedisplay(NXWINDOW hwnd, int bottom, int lineheight) ret = nx_move(hwnd, &rect, &offset); if (ret < 0) { - message("nxbg_redrawrect: nx_move failed: %d\n", errno); + message("nxbg_movedisplay: nx_move failed: %d\n", errno); } } #endif @@ -440,31 +465,3 @@ void nxbg_write(NXWINDOW hwnd, FAR const uint8_t *buffer, size_t buflen) nxtext_putc(hwnd, &g_bgstate, (uint8_t)*buffer++); } } - -/**************************************************************************** - * Name: nxbg_redrawrect - ****************************************************************************/ - -void nxbg_redrawrect(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect) -{ - int ret; - int i; - - ret = nx_fill(hwnd, rect, g_bgstate.wcolor); - if (ret < 0) - { - message("nxbg_redrawrect: nx_fill failed: %d\n", errno); - } - - /* Fill each character on the display (Only the characters within rect - * will actually be redrawn). - */ - - for (i = 0; i < g_bgstate.nchars; i++) - { - nxtext_fillchar(hwnd, rect, &g_bgstate, &g_bgstate.bm[i]); - } -} - - - diff --git a/apps/examples/nxtext/nxtext_internal.h b/apps/examples/nxtext/nxtext_internal.h index 3bcbb1aa1..b9c2b8d64 100644 --- a/apps/examples/nxtext/nxtext_internal.h +++ b/apps/examples/nxtext/nxtext_internal.h @@ -295,7 +295,6 @@ extern FAR void *nxtext_listener(FAR void *arg); extern FAR struct nxtext_state_s *nxbg_getstate(void); extern void nxbg_write(NXWINDOW hwnd, FAR const uint8_t *buffer, size_t buflen); -extern void nxbg_redrawrect(NXWINDOW hwnd, FAR const struct nxgl_rect_s *rect); /* Pop-up window interfaces */ diff --git a/apps/examples/nxtext/nxtext_popup.c b/apps/examples/nxtext/nxtext_popup.c index 6397961f7..33170019f 100644 --- a/apps/examples/nxtext/nxtext_popup.c +++ b/apps/examples/nxtext/nxtext_popup.c @@ -395,7 +395,6 @@ errout_with_state: int nxpu_close(NXWINDOW hwnd) { - struct nxgl_rect_s rect; int ret; ret = nx_closewindow(hwnd); @@ -405,19 +404,5 @@ int nxpu_close(NXWINDOW hwnd) g_exitcode = NXEXIT_NXCLOSEWINDOW; return ret; } - - /* NOTE: The following should not be necessary. This is - * a temporary workaround for a bug in the TODO list: - * "When a window is closed, the display is not updated." - */ - - rect.pt1.x = g_pustate.wpos.x; - rect.pt1.y = g_pustate.wpos.y; - rect.pt2.x = g_pustate.wpos.x + g_pustate.wsize.w - 1; - rect.pt2.y = g_pustate.wpos.y + g_pustate.wsize.h - 1; - gvdbg("pt1(%d,%d) pt2(%d,%d)\n", - rect.pt1.x, rect.pt1.y, rect.pt2.x, rect.pt2.y); - - nxbg_redrawrect(g_bgwnd, &rect); return OK; } diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog index a933a0503..fb04124e0 100644 --- a/nuttx/ChangeLog +++ b/nuttx/ChangeLog @@ -1892,3 +1892,6 @@ * graphics/nxbe/nxbe_move.c: Fixed an error in the graphics move logic (This was a previously untested interface). Basically, there is some confusion between use of (x,y) as a relative offset or as an absolute position. + * graphics/nxbe/nxbe_close.c: Fixed an important graphics system bug: + When a window is closed, the display was not being updated. The old + window graphic was left on the display for a time. diff --git a/nuttx/TODO b/nuttx/TODO index 0ac42b5f4..a2f1eb1f8 100644 --- a/nuttx/TODO +++ b/nuttx/TODO @@ -14,7 +14,7 @@ nuttx/ (2) USB (drivers/usbdev, drivers/usbhost) (6) Libraries (lib/) (13) File system/Generic drivers (fs/, drivers/) - (2) Graphics subystem (graphics/) + (1) Graphics subystem (graphics/) (1) Pascal add-on (pcode/) (1) Documentation (Documentation/) (4) Build system / Toolchains @@ -484,10 +484,6 @@ o Graphics subystem (graphics/) Status: Open Priority: Medium - Description: When a window is closed, the display is not updated. - Status: Open - Priority: High - o Pascal Add-On (pcode/) ^^^^^^^^^^^^^^^^^^^^^^ diff --git a/nuttx/graphics/nxbe/nxbe_closewindow.c b/nuttx/graphics/nxbe/nxbe_closewindow.c index 7e7e3f45e..ea87a97a4 100644 --- a/nuttx/graphics/nxbe/nxbe_closewindow.c +++ b/nuttx/graphics/nxbe/nxbe_closewindow.c @@ -104,7 +104,7 @@ void nxbe_closewindow(struct nxbe_window_s *wnd) if (wnd->above) { - /* Yes, now the window below that on is the window below + /* Yes, now the window below that one is the window below * the one being closed. */ @@ -126,5 +126,12 @@ void nxbe_closewindow(struct nxbe_window_s *wnd) */ wnd->below->above = wnd->above; + + /* Redraw the windows that were below us (and may now be exposed) */ + + nxbe_redrawbelow(be, wnd->below, &wnd->bounds); + + /* Then discard the window structure */ + free(wnd); } |