diff options
Diffstat (limited to 'apps/plugins/lib/grey_core.c')
-rw-r--r-- | apps/plugins/lib/grey_core.c | 58 |
1 files changed, 33 insertions, 25 deletions
diff --git a/apps/plugins/lib/grey_core.c b/apps/plugins/lib/grey_core.c index 43eed9b022..5ba5f41404 100644 --- a/apps/plugins/lib/grey_core.c +++ b/apps/plugins/lib/grey_core.c | |||
@@ -373,7 +373,10 @@ bool grey_init(struct plugin_api* newrb, unsigned char *gbuf, long gbuf_size, | |||
373 | return false; | 373 | return false; |
374 | 374 | ||
375 | #ifndef SIMULATOR | 375 | #ifndef SIMULATOR |
376 | /* Init to white */ | ||
376 | _grey_rb->memset(_grey_info.values, 0x80, plane_size); | 377 | _grey_rb->memset(_grey_info.values, 0x80, plane_size); |
378 | |||
379 | /* Init phases with random bits */ | ||
377 | dst = (unsigned*)(_grey_info.phases); | 380 | dst = (unsigned*)(_grey_info.phases); |
378 | end = (unsigned*)(_grey_info.phases + plane_size); | 381 | end = (unsigned*)(_grey_info.phases + plane_size); |
379 | 382 | ||
@@ -516,7 +519,7 @@ void grey_update_rect(int x, int y, int width, int height) | |||
516 | 519 | ||
517 | void grey_update_rect(int x, int y, int width, int height) | 520 | void grey_update_rect(int x, int y, int width, int height) |
518 | { | 521 | { |
519 | unsigned char *src; | 522 | unsigned char *src, *dst; |
520 | 523 | ||
521 | if ((width <= 0) || (height <= 0)) | 524 | if ((width <= 0) || (height <= 0)) |
522 | return; /* nothing to do */ | 525 | return; /* nothing to do */ |
@@ -527,26 +530,31 @@ void grey_update_rect(int x, int y, int width, int height) | |||
527 | width = _grey_info.width - x; | 530 | width = _grey_info.width - x; |
528 | 531 | ||
529 | src = _grey_info.buffer + _GREY_MULUQ(_grey_info.width, y) + x; | 532 | src = _grey_info.buffer + _GREY_MULUQ(_grey_info.width, y) + x; |
533 | |||
534 | #if LCD_PIXELFORMAT == HORIZONTAL_PACKING | ||
535 | dst = _grey_info.values + _GREY_MULUQ(_grey_info.width, y) + x; | ||
530 | 536 | ||
531 | do | 537 | do |
538 | { | ||
539 | _grey_rb->memcpy(dst, src, width); | ||
540 | dst += _grey_info.width; | ||
541 | src += _grey_info.width; | ||
542 | } | ||
543 | while (--height > 0); | ||
544 | |||
545 | #else /* LCD_PIXELFORMAT == VRTICAL_PACKING */ | ||
546 | do | ||
532 | { | 547 | { |
533 | #if LCD_PIXELFORMAT == HORIZONTAL_PACKING | ||
534 | int idx = _GREY_MULUQ(_grey_info.width, y) + x; | ||
535 | #else | ||
536 | #if LCD_DEPTH == 1 | ||
537 | int idx = _GREY_MULUQ(_grey_info.width, y & ~7) + (x << 3) + (~y & 7); | ||
538 | #elif LCD_DEPTH == 2 | ||
539 | int idx = _GREY_MULUQ(_grey_info.width, y & ~3) + (x << 2) + (~y & 3); | ||
540 | #endif | ||
541 | #endif /* LCD_PIXELFORMAT */ | ||
542 | unsigned char *dst_row = _grey_info.values + idx; | ||
543 | unsigned char *src_row = src; | 548 | unsigned char *src_row = src; |
544 | unsigned char *src_end = src + width; | 549 | unsigned char *src_end = src + width; |
545 | 550 | ||
551 | dst = _grey_info.values | ||
552 | + _GREY_MULUQ(_grey_info.width, y & ~_GREY_BMASK) | ||
553 | + (x << _GREY_BSHIFT) + (~y & _GREY_BMASK); | ||
546 | do | 554 | do |
547 | { | 555 | { |
548 | *dst_row = *src_row++; | 556 | *dst = *src_row++; |
549 | dst_row += _GREY_X_ADVANCE; | 557 | dst += _GREY_BSIZE; |
550 | } | 558 | } |
551 | while (src_row < src_end); | 559 | while (src_row < src_end); |
552 | 560 | ||
@@ -554,6 +562,8 @@ void grey_update_rect(int x, int y, int width, int height) | |||
554 | src += _grey_info.width; | 562 | src += _grey_info.width; |
555 | } | 563 | } |
556 | while (--height > 0); | 564 | while (--height > 0); |
565 | |||
566 | #endif /* LCD_PIXELFORMAT */ | ||
557 | } | 567 | } |
558 | 568 | ||
559 | #endif /* !SIMULATOR */ | 569 | #endif /* !SIMULATOR */ |
@@ -687,18 +697,12 @@ static void grey_screendump_hook(int fd) | |||
687 | #ifdef SIMULATOR | 697 | #ifdef SIMULATOR |
688 | unsigned char *src = _grey_info.buffer | 698 | unsigned char *src = _grey_info.buffer |
689 | + _GREY_MULUQ(_grey_info.width, gy) + gx; | 699 | + _GREY_MULUQ(_grey_info.width, gy) + gx; |
690 | |||
691 | for (i = 0; i < 4; i++) | ||
692 | linebuf[x + i] = BMP_FIXEDCOLORS + *src++; | ||
693 | #else | 700 | #else |
694 | unsigned char *src = _grey_info.values | 701 | unsigned char *src = _grey_info.values |
695 | + _GREY_MULUQ(_grey_info.width, gy) + gx; | 702 | + _GREY_MULUQ(_grey_info.width, gy) + gx; |
696 | for (i = 0; i < 4; i++) | ||
697 | { | ||
698 | linebuf[x + i] = BMP_FIXEDCOLORS + *src; | ||
699 | src += _GREY_X_ADVANCE; | ||
700 | } | ||
701 | #endif | 703 | #endif |
704 | for (i = 0; i < 4; i++) | ||
705 | linebuf[x + i] = BMP_FIXEDCOLORS + *src++; | ||
702 | } | 706 | } |
703 | else | 707 | else |
704 | { | 708 | { |
@@ -730,7 +734,9 @@ static void grey_screendump_hook(int fd) | |||
730 | #else | 734 | #else |
731 | linebuf[x] = BMP_FIXEDCOLORS | 735 | linebuf[x] = BMP_FIXEDCOLORS |
732 | + _grey_info.values[_GREY_MULUQ(_grey_info.width, | 736 | + _grey_info.values[_GREY_MULUQ(_grey_info.width, |
733 | gy & ~7) + (gx << 3) + (~gy & 7)]; | 737 | gy & ~_GREY_BMASK) |
738 | + (gx << _GREY_BSHIFT) | ||
739 | + (~gy & _GREY_BMASK)]; | ||
734 | #endif | 740 | #endif |
735 | } | 741 | } |
736 | else | 742 | else |
@@ -757,7 +763,9 @@ static void grey_screendump_hook(int fd) | |||
757 | #else | 763 | #else |
758 | linebuf[x] = BMP_FIXEDCOLORS | 764 | linebuf[x] = BMP_FIXEDCOLORS |
759 | + _grey_info.values[_GREY_MULUQ(_grey_info.width, | 765 | + _grey_info.values[_GREY_MULUQ(_grey_info.width, |
760 | gy & ~3) + (gx << 2) + (~gy & 3)]; | 766 | gy & ~_GREY_BMASK) |
767 | + (gx << _GREY_BSHIFT) | ||
768 | + (~gy & _GREY_BMASK)]; | ||
761 | #endif | 769 | #endif |
762 | } | 770 | } |
763 | else | 771 | else |