summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/drivers/lcd-16bit.c55
-rw-r--r--firmware/export/lcd.h3
-rw-r--r--firmware/export/scroll_engine.h7
-rw-r--r--firmware/scroll_engine.c10
4 files changed, 39 insertions, 36 deletions
diff --git a/firmware/drivers/lcd-16bit.c b/firmware/drivers/lcd-16bit.c
index f748b4027c..e838d5106c 100644
--- a/firmware/drivers/lcd-16bit.c
+++ b/firmware/drivers/lcd-16bit.c
@@ -910,16 +910,7 @@ void lcd_puts_scroll_style_offset(int x, int y, const unsigned char *string,
910 s = &lcd_scroll_info.scroll[y]; 910 s = &lcd_scroll_info.scroll[y];
911 911
912 s->start_tick = current_tick + lcd_scroll_info.delay; 912 s->start_tick = current_tick + lcd_scroll_info.delay;
913 s->invert = false; 913 s->style = style;
914 if (style & STYLE_INVERT) {
915 s->invert = 1;
916 }
917 else if (style & STYLE_COLORBAR) {
918 s->invert = 2;
919 }
920 else if (style & STYLE_GRADIENT) {
921 s->invert = 3;
922 }
923 lcd_puts_style_offset(x,y,string,style,offset); 914 lcd_puts_style_offset(x,y,string,style,offset);
924 915
925 lcd_getstringsize(string, &w, &h); 916 lcd_getstringsize(string, &w, &h);
@@ -956,8 +947,6 @@ void lcd_puts_scroll_style_offset(int x, int y, const unsigned char *string,
956 s->offset = offset; 947 s->offset = offset;
957 s->startx = xmargin + x * s->width / s->len; 948 s->startx = xmargin + x * s->width / s->len;
958 s->backward = false; 949 s->backward = false;
959 s->line_color = (style&STYLE_COLORED)?
960 (style&STYLE_COLOR_MASK): -1;
961 lcd_scroll_info.lines |= (1<<y); 950 lcd_scroll_info.lines |= (1<<y);
962 } 951 }
963 else 952 else
@@ -986,13 +975,13 @@ void lcd_scroll_fn(void)
986 if (TIME_BEFORE(current_tick, s->start_tick)) 975 if (TIME_BEFORE(current_tick, s->start_tick))
987 continue; 976 continue;
988 977
989 if (s->line_color >= 0) { 978 if (s->style&STYLE_COLORED) {
990 if (s->invert) { 979 if (s->style&STYLE_MODE_MASK) {
991 fg_pattern = old_fgcolor; 980 fg_pattern = old_fgcolor;
992 bg_pattern = s->line_color; 981 bg_pattern = s->style&STYLE_COLOR_MASK;
993 } 982 }
994 else { 983 else {
995 fg_pattern = s->line_color; 984 fg_pattern = s->style&STYLE_COLOR_MASK;
996 bg_pattern = old_bgcolor; 985 bg_pattern = old_bgcolor;
997 } 986 }
998 } 987 }
@@ -1027,20 +1016,26 @@ void lcd_scroll_fn(void)
1027 } 1016 }
1028 1017
1029 lastmode = drawmode; 1018 lastmode = drawmode;
1030 drawmode = s->invert == 1 ? 1019 switch (s->style&STYLE_MODE_MASK) {
1031 (DRMODE_SOLID|DRMODE_INVERSEVID) : DRMODE_SOLID; 1020 case STYLE_INVERT:
1032 if (s->invert == 2) { 1021 drawmode = DRMODE_SOLID|DRMODE_INVERSEVID;
1033 /* Solid colour line selector */ 1022 break;
1034 drawmode = DRMODE_FG; 1023 case STYLE_COLORBAR:
1035 fg_pattern = lss_pattern; 1024 /* Solid colour line selector */
1036 lcd_fillrect(0, ypos, LCD_WIDTH, pf->height); 1025 drawmode = DRMODE_FG;
1037 fg_pattern = lst_pattern; 1026 fg_pattern = lss_pattern;
1038 } 1027 lcd_fillrect(0, ypos, LCD_WIDTH, pf->height);
1039 else if (s->invert == 3) { 1028 fg_pattern = lst_pattern;
1040 /* Gradient line selector */ 1029 break;
1041 drawmode = DRMODE_FG; 1030 case STYLE_GRADIENT:
1042 lcd_gradient_rect(0, LCD_WIDTH, ypos, (signed)pf->height); 1031 /* Gradient line selector */
1043 fg_pattern = lst_pattern; 1032 drawmode = DRMODE_FG;
1033 lcd_gradient_rect(0, LCD_WIDTH, ypos, (signed)pf->height);
1034 fg_pattern = lst_pattern;
1035 break;
1036 default:
1037 drawmode = DRMODE_SOLID;
1038 break;
1044 } 1039 }
1045 lcd_putsxyofs(xpos, ypos, s->offset, s->line); 1040 lcd_putsxyofs(xpos, ypos, s->offset, s->line);
1046 drawmode = lastmode; 1041 drawmode = lastmode;
diff --git a/firmware/export/lcd.h b/firmware/export/lcd.h
index eb67a12211..b64e506981 100644
--- a/firmware/export/lcd.h
+++ b/firmware/export/lcd.h
@@ -25,10 +25,11 @@
25#include "config.h" 25#include "config.h"
26 26
27#define STYLE_DEFAULT 0x00000000 27#define STYLE_DEFAULT 0x00000000
28#define STYLE_INVERT 0x20000000
29#define STYLE_COLORED 0x10000000 28#define STYLE_COLORED 0x10000000
29#define STYLE_INVERT 0x20000000
30#define STYLE_COLORBAR 0x40000000 30#define STYLE_COLORBAR 0x40000000
31#define STYLE_GRADIENT 0x80000000 31#define STYLE_GRADIENT 0x80000000
32#define STYLE_MODE_MASK 0xF0000000
32#define STYLE_COLOR_MASK 0x0000FFFF 33#define STYLE_COLOR_MASK 0x0000FFFF
33 34
34#ifdef SIMULATOR 35#ifdef SIMULATOR
diff --git a/firmware/export/scroll_engine.h b/firmware/export/scroll_engine.h
index f40a00f96c..238641c08c 100644
--- a/firmware/export/scroll_engine.h
+++ b/firmware/export/scroll_engine.h
@@ -44,17 +44,14 @@ struct scrollinfo
44#ifdef HAVE_LCD_BITMAP 44#ifdef HAVE_LCD_BITMAP
45 int width; /* length of line in pixels */ 45 int width; /* length of line in pixels */
46#ifdef HAVE_LCD_COLOR 46#ifdef HAVE_LCD_COLOR
47 int invert; /* invert the scrolled text */ 47 int style; /* line style */
48#else 48#else
49 bool invert; 49 bool invert; /* invert the scrolled text */
50#endif 50#endif
51#endif/* HAVE_LCD_BITMAP */ 51#endif/* HAVE_LCD_BITMAP */
52 bool backward; /* scroll presently forward or backward? */ 52 bool backward; /* scroll presently forward or backward? */
53 bool bidir; 53 bool bidir;
54 long start_tick; 54 long start_tick;
55#ifdef HAVE_LCD_COLOR
56 int line_color;
57#endif
58}; 55};
59 56
60struct scroll_screen_info 57struct scroll_screen_info
diff --git a/firmware/scroll_engine.c b/firmware/scroll_engine.c
index d4a2e174cc..e21cb8b3ae 100644
--- a/firmware/scroll_engine.c
+++ b/firmware/scroll_engine.c
@@ -99,7 +99,12 @@ void lcd_invertscroll(int x, int y)
99 if((unsigned)y>=LCD_SCROLLABLE_LINES) return; 99 if((unsigned)y>=LCD_SCROLLABLE_LINES) return;
100 100
101 s = &lcd_scroll_info.scroll[y]; 101 s = &lcd_scroll_info.scroll[y];
102#ifdef HAVE_LCD_COLOR
103 s->style = !s->style; /* FIXME: now that the setting isn't bool this seems
104 flawed. */
105#else
102 s->invert = !s->invert; 106 s->invert = !s->invert;
107#endif
103} 108}
104 109
105void lcd_scroll_step(int step) 110void lcd_scroll_step(int step)
@@ -142,7 +147,12 @@ void lcd_remote_invertscroll(int x, int y)
142 if((unsigned)y>=LCD_REMOTE_SCROLLABLE_LINES) return; 147 if((unsigned)y>=LCD_REMOTE_SCROLLABLE_LINES) return;
143 148
144 s = &lcd_remote_scroll_info.scroll[y]; 149 s = &lcd_remote_scroll_info.scroll[y];
150#ifdef HAVE_LCD_COLOR
151 s->style = !s->style; /* FIXME: now that the setting isn't bool this seems
152 flawed. */
153#else
145 s->invert = !s->invert; 154 s->invert = !s->invert;
155#endif
146} 156}
147 157
148void lcd_remote_stop_scroll(void) 158void lcd_remote_stop_scroll(void)