summaryrefslogtreecommitdiff
path: root/firmware/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers')
-rw-r--r--firmware/drivers/lcd-recorder.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/firmware/drivers/lcd-recorder.c b/firmware/drivers/lcd-recorder.c
index 6665ea88dc..fcb7d306b8 100644
--- a/firmware/drivers/lcd-recorder.c
+++ b/firmware/drivers/lcd-recorder.c
@@ -81,6 +81,7 @@ struct scrollinfo {
81 int starty; 81 int starty;
82 bool backward; /* scroll presently forward or backward? */ 82 bool backward; /* scroll presently forward or backward? */
83 bool bidir; 83 bool bidir;
84 bool invert; /* invert the scrolled text */
84 long start_tick; 85 long start_tick;
85}; 86};
86 87
@@ -270,6 +271,11 @@ int lcd_getstringsize(unsigned char *str, int *w, int *h)
270/* put a string at a given char position */ 271/* put a string at a given char position */
271void lcd_puts(int x, int y, unsigned char *str) 272void lcd_puts(int x, int y, unsigned char *str)
272{ 273{
274 lcd_puts_style(x, y, str, STYLE_DEFAULT);
275}
276
277void lcd_puts_style(int x, int y, unsigned char *str, int style)
278{
273 int xpos,ypos,w,h; 279 int xpos,ypos,w,h;
274 280
275#if defined(SIMULATOR) && defined(HAVE_LCD_CHARCELLS) 281#if defined(SIMULATOR) && defined(HAVE_LCD_CHARCELLS)
@@ -294,6 +300,8 @@ void lcd_puts(int x, int y, unsigned char *str)
294 ypos = ymargin + y*h; 300 ypos = ymargin + y*h;
295 lcd_putsxy(xpos, ypos, str); 301 lcd_putsxy(xpos, ypos, str);
296 lcd_clearrect(xpos + w, ypos, LCD_WIDTH - (xpos + w), h); 302 lcd_clearrect(xpos + w, ypos, LCD_WIDTH - (xpos + w), h);
303 if (style & STYLE_INVERT)
304 lcd_invertrect(xpos, ypos, LCD_WIDTH - xpos, h);
297 305
298#if defined(SIMULATOR) && defined(HAVE_LCD_CHARCELLS) 306#if defined(SIMULATOR) && defined(HAVE_LCD_CHARCELLS)
299 lcd_update(); 307 lcd_update();
@@ -670,14 +678,19 @@ void lcd_invertpixel(int x, int y)
670 INVERT_PIXEL(x,y); 678 INVERT_PIXEL(x,y);
671} 679}
672 680
673void lcd_puts_scroll(int x, int y, unsigned char* string) 681void lcd_puts_scroll(int x, int y, unsigned char *string)
682{
683 lcd_puts_scroll_style(x, y, string, STYLE_DEFAULT);
684}
685
686void lcd_puts_scroll_style(int x, int y, unsigned char *string, int style)
674{ 687{
675 struct scrollinfo* s; 688 struct scrollinfo* s;
676 int w, h; 689 int w, h;
677 int index; 690 int index;
678 int free_index=0; 691 int free_index=0;
679 692
680 DEBUGF("puts_scroll: %s\n", string); 693 DEBUGF("puts_scroll_style: %s\n", string);
681 694
682 for (index = 0; index < SCROLLABLE_LINES; index++) { 695 for (index = 0; index < SCROLLABLE_LINES; index++) {
683 s = &scroll[index]; 696 s = &scroll[index];
@@ -698,8 +711,14 @@ void lcd_puts_scroll(int x, int y, unsigned char* string)
698 index=free_index; 711 index=free_index;
699 s = &scroll[index]; /* get the proper 's' */ 712 s = &scroll[index]; /* get the proper 's' */
700 s->start_tick = current_tick + scroll_delay; 713 s->start_tick = current_tick + scroll_delay;
714 s->invert = false;
715 if (style & STYLE_INVERT) {
716 s->invert = true;
717 lcd_puts_style(x,y,string,STYLE_INVERT);
718 }
719 else
720 lcd_puts(x,y,string);
701 721
702 lcd_puts(x,y,string);
703 lcd_getstringsize(string, &w, &h); 722 lcd_getstringsize(string, &w, &h);
704 723
705 if (LCD_WIDTH - x * 8 - xmargin < w) { 724 if (LCD_WIDTH - x * 8 - xmargin < w) {
@@ -819,6 +838,8 @@ static void scroll_thread(void)
819 838
820 lcd_clearrect(xpos, ypos, LCD_WIDTH - xmargin, h); 839 lcd_clearrect(xpos, ypos, LCD_WIDTH - xmargin, h);
821 lcd_putsxyofs(xpos, ypos, s->offset, s->line); 840 lcd_putsxyofs(xpos, ypos, s->offset, s->line);
841 if (s->invert)
842 lcd_invertrect(xpos, ypos, LCD_WIDTH - xmargin, h);
822 lcd_update_rect(xpos, ypos, LCD_WIDTH - xmargin, h); 843 lcd_update_rect(xpos, ypos, LCD_WIDTH - xmargin, h);
823 } 844 }
824 845