summaryrefslogtreecommitdiffstats
path: root/apps/gui/skin_engine/skin_backdrops.c
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2012-02-28 22:26:32 +1100
committerJonathan Gordon <rockbox@jdgordon.info>2012-02-28 23:03:04 +1100
commit2c71aa9feb0268da7d993feddbbe4db591fcd3ba (patch)
tree29b3c1480abca46813ef2dc3bb8f0862b596fe34 /apps/gui/skin_engine/skin_backdrops.c
parent13f98df5ed6b8183d972f85a1bfe55cf02194941 (diff)
downloadrockbox-2c71aa9feb0268da7d993feddbbe4db591fcd3ba.tar.gz
rockbox-2c71aa9feb0268da7d993feddbbe4db591fcd3ba.zip
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
Diffstat (limited to 'apps/gui/skin_engine/skin_backdrops.c')
-rw-r--r--apps/gui/skin_engine/skin_backdrops.c34
1 files changed, 27 insertions, 7 deletions
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] == '-' &&