summaryrefslogtreecommitdiff
path: root/apps/gui/skin_engine/skin_display.c
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2011-11-15 14:11:08 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2011-11-15 14:11:08 +0000
commit9e07ef2b0adb8fca7e5a9e516397e533653f8836 (patch)
tree0a283550421917e52ee04068b84a464976f0c4f2 /apps/gui/skin_engine/skin_display.c
parent101693fd3047fb64e766580e80635a424fa25c4d (diff)
downloadrockbox-9e07ef2b0adb8fca7e5a9e516397e533653f8836.tar.gz
rockbox-9e07ef2b0adb8fca7e5a9e516397e533653f8836.zip
Use buflib for all skin engine allocations.
Massive thanks to Michael Chicoine and other testers for finding the early bugs. This removes all skin memory limitations git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30991 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/gui/skin_engine/skin_display.c')
-rw-r--r--apps/gui/skin_engine/skin_display.c47
1 files changed, 25 insertions, 22 deletions
diff --git a/apps/gui/skin_engine/skin_display.c b/apps/gui/skin_engine/skin_display.c
index d2dbb56f64..1114c09a72 100644
--- a/apps/gui/skin_engine/skin_display.c
+++ b/apps/gui/skin_engine/skin_display.c
@@ -102,7 +102,7 @@ void skin_statusbar_changed(struct gui_wps *skin)
102 struct wps_data *data = skin->data; 102 struct wps_data *data = skin->data;
103 const struct screen *display = skin->display; 103 const struct screen *display = skin->display;
104 const int screen = display->screen_type; 104 const int screen = display->screen_type;
105 struct skin_viewport *svp = skin_find_item(VP_DEFAULT_LABEL, SKIN_FIND_VP, data); 105 struct skin_viewport *svp = skin_find_item(VP_DEFAULT_LABEL_STRING, SKIN_FIND_VP, data);
106 106
107 struct viewport *vp = &svp->vp; 107 struct viewport *vp = &svp->vp;
108 viewport_set_defaults(vp, screen); 108 viewport_set_defaults(vp, screen);
@@ -131,7 +131,7 @@ void skin_statusbar_changed(struct gui_wps *skin)
131void draw_progressbar(struct gui_wps *gwps, int line, struct progressbar *pb) 131void draw_progressbar(struct gui_wps *gwps, int line, struct progressbar *pb)
132{ 132{
133 struct screen *display = gwps->display; 133 struct screen *display = gwps->display;
134 struct viewport *vp = pb->vp; 134 struct viewport *vp = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), pb->vp);
135 struct wps_state *state = skin_get_global_state(); 135 struct wps_state *state = skin_get_global_state();
136 struct mp3entry *id3 = state->id3; 136 struct mp3entry *id3 = state->id3;
137 int x = pb->x, y = pb->y, width = pb->width, height = pb->height; 137 int x = pb->x, y = pb->y, width = pb->width, height = pb->height;
@@ -226,9 +226,9 @@ void draw_progressbar(struct gui_wps *gwps, int line, struct progressbar *pb)
226 flags |= INNER_NOFILL; 226 flags |= INNER_NOFILL;
227 } 227 }
228 228
229 if (pb->slider) 229 if (SKINOFFSETTOPTR(get_skin_buffer(gwps->data), pb->slider))
230 { 230 {
231 struct gui_img *img = pb->slider; 231 struct gui_img *img = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), pb->slider);
232 /* clear the slider */ 232 /* clear the slider */
233 screen_clear_area(display, x, y, width, height); 233 screen_clear_area(display, x, y, width, height);
234 234
@@ -245,9 +245,9 @@ void draw_progressbar(struct gui_wps *gwps, int line, struct progressbar *pb)
245 } 245 }
246 } 246 }
247 247
248 if (pb->backdrop) 248 if (SKINOFFSETTOPTR(get_skin_buffer(gwps->data), pb->backdrop))
249 { 249 {
250 struct gui_img *img = pb->backdrop; 250 struct gui_img *img = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), pb->backdrop);
251 img->bm.data = core_get_data(img->buflib_handle); 251 img->bm.data = core_get_data(img->buflib_handle);
252 display->bmp_part(&img->bm, 0, 0, x, y, width, height); 252 display->bmp_part(&img->bm, 0, 0, x, y, width, height);
253 flags |= DONT_CLEAR_EXCESS; 253 flags |= DONT_CLEAR_EXCESS;
@@ -255,11 +255,12 @@ void draw_progressbar(struct gui_wps *gwps, int line, struct progressbar *pb)
255 255
256 if (!pb->nobar) 256 if (!pb->nobar)
257 { 257 {
258 if (pb->image) 258 struct gui_img *img = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), pb->image);
259 if (img)
259 { 260 {
260 char *img_data = core_get_data(pb->image->buflib_handle); 261 char *img_data = core_get_data(img->buflib_handle);
261 pb->image->bm.data = img_data; 262 img->bm.data = img_data;
262 gui_bitmap_scrollbar_draw(display, &pb->image->bm, 263 gui_bitmap_scrollbar_draw(display, &img->bm,
263 x, y, width, height, 264 x, y, width, height,
264 length, 0, end, flags); 265 length, 0, end, flags);
265 } 266 }
@@ -268,11 +269,11 @@ void draw_progressbar(struct gui_wps *gwps, int line, struct progressbar *pb)
268 length, 0, end, flags); 269 length, 0, end, flags);
269 } 270 }
270 271
271 if (pb->slider) 272 if (SKINOFFSETTOPTR(get_skin_buffer(gwps->data), pb->slider))
272 { 273 {
273 int xoff = 0, yoff = 0; 274 int xoff = 0, yoff = 0;
274 int w = width, h = height; 275 int w = width, h = height;
275 struct gui_img *img = pb->slider; 276 struct gui_img *img = SKINOFFSETTOPTR(get_skin_buffer(gwps->data), pb->slider);
276 img->bm.data = core_get_data(img->buflib_handle); 277 img->bm.data = core_get_data(img->buflib_handle);
277 278
278 if (flags&HORIZONTAL) 279 if (flags&HORIZONTAL)
@@ -347,11 +348,12 @@ void wps_display_images(struct gui_wps *gwps, struct viewport* vp)
347 348
348 struct wps_data *data = gwps->data; 349 struct wps_data *data = gwps->data;
349 struct screen *display = gwps->display; 350 struct screen *display = gwps->display;
350 struct skin_token_list *list = data->images; 351 struct skin_token_list *list = SKINOFFSETTOPTR(get_skin_buffer(data), data->images);
351 352
352 while (list) 353 while (list)
353 { 354 {
354 struct gui_img *img = (struct gui_img*)list->token->value.data; 355 struct wps_token *token = SKINOFFSETTOPTR(get_skin_buffer(data), list->token);
356 struct gui_img *img = (struct gui_img*)SKINOFFSETTOPTR(get_skin_buffer(data), token->value.data);
355 if (img->using_preloaded_icons && img->display >= 0) 357 if (img->using_preloaded_icons && img->display >= 0)
356 { 358 {
357 screen_put_icon(display, img->x, img->y, img->display); 359 screen_put_icon(display, img->x, img->y, img->display);
@@ -362,20 +364,21 @@ void wps_display_images(struct gui_wps *gwps, struct viewport* vp)
362 { 364 {
363 wps_draw_image(gwps, img, img->display); 365 wps_draw_image(gwps, img, img->display);
364 } 366 }
365 else if (img->always_display && img->vp == vp) 367 else if (img->always_display && SKINOFFSETTOPTR(get_skin_buffer(data), img->vp) == vp)
366 { 368 {
367 wps_draw_image(gwps, img, 0); 369 wps_draw_image(gwps, img, 0);
368 } 370 }
369 } 371 }
370 list = list->next; 372 list = SKINOFFSETTOPTR(get_skin_buffer(data), list->next);
371 } 373 }
372#ifdef HAVE_ALBUMART 374#ifdef HAVE_ALBUMART
373 /* now draw the AA */ 375 /* now draw the AA */
374 if (data->albumart && data->albumart->vp == vp 376 struct skin_albumart *aa = SKINOFFSETTOPTR(get_skin_buffer(data), data->albumart);
375 && data->albumart->draw_handle >= 0) 377 if (aa && SKINOFFSETTOPTR(get_skin_buffer(data), aa->vp) == vp
378 && aa->draw_handle >= 0)
376 { 379 {
377 draw_album_art(gwps, data->albumart->draw_handle, false); 380 draw_album_art(gwps, aa->draw_handle, false);
378 data->albumart->draw_handle = -1; 381 aa->draw_handle = -1;
379 } 382 }
380#endif 383#endif
381 384
@@ -398,8 +401,8 @@ int evaluate_conditional(struct gui_wps *gwps, int offset,
398 401
399 int intval = num_options < 2 ? 2 : num_options; 402 int intval = num_options < 2 ? 2 : num_options;
400 /* get_token_value needs to know the number of options in the enum */ 403 /* get_token_value needs to know the number of options in the enum */
401 value = get_token_value(gwps, conditional->token, offset, 404 value = get_token_value(gwps, SKINOFFSETTOPTR(get_skin_buffer(gwps->data), conditional->token),
402 result, sizeof(result), &intval); 405 offset, result, sizeof(result), &intval);
403 406
404 /* intval is now the number of the enum option we want to read, 407 /* intval is now the number of the enum option we want to read,
405 starting from 1. If intval is -1, we check if value is empty. */ 408 starting from 1. If intval is -1, we check if value is empty. */