Correct an NX error that would leave stuff on the display when a window is closed

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3769 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2011-07-11 13:30:47 +00:00
parent 1936763df6
commit 51242e039f
3 changed files with 26 additions and 45 deletions

View File

@ -115,6 +115,31 @@ NXHANDLE g_bgwnd;
* Private Functions
****************************************************************************/
/****************************************************************************
* 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]);
}
}

View File

@ -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 */

View File

@ -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;
}