diff --git a/apps/gui/skin_engine/skin_backdrops.c b/apps/gui/skin_engine/skin_backdrops.c index eecf5b0433..debe392511 100644 --- a/apps/gui/skin_engine/skin_backdrops.c +++ b/apps/gui/skin_engine/skin_backdrops.c @@ -34,13 +34,14 @@ static struct skin_backdrop { char name[MAX_PATH]; char *buffer; - enum screen_type screen; - bool loaded; int buflib_handle; int ref_count; + bool initialized; + bool loaded; + bool UNUSED_; + int8_t screen; } backdrops[NB_BDROPS]; -#define NB_BDROPS SKINNABLE_SCREENS_COUNT*NB_SCREENS static int current_lcd_backdrop[NB_SCREENS]; bool skin_backdrop_get_debug(int index, char **path, int *ref_count, size_t *size) @@ -52,7 +53,7 @@ bool skin_backdrop_get_debug(int index, char **path, int *ref_count, size_t *siz *path = backdrops[index].name; *ref_count = backdrops[index].ref_count; -#if defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1) +#if defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1) /* HAVE_REMOTE_LCD */ enum screen_type screen = backdrops[index].screen; if (screen == SCREEN_REMOTE) *size = REMOTE_LCD_BACKDROP_BYTES; @@ -74,28 +75,28 @@ static int buflib_move_callback(int handle, void* current, void* new) break; } } - FOR_NB_SCREENS(i) - skin_backdrop_show(current_lcd_backdrop[i]); + FOR_NB_SCREENS(n) + skin_backdrop_show(current_lcd_backdrop[n]); return BUFLIB_CB_OK; } static struct buflib_callbacks buflib_ops = {buflib_move_callback, NULL, NULL}; -static bool first_go = true; + bool skin_backdrop_init(void) { - bool go_status = first_go; - if (first_go) + bool go_status = !backdrops[0].initialized; + if (go_status) { for (int i=0; i 1) + + enum screen_type screen = SCREEN_MAIN; +#if defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1) /* HAVE_REMOTE_LCD */ + screen = backdrops[i].screen; if (screen == SCREEN_REMOTE) buf_size = REMOTE_LCD_BACKDROP_BYTES; else @@ -222,9 +233,9 @@ void skin_backdrop_set_buffer(int backdrop_id, struct skin_viewport *svp) return; } - enum screen_type screen = backdrops[backdrop_id].screen; - svp->framebuf.ch_ptr = backdrops[backdrop_id].buffer; -#if defined(HAVE_REMOTE_LCD) + enum screen_type screen = SCREEN_MAIN; +#if defined(HAVE_REMOTE_LCD) /* HAVE_REMOTE_LCD */ + screen = backdrops[backdrop_id].screen; if (screen == SCREEN_REMOTE) svp->framebuf.elems = REMOTE_LCD_BACKDROP_BYTES / sizeof(fb_remote_data); else @@ -232,6 +243,7 @@ void skin_backdrop_set_buffer(int backdrop_id, struct skin_viewport *svp) { svp->framebuf.elems = LCD_BACKDROP_BYTES / sizeof(fb_data); } + svp->framebuf.ch_ptr = backdrops[backdrop_id].buffer; svp->framebuf.stride = 0; /* default stride */ svp->framebuf.get_address_fn = NULL; /*Default iterator*/ screens[screen].viewport_set_buffer(&svp->vp, &svp->framebuf); @@ -245,7 +257,12 @@ void skin_backdrop_show(int backdrop_id) current_lcd_backdrop[0] = -1; return; } +#if !defined(HAVE_REMOTE_LCD) + enum screen_type screen = SCREEN_MAIN; +#else /* HAVE_REMOTE_LCD */ enum screen_type screen = backdrops[backdrop_id].screen; +#endif + if ((backdrops[backdrop_id].loaded == false) || (backdrops[backdrop_id].name[0] == '-' && backdrops[backdrop_id].name[2] == '\0')) @@ -279,7 +296,11 @@ void skin_backdrop_load_setting(void) int i; for(i=0;i