diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2011-11-15 14:11:08 +0000 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2011-11-15 14:11:08 +0000 |
commit | 9e07ef2b0adb8fca7e5a9e516397e533653f8836 (patch) | |
tree | 0a283550421917e52ee04068b84a464976f0c4f2 /apps/gui/skin_engine/skin_display.c | |
parent | 101693fd3047fb64e766580e80635a424fa25c4d (diff) | |
download | rockbox-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.c | 47 |
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) | |||
131 | void draw_progressbar(struct gui_wps *gwps, int line, struct progressbar *pb) | 131 | void 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. */ |