diff options
author | Alexander Levin <al.le@rockbox.org> | 2011-01-23 21:49:49 +0000 |
---|---|---|
committer | Alexander Levin <al.le@rockbox.org> | 2011-01-23 21:49:49 +0000 |
commit | fb2d6a7a3a15f33b06b8efc3c0e5d93ae12cfbc2 (patch) | |
tree | fd3ca80ab42dd944afca0252eb80e71806ce9c69 /firmware/drivers/lcd-charcell.c | |
parent | 480c663e5b67d521f3e062fb90d10c7c5c186280 (diff) | |
download | rockbox-fb2d6a7a3a15f33b06b8efc3c0e5d93ae12cfbc2.tar.gz rockbox-fb2d6a7a3a15f33b06b8efc3c0e5d93ae12cfbc2.zip |
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
Diffstat (limited to 'firmware/drivers/lcd-charcell.c')
-rw-r--r-- | firmware/drivers/lcd-charcell.c | 13 |
1 files changed, 9 insertions, 4 deletions
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) | |||
569 | int xpos, ypos; | 569 | int xpos, ypos; |
570 | bool update; | 570 | bool update; |
571 | struct viewport* old_vp = current_vp; | 571 | struct viewport* old_vp = current_vp; |
572 | bool makedelay = false; | ||
572 | 573 | ||
573 | update = false; | 574 | update = false; |
574 | for ( index = 0; index < lcd_scroll_info.lines; index++ ) { | 575 | for ( index = 0; index < lcd_scroll_info.lines; index++ ) { |
@@ -594,23 +595,27 @@ void lcd_scroll_fn(void) | |||
594 | /* at beginning of line */ | 595 | /* at beginning of line */ |
595 | s->offset = 0; | 596 | s->offset = 0; |
596 | s->backward = false; | 597 | s->backward = false; |
597 | s->start_tick = current_tick + lcd_scroll_info.delay * 2; | 598 | makedelay = true; |
598 | } | 599 | } |
599 | if (s->offset >= s->len - (current_vp->width - xpos)) { | 600 | else if (s->offset >= s->len - (current_vp->width - xpos)) { |
600 | /* at end of line */ | 601 | /* at end of line */ |
601 | s->offset = s->len - (current_vp->width - xpos); | 602 | s->offset = s->len - (current_vp->width - xpos); |
602 | s->backward = true; | 603 | s->backward = true; |
603 | s->start_tick = current_tick + lcd_scroll_info.delay * 2; | 604 | makedelay = true; |
604 | } | 605 | } |
605 | } | 606 | } |
606 | else /* scroll forward the whole time */ | 607 | else /* scroll forward the whole time */ |
607 | { | 608 | { |
608 | if (s->offset >= s->len) { | 609 | if (s->offset >= s->len) { |
609 | s->offset = 0; | 610 | s->offset = 0; |
610 | s->start_tick = current_tick + lcd_scroll_info.delay * 2; | 611 | makedelay = true; |
611 | } | 612 | } |
612 | } | 613 | } |
613 | 614 | ||
615 | if (makedelay) | ||
616 | s->start_tick = current_tick + lcd_scroll_info.delay + | ||
617 | lcd_scroll_info.ticks; | ||
618 | |||
614 | lcd_putsxyofs(xpos, ypos, s->offset, s->line); | 619 | lcd_putsxyofs(xpos, ypos, s->offset, s->line); |
615 | update = true; | 620 | update = true; |
616 | } | 621 | } |