diff options
Diffstat (limited to 'apps/gui/gwps-common.c')
-rw-r--r-- | apps/gui/gwps-common.c | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/apps/gui/gwps-common.c b/apps/gui/gwps-common.c index 744f86e42a..37b2b7c5d1 100644 --- a/apps/gui/gwps-common.c +++ b/apps/gui/gwps-common.c | |||
@@ -516,11 +516,11 @@ static void clear_image_pos(struct gui_wps *gwps, int n) | |||
516 | struct wps_data *data = gwps->data; | 516 | struct wps_data *data = gwps->data; |
517 | gwps->display->set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); | 517 | gwps->display->set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); |
518 | gwps->display->fillrect(data->img[n].x, data->img[n].y, | 518 | gwps->display->fillrect(data->img[n].x, data->img[n].y, |
519 | data->img[n].bm.width, data->img[n].bm.height); | 519 | data->img[n].bm.width, data->img[n].subimage_height); |
520 | gwps->display->set_drawmode(DRMODE_SOLID); | 520 | gwps->display->set_drawmode(DRMODE_SOLID); |
521 | } | 521 | } |
522 | 522 | ||
523 | static void wps_draw_image(struct gui_wps *gwps, int n) | 523 | static void wps_draw_image(struct gui_wps *gwps, int n, int subimage) |
524 | { | 524 | { |
525 | struct screen *display = gwps->display; | 525 | struct screen *display = gwps->display; |
526 | struct wps_data *data = gwps->data; | 526 | struct wps_data *data = gwps->data; |
@@ -532,15 +532,18 @@ static void wps_draw_image(struct gui_wps *gwps, int n) | |||
532 | #if LCD_DEPTH > 1 | 532 | #if LCD_DEPTH > 1 |
533 | if(data->img[n].bm.format == FORMAT_MONO) { | 533 | if(data->img[n].bm.format == FORMAT_MONO) { |
534 | #endif | 534 | #endif |
535 | display->mono_bitmap(data->img[n].bm.data, data->img[n].x, | 535 | display->mono_bitmap_part(data->img[n].bm.data, |
536 | data->img[n].y, data->img[n].bm.width, | 536 | 0, data->img[n].subimage_height * subimage, |
537 | data->img[n].bm.height); | 537 | data->img[n].bm.width, data->img[n].x, |
538 | data->img[n].y, data->img[n].bm.width, | ||
539 | data->img[n].subimage_height); | ||
538 | #if LCD_DEPTH > 1 | 540 | #if LCD_DEPTH > 1 |
539 | } else { | 541 | } else { |
540 | display->transparent_bitmap((fb_data *)data->img[n].bm.data, | 542 | display->transparent_bitmap_part((fb_data *)data->img[n].bm.data, |
541 | data->img[n].x, | 543 | 0, data->img[n].subimage_height * subimage, |
542 | data->img[n].y, data->img[n].bm.width, | 544 | data->img[n].bm.width, data->img[n].x, |
543 | data->img[n].bm.height); | 545 | data->img[n].y, data->img[n].bm.width, |
546 | data->img[n].subimage_height); | ||
544 | } | 547 | } |
545 | #endif | 548 | #endif |
546 | } | 549 | } |
@@ -556,11 +559,15 @@ static void wps_display_images(struct gui_wps *gwps, struct viewport* vp) | |||
556 | 559 | ||
557 | for (n = 0; n < MAX_IMAGES; n++) | 560 | for (n = 0; n < MAX_IMAGES; n++) |
558 | { | 561 | { |
559 | if (data->img[n].loaded && | 562 | if (data->img[n].loaded) |
560 | (data->img[n].display || | ||
561 | (data->img[n].always_display && data->img[n].vp == vp))) | ||
562 | { | 563 | { |
563 | wps_draw_image(gwps, n); | 564 | if (data->img[n].display >= 0) |
565 | { | ||
566 | wps_draw_image(gwps, n, data->img[n].display); | ||
567 | } else if (data->img[n].always_display && data->img[n].vp == vp) | ||
568 | { | ||
569 | wps_draw_image(gwps, n, 0); | ||
570 | } | ||
564 | } | 571 | } |
565 | } | 572 | } |
566 | display->set_drawmode(DRMODE_SOLID); | 573 | display->set_drawmode(DRMODE_SOLID); |
@@ -1449,7 +1456,7 @@ static bool evaluate_conditional(struct gui_wps *gwps, int *token_index) | |||
1449 | #ifdef HAVE_LCD_BITMAP | 1456 | #ifdef HAVE_LCD_BITMAP |
1450 | /* clear all pictures in the conditional and nested ones */ | 1457 | /* clear all pictures in the conditional and nested ones */ |
1451 | if (data->tokens[i].type == WPS_TOKEN_IMAGE_PRELOAD_DISPLAY) | 1458 | if (data->tokens[i].type == WPS_TOKEN_IMAGE_PRELOAD_DISPLAY) |
1452 | clear_image_pos(gwps, data->tokens[i].value.i); | 1459 | clear_image_pos(gwps, data->tokens[i].value.i & 0xFF); |
1453 | #endif | 1460 | #endif |
1454 | #ifdef HAVE_ALBUMART | 1461 | #ifdef HAVE_ALBUMART |
1455 | if (data->tokens[i].type == WPS_TOKEN_ALBUMART_DISPLAY) | 1462 | if (data->tokens[i].type == WPS_TOKEN_ALBUMART_DISPLAY) |
@@ -1515,9 +1522,11 @@ static bool get_line(struct gui_wps *gwps, | |||
1515 | case WPS_TOKEN_IMAGE_PRELOAD_DISPLAY: | 1522 | case WPS_TOKEN_IMAGE_PRELOAD_DISPLAY: |
1516 | { | 1523 | { |
1517 | struct gui_img *img = data->img; | 1524 | struct gui_img *img = data->img; |
1518 | int n = data->tokens[i].value.i; | 1525 | int n = data->tokens[i].value.i & 0xFF; |
1526 | int subimage = data->tokens[i].value.i >> 8; | ||
1527 | |||
1519 | if (n >= 0 && n < MAX_IMAGES && img[n].loaded) | 1528 | if (n >= 0 && n < MAX_IMAGES && img[n].loaded) |
1520 | img[n].display = true; | 1529 | img[n].display = subimage; |
1521 | break; | 1530 | break; |
1522 | } | 1531 | } |
1523 | #endif | 1532 | #endif |
@@ -1944,7 +1953,7 @@ bool gui_wps_refresh(struct gui_wps *gwps, | |||
1944 | /* Set images to not to be displayed */ | 1953 | /* Set images to not to be displayed */ |
1945 | for (i = 0; i < MAX_IMAGES; i++) | 1954 | for (i = 0; i < MAX_IMAGES; i++) |
1946 | { | 1955 | { |
1947 | data->img[i].display = false; | 1956 | data->img[i].display = -1; |
1948 | } | 1957 | } |
1949 | #endif | 1958 | #endif |
1950 | 1959 | ||