summaryrefslogtreecommitdiff
path: root/apps/gui/gwps-common.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/gui/gwps-common.c')
-rw-r--r--apps/gui/gwps-common.c43
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
523static void wps_draw_image(struct gui_wps *gwps, int n) 523static 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