From fb2d6a7a3a15f33b06b8efc3c0e5d93ae12cfbc2 Mon Sep 17 00:00:00 2001 From: Alexander Levin Date: Sun, 23 Jan 2011 21:49:49 +0000 Subject: Respect the 'scroll delay' setting more accurately between scrolling rounds git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29123 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/lcd-charcell.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'firmware/drivers/lcd-charcell.c') diff --git a/firmware/drivers/lcd-charcell.c b/firmware/drivers/lcd-charcell.c index e5b52d48a9..6a40f6ba95 100644 --- a/firmware/drivers/lcd-charcell.c +++ b/firmware/drivers/lcd-charcell.c @@ -569,6 +569,7 @@ void lcd_scroll_fn(void) int xpos, ypos; bool update; struct viewport* old_vp = current_vp; + bool makedelay = false; update = false; for ( index = 0; index < lcd_scroll_info.lines; index++ ) { @@ -594,23 +595,27 @@ void lcd_scroll_fn(void) /* at beginning of line */ s->offset = 0; s->backward = false; - s->start_tick = current_tick + lcd_scroll_info.delay * 2; + makedelay = true; } - if (s->offset >= s->len - (current_vp->width - xpos)) { + else if (s->offset >= s->len - (current_vp->width - xpos)) { /* at end of line */ s->offset = s->len - (current_vp->width - xpos); s->backward = true; - s->start_tick = current_tick + lcd_scroll_info.delay * 2; + makedelay = true; } } else /* scroll forward the whole time */ { if (s->offset >= s->len) { s->offset = 0; - s->start_tick = current_tick + lcd_scroll_info.delay * 2; + makedelay = true; } } + if (makedelay) + s->start_tick = current_tick + lcd_scroll_info.delay + + lcd_scroll_info.ticks; + lcd_putsxyofs(xpos, ypos, s->offset, s->line); update = true; } -- cgit v1.2.3