From 6e21c146f80b17e158f3f13f84afab2978367917 Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Fri, 22 Jun 2007 04:30:08 +0000 Subject: Fix FS#7336 - scrolling lines don't stay coloured. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13682 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/lcd-16bit.c | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) (limited to 'firmware/drivers/lcd-16bit.c') diff --git a/firmware/drivers/lcd-16bit.c b/firmware/drivers/lcd-16bit.c index 16c97c9e99..f03cab3877 100644 --- a/firmware/drivers/lcd-16bit.c +++ b/firmware/drivers/lcd-16bit.c @@ -807,7 +807,8 @@ void lcd_puts_style_offset(int x, int y, const unsigned char *str, int style, { int xpos,ypos,w,h,xrect; int lastmode = drawmode; - int oldcolor = fg_pattern; + int oldfgcolor = fg_pattern; + int oldbgcolor = bg_pattern; /* make sure scrolling is turned off on the line we are updating */ scrolling_lines &= ~(1 << y); @@ -820,15 +821,19 @@ void lcd_puts_style_offset(int x, int y, const unsigned char *str, int style, ypos = ymargin + y*h; drawmode = (style & STYLE_INVERT) ? (DRMODE_SOLID|DRMODE_INVERSEVID) : DRMODE_SOLID; - if (drawmode == DRMODE_SOLID && style & STYLE_COLORED) { - fg_pattern = style & STYLE_COLOR_MASK; + if (style & STYLE_COLORED) { + if (drawmode == DRMODE_SOLID) + fg_pattern = style & STYLE_COLOR_MASK; + else + bg_pattern = style & STYLE_COLOR_MASK; } lcd_putsxyofs(xpos, ypos, offset, str); drawmode ^= DRMODE_INVERSEVID; xrect = xpos + MAX(w - offset, 0); lcd_fillrect(xrect, ypos, LCD_WIDTH - xrect, h); drawmode = lastmode; - fg_pattern = oldcolor; + fg_pattern = oldfgcolor; + bg_pattern = oldbgcolor; } /*** scrolling ***/ @@ -938,6 +943,8 @@ void lcd_puts_scroll_style_offset(int x, int y, const unsigned char *string, s->offset = offset; s->startx = xmargin + x * s->width / s->len; s->backward = false; + s->line_colour = (style&STYLE_COLORED)? + (style&STYLE_COLOR_MASK): -1; scrolling_lines |= (1<start_tick)) continue; - + if (s->line_colour >= 0) + { + if (s->invert) + { + lcd_set_foreground(old_fgcolour); + lcd_set_background(s->line_colour); + } + else + { + lcd_set_foreground(s->line_colour); + lcd_set_background(old_bgcolour); + } + } + if (s->backward) s->offset -= scroll_step; else @@ -1008,7 +1030,8 @@ static void scroll_thread(void) drawmode = lastmode; lcd_update_rect(xpos, ypos, LCD_WIDTH - xpos, pf->height); } - + lcd_set_foreground(old_fgcolour); + lcd_set_background(old_bgcolour); sleep(scroll_ticks); } } -- cgit v1.2.3