diff options
Diffstat (limited to 'apps/plugins/jpeg/jpeg.c')
-rw-r--r-- | apps/plugins/jpeg/jpeg.c | 109 |
1 files changed, 31 insertions, 78 deletions
diff --git a/apps/plugins/jpeg/jpeg.c b/apps/plugins/jpeg/jpeg.c index fc98834a7d..807c6c4101 100644 --- a/apps/plugins/jpeg/jpeg.c +++ b/apps/plugins/jpeg/jpeg.c | |||
@@ -445,6 +445,25 @@ int show_menu(void) /* return 1 to quit */ | |||
445 | return 0; | 445 | return 0; |
446 | } | 446 | } |
447 | 447 | ||
448 | void draw_image_rect(struct t_disp* pdisp, int x, int y, int width, int height) | ||
449 | { | ||
450 | #ifdef HAVE_LCD_COLOR | ||
451 | yuv_bitmap_part( | ||
452 | pdisp->bitmap, pdisp->csub_x, pdisp->csub_y, | ||
453 | pdisp->x + x, pdisp->y + y, pdisp->stride, | ||
454 | x + MAX(0, (LCD_WIDTH - pdisp->width) / 2), | ||
455 | y + MAX(0, (LCD_HEIGHT - pdisp->height) / 2), | ||
456 | width, height, | ||
457 | jpeg_settings.colour_mode, jpeg_settings.dither_mode); | ||
458 | #else | ||
459 | MYXLCD(gray_bitmap_part)( | ||
460 | pdisp->bitmap[0], pdisp->x + x, pdisp->y + y, pdisp->stride, | ||
461 | x + MAX(0, (LCD_WIDTH-pdisp->width)/2), | ||
462 | y + MAX(0, (LCD_HEIGHT-pdisp->height)/2), | ||
463 | width, height); | ||
464 | #endif | ||
465 | } | ||
466 | |||
448 | /* Pan the viewing window right - move image to the left and fill in | 467 | /* Pan the viewing window right - move image to the left and fill in |
449 | the right-hand side */ | 468 | the right-hand side */ |
450 | static void pan_view_right(struct t_disp* pdisp) | 469 | static void pan_view_right(struct t_disp* pdisp) |
@@ -456,20 +475,7 @@ static void pan_view_right(struct t_disp* pdisp) | |||
456 | { | 475 | { |
457 | MYXLCD(scroll_left)(move); /* scroll left */ | 476 | MYXLCD(scroll_left)(move); /* scroll left */ |
458 | pdisp->x += move; | 477 | pdisp->x += move; |
459 | #ifdef HAVE_LCD_COLOR | 478 | draw_image_rect(pdisp, LCD_WIDTH - move, 0, move, pdisp->height-pdisp->y); |
460 | yuv_bitmap_part( | ||
461 | pdisp->bitmap, pdisp->csub_x, pdisp->csub_y, | ||
462 | pdisp->x + LCD_WIDTH - move, pdisp->y, pdisp->stride, | ||
463 | LCD_WIDTH - move, MAX(0, (LCD_HEIGHT-pdisp->height)/2), /* x, y */ | ||
464 | move, MIN(LCD_HEIGHT, pdisp->height), /* w, h */ | ||
465 | jpeg_settings.colour_mode, jpeg_settings.dither_mode); | ||
466 | #else | ||
467 | MYXLCD(gray_bitmap_part)( | ||
468 | pdisp->bitmap[0], pdisp->x + LCD_WIDTH - move, | ||
469 | pdisp->y, pdisp->stride, | ||
470 | LCD_WIDTH - move, MAX(0, (LCD_HEIGHT-pdisp->height)/2), /* x, y */ | ||
471 | move, MIN(LCD_HEIGHT, pdisp->height)); /* w, h */ | ||
472 | #endif | ||
473 | MYLCD_UPDATE(); | 479 | MYLCD_UPDATE(); |
474 | } | 480 | } |
475 | } | 481 | } |
@@ -485,24 +491,11 @@ static void pan_view_left(struct t_disp* pdisp) | |||
485 | { | 491 | { |
486 | MYXLCD(scroll_right)(move); /* scroll right */ | 492 | MYXLCD(scroll_right)(move); /* scroll right */ |
487 | pdisp->x -= move; | 493 | pdisp->x -= move; |
488 | #ifdef HAVE_LCD_COLOR | 494 | draw_image_rect(pdisp, 0, 0, move, pdisp->height-pdisp->y); |
489 | yuv_bitmap_part( | ||
490 | pdisp->bitmap, pdisp->csub_x, pdisp->csub_y, | ||
491 | pdisp->x, pdisp->y, pdisp->stride, | ||
492 | 0, MAX(0, (LCD_HEIGHT-pdisp->height)/2), /* x, y */ | ||
493 | move, MIN(LCD_HEIGHT, pdisp->height), /* w, h */ | ||
494 | jpeg_settings.colour_mode, jpeg_settings.dither_mode); | ||
495 | #else | ||
496 | MYXLCD(gray_bitmap_part)( | ||
497 | pdisp->bitmap[0], pdisp->x, pdisp->y, pdisp->stride, | ||
498 | 0, MAX(0, (LCD_HEIGHT-pdisp->height)/2), /* x, y */ | ||
499 | move, MIN(LCD_HEIGHT, pdisp->height)); /* w, h */ | ||
500 | #endif | ||
501 | MYLCD_UPDATE(); | 495 | MYLCD_UPDATE(); |
502 | } | 496 | } |
503 | } | 497 | } |
504 | 498 | ||
505 | |||
506 | /* Pan the viewing window up - move image down and fill in | 499 | /* Pan the viewing window up - move image down and fill in |
507 | the top */ | 500 | the top */ |
508 | static void pan_view_up(struct t_disp* pdisp) | 501 | static void pan_view_up(struct t_disp* pdisp) |
@@ -521,19 +514,8 @@ static void pan_view_up(struct t_disp* pdisp) | |||
521 | caused by lack of error history on line zero. */ | 514 | caused by lack of error history on line zero. */ |
522 | move = MIN(move + 1, pdisp->y + pdisp->height); | 515 | move = MIN(move + 1, pdisp->y + pdisp->height); |
523 | } | 516 | } |
524 | |||
525 | yuv_bitmap_part( | ||
526 | pdisp->bitmap, pdisp->csub_x, pdisp->csub_y, | ||
527 | pdisp->x, pdisp->y, pdisp->stride, | ||
528 | MAX(0, (LCD_WIDTH-pdisp->width)/2), 0, /* x, y */ | ||
529 | MIN(LCD_WIDTH, pdisp->width), move, /* w, h */ | ||
530 | jpeg_settings.colour_mode, jpeg_settings.dither_mode); | ||
531 | #else | ||
532 | MYXLCD(gray_bitmap_part)( | ||
533 | pdisp->bitmap[0], pdisp->x, pdisp->y, pdisp->stride, | ||
534 | MAX(0, (LCD_WIDTH-pdisp->width)/2), 0, /* x, y */ | ||
535 | MIN(LCD_WIDTH, pdisp->width), move); /* w, h */ | ||
536 | #endif | 517 | #endif |
518 | draw_image_rect(pdisp, 0, 0, pdisp->width-pdisp->x, move); | ||
537 | MYLCD_UPDATE(); | 519 | MYLCD_UPDATE(); |
538 | } | 520 | } |
539 | } | 521 | } |
@@ -561,14 +543,11 @@ static void pan_view_down(struct t_disp* pdisp) | |||
561 | rb->lcd_framebuffer + (LCD_HEIGHT - move)*LCD_WIDTH, | 543 | rb->lcd_framebuffer + (LCD_HEIGHT - move)*LCD_WIDTH, |
562 | LCD_WIDTH*sizeof (fb_data)); | 544 | LCD_WIDTH*sizeof (fb_data)); |
563 | } | 545 | } |
546 | #endif | ||
564 | 547 | ||
565 | yuv_bitmap_part( | 548 | draw_image_rect(pdisp, 0, LCD_HEIGHT - move, pdisp->width-pdisp->x, move); |
566 | pdisp->bitmap, pdisp->csub_x, pdisp->csub_y, pdisp->x, | ||
567 | pdisp->y + LCD_HEIGHT - move, pdisp->stride, | ||
568 | MAX(0, (LCD_WIDTH-pdisp->width)/2), LCD_HEIGHT - move, /* x, y */ | ||
569 | MIN(LCD_WIDTH, pdisp->width), move, /* w, h */ | ||
570 | jpeg_settings.colour_mode, jpeg_settings.dither_mode); | ||
571 | 549 | ||
550 | #ifdef HAVE_LCD_COLOR | ||
572 | if (jpeg_settings.dither_mode == DITHER_DIFFUSION) | 551 | if (jpeg_settings.dither_mode == DITHER_DIFFUSION) |
573 | { | 552 | { |
574 | /* Cover the first row drawn with previous image data. */ | 553 | /* Cover the first row drawn with previous image data. */ |
@@ -577,12 +556,6 @@ static void pan_view_down(struct t_disp* pdisp) | |||
577 | LCD_WIDTH*sizeof (fb_data)); | 556 | LCD_WIDTH*sizeof (fb_data)); |
578 | pdisp->y++; | 557 | pdisp->y++; |
579 | } | 558 | } |
580 | #else | ||
581 | MYXLCD(gray_bitmap_part)( | ||
582 | pdisp->bitmap[0], pdisp->x, | ||
583 | pdisp->y + LCD_HEIGHT - move, pdisp->stride, | ||
584 | MAX(0, (LCD_WIDTH-pdisp->width)/2), LCD_HEIGHT - move, /* x, y */ | ||
585 | MIN(LCD_WIDTH, pdisp->width), move); /* w, h */ | ||
586 | #endif | 559 | #endif |
587 | MYLCD_UPDATE(); | 560 | MYLCD_UPDATE(); |
588 | } | 561 | } |
@@ -687,14 +660,8 @@ int scroll_bmp(struct t_disp* pdisp) | |||
687 | #ifdef USEGSLIB | 660 | #ifdef USEGSLIB |
688 | grey_show(true); /* switch on greyscale overlay */ | 661 | grey_show(true); /* switch on greyscale overlay */ |
689 | #else | 662 | #else |
690 | yuv_bitmap_part( | 663 | draw_image_rect(pdisp, 0, 0, |
691 | pdisp->bitmap, pdisp->csub_x, pdisp->csub_y, | 664 | pdisp->width-pdisp->x, pdisp->height-pdisp->y); |
692 | pdisp->x, pdisp->y, pdisp->stride, | ||
693 | MAX(0, (LCD_WIDTH - pdisp->width) / 2), | ||
694 | MAX(0, (LCD_HEIGHT - pdisp->height) / 2), | ||
695 | MIN(LCD_WIDTH, pdisp->width), | ||
696 | MIN(LCD_HEIGHT, pdisp->height), | ||
697 | jpeg_settings.colour_mode, jpeg_settings.dither_mode); | ||
698 | MYLCD_UPDATE(); | 665 | MYLCD_UPDATE(); |
699 | #endif | 666 | #endif |
700 | break; | 667 | break; |
@@ -1072,7 +1039,7 @@ int load_and_show(char* filename) | |||
1072 | return change_filename(direction); | 1039 | return change_filename(direction); |
1073 | } | 1040 | } |
1074 | 1041 | ||
1075 | ds = ds_max; /* initials setting */ | 1042 | ds = ds_max; /* initialize setting */ |
1076 | cx = jpg.x_size/ds/2; /* center the view */ | 1043 | cx = jpg.x_size/ds/2; /* center the view */ |
1077 | cy = jpg.y_size/ds/2; | 1044 | cy = jpg.y_size/ds/2; |
1078 | 1045 | ||
@@ -1091,24 +1058,10 @@ int load_and_show(char* filename) | |||
1091 | rb->lcd_puts(0, 3, print); | 1058 | rb->lcd_puts(0, 3, print); |
1092 | rb->lcd_update(); | 1059 | rb->lcd_update(); |
1093 | } | 1060 | } |
1061 | |||
1094 | MYLCD(clear_display)(); | 1062 | MYLCD(clear_display)(); |
1095 | #ifdef HAVE_LCD_COLOR | 1063 | draw_image_rect(p_disp, 0, 0, |
1096 | yuv_bitmap_part( | 1064 | p_disp->width-p_disp->x, p_disp->height-p_disp->y); |
1097 | p_disp->bitmap, p_disp->csub_x, p_disp->csub_y, | ||
1098 | p_disp->x, p_disp->y, p_disp->stride, | ||
1099 | MAX(0, (LCD_WIDTH - p_disp->width) / 2), | ||
1100 | MAX(0, (LCD_HEIGHT - p_disp->height) / 2), | ||
1101 | MIN(LCD_WIDTH, p_disp->width), | ||
1102 | MIN(LCD_HEIGHT, p_disp->height), | ||
1103 | jpeg_settings.colour_mode, jpeg_settings.dither_mode); | ||
1104 | #else | ||
1105 | MYXLCD(gray_bitmap_part)( | ||
1106 | p_disp->bitmap[0], p_disp->x, p_disp->y, p_disp->stride, | ||
1107 | MAX(0, (LCD_WIDTH - p_disp->width) / 2), | ||
1108 | MAX(0, (LCD_HEIGHT - p_disp->height) / 2), | ||
1109 | MIN(LCD_WIDTH, p_disp->width), | ||
1110 | MIN(LCD_HEIGHT, p_disp->height)); | ||
1111 | #endif | ||
1112 | MYLCD_UPDATE(); | 1065 | MYLCD_UPDATE(); |
1113 | 1066 | ||
1114 | #ifdef USEGSLIB | 1067 | #ifdef USEGSLIB |