Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/apps/gui/skin_engine/skin_display.c b/apps/gui/skin_engine/skin_display.c
- index 8e08343..3021715 100644
- --- a/apps/gui/skin_engine/skin_display.c
- +++ b/apps/gui/skin_engine/skin_display.c
- @@ -80,7 +80,7 @@ void skin_update(struct gui_wps *gwps, unsigned int update_type)
- {
- /* This maybe shouldnt be here,
- * This is also safe for skined screen which dont use the id3 */
- - struct mp3entry *id3 = gwps->state->id3;
- + struct mp3entry *id3 = skin_get_global_state()->id3;
- bool cuesheet_update = (id3 != NULL ? cuesheet_subtrack_changed(id3) : false);
- gwps->sync_data->do_full_update |= cuesheet_update;
- @@ -126,7 +126,7 @@ void draw_progressbar(struct gui_wps *gwps, int line, struct progressbar *pb)
- {
- struct screen *display = gwps->display;
- struct viewport *vp = pb->vp;
- - struct wps_state *state = gwps->state;
- + struct wps_state *state = skin_get_global_state();
- struct mp3entry *id3 = state->id3;
- int y = pb->y, height = pb->height;
- unsigned long length, end;
- @@ -730,11 +730,10 @@ bool skin_has_sbs(enum screen_type screen, struct wps_data *data)
- /* do the button loop as often as required for the peak meters to update
- * with a good refresh rate.
- - * gwps is really gwps[NB_SCREENS]! don't wrap this if FOR_NB_SCREENS()
- */
- -int skin_wait_for_action(struct gui_wps *gwps, int context, int timeout)
- +int skin_wait_for_action(enum skinnable_screens skin, int context, int timeout)
- {
- - (void)gwps; /* silence charcell warning */
- + (void)skin; /* silence charcell warning */
- int button = ACTION_NONE;
- #ifdef HAVE_LCD_BITMAP
- int i;
- @@ -745,7 +744,7 @@ int skin_wait_for_action(struct gui_wps *gwps, int context, int timeout)
- bool pm=false;
- FOR_NB_SCREENS(i)
- {
- - if(gwps[i].data->peak_meter_enabled)
- + if(skin_get_gwps(skin, i)->data->peak_meter_enabled)
- pm = true;
- }
- @@ -764,8 +763,8 @@ int skin_wait_for_action(struct gui_wps *gwps, int context, int timeout)
- if (TIME_AFTER(current_tick, next_refresh)) {
- FOR_NB_SCREENS(i)
- {
- - if(gwps[i].data->peak_meter_enabled)
- - skin_update(&gwps[i], SKIN_REFRESH_PEAK_METER);
- + if(skin_get_gwps(skin, i)->data->peak_meter_enabled)
- + skin_update(skin_get_gwps(skin, i), SKIN_REFRESH_PEAK_METER);
- next_refresh += HZ / PEAK_METER_FPS;
- }
- }
- @@ -782,3 +781,109 @@ int skin_wait_for_action(struct gui_wps *gwps, int context, int timeout)
- }
- return button;
- }
- +
- +char* wps_default_skin(enum screen_type screen);
- +char* default_radio_skin(enum screen_type screen);
- +int sb_preproccess(enum screen_type screen, struct wps_data *data);
- +int sb_postproccess(enum screen_type screen, struct wps_data *data);
- +struct wps_state wps_state = { .id3 = NULL };
- +static struct gui_skin_helper {
- + int (*preproccess)(enum screen_type screen, struct wps_data *data);
- + int (*postproccess)(enum screen_type screen, struct wps_data *data);
- + char* (*default_skin)(enum screen_type screen);
- +} skin_helpers[SKINNABLE_SCREENS_COUNT] = {
- + [CUSTOM_STATUSBAR] = { sb_preproccess, sb_postproccess, sb_create_from_settings },
- + [WPS] = { NULL, NULL, wps_default_skin },
- +#if CONFIG_TUNER
- + [FM_SCREEN] = { NULL, NULL, default_radio_skin }
- +#endif
- +};
- +
- +struct gui_skin {
- + struct gui_wps gui_wps;
- + struct wps_data data;
- + char *buffer_start;
- + size_t buffer_usage;
- +} skins[SKINNABLE_SCREENS_COUNT][NB_SCREENS];
- +static struct wps_sync_data wps_sync_data[SKINNABLE_SCREENS_COUNT];
- +
- +
- +void gui_sync_skin_init(void)
- +{
- + int i, j;
- + for(j=0; j<SKINNABLE_SCREENS_COUNT; j++)
- + {
- + FOR_NB_SCREENS(i)
- + {
- +#ifdef HAVE_ALBUMART
- + skins[j][i].data.albumart = NULL;
- + skins[j][i].data.playback_aa_slot = -1;
- +#endif
- + skins[j][i].gui_wps.data = &skins[j][i].data;
- + skins[j][i].gui_wps.display = &screens[i];
- + /* must point to the same struct for both screens */
- + skins[j][i].gui_wps.sync_data = &wps_sync_data[j];
- + }
- + }
- +}
- +
- +void skin_load(enum skinnable_screens skin, enum screen_type screen,
- + const char *buf, bool isfile)
- +{
- + bool loaded = false;
- + int i;
- + /* First step should be to unload all skins which are after this one.
- + for (i=skin; i<
- + */
- +
- + if (skin_helpers[skin].preproccess)
- + skin_helpers[skin].preproccess(screen, &skins[skin][screen].data);
- +
- + loaded = skin_data_load(screen, &skins[skin][screen].data, buf, isfile);
- + if (!loaded)
- + loaded = skin_data_load(screen, &skins[skin][screen].data,
- + skin_helpers[skin].default_skin(screen), false);
- + if (skin_helpers[skin].postproccess)
- + skin_helpers[skin].postproccess(screen, &skins[skin][screen].data);
- +}
- +
- +struct gui_wps *skin_get_gwps(enum skinnable_screens skin, enum screen_type screen)
- +{
- + if (skins[skin][screen].data.wps_loaded == false)
- + {
- + char buf[MAX_PATH*2], path[MAX_PATH];
- + char *setting, *ext;
- + switch (skin)
- + {
- + case CUSTOM_STATUSBAR:
- + return &skins[skin][screen].gui_wps;
- + break;
- + case WPS:
- + setting = global_settings.wps_file;
- + ext = "wps";
- + break;
- +#if CONFIG_TUNER
- + case FM_SCREEN:
- + setting = global_settings.fms_file;
- + ext = "fms";
- + break;
- +#endif
- + default:
- + return NULL;
- + }
- + snprintf(buf, sizeof buf, "%s/%s.%s",
- + get_user_file_path(WPS_DIR, false, path, sizeof(path)),
- + setting, ext);
- + skin_load(skin, screen, buf, true);
- + }
- +
- + return &skins[skin][screen].gui_wps;
- +}
- +
- +struct wps_state *skin_get_global_state(void)
- +{
- + return &wps_state;
- +}
- +
- +
- +
- diff --git a/apps/gui/skin_engine/skin_engine.h b/apps/gui/skin_engine/skin_engine.h
- index 9845d8c..be61414 100644
- --- a/apps/gui/skin_engine/skin_engine.h
- +++ b/apps/gui/skin_engine/skin_engine.h
- @@ -97,7 +97,12 @@ void skin_backdrop_init(void);
- * with a good refresh rate.
- * gwps is really gwps[NB_SCREENS]! don't wrap this in FOR_NB_SCREENS()
- */
- -int skin_wait_for_action(struct gui_wps *gwps, int context, int timeout);
- +int skin_wait_for_action(enum skinnable_screens skin, int context, int timeout);
- #endif
- +void skin_load(enum skinnable_screens skin, enum screen_type screen,
- + const char *buf, bool isfile);
- +struct gui_wps *skin_get_gwps(enum skinnable_screens skin, enum screen_type screen);
- +struct wps_state *skin_get_global_state(void);
- +
- #endif
- diff --git a/apps/gui/skin_engine/skin_render.c b/apps/gui/skin_engine/skin_render.c
- index 0c18848..5b504f0 100644
- --- a/apps/gui/skin_engine/skin_render.c
- +++ b/apps/gui/skin_engine/skin_render.c
- @@ -706,7 +706,8 @@ static void skin_render_playlistviewer(struct playlistviewer* viewer,
- else
- #endif
- {
- - struct cuesheet *cue = gwps->state->id3 ? gwps->state->id3->cuesheet:NULL;
- + struct cuesheet *cue = skin_get_global_state()->id3 ?
- + skin_get_global_state()->id3->cuesheet : NULL;
- cur_pos = playlist_get_display_index();
- max = playlist_amount()+1;
- if (cue)
- diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c
- index b555885..82abe62 100644
- --- a/apps/gui/skin_engine/skin_tokens.c
- +++ b/apps/gui/skin_engine/skin_tokens.c
- @@ -517,14 +517,15 @@ static struct mp3entry* get_mp3entry_from_offset(struct gui_wps *gwps,
- int offset, char **filename)
- {
- struct mp3entry* pid3 = NULL;
- - struct cuesheet *cue = gwps->state->id3 ? gwps->state->id3->cuesheet:NULL;
- + struct wps_state *state = skin_get_global_state();
- + struct cuesheet *cue = state->id3 ? state->id3->cuesheet : NULL;
- const char *fname = NULL;
- if (cue && cue->curr_track_idx + offset < cue->track_count)
- - pid3 = gwps->state->id3;
- + pid3 = state->id3;
- else if (offset == 0)
- - pid3 = gwps->state->id3;
- + pid3 = state->id3;
- else if (offset == 1)
- - pid3 = gwps->state->nid3;
- + pid3 = state->nid3;
- else
- {
- static char filename_buf[MAX_PATH + 1];
- @@ -566,7 +567,7 @@ const char *get_token_value(struct gui_wps *gwps,
- return NULL;
- struct wps_data *data = gwps->data;
- - struct wps_state *state = gwps->state;
- + struct wps_state *state = skin_get_global_state();
- struct mp3entry *id3; /* Think very carefully about using this.
- maybe get_id3_token() is the better place? */
- const char *out_text = NULL;
- diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h
- index c886a75..62fc62b 100644
- --- a/apps/gui/skin_engine/wps_internals.h
- +++ b/apps/gui/skin_engine/wps_internals.h
- @@ -320,7 +320,6 @@ struct gui_wps
- {
- struct screen *display;
- struct wps_data *data;
- - struct wps_state *state;
- /* must point to the same struct for all screens */
- struct wps_sync_data *sync_data;
- };
- diff --git a/apps/gui/statusbar-skinned.c b/apps/gui/statusbar-skinned.c
- index 8928378..48e32b4 100644
- --- a/apps/gui/statusbar-skinned.c
- +++ b/apps/gui/statusbar-skinned.c
- @@ -39,13 +39,6 @@
- #include "font.h"
- #include "icon.h"
- -
- -/* currently only one wps_state is needed */
- -extern struct wps_state wps_state; /* from wps.c */
- -static struct gui_wps sb_skin[NB_SCREENS] = {{ .data = NULL }};
- -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 int update_delay = DEFAULT_UPDATE_DELAY;
- static int set_title_worker(char* title, enum themable_icons icon,
- @@ -101,26 +94,25 @@ static int set_title_worker(char* title, enum themable_icons icon,
- bool sb_set_title_text(char* title, enum themable_icons icon, enum screen_type screen)
- {
- - bool retval = set_title_worker(title, icon, &sb_skin_data[screen],
- - sb_skin_data[screen].tree) > 0;
- + struct wps_data *data = skin_get_gwps(CUSTOM_STATUSBAR, screen)->data;
- + bool retval = set_title_worker(title, icon, data, data->tree) > 0;
- return retval;
- }
- -
- -void sb_skin_data_load(enum screen_type screen, const char *buf, bool isfile)
- +int sb_preproccess(enum screen_type screen, struct wps_data *data)
- {
- - struct wps_data *data = sb_skin[screen].data;
- -
- - int success;
- + (void)data;
- /* We need to disable the theme here or else viewport_set_defaults()
- * (which is called in the viewport tag parser) will crash because
- * the theme is enabled but sb_set_info_vp() isnt set untill after the sbs
- * is parsed. This only affects the default viewport which is ignored
- * int he sbs anyway */
- viewportmanager_theme_enable(screen, false, NULL);
- - success = buf && skin_data_load(screen, data, buf, isfile);
- -
- - if (success)
- + return 1;
- +}
- +int sb_postproccess(enum screen_type screen, struct wps_data *data)
- +{
- + if (data->wps_loaded)
- {
- /* hide the sb's default viewport because it has nasty effect with stuff
- * not part of the statusbar,
- @@ -132,17 +124,20 @@ void sb_skin_data_load(enum screen_type screen, const char *buf, bool isfile)
- {
- if (!next_vp)
- { /* no second viewport, let parsing fail */
- - success = false;
- + return 0;
- }
- /* hide this viewport, forever */
- vp->hidden_flags = VP_NEVER_VISIBLE;
- }
- sb_set_info_vp(screen, VP_DEFAULT_LABEL);
- }
- -
- - if (!success && isfile)
- - sb_create_from_settings(screen);
- viewportmanager_theme_undo(screen, false);
- + return 1;
- +}
- +
- +void sb_skin_data_load(enum screen_type screen, const char *buf, bool isfile)
- +{
- + skin_load(CUSTOM_STATUSBAR, screen, buf, isfile);
- }
- static char *infovp_label[NB_SCREENS];
- static char *oldinfovp_label[NB_SCREENS];
- @@ -153,6 +148,7 @@ void sb_set_info_vp(enum screen_type screen, char *label)
- struct viewport *sb_skin_get_info_vp(enum screen_type screen)
- {
- + struct wps_data *data = skin_get_gwps(CUSTOM_STATUSBAR, screen)->data;
- if (oldinfovp_label[screen] &&
- strcmp(oldinfovp_label[screen], infovp_label[screen]))
- {
- @@ -161,23 +157,24 @@ struct viewport *sb_skin_get_info_vp(enum screen_type screen)
- viewportmanager_theme_enable(screen, false, NULL);
- viewportmanager_theme_undo(screen, true);
- }
- - return &find_viewport(infovp_label[screen], true, sb_skin[screen].data)->vp;
- + return &find_viewport(infovp_label[screen], true, data)->vp;
- }
- #if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1)
- char* sb_get_backdrop(enum screen_type screen)
- {
- - return sb_skin[screen].data->backdrop;
- + return skin_get_gwps(CUSTOM_STATUSBAR, screen)->data->backdrop;
- }
- bool sb_set_backdrop(enum screen_type screen, char* filename)
- {
- + struct wps_data *data = skin_get_gwps(CUSTOM_STATUSBAR, screen)->data;
- if (!filename)
- {
- - sb_skin[screen].data->backdrop = NULL;
- + data->backdrop = NULL;
- return true;
- }
- - else if (!sb_skin[screen].data->backdrop)
- + else if (!data->backdrop)
- {
- /* need to make room on the buffer */
- size_t buf_size;
- @@ -187,22 +184,23 @@ bool sb_set_backdrop(enum screen_type screen, char* filename)
- else
- #endif
- buf_size = LCD_BACKDROP_BYTES;
- - sb_skin[screen].data->backdrop = (char*)skin_buffer_alloc(buf_size);
- - if (!sb_skin[screen].data->backdrop)
- + data->backdrop = (char*)skin_buffer_alloc(buf_size);
- + if (!data->backdrop)
- return false;
- }
- - if (!screens[screen].backdrop_load(filename, sb_skin[screen].data->backdrop))
- - sb_skin[screen].data->backdrop = NULL;
- - return sb_skin[screen].data->backdrop != NULL;
- + if (!screens[screen].backdrop_load(filename, data->backdrop))
- + data->backdrop = NULL;
- + return data->backdrop != NULL;
- }
- #endif
- void sb_skin_update(enum screen_type screen, bool force)
- {
- + struct wps_data *data = skin_get_gwps(CUSTOM_STATUSBAR, screen)->data;
- static long next_update[NB_SCREENS] = {0};
- int i = screen;
- - if (!sb_skin_data[screen].wps_loaded)
- + if (!data->wps_loaded)
- return;
- if (TIME_AFTER(current_tick, next_update[i]) || force)
- {
- @@ -212,11 +210,11 @@ void sb_skin_update(enum screen_type screen, bool force)
- if (lcd_active() || (i != SCREEN_MAIN))
- #endif
- {
- - bool full_update = sb_skin[i].sync_data->do_full_update;
- + bool full_update = skin_get_gwps(CUSTOM_STATUSBAR, screen)->sync_data->do_full_update;
- #if NB_SCREENS > 1
- - if (i==SCREEN_MAIN && sb_skin[i].sync_data->do_full_update)
- + if (i==SCREEN_MAIN && skin_get_gwps(CUSTOM_STATUSBAR, screen)->sync_data->do_full_update)
- {
- - sb_skin[i].sync_data->do_full_update = false;
- + skin_get_gwps(CUSTOM_STATUSBAR, screen)->sync_data->do_full_update = false;
- /* we need to make sure the remote gets a full update
- * next time it is drawn also. so quick n dirty hack */
- next_update[SCREEN_REMOTE] = 0;
- @@ -226,9 +224,9 @@ void sb_skin_update(enum screen_type screen, bool force)
- full_update = true;
- }
- #else
- - sb_skin[i].sync_data->do_full_update = false;
- + skin_get_gwps(CUSTOM_STATUSBAR, screen)->sync_data->do_full_update = false;
- #endif
- - skin_update(&sb_skin[i], force || full_update?
- + skin_update(skin_get_gwps(CUSTOM_STATUSBAR, screen), force || full_update?
- SKIN_REFRESH_ALL : SKIN_REFRESH_NON_STATIC);
- }
- next_update[i] = current_tick + update_delay; /* don't update too often */
- @@ -240,7 +238,7 @@ 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;
- + skin_get_gwps(CUSTOM_STATUSBAR, 0)->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);
- }
- @@ -256,9 +254,10 @@ void sb_skin_set_update_delay(int delay)
- * - ui viewport
- * - backdrop
- */
- -void sb_create_from_settings(enum screen_type screen)
- +char* sb_create_from_settings(enum screen_type screen)
- {
- - char buf[128], *ptr, *ptr2;
- + static char buf[128];
- + char *ptr, *ptr2;
- int len, remaining = sizeof(buf);
- int bar_position = statusbar_position(screen);
- ptr = buf;
- @@ -328,7 +327,7 @@ void sb_create_from_settings(enum screen_type screen)
- len = snprintf(ptr, remaining, "%%ax%%Vi(-,0,%d,-,%d,1)\n",
- y, height);
- }
- - sb_skin_data_load(screen, buf, false);
- + return buf;
- }
- void sb_skin_init(void)
- @@ -337,16 +336,6 @@ void sb_skin_init(void)
- FOR_NB_SCREENS(i)
- {
- oldinfovp_label[i] = NULL;
- -#ifdef HAVE_ALBUMART
- - sb_skin_data[i].albumart = NULL;
- - sb_skin_data[i].playback_aa_slot = -1;
- -#endif
- - sb_skin[i].data = &sb_skin_data[i];
- - sb_skin[i].display = &screens[i];
- - /* Currently no seperate wps_state needed/possible
- - so use the only available ( "global" ) one */
- - sb_skin[i].state = &wps_state;
- - sb_skin[i].sync_data = &sb_skin_sync_data;
- }
- }
- @@ -365,9 +354,9 @@ int sb_touch_to_button(int context)
- return ACTION_TOUCHSCREEN;
- if (last_context != context)
- - skin_disarm_touchregions(&sb_skin_data[SCREEN_MAIN]);
- + skin_disarm_touchregions(skin_get_gwps(CUSTOM_STATUSBAR, SCREEN_MAIN)->data);
- last_context = context;
- - button = skin_get_touchaction(&sb_skin_data[SCREEN_MAIN], &offset);
- + button = skin_get_touchaction(skin_get_gwps(CUSTOM_STATUSBAR, SCREEN_MAIN)->data, &offset);
- switch (button)
- {
- diff --git a/apps/gui/statusbar-skinned.h b/apps/gui/statusbar-skinned.h
- index 893d489..983b371 100644
- --- a/apps/gui/statusbar-skinned.h
- +++ b/apps/gui/statusbar-skinned.h
- @@ -34,7 +34,7 @@
- void sb_skin_data_load(enum screen_type screen, const char *buf, bool isfile);
- -void sb_create_from_settings(enum screen_type screen);
- +char* sb_create_from_settings(enum screen_type screen);
- void sb_skin_init(void) INIT_ATTR;
- void sb_set_info_vp(enum screen_type screen, char *label);
- struct viewport *sb_skin_get_info_vp(enum screen_type screen);
- diff --git a/apps/gui/theme_settings.c b/apps/gui/theme_settings.c
- index a975c21..b340a71 100644
- --- a/apps/gui/theme_settings.c
- +++ b/apps/gui/theme_settings.c
- @@ -61,6 +61,7 @@ static const struct skin_load_setting skins[] = {
- #ifdef HAVE_LCD_BITMAP
- { global_settings.sbs_file, "sbs", sb_skin_data_load},
- #endif
- +#if 0
- { global_settings.wps_file, "wps", wps_data_load},
- #if CONFIG_TUNER
- { global_settings.fms_file, "fms", fms_data_load},
- @@ -72,6 +73,7 @@ static const struct skin_load_setting skins[] = {
- { global_settings.rfms_file, "rfms", fms_data_load},
- #endif
- #endif
- +#endif
- };
- void settings_apply_skins(void)
- @@ -86,9 +88,6 @@ void settings_apply_skins(void)
- skin_backdrop_init();
- skin_font_init();
- #endif
- -#if CONFIG_TUNER
- - fms_skin_init();
- -#endif
- for (i=0; i<ARRAYLEN(skins); i++)
- {
- #ifdef HAVE_REMOTE_LCD
- diff --git a/apps/gui/wps.c b/apps/gui/wps.c
- index 6ab016f..a59e1af 100644
- --- a/apps/gui/wps.c
- +++ b/apps/gui/wps.c
- @@ -74,12 +74,6 @@
- /* 3% of 30min file == 54s step size */
- #define MIN_FF_REWIND_STEP 500
- -/* currently only one wps_state is needed, initialize to 0 */
- - struct wps_state wps_state = { .id3 = NULL };
- -static struct gui_wps gui_wps[NB_SCREENS] = {{ .data = NULL }};
- -static struct wps_data wps_datas[NB_SCREENS] = {{ .wps_loaded = 0 }};
- -static struct wps_sync_data wps_sync_data = { .do_full_update = false };
- -
- /* initial setup of wps_data */
- static void wps_state_init(void);
- static void track_changed_callback(void *param);
- @@ -94,8 +88,40 @@ static void nextid3available_callback(void* param);
- #define DEFAULT_WPS(screen) (WPS_DEFAULTCFG)
- #endif
- +char* wps_default_skin(enum screen_type screen)
- +{
- + static char *skin_buf[NB_SCREENS] = {
- +#ifdef HAVE_LCD_BITMAP
- +#if LCD_DEPTH > 1
- + "%X(d)\n"
- +#endif
- + "%s%?it<%?in<%in. |>%it|%fn>\n"
- + "%s%?ia<%ia|%?d(2)<%d(2)|%(root%)>>\n"
- + "%s%?id<%id|%?d(1)<%d(1)|%(root%)>> %?iy<%(%iy%)|>\n\n"
- + "%al%pc/%pt%ar[%pp:%pe]\n"
- + "%fbkBit %?fv<avg|> %?iv<%(id3v%iv%)|%(no id3%)>\n"
- + "%pb\n%pm\n",
- +#else
- + "%s%pp/%pe: %?it<%it|%fn> - %?ia<%ia|%d(2)> - %?id<%id|%d(1)>\n"
- + "%pc%?ps<*|/>%pt\n",
- +#endif
- +#ifdef HAVE_REMOTE_LCD
- +#if LCD_REMOTE_DEPTH > 1
- + "%X(d)\n"
- +#endif
- + "%s%?ia<%ia|%?d(2)<%d(2)|%(root%)>>\n"
- + "%s%?it<%?in<%in. |>%it|%fn>\n"
- + "%al%pc/%pt%ar[%pp:%pe]\n"
- + "%fbkBit %?fv<avg|> %?iv<%(id3v%iv%)|%(no id3%)>\n"
- + "%pb\n",
- +#endif
- + };
- + return skin_buf[screen];
- +}
- +
- void wps_data_load(enum screen_type screen, const char *buf, bool isfile)
- {
- +#if 0
- bool loaded_ok;
- #ifndef __PCTOOL__
- @@ -122,34 +148,11 @@ void wps_data_load(enum screen_type screen, const char *buf, bool isfile)
- if (!loaded_ok) /* load the hardcoded default */
- {
- - char *skin_buf[NB_SCREENS] = {
- -#ifdef HAVE_LCD_BITMAP
- -#if LCD_DEPTH > 1
- - "%X(d)\n"
- -#endif
- - "%s%?it<%?in<%in. |>%it|%fn>\n"
- - "%s%?ia<%ia|%?d(2)<%d(2)|%(root%)>>\n"
- - "%s%?id<%id|%?d(1)<%d(1)|%(root%)>> %?iy<%(%iy%)|>\n\n"
- - "%al%pc/%pt%ar[%pp:%pe]\n"
- - "%fbkBit %?fv<avg|> %?iv<%(id3v%iv%)|%(no id3%)>\n"
- - "%pb\n%pm\n",
- -#else
- - "%s%pp/%pe: %?it<%it|%fn> - %?ia<%ia|%d(2)> - %?id<%id|%d(1)>\n"
- - "%pc%?ps<*|/>%pt\n",
- -#endif
- -#ifdef HAVE_REMOTE_LCD
- -#if LCD_REMOTE_DEPTH > 1
- - "%X(d)\n"
- -#endif
- - "%s%?ia<%ia|%?d(2)<%d(2)|%(root%)>>\n"
- - "%s%?it<%?in<%in. |>%it|%fn>\n"
- - "%al%pc/%pt%ar[%pp:%pe]\n"
- - "%fbkBit %?fv<avg|> %?iv<%(id3v%iv%)|%(no id3%)>\n"
- - "%pb\n",
- -#endif
- - };
- +
- skin_data_load(screen, gui_wps[screen].data, skin_buf[screen], false);
- }
- +#endif
- + skin_load(WPS, screen, buf, isfile);
- }
- void fade(bool fade_in, bool updatewps)
- @@ -158,7 +161,7 @@ void fade(bool fade_in, bool updatewps)
- int fp_min_vol = sound_min(SOUND_VOLUME) << 8;
- int fp_step = (fp_global_vol - fp_min_vol) / 30;
- int i;
- - wps_state.is_fading = !fade_in;
- + skin_get_global_state()->is_fading = !fade_in;
- if (fade_in) {
- /* fade in */
- int fp_volume = fp_min_vol;
- @@ -175,7 +178,7 @@ void fade(bool fade_in, bool updatewps)
- if (updatewps)
- {
- FOR_NB_SCREENS(i)
- - skin_update(&gui_wps[i], SKIN_REFRESH_NON_STATIC);
- + skin_update(skin_get_gwps(WPS, i), SKIN_REFRESH_NON_STATIC);
- }
- sleep(1);
- }
- @@ -191,12 +194,12 @@ void fade(bool fade_in, bool updatewps)
- if (updatewps)
- {
- FOR_NB_SCREENS(i)
- - skin_update(&gui_wps[i], SKIN_REFRESH_NON_STATIC);
- + skin_update(skin_get_gwps(WPS, i), SKIN_REFRESH_NON_STATIC);
- }
- sleep(1);
- }
- audio_pause();
- - wps_state.is_fading = false;
- + skin_get_global_state()->is_fading = false;
- #if CONFIG_CODEC != SWCODEC
- #ifndef SIMULATOR
- /* let audio thread run and wait for the mas to run out of data */
- @@ -249,16 +252,16 @@ static int skintouch_to_wps(struct wps_data *data)
- return ACTION_WPS_HOTKEY;
- #endif
- case WPS_TOUCHREGION_SCROLLBAR:
- - wps_state.id3->elapsed = wps_state.id3->length*offset/100;
- - if (!wps_state.paused)
- + skin_get_global_state()->id3->elapsed = skin_get_global_state()->id3->length*offset/100;
- + if (!skin_get_global_state()->paused)
- #if (CONFIG_CODEC == SWCODEC)
- audio_pre_ff_rewind();
- #else
- audio_pause();
- #endif
- - audio_ff_rewind(wps_state.id3->elapsed);
- + audio_ff_rewind(skin_get_global_state()->id3->elapsed);
- #if (CONFIG_CODEC != SWCODEC)
- - if (!wps_state.paused)
- + if (!skin_get_global_state()->paused)
- audio_resume();
- #endif
- return ACTION_TOUCHSCREEN;
- @@ -299,20 +302,20 @@ bool ffwd_rew(int button)
- case ACTION_WPS_SEEKFWD:
- direction = 1;
- case ACTION_WPS_SEEKBACK:
- - if (wps_state.ff_rewind)
- + if (skin_get_global_state()->ff_rewind)
- {
- if (direction == 1)
- {
- /* fast forwarding, calc max step relative to end */
- - max_step = (wps_state.id3->length -
- - (wps_state.id3->elapsed +
- + max_step = (skin_get_global_state()->id3->length -
- + (skin_get_global_state()->id3->elapsed +
- ff_rewind_count)) *
- FF_REWIND_MAX_PERCENT / 100;
- }
- else
- {
- /* rewinding, calc max step relative to start */
- - max_step = (wps_state.id3->elapsed + ff_rewind_count) *
- + max_step = (skin_get_global_state()->id3->elapsed + ff_rewind_count) *
- FF_REWIND_MAX_PERCENT / 100;
- }
- @@ -329,9 +332,9 @@ bool ffwd_rew(int button)
- else
- {
- if ( (audio_status() & AUDIO_STATUS_PLAY) &&
- - wps_state.id3 && wps_state.id3->length )
- + skin_get_global_state()->id3 && skin_get_global_state()->id3->length )
- {
- - if (!wps_state.paused)
- + if (!skin_get_global_state()->paused)
- #if (CONFIG_CODEC == SWCODEC)
- audio_pre_ff_rewind();
- #else
- @@ -339,14 +342,14 @@ bool ffwd_rew(int button)
- #endif
- #if CONFIG_KEYPAD == PLAYER_PAD
- FOR_NB_SCREENS(i)
- - gui_wps[i].display->stop_scroll();
- + skin_get_gwps(WPS, i)->display->stop_scroll();
- #endif
- if (direction > 0)
- status_set_ffmode(STATUS_FASTFORWARD);
- else
- status_set_ffmode(STATUS_FASTBACKWARD);
- - wps_state.ff_rewind = true;
- + skin_get_global_state()->ff_rewind = true;
- step = 1000 * global_settings.ff_rewind_min_step;
- }
- @@ -355,23 +358,23 @@ bool ffwd_rew(int button)
- }
- if (direction > 0) {
- - if ((wps_state.id3->elapsed + ff_rewind_count) >
- - wps_state.id3->length)
- - ff_rewind_count = wps_state.id3->length -
- - wps_state.id3->elapsed;
- + if ((skin_get_global_state()->id3->elapsed + ff_rewind_count) >
- + skin_get_global_state()->id3->length)
- + ff_rewind_count = skin_get_global_state()->id3->length -
- + skin_get_global_state()->id3->elapsed;
- }
- else {
- - if ((int)(wps_state.id3->elapsed + ff_rewind_count) < 0)
- - ff_rewind_count = -wps_state.id3->elapsed;
- + if ((int)(skin_get_global_state()->id3->elapsed + ff_rewind_count) < 0)
- + ff_rewind_count = -skin_get_global_state()->id3->elapsed;
- }
- /* set the wps state ff_rewind_count so the progess info
- displays corectly */
- - wps_state.ff_rewind_count = (wps_state.wps_time_countup == false)?
- + skin_get_global_state()->ff_rewind_count = (skin_get_global_state()->wps_time_countup == false)?
- ff_rewind_count:-ff_rewind_count;
- FOR_NB_SCREENS(i)
- {
- - skin_update(&gui_wps[i],
- + skin_update(skin_get_gwps(WPS, i),
- SKIN_REFRESH_PLAYER_PROGRESS |
- SKIN_REFRESH_DYNAMIC);
- }
- @@ -379,18 +382,18 @@ bool ffwd_rew(int button)
- break;
- case ACTION_WPS_STOPSEEK:
- - wps_state.id3->elapsed = wps_state.id3->elapsed+ff_rewind_count;
- - audio_ff_rewind(wps_state.id3->elapsed);
- - wps_state.ff_rewind_count = 0;
- - wps_state.ff_rewind = false;
- + skin_get_global_state()->id3->elapsed = skin_get_global_state()->id3->elapsed+ff_rewind_count;
- + audio_ff_rewind(skin_get_global_state()->id3->elapsed);
- + skin_get_global_state()->ff_rewind_count = 0;
- + skin_get_global_state()->ff_rewind = false;
- status_set_ffmode(0);
- #if (CONFIG_CODEC != SWCODEC)
- - if (!wps_state.paused)
- + if (!skin_get_global_state()->paused)
- audio_resume();
- #endif
- #ifdef HAVE_LCD_CHARCELLS
- FOR_NB_SCREENS(i)
- - skin_update(&gui_wps[i], SKIN_REFRESH_ALL);
- + skin_update(skin_get_gwps(WPS, i), SKIN_REFRESH_ALL);
- #endif
- exit = true;
- break;
- @@ -408,7 +411,7 @@ bool ffwd_rew(int button)
- button = get_action(CONTEXT_WPS|ALLOW_SOFTLOCK,TIMEOUT_BLOCK);
- #ifdef HAVE_TOUCHSCREEN
- if (button == ACTION_TOUCHSCREEN)
- - button = skintouch_to_wps(gui_wps[SCREEN_MAIN].data);
- + button = skintouch_to_wps(skin_get_gwps(WPS, SCREEN_MAIN)->data);
- if (button != ACTION_WPS_SEEKFWD &&
- button != ACTION_WPS_SEEKBACK)
- button = ACTION_WPS_STOPSEEK;
- @@ -423,7 +426,7 @@ void display_keylock_text(bool locked)
- {
- int i;
- FOR_NB_SCREENS(i)
- - gui_wps[i].display->stop_scroll();
- + skin_get_gwps(WPS, i)->display->stop_scroll();
- splash(HZ, locked ? ID2P(LANG_KEYLOCK_ON) : ID2P(LANG_KEYLOCK_OFF));
- }
- @@ -489,20 +492,21 @@ static void change_dir(int direction)
- static void prev_track(unsigned long skip_thresh)
- {
- - if (wps_state.id3->elapsed < skip_thresh)
- + struct wps_state *state = skin_get_global_state();
- + if (state->id3->elapsed < skip_thresh)
- {
- audio_prev();
- return;
- }
- else
- {
- - if (wps_state.id3->cuesheet)
- + if (state->id3->cuesheet)
- {
- - curr_cuesheet_skip(wps_state.id3->cuesheet, -1, wps_state.id3->elapsed);
- + curr_cuesheet_skip(state->id3->cuesheet, -1, state->id3->elapsed);
- return;
- }
- - if (!wps_state.paused)
- + if (!state->paused)
- #if (CONFIG_CODEC == SWCODEC)
- audio_pre_ff_rewind();
- #else
- @@ -512,7 +516,7 @@ static void prev_track(unsigned long skip_thresh)
- audio_ff_rewind(0);
- #if (CONFIG_CODEC != SWCODEC)
- - if (!wps_state.paused)
- + if (!state->paused)
- audio_resume();
- #endif
- }
- @@ -520,10 +524,11 @@ static void prev_track(unsigned long skip_thresh)
- static void next_track(void)
- {
- + struct wps_state *state = skin_get_global_state();
- /* take care of if we're playing a cuesheet */
- - if (wps_state.id3->cuesheet)
- + if (state->id3->cuesheet)
- {
- - if (curr_cuesheet_skip(wps_state.id3->cuesheet, 1, wps_state.id3->elapsed))
- + if (curr_cuesheet_skip(state->id3->cuesheet, 1, state->id3->elapsed))
- {
- /* if the result was false, then we really want
- to skip to the next track */
- @@ -536,9 +541,10 @@ static void next_track(void)
- static void play_hop(int direction)
- {
- + struct wps_state *state = skin_get_global_state();
- long step = global_settings.skip_length*1000;
- - long elapsed = wps_state.id3->elapsed;
- - long remaining = wps_state.id3->length - elapsed;
- + long elapsed = state->id3->elapsed;
- + long remaining = state->id3->length - elapsed;
- if (step < 0)
- {
- @@ -582,7 +588,7 @@ static void play_hop(int direction)
- {
- elapsed += step * direction;
- }
- - if((audio_status() & AUDIO_STATUS_PLAY) && !wps_state.paused)
- + if((audio_status() & AUDIO_STATUS_PLAY) && !state->paused)
- {
- #if (CONFIG_CODEC == SWCODEC)
- audio_pre_ff_rewind();
- @@ -590,9 +596,9 @@ static void play_hop(int direction)
- audio_pause();
- #endif
- }
- - audio_ff_rewind(wps_state.id3->elapsed = elapsed);
- + audio_ff_rewind(state->id3->elapsed = elapsed);
- #if (CONFIG_CODEC != SWCODEC)
- - if (!wps_state.paused)
- + if (!state->paused)
- audio_resume();
- #endif
- }
- @@ -607,7 +613,7 @@ static void play_hop(int direction)
- static void wps_lcd_activation_hook(void *param)
- {
- (void)param;
- - wps_sync_data.do_full_update = true;
- + skin_get_gwps(WPS, 0)->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);
- }
- @@ -619,11 +625,11 @@ static void gwps_leave_wps(void)
- FOR_NB_SCREENS(i)
- {
- - gui_wps[i].display->stop_scroll();
- + skin_get_gwps(WPS, i)->display->stop_scroll();
- #if LCD_DEPTH > 1 || defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1
- - gui_wps[i].display->backdrop_show(sb_get_backdrop(i));
- + skin_get_gwps(WPS, i)->display->backdrop_show(sb_get_backdrop(i));
- #endif
- - viewportmanager_theme_undo(i, skin_has_sbs(i, gui_wps[i].data));
- + viewportmanager_theme_undo(i, skin_has_sbs(i, skin_get_gwps(WPS, i)->data));
- }
- @@ -645,10 +651,10 @@ static void gwps_enter_wps(void)
- int i;
- FOR_NB_SCREENS(i)
- {
- - struct gui_wps *gwps = &gui_wps[i];
- + struct gui_wps *gwps = skin_get_gwps(WPS, i);
- struct screen *display = gwps->display;
- display->stop_scroll();
- - viewportmanager_theme_enable(i, skin_has_sbs(i, gui_wps[i].data), NULL);
- + viewportmanager_theme_enable(i, skin_has_sbs(i, skin_get_gwps(WPS, i)->data), NULL);
- /* Update the values in the first (default) viewport - in case the user
- has modified the statusbar or colour settings */
- @@ -702,6 +708,7 @@ long gui_wps_show(void)
- bool vol_changed = false;
- int i;
- long last_left = 0, last_right = 0;
- + struct wps_state *state = skin_get_global_state();
- #ifdef HAVE_LCD_CHARCELLS
- status_set_audio(true);
- @@ -719,19 +726,19 @@ long gui_wps_show(void)
- bool audio_paused = (audio_status() & AUDIO_STATUS_PAUSE)?true:false;
- /* did someone else (i.e power thread) change audio pause mode? */
- - if (wps_state.paused != audio_paused) {
- - wps_state.paused = audio_paused;
- + if (state->paused != audio_paused) {
- + state->paused = audio_paused;
- /* if another thread paused audio, we are probably in car mode,
- about to shut down. lets save the settings. */
- - if (wps_state.paused) {
- + if (state->paused) {
- settings_save();
- #if !defined(HAVE_RTC_RAM) && !defined(HAVE_SW_POWEROFF)
- call_storage_idle_notifys(true);
- #endif
- }
- }
- - button = skin_wait_for_action(gui_wps, CONTEXT_WPS|ALLOW_SOFTLOCK,
- + button = skin_wait_for_action(WPS, CONTEXT_WPS|ALLOW_SOFTLOCK,
- restore ? 1 : HZ/5);
- /* Exit if audio has stopped playing. This happens e.g. at end of
- @@ -778,7 +785,7 @@ long gui_wps_show(void)
- {
- bool hotkey = button == ACTION_WPS_HOTKEY;
- gwps_leave_wps();
- - int retval = onplay(wps_state.id3->path,
- + int retval = onplay(state->id3->path,
- FILE_ATTR_AUDIO, CONTEXT_WPS, hotkey);
- /* if music is stopped in the context menu we want to exit the wps */
- if (retval == ONPLAY_MAINMENU
- @@ -807,9 +814,9 @@ long gui_wps_show(void)
- case ACTION_WPS_PLAY:
- if (global_settings.party_mode)
- break;
- - if ( wps_state.paused )
- + if ( state->paused )
- {
- - wps_state.paused = false;
- + state->paused = false;
- if ( global_settings.fade_on_stop )
- fade(true, true);
- else
- @@ -817,7 +824,7 @@ long gui_wps_show(void)
- }
- else
- {
- - wps_state.paused = true;
- + state->paused = true;
- if ( global_settings.fade_on_stop )
- fade(false, true);
- else
- @@ -844,7 +851,7 @@ long gui_wps_show(void)
- break;
- if (current_tick -last_right < HZ)
- {
- - if (wps_state.id3->cuesheet)
- + if (state->id3->cuesheet)
- {
- audio_next();
- }
- @@ -864,9 +871,9 @@ long gui_wps_show(void)
- break;
- if (current_tick -last_left < HZ)
- {
- - if (wps_state.id3->cuesheet)
- + if (state->id3->cuesheet)
- {
- - if (!wps_state.paused)
- + if (!state->paused)
- #if (CONFIG_CODEC == SWCODEC)
- audio_pre_ff_rewind();
- #else
- @@ -894,7 +901,7 @@ long gui_wps_show(void)
- is past the A marker, jump back to the A marker... */
- if ( ab_repeat_mode_enabled() )
- {
- - if ( ab_after_A_marker(wps_state.id3->elapsed) )
- + if ( ab_after_A_marker(state->id3->elapsed) )
- {
- ab_jump_to_A_marker();
- break;
- @@ -917,7 +924,7 @@ long gui_wps_show(void)
- before the A marker, jump to the A marker... */
- if ( ab_repeat_mode_enabled() )
- {
- - if ( ab_before_A_marker(wps_state.id3->elapsed) )
- + if ( ab_before_A_marker(state->id3->elapsed) )
- {
- ab_jump_to_A_marker();
- break;
- @@ -936,7 +943,7 @@ long gui_wps_show(void)
- #if defined(AB_REPEAT_ENABLE)
- if (ab_repeat_mode_enabled())
- {
- - ab_set_B_marker(wps_state.id3->elapsed);
- + ab_set_B_marker(state->id3->elapsed);
- ab_jump_to_A_marker();
- }
- else
- @@ -950,7 +957,7 @@ long gui_wps_show(void)
- break;
- #if defined(AB_REPEAT_ENABLE)
- if (ab_repeat_mode_enabled())
- - ab_set_A_marker(wps_state.id3->elapsed);
- + ab_set_A_marker(state->id3->elapsed);
- else
- #endif
- {
- @@ -1052,7 +1059,7 @@ long gui_wps_show(void)
- /* this case is used by the softlock feature
- * it requests a full update here */
- case ACTION_REDRAW:
- - wps_sync_data.do_full_update = true;
- + skin_get_gwps(WPS, 0)->sync_data->do_full_update = true;
- break;
- case ACTION_NONE: /* Timeout, do a partial update */
- update = true;
- @@ -1087,7 +1094,7 @@ long gui_wps_show(void)
- setvol();
- FOR_NB_SCREENS(i)
- {
- - if(update_onvol_change(&gui_wps[i]))
- + if(update_onvol_change(skin_get_gwps(WPS, i)))
- res = true;
- }
- if (res) {
- @@ -1109,15 +1116,15 @@ long gui_wps_show(void)
- /* we remove the update delay since it's not very usable in the wps,
- * e.g. during volume changing or ffwd/rewind */
- sb_skin_set_update_delay(0);
- - wps_sync_data.do_full_update = update = false;
- + skin_get_gwps(WPS, 0)->sync_data->do_full_update = update = false;
- gwps_enter_wps();
- }
- - else if (wps_sync_data.do_full_update || update)
- + else if (skin_get_gwps(WPS, 0)->sync_data->do_full_update || update)
- {
- #if defined(HAVE_BACKLIGHT) || defined(HAVE_REMOTE_LCD)
- - gwps_caption_backlight(&wps_state);
- + gwps_caption_backlight(state);
- #endif
- - bool full_update = wps_sync_data.do_full_update;
- + bool full_update = skin_get_gwps(WPS, 0)->sync_data->do_full_update;
- FOR_NB_SCREENS(i)
- {
- #if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP)
- @@ -1127,15 +1134,15 @@ long gui_wps_show(void)
- #endif
- {
- #if NB_SCREENS > 1
- - if (i==SCREEN_MAIN && wps_sync_data.do_full_update)
- + if (i==SCREEN_MAIN && skin_get_gwps(WPS, 0)->sync_data->do_full_update)
- {
- - wps_sync_data.do_full_update = false;
- + skin_get_gwps(WPS, 0)->sync_data->do_full_update = false;
- }
- #else
- - wps_sync_data.do_full_update = false;
- + skin_get_gwps(WPS, 0)->sync_data->do_full_update = false;
- #endif
- - skin_update(&gui_wps[i], full_update ?
- + skin_update(skin_get_gwps(WPS, i), full_update ?
- SKIN_REFRESH_ALL : SKIN_REFRESH_NON_STATIC);
- }
- }
- @@ -1175,38 +1182,40 @@ long gui_wps_show(void)
- /* this is called from the playback thread so NO DRAWING! */
- static void track_changed_callback(void *param)
- {
- - wps_state.id3 = (struct mp3entry*)param;
- - wps_state.nid3 = audio_next_track();
- - if (wps_state.id3->cuesheet)
- + struct wps_state *state = skin_get_global_state();
- + state->id3 = (struct mp3entry*)param;
- + state->nid3 = audio_next_track();
- + if (state->id3->cuesheet)
- {
- - cue_find_current_track(wps_state.id3->cuesheet, wps_state.id3->elapsed);
- + cue_find_current_track(state->id3->cuesheet, state->id3->elapsed);
- }
- - wps_sync_data.do_full_update = true;
- + skin_get_gwps(WPS, 0)->sync_data->do_full_update = true;
- }
- static void nextid3available_callback(void* param)
- {
- (void)param;
- - wps_state.nid3 = audio_next_track();
- - wps_sync_data.do_full_update = true;
- + skin_get_global_state()->nid3 = audio_next_track();
- + skin_get_gwps(WPS, 0)->sync_data->do_full_update = true;
- }
- static void wps_state_init(void)
- {
- - wps_state.ff_rewind = false;
- - wps_state.paused = false;
- + struct wps_state *state = skin_get_global_state();
- + state->ff_rewind = false;
- + state->paused = false;
- if(audio_status() & AUDIO_STATUS_PLAY)
- {
- - wps_state.id3 = audio_current_track();
- - wps_state.nid3 = audio_next_track();
- + state->id3 = audio_current_track();
- + state->nid3 = audio_next_track();
- }
- else
- {
- - wps_state.id3 = NULL;
- - wps_state.nid3 = NULL;
- + state->id3 = NULL;
- + state->nid3 = NULL;
- }
- /* We'll be updating due to restore initialized with true */
- - wps_sync_data.do_full_update = false;
- + skin_get_gwps(WPS, 0)->sync_data->do_full_update = true;
- /* add the WPS track event callbacks */
- add_event(PLAYBACK_EVENT_TRACK_CHANGE, false, track_changed_callback);
- add_event(PLAYBACK_EVENT_NEXTTRACKID3_AVAILABLE, false, nextid3available_callback);
- @@ -1215,32 +1224,18 @@ static void wps_state_init(void)
- void gui_sync_wps_init(void)
- {
- - int i;
- - FOR_NB_SCREENS(i)
- - {
- -#ifdef HAVE_ALBUMART
- - wps_datas[i].albumart = NULL;
- - wps_datas[i].playback_aa_slot = -1;
- -#endif
- - gui_wps[i].data = &wps_datas[i];
- - gui_wps[i].display = &screens[i];
- - /* Currently no seperate wps_state needed/possible
- - so use the only available ( "global" ) one */
- - gui_wps[i].state = &wps_state;
- - /* must point to the same struct for both screens */
- - gui_wps[i].sync_data = &wps_sync_data;
- - }
- + gui_sync_skin_init();
- }
- #ifdef IPOD_ACCESSORY_PROTOCOL
- bool is_wps_fading(void)
- {
- - return wps_state.is_fading;
- + return skin_get_global_state()->is_fading;
- }
- int wps_get_ff_rewind_count(void)
- {
- - return wps_state.ff_rewind_count;
- + return skin_get_global_state()->ff_rewind_count;
- }
- #endif
- diff --git a/apps/radio/radio.c b/apps/radio/radio.c
- index 74bdb4b..8c4d88c 100644
- --- a/apps/radio/radio.c
- +++ b/apps/radio/radio.c
- @@ -422,7 +422,7 @@ int radio_screen(void)
- {
- radio_load_presets(global_settings.fmr_file);
- }
- - fms_get(SCREEN_MAIN)->state->id3 = NULL;
- + skin_get_global_state()->id3 = NULL;
- #ifdef HAVE_ALBUMART
- radioart_init(true);
- #endif
- diff --git a/apps/radio/radio.h b/apps/radio/radio.h
- index 7c263ce..f02558f 100644
- --- a/apps/radio/radio.h
- +++ b/apps/radio/radio.h
- @@ -52,7 +52,6 @@ const struct fmstation *radio_get_preset(int preset);
- /* skin functions */
- void fms_data_load(enum screen_type screen, const char *buf, bool isfile);
- -void fms_skin_init(void);
- /* callbacks for the radio settings */
- void set_radio_region(int region);
- diff --git a/apps/radio/radio_skin.c b/apps/radio/radio_skin.c
- index 26e6dac..4697e11 100644
- --- a/apps/radio/radio_skin.c
- +++ b/apps/radio/radio_skin.c
- @@ -32,45 +32,42 @@
- #include "statusbar-skinned.h"
- -extern struct wps_state wps_state; /* from wps.c */
- -static struct gui_wps fms_skin[NB_SCREENS] = {{ .data = NULL }};
- -static struct wps_data fms_skin_data[NB_SCREENS] = {{ .wps_loaded = 0 }};
- -static struct wps_sync_data fms_skin_sync_data = { .do_full_update = false };
- -
- -void fms_data_load(enum screen_type screen, const char *buf, bool isfile)
- +char* default_radio_skin(enum screen_type screen)
- {
- - struct wps_data *data = fms_skin[screen].data;
- - int success;
- - success = buf && skin_data_load(screen, data, buf, isfile);
- -
- - if (!success ) /* load the default */
- - {
- - const char default_fms[] = "%s%?Ti<%Ti. |>%?Tn<%Tn|%Tf>\n"
- - "%Sx(Station:) %tf MHz\n"
- - "%?St(force fm mono)<%Sx(Force Mono)|%?ts<%Sx(Stereo)|%Sx(Mono)>>\n"
- - "%Sx(Mode:) %?tm<%Sx(Scan)|%Sx(Preset)>\n"
- + (void)screen;
- + static char default_fms[] =
- + "%s%?Ti<%Ti. |>%?Tn<%Tn|%Tf>\n"
- + "%Sx(Station:) %tf MHz\n"
- + "%?St(force fm mono)<%Sx(Force Mono)|%?ts<%Sx(Stereo)|%Sx(Mono)>>\n"
- + "%Sx(Mode:) %?tm<%Sx(Scan)|%Sx(Preset)>\n"
- #if CONFIG_CODEC != SWCODEC && !defined(SIMULATOR)
- - "%?Rr<%Sx(Time:) %Rh:%Rn:%Rs|%?St(prerecording time)<%pm|%Sx(Prerecord Time) %Rs>>\n"
- + "%?Rr<%Sx(Time:) %Rh:%Rn:%Rs|%?St(prerecording time)<%pm|%Sx(Prerecord Time) %Rs>>\n"
- #endif
- - "%pb\n"
- + "%pb\n"
- #ifdef HAVE_RDS_CAP
- - "\n%s%ty\n"
- - "%s%tz\n"
- + "\n%s%ty\n"
- + "%s%tz\n"
- #endif
- - ;
- - skin_data_load(screen, data, default_fms, false);
- - }
- + ;
- + return default_fms;
- }
- +
- +void fms_data_load(enum screen_type screen, const char *buf, bool isfile)
- +{
- + skin_load(FM_SCREEN, screen, buf, isfile);
- +}
- +
- void fms_fix_displays(enum fms_exiting toggle_state)
- {
- int i;
- FOR_NB_SCREENS(i)
- {
- + struct wps_data *data = skin_get_gwps(FM_SCREEN, i)->data;
- if (toggle_state == FMS_ENTER)
- {
- - viewportmanager_theme_enable(i, skin_has_sbs(i, fms_skin[i].data), NULL);
- + viewportmanager_theme_enable(i, skin_has_sbs(i, data), NULL);
- #if LCD_DEPTH > 1 || defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1
- - screens[i].backdrop_show(fms_skin[i].data->backdrop);
- + screens[i].backdrop_show(data->backdrop);
- #endif
- screens[i].clear_display();
- /* force statusbar/skin update since we just cleared the whole screen */
- @@ -82,43 +79,26 @@ void fms_fix_displays(enum fms_exiting toggle_state)
- #if LCD_DEPTH > 1 || defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1
- screens[i].backdrop_show(sb_get_backdrop(i));
- #endif
- - viewportmanager_theme_undo(i, skin_has_sbs(i, fms_skin[i].data));
- + viewportmanager_theme_undo(i, skin_has_sbs(i, data));
- }
- }
- #ifdef HAVE_TOUCHSCREEN
- - if (!fms_skin[SCREEN_MAIN].data->touchregions)
- + if (i==SCREEN_MAIN && !data->touchregions)
- touchscreen_set_mode(toggle_state == FMS_ENTER ?
- TOUCHSCREEN_BUTTON : global_settings.touch_mode);
- #endif
- }
- -void fms_skin_init(void)
- -{
- - int i;
- - FOR_NB_SCREENS(i)
- - {
- -#ifdef HAVE_ALBUMART
- - fms_skin_data[i].albumart = NULL;
- - fms_skin_data[i].playback_aa_slot = -1;
- -#endif
- - fms_skin[i].data = &fms_skin_data[i];
- - fms_skin[i].display = &screens[i];
- - /* Currently no seperate wps_state needed/possible
- - so use the only available ( "global" ) one */
- - fms_skin[i].state = &wps_state;
- - fms_skin[i].sync_data = &fms_skin_sync_data;
- - }
- -}
- -
- int fms_do_button_loop(bool update_screen)
- {
- - int button = skin_wait_for_action(fms_skin, CONTEXT_FM,
- + int button = skin_wait_for_action(FM_SCREEN, CONTEXT_FM,
- update_screen ? TIMEOUT_NOBLOCK : HZ/5);
- #ifdef HAVE_TOUCHSCREEN
- int offset;
- if (button == ACTION_TOUCHSCREEN)
- - button = skin_get_touchaction(&fms_skin_data[SCREEN_MAIN], &offset);
- + button = skin_get_touchaction(skin_get_gwps(FM_SCREEN, SCREEN_MAIN)->data,
- + &offset);
- switch (button)
- {
- case ACTION_WPS_STOP:
- @@ -143,5 +123,5 @@ int fms_do_button_loop(bool update_screen)
- struct gui_wps *fms_get(enum screen_type screen)
- {
- - return &fms_skin[screen];
- + return skin_get_gwps(FM_SCREEN, screen);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement