forked from len0rd/rockbox
fix FS#10870 - slightly change the viewportmanager theme undo-er to be able to force an update even if the theme isnt being toggled from off to on which caused WPS artifacts when leaving the WPS if the theme was enabled
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24087 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
88ae46cc88
commit
9d1832cfba
13 changed files with 72 additions and 64 deletions
|
|
@ -2665,7 +2665,7 @@ static int menu_action_callback(int btn, struct gui_synclist *lists)
|
||||||
menuitems[gui_synclist_get_sel_pos(lists)].function();
|
menuitems[gui_synclist_get_sel_pos(lists)].function();
|
||||||
btn = ACTION_REDRAW;
|
btn = ACTION_REDRAW;
|
||||||
FOR_NB_SCREENS(i)
|
FOR_NB_SCREENS(i)
|
||||||
viewportmanager_theme_undo(i);
|
viewportmanager_theme_undo(i, false);
|
||||||
}
|
}
|
||||||
return btn;
|
return btn;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -908,7 +908,7 @@ bool simplelist_show_list(struct simplelist_info *info)
|
||||||
}
|
}
|
||||||
talk_shutup();
|
talk_shutup();
|
||||||
FOR_NB_SCREENS(i)
|
FOR_NB_SCREENS(i)
|
||||||
viewportmanager_theme_undo(i);
|
viewportmanager_theme_undo(i, false);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -212,7 +212,7 @@ void splashf(int ticks, const char *fmt, ...)
|
||||||
if (ticks)
|
if (ticks)
|
||||||
sleep(ticks);
|
sleep(ticks);
|
||||||
FOR_NB_SCREENS(i)
|
FOR_NB_SCREENS(i)
|
||||||
viewportmanager_theme_undo(i);
|
viewportmanager_theme_undo(i, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void splash(int ticks, const char *str)
|
void splash(int ticks, const char *str)
|
||||||
|
|
|
||||||
|
|
@ -320,7 +320,7 @@ void gui_usb_screen_run(void)
|
||||||
screens[i].backlight_on();
|
screens[i].backlight_on();
|
||||||
if(screen_theme_needs_undo[i])
|
if(screen_theme_needs_undo[i])
|
||||||
{
|
{
|
||||||
viewportmanager_theme_undo(i);
|
viewportmanager_theme_undo(i, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ static int theme_stack_top[NB_SCREENS]; /* the last item added */
|
||||||
static struct viewport_stack_item theme_stack[NB_SCREENS][VPSTACK_DEPTH];
|
static struct viewport_stack_item theme_stack[NB_SCREENS][VPSTACK_DEPTH];
|
||||||
static bool is_theme_enabled(enum screen_type screen);
|
static bool is_theme_enabled(enum screen_type screen);
|
||||||
|
|
||||||
static void toggle_theme(void)
|
static void toggle_theme(enum screen_type screen, bool force)
|
||||||
{
|
{
|
||||||
bool enable_event = false;
|
bool enable_event = false;
|
||||||
static bool was_enabled[NB_SCREENS] = {false};
|
static bool was_enabled[NB_SCREENS] = {false};
|
||||||
|
|
@ -91,53 +91,50 @@ static void toggle_theme(void)
|
||||||
|
|
||||||
/* remove the left overs from the previous screen.
|
/* remove the left overs from the previous screen.
|
||||||
* could cause a tiny flicker. Redo your screen code if that happens */
|
* could cause a tiny flicker. Redo your screen code if that happens */
|
||||||
FOR_NB_SCREENS(i)
|
if (!was_enabled[screen] || force)
|
||||||
{
|
{
|
||||||
if (!was_enabled[i])
|
struct viewport deadspace, user;
|
||||||
|
viewport_set_defaults(&user, screen);
|
||||||
|
deadspace = user; /* get colours and everything */
|
||||||
|
/* above */
|
||||||
|
deadspace.x = 0;
|
||||||
|
deadspace.y = 0;
|
||||||
|
deadspace.width = screens[screen].lcdwidth;
|
||||||
|
deadspace.height = user.y;
|
||||||
|
if (deadspace.width && deadspace.height)
|
||||||
{
|
{
|
||||||
struct viewport deadspace, user;
|
screens[screen].set_viewport(&deadspace);
|
||||||
viewport_set_defaults(&user, i);
|
screens[screen].clear_viewport();
|
||||||
deadspace = user; /* get colours and everything */
|
screens[screen].update_viewport();
|
||||||
/* above */
|
}
|
||||||
deadspace.x = 0;
|
/* below */
|
||||||
deadspace.y = 0;
|
deadspace.y = user.y + user.height;
|
||||||
deadspace.width = screens[i].lcdwidth;
|
deadspace.height = screens[screen].lcdheight - deadspace.y;
|
||||||
deadspace.height = user.y;
|
if (deadspace.width && deadspace.height)
|
||||||
if (deadspace.width && deadspace.height)
|
{
|
||||||
{
|
screens[screen].set_viewport(&deadspace);
|
||||||
screens[i].set_viewport(&deadspace);
|
screens[screen].clear_viewport();
|
||||||
screens[i].clear_viewport();
|
screens[screen].update_viewport();
|
||||||
screens[i].update_viewport();
|
}
|
||||||
}
|
/* left */
|
||||||
/* below */
|
deadspace.x = 0;
|
||||||
deadspace.y = user.y + user.height;
|
deadspace.y = 0;
|
||||||
deadspace.height = screens[i].lcdheight - deadspace.y;
|
deadspace.width = user.x;
|
||||||
if (deadspace.width && deadspace.height)
|
deadspace.height = screens[screen].lcdheight;
|
||||||
{
|
if (deadspace.width && deadspace.height)
|
||||||
screens[i].set_viewport(&deadspace);
|
{
|
||||||
screens[i].clear_viewport();
|
screens[screen].set_viewport(&deadspace);
|
||||||
screens[i].update_viewport();
|
screens[screen].clear_viewport();
|
||||||
}
|
screens[screen].update_viewport();
|
||||||
/* left */
|
}
|
||||||
deadspace.x = 0;
|
/* below */
|
||||||
deadspace.y = 0;
|
deadspace.x = user.x + user.width;
|
||||||
deadspace.width = user.x;
|
deadspace.width = screens[screen].lcdwidth - deadspace.x;
|
||||||
deadspace.height = screens[i].lcdheight;
|
if (deadspace.width && deadspace.height)
|
||||||
if (deadspace.width && deadspace.height)
|
{
|
||||||
{
|
screens[screen].set_viewport(&deadspace);
|
||||||
screens[i].set_viewport(&deadspace);
|
screens[screen].clear_viewport();
|
||||||
screens[i].clear_viewport();
|
screens[screen].update_viewport();
|
||||||
screens[i].update_viewport();
|
|
||||||
}
|
|
||||||
/* below */
|
|
||||||
deadspace.x = user.x + user.width;
|
|
||||||
deadspace.width = screens[i].lcdwidth - deadspace.x;
|
|
||||||
if (deadspace.width && deadspace.height)
|
|
||||||
{
|
|
||||||
screens[i].set_viewport(&deadspace);
|
|
||||||
screens[i].clear_viewport();
|
|
||||||
screens[i].update_viewport();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
send_event(GUI_EVENT_ACTIONUPDATE, (void*)1); /* force a redraw */
|
send_event(GUI_EVENT_ACTIONUPDATE, (void*)1); /* force a redraw */
|
||||||
|
|
@ -167,19 +164,19 @@ void viewportmanager_theme_enable(enum screen_type screen, bool enable,
|
||||||
panicf("Stack overflow... viewportmanager");
|
panicf("Stack overflow... viewportmanager");
|
||||||
theme_stack[screen][top].enabled = enable;
|
theme_stack[screen][top].enabled = enable;
|
||||||
theme_stack[screen][top].vp = viewport;
|
theme_stack[screen][top].vp = viewport;
|
||||||
toggle_theme();
|
toggle_theme(screen, false);
|
||||||
/* then be nice and set the viewport up */
|
/* then be nice and set the viewport up */
|
||||||
if (viewport)
|
if (viewport)
|
||||||
viewport_set_defaults(viewport, screen);
|
viewport_set_defaults(viewport, screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
void viewportmanager_theme_undo(enum screen_type screen)
|
void viewportmanager_theme_undo(enum screen_type screen, bool force_redraw)
|
||||||
{
|
{
|
||||||
int top = --theme_stack_top[screen];
|
int top = --theme_stack_top[screen];
|
||||||
if (top < 0)
|
if (top < 0)
|
||||||
panicf("Stack underflow... viewportmanager");
|
panicf("Stack underflow... viewportmanager");
|
||||||
|
|
||||||
toggle_theme();
|
toggle_theme(screen, force_redraw);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -259,7 +256,7 @@ void viewportmanager_theme_changed(const int which)
|
||||||
/* This can probably be done better...
|
/* This can probably be done better...
|
||||||
* disable the theme so it's forced to do a full redraw */
|
* disable the theme so it's forced to do a full redraw */
|
||||||
viewportmanager_theme_enable(i, false, NULL);
|
viewportmanager_theme_enable(i, false, NULL);
|
||||||
viewportmanager_theme_undo(i);
|
viewportmanager_theme_undo(i, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
send_event(GUI_EVENT_THEME_CHANGED, NULL);
|
send_event(GUI_EVENT_THEME_CHANGED, NULL);
|
||||||
|
|
|
||||||
|
|
@ -53,8 +53,10 @@ void viewport_set_fullscreen(struct viewport *vp,
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
void viewportmanager_theme_enable(enum screen_type screen, bool enable,
|
void viewportmanager_theme_enable(enum screen_type screen, bool enable,
|
||||||
struct viewport *viewport);
|
struct viewport *viewport);
|
||||||
|
/* Force will cause a redraw even if the theme was previously and
|
||||||
void viewportmanager_theme_undo(enum screen_type screen);
|
* currently enabled (i,e the undo doing nothing).
|
||||||
|
* Should almost always be set to false except coming out of fully skinned screens */
|
||||||
|
void viewportmanager_theme_undo(enum screen_type screen, bool force_redraw);
|
||||||
|
|
||||||
/* call this when a theme changed */
|
/* call this when a theme changed */
|
||||||
void viewportmanager_theme_changed(const int);
|
void viewportmanager_theme_changed(const int);
|
||||||
|
|
|
||||||
|
|
@ -565,7 +565,16 @@ static void gwps_leave_wps(void)
|
||||||
{
|
{
|
||||||
gui_wps[i].display->stop_scroll();
|
gui_wps[i].display->stop_scroll();
|
||||||
gui_wps[i].display->backdrop_show(BACKDROP_MAIN);
|
gui_wps[i].display->backdrop_show(BACKDROP_MAIN);
|
||||||
viewportmanager_theme_undo(i);
|
|
||||||
|
bool draw = false;
|
||||||
|
#ifdef HAVE_LCD_BITMAP
|
||||||
|
if (gui_wps[i].data->wps_sb_tag)
|
||||||
|
draw = gui_wps[i].data->show_sb_on_wps;
|
||||||
|
else if (statusbar_position(i) != STATUSBAR_OFF)
|
||||||
|
draw = true;
|
||||||
|
#endif
|
||||||
|
viewportmanager_theme_undo(i, draw);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP)
|
#if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP)
|
||||||
|
|
|
||||||
|
|
@ -687,7 +687,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
|
||||||
gui_synclist_get_sel_pos(&lists), menu);
|
gui_synclist_get_sel_pos(&lists), menu);
|
||||||
}
|
}
|
||||||
FOR_NB_SCREENS(i)
|
FOR_NB_SCREENS(i)
|
||||||
viewportmanager_theme_undo(i);
|
viewportmanager_theme_undo(i, false);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -576,7 +576,7 @@ bool eq_menu_graphical(void)
|
||||||
screens[i].setfont(FONT_UI);
|
screens[i].setfont(FONT_UI);
|
||||||
screens[i].clear_display();
|
screens[i].clear_display();
|
||||||
screens[i].set_viewport(NULL);
|
screens[i].set_viewport(NULL);
|
||||||
viewportmanager_theme_undo(i);
|
viewportmanager_theme_undo(i, false);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ static int clear_main_backdrop(void)
|
||||||
backdrop_show(BACKDROP_MAIN);
|
backdrop_show(BACKDROP_MAIN);
|
||||||
/* force a full redraw so the whole backdrop is cleared */
|
/* force a full redraw so the whole backdrop is cleared */
|
||||||
viewportmanager_theme_enable(SCREEN_MAIN, false, NULL);
|
viewportmanager_theme_enable(SCREEN_MAIN, false, NULL);
|
||||||
viewportmanager_theme_undo(SCREEN_MAIN);
|
viewportmanager_theme_undo(SCREEN_MAIN, false);
|
||||||
settings_save();
|
settings_save();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -165,7 +165,7 @@ static int statusbar_callback_ex(int action,const struct menu_item_ex *this_item
|
||||||
send_event(GUI_EVENT_STATUSBAR_TOGGLE, NULL);
|
send_event(GUI_EVENT_STATUSBAR_TOGGLE, NULL);
|
||||||
/* force a full redraw */
|
/* force a full redraw */
|
||||||
viewportmanager_theme_enable(screen, false, NULL);
|
viewportmanager_theme_enable(screen, false, NULL);
|
||||||
viewportmanager_theme_undo(screen);
|
viewportmanager_theme_undo(screen, false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return ACTION_REDRAW;
|
return ACTION_REDRAW;
|
||||||
|
|
|
||||||
|
|
@ -835,7 +835,7 @@ int plugin_load(const char* plugin, const void* parameter)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
FOR_NB_SCREENS(i)
|
FOR_NB_SCREENS(i)
|
||||||
viewportmanager_theme_undo(i);
|
viewportmanager_theme_undo(i, false);
|
||||||
|
|
||||||
if (pfn_tsr_exit == NULL)
|
if (pfn_tsr_exit == NULL)
|
||||||
plugin_loaded = false;
|
plugin_loaded = false;
|
||||||
|
|
|
||||||
|
|
@ -1128,7 +1128,7 @@ int kbd_input(char* text, int buflen)
|
||||||
FOR_NB_SCREENS(l)
|
FOR_NB_SCREENS(l)
|
||||||
{
|
{
|
||||||
screens[l].setfont(FONT_UI);
|
screens[l].setfont(FONT_UI);
|
||||||
viewportmanager_theme_undo(l);
|
viewportmanager_theme_undo(l, false);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -930,7 +930,7 @@ int calibrate(void)
|
||||||
sizeof(struct touchscreen_parameter));
|
sizeof(struct touchscreen_parameter));
|
||||||
|
|
||||||
touchscreen_set_mode(old_mode);
|
touchscreen_set_mode(old_mode);
|
||||||
viewportmanager_theme_undo(SCREEN_MAIN);
|
viewportmanager_theme_undo(SCREEN_MAIN, false);
|
||||||
|
|
||||||
settings_save();
|
settings_save();
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue