summaryrefslogtreecommitdiff
path: root/apps/plugins/jpeg/jpeg.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/jpeg/jpeg.c')
-rw-r--r--apps/plugins/jpeg/jpeg.c109
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
448void 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 */
450static void pan_view_right(struct t_disp* pdisp) 469static 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 */
508static void pan_view_up(struct t_disp* pdisp) 501static 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