Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/apps/gui/skin_engine/skin_backdrops.c b/apps/gui/skin_engine/skin_backdrops.c
- index 12950a6..5002d8a 100644
- --- a/apps/gui/skin_engine/skin_backdrops.c
- +++ b/apps/gui/skin_engine/skin_backdrops.c
- @@ -22,6 +22,7 @@
- #include "config.h"
- #include <stdio.h>
- #include <stdlib.h>
- +#include "core_alloc.h"
- #include "string-extra.h"
- #include "settings.h"
- #include "wps_internals.h"
- @@ -36,9 +37,31 @@ static struct skin_backdrop {
- char *buffer;
- enum screen_type screen;
- bool loaded;
- + int buflib_handle;
- } backdrops[NB_BDROPS];
- #define NB_BDROPS SKINNABLE_SCREENS_COUNT*NB_SCREENS
- +int handle_being_loaded;
- +int current_lcd_backdrop[NB_SCREENS];
- +
- +int buflib_move_callback(int handle, void* current, void* new)
- +{
- + int i;
- + if (handle == handle_being_loaded)
- + return BUFLIB_CB_CANNOT_MOVE;
- + for (i=0; i<NB_BDROPS; i++)
- + {
- + if (backdrops[i].buffer == current)
- + {
- + backdrops[i].buffer = new;
- + break;
- + }
- + }
- + FOR_NB_SCREENS(i)
- + skin_backdrop_show(current_lcd_backdrop[i]);
- + return BUFLIB_CB_OK;
- +}
- +static struct buflib_callbacks buflib_ops = {buflib_move_callback, NULL};
- void skin_backdrop_init(void)
- {
- @@ -49,6 +72,9 @@ void skin_backdrop_init(void)
- backdrops[i].buffer = NULL;
- backdrops[i].loaded = false;
- }
- + FOR_NB_SCREENS(i)
- + current_lcd_backdrop[i] = -1;
- + handle_being_loaded = -1;
- }
- int skin_backdrop_assign(char* backdrop, char *bmpdir,
- @@ -117,10 +143,18 @@ bool skin_backdrops_preload(void)
- }
- if (*filename && *filename != '-')
- {
- - backdrops[i].buffer = (char*)skin_buffer_alloc(buf_size);
- - backdrops[i].loaded = backdrops[i].buffer &&
- - screens[screen].backdrop_load(filename, backdrops[i].buffer);
- - if (!backdrops[i].loaded)
- + backdrops[i].buflib_handle = core_alloc_ex(filename, buf_size, &buflib_ops);
- + if (backdrops[i].buflib_handle > 0)
- + {
- + backdrops[i].buffer = core_get_data(backdrops[i].buflib_handle);
- + handle_being_loaded = backdrops[i].buflib_handle;
- + backdrops[i].loaded =
- + screens[screen].backdrop_load(filename, backdrops[i].buffer);
- + handle_being_loaded = -1;
- + if (!backdrops[i].loaded)
- + retval = false;
- + }
- + else
- retval = false;
- }
- if (backdrops[i].name[0] == '-' && backdrops[i].loaded)
- @@ -147,6 +181,7 @@ void skin_backdrop_show(int backdrop_id)
- void skin_backdrop_unload(int backdrop_id)
- {
- + core_free(backdrops[backdrop_id].buflib_handle);
- backdrops[backdrop_id].buffer = NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement