summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/gui/skin_engine/skin_backdrops.c18
-rw-r--r--apps/gui/skin_engine/skin_engine.c33
-rw-r--r--apps/gui/skin_engine/skin_engine.h2
-rw-r--r--apps/gui/statusbar-skinned.c7
-rw-r--r--apps/gui/statusbar-skinned.h2
5 files changed, 40 insertions, 22 deletions
diff --git a/apps/gui/skin_engine/skin_backdrops.c b/apps/gui/skin_engine/skin_backdrops.c
index 41de1e1f76..146dccb18a 100644
--- a/apps/gui/skin_engine/skin_backdrops.c
+++ b/apps/gui/skin_engine/skin_backdrops.c
@@ -81,8 +81,9 @@ static int buflib_move_callback(int handle, void* current, void* new)
81} 81}
82static struct buflib_callbacks buflib_ops = {buflib_move_callback, NULL, NULL}; 82static struct buflib_callbacks buflib_ops = {buflib_move_callback, NULL, NULL};
83static bool first_go = true; 83static bool first_go = true;
84void skin_backdrop_init(void) 84bool skin_backdrop_init(void)
85{ 85{
86 bool go_status = first_go;
86 if (first_go) 87 if (first_go)
87 { 88 {
88 for (int i=0; i<NB_BDROPS; i++) 89 for (int i=0; i<NB_BDROPS; i++)
@@ -98,6 +99,7 @@ void skin_backdrop_init(void)
98 handle_being_loaded = -1; 99 handle_being_loaded = -1;
99 first_go = false; 100 first_go = false;
100 } 101 }
102 return go_status;
101} 103}
102 104
103int skin_backdrop_assign(char* backdrop, char *bmpdir, 105int skin_backdrop_assign(char* backdrop, char *bmpdir,
@@ -331,8 +333,20 @@ void skin_backdrop_unload(int backdrop_id)
331 (void)backdrop_id; 333 (void)backdrop_id;
332} 334}
333#else 335#else
336static bool first_go = true;
337bool skin_backdrop_init(void)
338{
339 bool go_status = first_go;
340 first_go = false;
341 return go_status;
342}
343
344void skin_backdrop_load_setting(void)
345{
346}
334 347
335void skin_backdrop_init(void) 348void skin_backdrop_show(int backdrop_id)
336{ 349{
350 (void) backdrop_id;
337} 351}
338#endif 352#endif
diff --git a/apps/gui/skin_engine/skin_engine.c b/apps/gui/skin_engine/skin_engine.c
index b3626b681d..8ba76e5739 100644
--- a/apps/gui/skin_engine/skin_engine.c
+++ b/apps/gui/skin_engine/skin_engine.c
@@ -149,16 +149,28 @@ void skin_unload_all(void)
149 gui_sync_skin_init(); 149 gui_sync_skin_init();
150} 150}
151 151
152static void skin_reset_buffers(int item, int screen)
153{
154 skin_data_free_buflib_allocs(&skins[item][screen].data);
155#ifdef HAVE_ALBUMART
156 if (skins[item][screen].data.playback_aa_slot >= 0)
157 playback_release_aa_slot(skins[item][screen].data.playback_aa_slot);
158#endif
159#ifdef HAVE_BACKDROP_IMAGE
160 if (skins[item][screen].data.backdrop_id >= 0)
161 skin_backdrop_unload(skins[item][screen].data.backdrop_id);
162#endif
163}
164
152void settings_apply_skins(void) 165void settings_apply_skins(void)
153{ 166{
154 int i; 167 int i;
155 char filename[MAX_PATH]; 168 char filename[MAX_PATH];
156 static bool first_run = true;
157 169
158 if (audio_status() & AUDIO_STATUS_PLAY) 170 if (audio_status() & AUDIO_STATUS_PLAY)
159 audio_stop(); 171 audio_stop();
160 172
161 skin_backdrop_init(); 173 bool first_run = skin_backdrop_init();
162 skins_initialised = true; 174 skins_initialised = true;
163 175
164 /* Make sure each skin is loaded */ 176 /* Make sure each skin is loaded */
@@ -170,15 +182,7 @@ void settings_apply_skins(void)
170 182
171 if (!first_run) 183 if (!first_run)
172 { 184 {
173 skin_data_free_buflib_allocs(&skins[i][j].data); 185 skin_reset_buffers(i, j);
174#ifdef HAVE_ALBUMART
175 if (skins[i][j].data.playback_aa_slot >= 0)
176 playback_release_aa_slot(skins[i][j].data.playback_aa_slot);
177#endif
178#ifdef HAVE_BACKDROP_IMAGE
179 if (skins[i][j].data.backdrop_id >= 0)
180 skin_backdrop_unload(skins[i][j].data.backdrop_id);
181#endif
182 } 186 }
183 gui_skin_reset(&skins[i][j]); 187 gui_skin_reset(&skins[i][j]);
184 skins[i][j].gui_wps.display = &screens[j]; 188 skins[i][j].gui_wps.display = &screens[j];
@@ -186,17 +190,14 @@ void settings_apply_skins(void)
186 skin_get_gwps(i, j); 190 skin_get_gwps(i, j);
187 } 191 }
188 } 192 }
189 first_run = false; 193
190#ifdef HAVE_BACKDROP_IMAGE
191 /* any backdrop that was loaded with "-" has to be reloaded because 194 /* any backdrop that was loaded with "-" has to be reloaded because
192 * the setting may have changed */ 195 * the setting may have changed */
193 skin_backdrop_load_setting(); 196 skin_backdrop_load_setting();
194#endif
195 viewportmanager_theme_changed(THEME_STATUSBAR); 197 viewportmanager_theme_changed(THEME_STATUSBAR);
196#ifdef HAVE_BACKDROP_IMAGE 198
197 FOR_NB_SCREENS(i) 199 FOR_NB_SCREENS(i)
198 skin_backdrop_show(sb_get_backdrop(i)); 200 skin_backdrop_show(sb_get_backdrop(i));
199#endif
200} 201}
201 202
202void skin_load(enum skinnable_screens skin, enum screen_type screen, 203void skin_load(enum skinnable_screens skin, enum screen_type screen,
diff --git a/apps/gui/skin_engine/skin_engine.h b/apps/gui/skin_engine/skin_engine.h
index 3b757a5f8b..e26ec34d1f 100644
--- a/apps/gui/skin_engine/skin_engine.h
+++ b/apps/gui/skin_engine/skin_engine.h
@@ -62,7 +62,7 @@ bool skin_has_sbs(enum screen_type screen, struct wps_data *data);
62/* load a backdrop into the skin buffer. 62/* load a backdrop into the skin buffer.
63 * reuse buffers if the file is already loaded */ 63 * reuse buffers if the file is already loaded */
64char* skin_backdrop_load(char* backdrop, char *bmpdir, enum screen_type screen); 64char* skin_backdrop_load(char* backdrop, char *bmpdir, enum screen_type screen);
65void skin_backdrop_init(void); 65bool skin_backdrop_init(void);
66int skin_backdrop_assign(char* backdrop, char *bmpdir, 66int skin_backdrop_assign(char* backdrop, char *bmpdir,
67 enum screen_type screen); 67 enum screen_type screen);
68bool skin_backdrops_preload(void); 68bool skin_backdrops_preload(void);
diff --git a/apps/gui/statusbar-skinned.c b/apps/gui/statusbar-skinned.c
index 63f3197faa..fd695bf6b6 100644
--- a/apps/gui/statusbar-skinned.c
+++ b/apps/gui/statusbar-skinned.c
@@ -156,7 +156,12 @@ int sb_get_backdrop(enum screen_type screen)
156 else 156 else
157 return -1; 157 return -1;
158} 158}
159 159#else
160int sb_get_backdrop(enum screen_type screen)
161{
162 (void) screen;
163 return -1;
164}
160#endif 165#endif
161static bool force_waiting = false; 166static bool force_waiting = false;
162void sb_skin_update(enum screen_type screen, bool force) 167void sb_skin_update(enum screen_type screen, bool force)
diff --git a/apps/gui/statusbar-skinned.h b/apps/gui/statusbar-skinned.h
index ad102bef47..3ed36f1a84 100644
--- a/apps/gui/statusbar-skinned.h
+++ b/apps/gui/statusbar-skinned.h
@@ -49,9 +49,7 @@ void sb_bypass_touchregions(bool enable);
49int sb_touch_to_button(int context); 49int sb_touch_to_button(int context);
50#endif 50#endif
51 51
52#if (LCD_DEPTH > 1) || (defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1)
53int sb_get_backdrop(enum screen_type screen); 52int sb_get_backdrop(enum screen_type screen);
54#endif
55int sb_preproccess(enum screen_type screen, struct wps_data *data); 53int sb_preproccess(enum screen_type screen, struct wps_data *data);
56int sb_postproccess(enum screen_type screen, struct wps_data *data); 54int sb_postproccess(enum screen_type screen, struct wps_data *data);
57 55