Fix some drawing problems when displaying the WPS initially with sbs enabled. Move initial display of the wps to wps.c too. Should fix bug 3 of FS#10771.
Also change GUI_EVENT_REFRESH event handling so that the passed drawing function is always called, not only when sbs or custom ui vp are used. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23644 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
d5af5c061c
commit
bdf2961ba3
4 changed files with 55 additions and 37 deletions
|
@ -528,13 +528,9 @@ int ft_enter(struct tree_context* c)
|
||||||
splash(0, ID2P(LANG_WAIT));
|
splash(0, ID2P(LANG_WAIT));
|
||||||
if (!settings_load_config(buf,true))
|
if (!settings_load_config(buf,true))
|
||||||
break;
|
break;
|
||||||
/* do both steps seperately so that the redrawing after theme
|
|
||||||
* changing is independant of whether the theme has a custom ui
|
/* redraw the UI in case the user setting changed apparence */
|
||||||
* vp or not */
|
send_event(GUI_EVENT_REFRESH, tree_drawlists);
|
||||||
send_event(GUI_EVENT_REFRESH, NULL);
|
|
||||||
/* for the statusbar */
|
|
||||||
send_event(GUI_EVENT_ACTIONUPDATE, (void*)true);
|
|
||||||
tree_drawlists();
|
|
||||||
splash(HZ, ID2P(LANG_SETTINGS_LOADED));
|
splash(HZ, ID2P(LANG_SETTINGS_LOADED));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -58,26 +58,6 @@
|
||||||
|
|
||||||
static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode);
|
static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode);
|
||||||
|
|
||||||
|
|
||||||
/* TODO: maybe move this whole function into wps.c instead ? */
|
|
||||||
bool gui_wps_display(struct gui_wps *gwps)
|
|
||||||
{
|
|
||||||
struct screen *display = gwps->display;
|
|
||||||
|
|
||||||
/* Update the values in the first (default) viewport - in case the user
|
|
||||||
has modified the statusbar or colour settings */
|
|
||||||
#if LCD_DEPTH > 1
|
|
||||||
if (display->depth > 1)
|
|
||||||
{
|
|
||||||
struct viewport *vp = &find_viewport(VP_DEFAULT_LABEL, gwps->data)->vp;
|
|
||||||
vp->fg_pattern = display->get_foreground();
|
|
||||||
vp->bg_pattern = display->get_background();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
display->backdrop_show(BACKDROP_SKIN_WPS);
|
|
||||||
return skin_redraw(gwps, WPS_REFRESH_ALL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* update a skinned screen, update_type is WPS_REFRESH_* values.
|
/* update a skinned screen, update_type is WPS_REFRESH_* values.
|
||||||
* Usually it should only be WPS_REFRESH_NON_STATIC
|
* Usually it should only be WPS_REFRESH_NON_STATIC
|
||||||
* A full update will be done if required (state.do_full_update == true)
|
* A full update will be done if required (state.do_full_update == true)
|
||||||
|
|
|
@ -70,6 +70,7 @@ static struct viewport custom_vp[NB_SCREENS];
|
||||||
|
|
||||||
/* callbacks for GUI_EVENT_* events */
|
/* callbacks for GUI_EVENT_* events */
|
||||||
static void viewportmanager_ui_vp_changed(void *param);
|
static void viewportmanager_ui_vp_changed(void *param);
|
||||||
|
static void viewportmanager_call_draw_func(void *param);
|
||||||
static void statusbar_toggled(void* param);
|
static void statusbar_toggled(void* param);
|
||||||
static unsigned viewport_init_ui_vp(void);
|
static unsigned viewport_init_ui_vp(void);
|
||||||
#endif
|
#endif
|
||||||
|
@ -215,29 +216,47 @@ void viewportmanager_theme_changed(const int which)
|
||||||
event_add |= (statusbar_position(i) == STATUSBAR_CUSTOM);
|
event_add |= (statusbar_position(i) == STATUSBAR_CUSTOM);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* add one of those to ensure the draw function is called always */
|
||||||
if (event_add)
|
if (event_add)
|
||||||
|
{
|
||||||
add_event(GUI_EVENT_REFRESH, false, viewportmanager_ui_vp_changed);
|
add_event(GUI_EVENT_REFRESH, false, viewportmanager_ui_vp_changed);
|
||||||
|
remove_event(GUI_EVENT_REFRESH, viewportmanager_call_draw_func);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
add_event(GUI_EVENT_REFRESH, false, viewportmanager_call_draw_func);
|
||||||
remove_event(GUI_EVENT_REFRESH, viewportmanager_ui_vp_changed);
|
remove_event(GUI_EVENT_REFRESH, viewportmanager_ui_vp_changed);
|
||||||
|
}
|
||||||
|
|
||||||
send_event(GUI_EVENT_THEME_CHANGED, NULL);
|
send_event(GUI_EVENT_THEME_CHANGED, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* simply calls a function that draws stuff, this exists to ensure the
|
||||||
|
* drawing function call in the GUI_EVENT_REFRESH event
|
||||||
|
*
|
||||||
|
* param should be 'void func(void)' */
|
||||||
|
static void viewportmanager_call_draw_func(void *param)
|
||||||
|
{
|
||||||
|
/* cast param to a function */
|
||||||
|
void (*draw_func)(void) = ((void(*)(void))param);
|
||||||
|
/* call the passed function which will redraw the content of
|
||||||
|
* the current screen */
|
||||||
|
if (draw_func != NULL)
|
||||||
|
draw_func();
|
||||||
|
}
|
||||||
|
|
||||||
static void viewportmanager_ui_vp_changed(void *param)
|
static void viewportmanager_ui_vp_changed(void *param)
|
||||||
{
|
{
|
||||||
/* if the user changed the theme, we need to initiate a full redraw */
|
/* if the user changed the theme, we need to initiate a full redraw */
|
||||||
int i;
|
int i;
|
||||||
/* cast param to a function */
|
|
||||||
void (*draw_func)(void) = ((void(*)(void))param);
|
|
||||||
/* start with clearing the screen */
|
/* start with clearing the screen */
|
||||||
FOR_NB_SCREENS(i)
|
FOR_NB_SCREENS(i)
|
||||||
screens[i].clear_display();
|
screens[i].clear_display();
|
||||||
/* redraw the statusbar if it was enabled */
|
/* redraw the statusbar if it was enabled */
|
||||||
send_event(GUI_EVENT_ACTIONUPDATE, (void*)true);
|
send_event(GUI_EVENT_ACTIONUPDATE, (void*)true);
|
||||||
/* call the passed function which will redraw the content of
|
/* call redraw function */
|
||||||
* the current screen */
|
viewportmanager_call_draw_func(param);
|
||||||
if (draw_func != NULL)
|
|
||||||
draw_func();
|
|
||||||
FOR_NB_SCREENS(i)
|
FOR_NB_SCREENS(i)
|
||||||
screens[i].update();
|
screens[i].update();
|
||||||
}
|
}
|
||||||
|
|
|
@ -582,6 +582,31 @@ static void gwps_leave_wps(void)
|
||||||
send_event(GUI_EVENT_REFRESH, NULL);
|
send_event(GUI_EVENT_REFRESH, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* display the wps on entering or restoring */
|
||||||
|
static void gwps_enter_wps(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
FOR_NB_SCREENS(i)
|
||||||
|
{
|
||||||
|
struct gui_wps *gwps = &gui_wps[i];
|
||||||
|
struct screen *display = gwps->display;
|
||||||
|
|
||||||
|
display->stop_scroll();
|
||||||
|
/* Update the values in the first (default) viewport - in case the user
|
||||||
|
has modified the statusbar or colour settings */
|
||||||
|
#if LCD_DEPTH > 1
|
||||||
|
if (display->depth > 1)
|
||||||
|
{
|
||||||
|
struct viewport *vp = &find_viewport(VP_DEFAULT_LABEL, gwps->data)->vp;
|
||||||
|
vp->fg_pattern = display->get_foreground();
|
||||||
|
vp->bg_pattern = display->get_background();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
skin_update(gwps, WPS_REFRESH_ALL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef HAVE_TOUCHSCREEN
|
#ifdef HAVE_TOUCHSCREEN
|
||||||
int wps_get_touchaction(struct wps_data *data)
|
int wps_get_touchaction(struct wps_data *data)
|
||||||
{
|
{
|
||||||
|
@ -1169,10 +1194,8 @@ long gui_wps_show(void)
|
||||||
* e.g. during volume changing or ffwd/rewind */
|
* e.g. during volume changing or ffwd/rewind */
|
||||||
sb_skin_set_update_delay(0);
|
sb_skin_set_update_delay(0);
|
||||||
FOR_NB_SCREENS(i)
|
FOR_NB_SCREENS(i)
|
||||||
{
|
gui_wps[i].display->backdrop_show(BACKDROP_SKIN_WPS);
|
||||||
screens[i].stop_scroll();
|
send_event(GUI_EVENT_REFRESH, gwps_enter_wps);
|
||||||
gui_wps_display(&gui_wps[i]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exit) {
|
if (exit) {
|
||||||
|
|
Loading…
Reference in a new issue