summaryrefslogtreecommitdiffstats
path: root/apps/gui/statusbar-skinned.c
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2009-12-09 07:25:46 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2009-12-09 07:25:46 +0000
commitb2eb44ce0eb24632a46b0ea8c8c46a8f2ba35e24 (patch)
treeff3c0e14e9a53c08749ee1f233a5b1e887d3561a /apps/gui/statusbar-skinned.c
parent85aad9b3972208b0e34ba0241ebb5314118ae05e (diff)
downloadrockbox-b2eb44ce0eb24632a46b0ea8c8c46a8f2ba35e24.tar.gz
rockbox-b2eb44ce0eb24632a46b0ea8c8c46a8f2ba35e24.tar.bz2
rockbox-b2eb44ce0eb24632a46b0ea8c8c46a8f2ba35e24.zip
FS#10824 - viewport/statusbar API rework.
Hopefully the only user visible changes are: - fm and recording screens go by the statusbar setting (sbs or inbuilt) - plugins go back to using the theme as they should for menus and lists - splash screens might get cut a bit... entirely theme and splash dependant.. if there is a problematic one we can look at it later. - hopefully nothing more than very minor screen flickerings... let me know exactly where they are so they can be fixed New GUI screen rules: * Screens assume that the theme (sbs+ui viewport+ maybe background image) are always enabled. They may be disabled on a per display basis, but MUST be re-enabled on exit * Screens must not be coded in a way that requires a statusbar of any type.. the inbuilt bar will be removed shortly. ALWAYS RESPECT THE USERS SETTINGS unless the screen requires the full display to fit. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23904 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/gui/statusbar-skinned.c')
-rw-r--r--apps/gui/statusbar-skinned.c97
1 files changed, 25 insertions, 72 deletions
diff --git a/apps/gui/statusbar-skinned.c b/apps/gui/statusbar-skinned.c
index 4ef739929a..8bdecef692 100644
--- a/apps/gui/statusbar-skinned.c
+++ b/apps/gui/statusbar-skinned.c
@@ -41,7 +41,7 @@ static struct wps_data sb_skin_data[NB_SCREENS] = {{ .wps_loaded = 0 }};
static struct wps_sync_data sb_skin_sync_data = { .do_full_update = false };
/* initial setup of wps_data */
-static void sb_skin_update(void*);
+
static bool loaded_ok[NB_SCREENS] = { false };
static int update_delay = DEFAULT_UPDATE_DELAY;
@@ -68,9 +68,6 @@ void sb_skin_data_load(enum screen_type screen, const char *buf, bool isfile)
vp->hidden_flags = VP_NEVER_VISIBLE;
}
- if (!success)
- remove_event(GUI_EVENT_ACTIONUPDATE, sb_skin_update);
-
loaded_ok[screen] = success;
}
@@ -96,7 +93,6 @@ struct viewport *sb_skin_get_info_vp(enum screen_type screen)
inline bool sb_skin_get_state(enum screen_type screen)
{
- int skinbars = sb_skin[screen].sync_data->statusbars;
/* Temp fix untill the hardcoded bar is removed */
int bar_setting = global_settings.statusbar;
#if NB_SCREENS > 1
@@ -106,87 +102,45 @@ inline bool sb_skin_get_state(enum screen_type screen)
switch (bar_setting)
{
case STATUSBAR_CUSTOM:
- return loaded_ok[screen] && (skinbars & VP_SB_ONSCREEN(screen));
+ return loaded_ok[screen];
case STATUSBAR_TOP:
case STATUSBAR_BOTTOM:
+ return true;
case STATUSBAR_OFF:
- return (viewportmanager_get_statusbar()&VP_SB_ONSCREEN(screen));
+ return false;
}
return false; /* Should never actually get here */
}
-
-static void do_update_callback(void *param)
-{
- (void)param;
- /* the WPS handles changing the actual id3 data in the id3 pointers
- * we imported, we just want a full update */
- sb_skin_sync_data.do_full_update = true;
- /* force timeout in wps main loop, so that the update is instantly */
- queue_post(&button_queue, BUTTON_NONE, 0);
-}
-
-
-void sb_skin_set_state(int state, enum screen_type screen)
-{
- sb_skin[screen].sync_data->do_full_update = true;
- int skinbars = sb_skin[screen].sync_data->statusbars;
- if (state && loaded_ok[screen])
- {
- skinbars |= VP_SB_ONSCREEN(screen);
- }
- else
- {
- skinbars &= ~VP_SB_ONSCREEN(screen);
- }
-
- if (skinbars)
- {
-#if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP)
- add_event(LCD_EVENT_ACTIVATION, false, do_update_callback);
-#endif
- add_event(PLAYBACK_EVENT_TRACK_CHANGE, false,
- do_update_callback);
- add_event(PLAYBACK_EVENT_NEXTTRACKID3_AVAILABLE, false,
- do_update_callback);
- add_event(GUI_EVENT_ACTIONUPDATE, false, sb_skin_update);
- }
- else
- {
-#if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP)
- remove_event(LCD_EVENT_ACTIVATION, do_update_callback);
-#endif
- remove_event(PLAYBACK_EVENT_TRACK_CHANGE, do_update_callback);
- remove_event(PLAYBACK_EVENT_NEXTTRACKID3_AVAILABLE, do_update_callback);
- remove_event(GUI_EVENT_ACTIONUPDATE, sb_skin_update);
- }
-
- sb_skin[screen].sync_data->statusbars = skinbars;
-}
-
-static void sb_skin_update(void* param)
+void sb_skin_update(enum screen_type screen, bool force)
{
static long next_update = 0;
- int i;
- int forced_draw = param || sb_skin[SCREEN_MAIN].sync_data->do_full_update;
- if (TIME_AFTER(current_tick, next_update) || forced_draw)
+ int i = screen;
+ if (TIME_AFTER(current_tick, next_update) || force)
{
- FOR_NB_SCREENS(i)
+ if (sb_skin_get_state(i))
{
- if (sb_skin_get_state(i))
- {
#if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP)
- /* currently, all remotes are readable without backlight
- * so still update those */
- if (lcd_active() || (i != SCREEN_MAIN))
+ /* currently, all remotes are readable without backlight
+ * so still update those */
+ if (lcd_active() || (i != SCREEN_MAIN))
#endif
- skin_update(&sb_skin[i], forced_draw?
- WPS_REFRESH_ALL : WPS_REFRESH_NON_STATIC);
- }
+ skin_update(&sb_skin[i], force?
+ WPS_REFRESH_ALL : WPS_REFRESH_NON_STATIC);
}
- next_update = current_tick + update_delay; /* don't update too often */
- sb_skin[SCREEN_MAIN].sync_data->do_full_update = false;
}
+ next_update = current_tick + update_delay; /* don't update too often */
+ sb_skin[SCREEN_MAIN].sync_data->do_full_update = false;
+}
+
+void do_sbs_update_callback(void *param)
+{
+ (void)param;
+ /* the WPS handles changing the actual id3 data in the id3 pointers
+ * we imported, we just want a full update */
+ sb_skin_sync_data.do_full_update = true;
+ /* force timeout in wps main loop, so that the update is instantly */
+ queue_post(&button_queue, BUTTON_NONE, 0);
}
void sb_skin_set_update_delay(int delay)
@@ -209,7 +163,6 @@ void sb_skin_init(void)
/* Currently no seperate wps_state needed/possible
so use the only available ( "global" ) one */
sb_skin[i].state = &wps_state;
- sb_skin_sync_data.statusbars = VP_SB_HIDE_ALL;
sb_skin[i].sync_data = &sb_skin_sync_data;
}
}