From 2c71aa9feb0268da7d993feddbbe4db591fcd3ba Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Tue, 28 Feb 2012 22:26:32 +1100 Subject: lcd/skin_engine: Add the ability to draw onto the backdrop layer The framebuffer the lcd driver uses can now be changed on the fly which means that regular lcd_* drawing functions can draw onto the "backdrop" buffer. The skin engine can use this to create layered effects. Add the tag %VB to a viewport to draw that viewport onto the backdrop layer. If you want to draw an image onto the backdrop framebuffer use %x(backdrop filename) instead of %X() inside a viewport with %VB. Change-Id: I741498e2af6d4f2d78932cabe8942317893e7cfc --- apps/gui/skin_engine/skin_backdrops.c | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) (limited to 'apps/gui/skin_engine/skin_backdrops.c') diff --git a/apps/gui/skin_engine/skin_backdrops.c b/apps/gui/skin_engine/skin_backdrops.c index 12b21ccb50..15b68589a9 100644 --- a/apps/gui/skin_engine/skin_backdrops.c +++ b/apps/gui/skin_engine/skin_backdrops.c @@ -95,6 +95,10 @@ int skin_backdrop_assign(char* backdrop, char *bmpdir, filename[2] = '\0'; /* we check this later to see if we actually have an image to load. != '\0' means display the image */ } + else if (!strcmp(backdrop, BACKDROP_BUFFERNAME)) + { + strcpy(filename, backdrop); + } else { get_image_filename(backdrop, bmpdir, filename, sizeof(filename)); @@ -156,15 +160,20 @@ bool skin_backdrops_preload(void) { 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) + if (strcmp(filename, BACKDROP_BUFFERNAME)) { - core_free(backdrops[i].buflib_handle); - backdrops[i].buflib_handle = -1; - retval = false; + backdrops[i].loaded = + screens[screen].backdrop_load(filename, backdrops[i].buffer); + handle_being_loaded = -1; + if (!backdrops[i].loaded) + { + core_free(backdrops[i].buflib_handle); + backdrops[i].buflib_handle = -1; + retval = false; + } } + else + backdrops[i].loaded = true; } else retval = false; @@ -176,10 +185,21 @@ bool skin_backdrops_preload(void) return retval; } +void* skin_backdrop_get_buffer(int backdrop_id) +{ + if (backdrop_id < 0) + return NULL; + return backdrops[backdrop_id].buffer; +} + void skin_backdrop_show(int backdrop_id) { if (backdrop_id < 0) + { + screens[0].backdrop_show(NULL); + current_lcd_backdrop[0] = -1; return; + } enum screen_type screen = backdrops[backdrop_id].screen; if ((backdrops[backdrop_id].loaded == false) || (backdrops[backdrop_id].name[0] == '-' && -- cgit v1.2.3