From 3b75c86d74937a6bffcb371bb08bdfb182db9d2b Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Mon, 3 Aug 2009 15:06:30 +0000 Subject: A bit mroe wps/skin engine cleanup so that the structs the wps uses can be static: -add wrappers wps_data_load() and wps_data_init() so that other code doesn't need the structs for that -change (and rename) gui_sync_wps_uses_albumart() to take points to be filled as parameter to get the AA size of a wps git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22139 a1c6a512-1295-4272-9138-f99709370657 --- apps/filetree.c | 6 +++--- apps/gui/skin_engine/skin_engine.h | 11 ++--------- apps/gui/skin_engine/wps_internals.h | 7 ------- apps/gui/skin_engine/wps_parser.c | 12 ++++++------ apps/gui/wps.c | 30 ++++++++++++++++++++++++------ apps/gui/wps.h | 13 +++++++++++++ apps/menus/main_menu.c | 19 ++++++++++++------- apps/playback.c | 3 ++- apps/playback.h | 2 +- apps/recorder/albumart.c | 18 ++++++++++++------ apps/settings.c | 18 +++++++----------- 11 files changed, 82 insertions(+), 57 deletions(-) diff --git a/apps/filetree.c b/apps/filetree.c index 8e97a0d13c..e6be09ad6c 100644 --- a/apps/filetree.c +++ b/apps/filetree.c @@ -51,7 +51,7 @@ #if CONFIG_TUNER #include "radio.h" #endif -#include "skin_engine/skin_engine.h" +#include "wps.h" #include "backdrop.h" static int compare_sort_dir; /* qsort key for sorting directories */ @@ -484,7 +484,7 @@ int ft_enter(struct tree_context* c) #if LCD_DEPTH > 1 unload_wps_backdrop(); #endif - skin_data_load(gui_wps[0].data, &screens[0], buf, true); + wps_data_load(SCREEN_MAIN, buf, true); set_file(buf, (char *)global_settings.wps_file, MAX_FILENAME); break; @@ -496,7 +496,7 @@ int ft_enter(struct tree_context* c) #if defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1 unload_remote_wps_backdrop(); #endif - skin_data_load(gui_wps[1].data, &screens[1], buf, true); + wps_data_load(SCREEN_REMOTE, buf, true); set_file(buf, (char *)global_settings.rwps_file, MAX_FILENAME); break; diff --git a/apps/gui/skin_engine/skin_engine.h b/apps/gui/skin_engine/skin_engine.h index 00232a327a..498444e8ea 100644 --- a/apps/gui/skin_engine/skin_engine.h +++ b/apps/gui/skin_engine/skin_engine.h @@ -30,11 +30,6 @@ int wps_get_touchaction(struct wps_data *data); #endif -#ifdef HAVE_ALBUMART -/* gives back if WPS contains an albumart tag */ -bool gui_sync_wps_uses_albumart(void); -#endif - /* setup and display a WPS for the first time */ bool gui_wps_display(struct gui_wps *gwps); @@ -52,8 +47,6 @@ void skin_data_load(struct wps_data *wps_data, bool isfile); - - - - +/* initial setup of wps_data */ +void skin_data_init(struct wps_data *wps_data); #endif diff --git a/apps/gui/skin_engine/wps_internals.h b/apps/gui/skin_engine/wps_internals.h index 2dcaa504bb..c00a4f1945 100644 --- a/apps/gui/skin_engine/wps_internals.h +++ b/apps/gui/skin_engine/wps_internals.h @@ -470,9 +470,6 @@ struct wps_data unsigned int button_time_volume; }; -/* initial setup of wps_data */ -void wps_data_init(struct wps_data *wps_data); - /* Redraw statusbars if necessary */ void gwps_draw_statusbars(void); @@ -536,10 +533,6 @@ struct gui_wps /* gui_wps end */ -/* currently only on wps_state is needed */ -extern struct wps_state wps_state; -extern struct gui_wps gui_wps[NB_SCREENS]; - /***** wps_tokens.c ******/ const char *get_token_value(struct gui_wps *gwps, diff --git a/apps/gui/skin_engine/wps_parser.c b/apps/gui/skin_engine/wps_parser.c index a3e5f6861d..2c6d5ded95 100644 --- a/apps/gui/skin_engine/wps_parser.c +++ b/apps/gui/skin_engine/wps_parser.c @@ -1552,7 +1552,7 @@ static void wps_images_clear(struct wps_data *data) #endif /* initial setup of wps_data */ -void wps_data_init(struct wps_data *wps_data) +void skin_data_init(struct wps_data *wps_data) { #ifdef HAVE_LCD_BITMAP wps_images_clear(wps_data); @@ -1581,7 +1581,7 @@ static void wps_reset(struct wps_data *data) bool rwps = data->remote_wps; /* remember whether the data is for a RWPS */ #endif memset(data, 0, sizeof(*data)); - wps_data_init(data); + skin_data_init(data); #ifdef HAVE_REMOTE_LCD data->remote_wps = rwps; #endif @@ -1666,7 +1666,7 @@ static bool load_wps_bitmaps(struct wps_data *wps_data, char *bmpdir) /* to setup up the wps-data from a format-buffer (isfile = false) from a (wps-)file (isfile = true)*/ -static bool wps_data_load(struct wps_data *wps_data, +static bool _skin_data_load(struct wps_data *wps_data, struct screen *display, const char *buf, bool isfile) @@ -1820,7 +1820,7 @@ void skin_data_load(struct wps_data *wps_data, const char *buf, bool isfile) { - bool loaded_ok = buf && wps_data_load(wps_data, display, buf, isfile); + bool loaded_ok = buf && _skin_data_load(wps_data, display, buf, isfile); if (!loaded_ok) /* load the hardcoded default */ { /* set the default wps for the main-screen */ @@ -1829,7 +1829,7 @@ void skin_data_load(struct wps_data *wps_data, #if LCD_DEPTH > 1 unload_wps_backdrop(); #endif - wps_data_load(wps_data, + _skin_data_load(wps_data, display, #ifdef HAVE_LCD_BITMAP "%s%?it<%?in<%in. |>%it|%fn>\n" @@ -1852,7 +1852,7 @@ void skin_data_load(struct wps_data *wps_data, #if LCD_REMOTE_DEPTH > 1 unload_remote_wps_backdrop(); #endif - wps_data_load(wps_data, + _skin_data_load(wps_data, display, "%s%?ia<%ia|%?d2<%d2|(root)>>\n" "%s%?it<%?in<%in. |>%it|%fn>\n" diff --git a/apps/gui/wps.c b/apps/gui/wps.c index 4a7de875d2..447c1d6b00 100644 --- a/apps/gui/wps.c +++ b/apps/gui/wps.c @@ -75,8 +75,8 @@ static int wpsbars; /* currently only one wps_state is needed */ -struct wps_state wps_state; -struct gui_wps gui_wps[NB_SCREENS]; +static struct wps_state wps_state; +static struct gui_wps gui_wps[NB_SCREENS]; static struct wps_data wps_datas[NB_SCREENS]; /* initial setup of wps_data */ @@ -90,6 +90,19 @@ static void nextid3available_callback(void* param); /* 3% of 30min file == 54s step size */ #define MIN_FF_REWIND_STEP 500 +void wps_data_load(enum screen_type screen, const char *buf, bool is_file) +{ + skin_data_load(gui_wps[screen].data, &screens[screen], buf, is_file); +#ifdef HAVE_REMOVE_LCD + gui_wps[screen].data->remote_wps = !(screen == SCREEN_MAIN); +#endif +} + +void wps_data_init(enum screen_type screen) +{ + skin_data_init(gui_wps[screen].data); +} + bool wps_fading_out = false; void fade(bool fade_in, bool updatewps) { @@ -165,6 +178,7 @@ bool update_onvol_change(struct gui_wps * gwps) return false; } + bool ffwd_rew(int button) { unsigned int step = 0; /* current ff/rewind step */ @@ -1176,7 +1190,7 @@ void gui_sync_wps_init(void) int i; FOR_NB_SCREENS(i) { - wps_data_init(&wps_datas[i]); + skin_data_init(&wps_datas[i]); #ifdef HAVE_ALBUMART wps_datas[i].wps_uses_albumart = 0; #endif @@ -1201,15 +1215,19 @@ void gui_sync_wps_init(void) } #ifdef HAVE_ALBUMART -/* Returns true if at least one of the gui_wps screens has an album art - tag in its wps structure */ -bool gui_sync_wps_uses_albumart(void) +bool wps_uses_albumart(int *width, int *height) { int i; FOR_NB_SCREENS(i) { struct gui_wps *gwps = &gui_wps[i]; if (gwps->data && (gwps->data->wps_uses_albumart != WPS_ALBUMART_NONE)) + { + if (width) + *width = gui_wps[0].data->albumart_max_width; + if (height) + *height = gui_wps[0].data->albumart_max_height; return true; + } } return false; } diff --git a/apps/gui/wps.h b/apps/gui/wps.h index 90614cb65b..b8cb7d2ffa 100644 --- a/apps/gui/wps.h +++ b/apps/gui/wps.h @@ -34,4 +34,17 @@ bool ffwd_rew(int button); void display_keylock_text(bool locked); bool is_wps_fading(void); + +/* wrapper for the wps to load the skin (.wps/.rwps) files */ +void wps_data_load(enum screen_type, const char *, bool); +void wps_data_init(enum screen_type); + +#ifdef HAVE_ALBUMART +/* + * Returns true if at least one of the gui_wps screens has an album art + * tag in its wps structure and writes the width and height into the passed + * pointers + */ +bool wps_uses_albumart(int*, int*); +#endif #endif diff --git a/apps/menus/main_menu.c b/apps/menus/main_menu.c index b535662f13..781b6f488a 100644 --- a/apps/menus/main_menu.c +++ b/apps/menus/main_menu.c @@ -50,7 +50,7 @@ #endif #include "version.h" #include "time.h" -#include "skin_engine/skin_engine.h" +#include "wps.h" static const struct browse_folder_info config = {ROCKBOX_DIR, SHOW_CFG}; @@ -253,17 +253,19 @@ static char* info_getname(int selected_item, void *data, break; #ifdef HAVE_ALBUMART case INFO_ALBUMART: /* album art dimenstions */ - if (gui_sync_wps_uses_albumart()) + { + int width = 0, height = 0; + if (wps_uses_albumart(&width, &height)) { snprintf(buffer, buffer_len, "%s %dx%d", str(LANG_ALBUMART), - gui_wps[0].data->albumart_max_width, - gui_wps[0].data->albumart_max_height); + width, height); } else { snprintf(buffer, buffer_len, "%s %s", str(LANG_ALBUMART), str(LANG_SET_BOOL_NO)); } + } break; #endif } return buffer; @@ -348,17 +350,20 @@ static int info_speak_item(int selected_item, void * data) break; #ifdef HAVE_ALBUMART case INFO_ALBUMART: /* album art dimenstions */ - if (gui_sync_wps_uses_albumart()) + { + int width = 0, height = 0; + if (wps_uses_albumart(&width, &height)) { talk_id(LANG_ALBUMART, false); - talk_value(gui_wps[0].data->albumart_max_width, UNIT_PIXEL, true); - talk_value(gui_wps[0].data->albumart_max_height, UNIT_PIXEL, true); + talk_value(width, UNIT_PIXEL, true); + talk_value(height, UNIT_PIXEL, true); } else { talk_id(LANG_ALBUMART, false); talk_id(LANG_SET_BOOL_NO, true); } + } break; #endif } return 0; diff --git a/apps/playback.c b/apps/playback.c index 2a015da4c5..16f4766958 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -1872,9 +1872,10 @@ static void audio_finish_load_track(void) } } #ifdef HAVE_ALBUMART - if (tracks[track_widx].aa_hid < 0 && gui_sync_wps_uses_albumart()) + if (tracks[track_widx].aa_hid < 0) { char aa_path[MAX_PATH]; + /* find_albumart will error out if the wps doesn't have AA */ if (find_albumart(track_id3, aa_path, sizeof(aa_path))) { tracks[track_widx].aa_hid = bufopen(aa_path, 0, TYPE_BITMAP); diff --git a/apps/playback.h b/apps/playback.h index 3fcb454cc9..378d5effec 100644 --- a/apps/playback.h +++ b/apps/playback.h @@ -49,7 +49,7 @@ void codec_thread_do_callback(void (*fn)(void), int audio_current_aa_hid(void); #endif -#if CONFIG_CODEC == SWCODEC /* This #ifdef is better here than gui/gwps.c */ +#if CONFIG_CODEC == SWCODEC /* This #ifdef is better here than gui/wps.c */ extern void audio_next_dir(void); extern void audio_prev_dir(void); #else diff --git a/apps/recorder/albumart.c b/apps/recorder/albumart.c index f1315da71f..4507923144 100644 --- a/apps/recorder/albumart.c +++ b/apps/recorder/albumart.c @@ -28,6 +28,7 @@ #include "dircache.h" #include "misc.h" #include "settings.h" +#include "wps.h" /* Define LOGF_ENABLE to enable logf output in this file */ /*#define LOGF_ENABLE*/ @@ -279,16 +280,16 @@ bool find_albumart(const struct mp3entry *id3, char *buf, int buflen) return false; char size_string[9]; - struct wps_data *data = gui_wps[0].data; + int width = 0, height = 0; - if (!data) + if (!wps_uses_albumart(&width, &height)) return false; logf("Looking for album art for %s", id3->path); /* Write the size string, e.g. ".100x100". */ snprintf(size_string, sizeof(size_string), ".%dx%d", - data->albumart_max_width, data->albumart_max_height); + width, height); /* First we look for a bitmap of the right size */ if (search_albumart_files(id3, size_string, buf, buflen)) @@ -372,9 +373,14 @@ void draw_album_art(struct gui_wps *gwps, int handle_id, bool clear) void get_albumart_size(struct bitmap *bmp) { /* FIXME: What should we do with albumart on remote? */ - struct wps_data *data = gui_wps[0].data; + int width, height; - bmp->width = data->albumart_max_width; - bmp->height = data->albumart_max_height; + if (!wps_uses_albumart(&width, &height)) + { + width = 0; height = 0; + } + + bmp->width = width; + bmp->height = height; } #endif /* PLUGIN */ diff --git a/apps/settings.c b/apps/settings.c index 8835b95b12..423e6ed173 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -69,7 +69,7 @@ #if CONFIG_TUNER #include "radio.h" #endif -#include "skin_engine/skin_engine.h" +#include "wps.h" #if CONFIG_CODEC == MAS3507D void dac_line_in(bool enable); @@ -848,15 +848,12 @@ void settings_apply(bool read_disk) global_settings.wps_file[0] != 0xff ) { snprintf(buf, sizeof buf, WPS_DIR "/%s.wps", global_settings.wps_file); - skin_data_load(gui_wps[0].data, &screens[0], buf, true); + wps_data_load(SCREEN_MAIN, buf, true); } else { - wps_data_init(gui_wps[0].data); - skin_data_load(gui_wps[0].data, &screens[0], NULL, true); -#ifdef HAVE_REMOTE_LCD - gui_wps[0].data->remote_wps = false; -#endif + wps_data_init(SCREEN_MAIN); + wps_data_load(SCREEN_MAIN, NULL, true); } #if LCD_DEPTH > 1 @@ -878,13 +875,12 @@ void settings_apply(bool read_disk) if ( global_settings.rwps_file[0]) { snprintf(buf, sizeof buf, WPS_DIR "/%s.rwps", global_settings.rwps_file); - skin_data_load(gui_wps[1].data, &screens[1], buf, true); + wps_data_load(SCREEN_REMOTE, buf, true); } else { - wps_data_init(gui_wps[1].data); - skin_data_load(gui_wps[1].data, &screens[1], NULL, true); - gui_wps[1].data->remote_wps = true; + wps_data_init(SCREEN_REMOTE); + wps_data_load(SCREEN_REMOTE, NULL, true); } #endif if ( global_settings.lang_file[0]) { -- cgit