diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2012-02-28 22:26:32 +1100 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2012-02-28 23:03:04 +1100 |
commit | 2c71aa9feb0268da7d993feddbbe4db591fcd3ba (patch) | |
tree | 29b3c1480abca46813ef2dc3bb8f0862b596fe34 /apps/gui/skin_engine/skin_backdrops.c | |
parent | 13f98df5ed6b8183d972f85a1bfe55cf02194941 (diff) | |
download | rockbox-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.c | 34 |
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, | |||
95 | filename[2] = '\0'; /* we check this later to see if we actually have an | 95 | filename[2] = '\0'; /* we check this later to see if we actually have an |
96 | image to load. != '\0' means display the image */ | 96 | image to load. != '\0' means display the image */ |
97 | } | 97 | } |
98 | else if (!strcmp(backdrop, BACKDROP_BUFFERNAME)) | ||
99 | { | ||
100 | strcpy(filename, backdrop); | ||
101 | } | ||
98 | else | 102 | else |
99 | { | 103 | { |
100 | get_image_filename(backdrop, bmpdir, filename, sizeof(filename)); | 104 | get_image_filename(backdrop, bmpdir, filename, sizeof(filename)); |
@@ -156,15 +160,20 @@ bool skin_backdrops_preload(void) | |||
156 | { | 160 | { |
157 | backdrops[i].buffer = core_get_data(backdrops[i].buflib_handle); | 161 | backdrops[i].buffer = core_get_data(backdrops[i].buflib_handle); |
158 | handle_being_loaded = backdrops[i].buflib_handle; | 162 | handle_being_loaded = backdrops[i].buflib_handle; |
159 | backdrops[i].loaded = | 163 | if (strcmp(filename, BACKDROP_BUFFERNAME)) |
160 | screens[screen].backdrop_load(filename, backdrops[i].buffer); | ||
161 | handle_being_loaded = -1; | ||
162 | if (!backdrops[i].loaded) | ||
163 | { | 164 | { |
164 | core_free(backdrops[i].buflib_handle); | 165 | backdrops[i].loaded = |
165 | backdrops[i].buflib_handle = -1; | 166 | screens[screen].backdrop_load(filename, backdrops[i].buffer); |
166 | retval = false; | 167 | handle_being_loaded = -1; |
168 | if (!backdrops[i].loaded) | ||
169 | { | ||
170 | core_free(backdrops[i].buflib_handle); | ||
171 | backdrops[i].buflib_handle = -1; | ||
172 | retval = false; | ||
173 | } | ||
167 | } | 174 | } |
175 | else | ||
176 | backdrops[i].loaded = true; | ||
168 | } | 177 | } |
169 | else | 178 | else |
170 | retval = false; | 179 | retval = false; |
@@ -176,10 +185,21 @@ bool skin_backdrops_preload(void) | |||
176 | return retval; | 185 | return retval; |
177 | } | 186 | } |
178 | 187 | ||
188 | void* skin_backdrop_get_buffer(int backdrop_id) | ||
189 | { | ||
190 | if (backdrop_id < 0) | ||
191 | return NULL; | ||
192 | return backdrops[backdrop_id].buffer; | ||
193 | } | ||
194 | |||
179 | void skin_backdrop_show(int backdrop_id) | 195 | void skin_backdrop_show(int backdrop_id) |
180 | { | 196 | { |
181 | if (backdrop_id < 0) | 197 | if (backdrop_id < 0) |
198 | { | ||
199 | screens[0].backdrop_show(NULL); | ||
200 | current_lcd_backdrop[0] = -1; | ||
182 | return; | 201 | return; |
202 | } | ||
183 | enum screen_type screen = backdrops[backdrop_id].screen; | 203 | enum screen_type screen = backdrops[backdrop_id].screen; |
184 | if ((backdrops[backdrop_id].loaded == false) || | 204 | if ((backdrops[backdrop_id].loaded == false) || |
185 | (backdrops[backdrop_id].name[0] == '-' && | 205 | (backdrops[backdrop_id].name[0] == '-' && |