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-bitmap-common.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-bitmap-common.c')
-rw-r--r-- | firmware/drivers/lcd-bitmap-common.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/firmware/drivers/lcd-bitmap-common.c b/firmware/drivers/lcd-bitmap-common.c index fa18f9fa1f..1a504c6f40 100644 --- a/firmware/drivers/lcd-bitmap-common.c +++ b/firmware/drivers/lcd-bitmap-common.c @@ -435,6 +435,7 @@ void LCDFN(scroll_fn)(void) int index; int xpos, ypos; struct viewport* old_vp = current_vp; + bool makedelay = false; for ( index = 0; index < LCDFN(scroll_info).lines; index++ ) { s = &LCDFN(scroll_info).scroll[index]; @@ -459,26 +460,31 @@ void LCDFN(scroll_fn)(void) /* at beginning of line */ s->offset = 0; s->backward = false; - s->start_tick = current_tick + LCDFN(scroll_info).delay * 2; + makedelay = true; } - if (s->offset >= s->width - (current_vp->width - xpos)) { + else if (s->offset >= s->width - (current_vp->width - xpos)) { /* at end of line */ s->offset = s->width - (current_vp->width - xpos); s->backward = true; - s->start_tick = current_tick + LCDFN(scroll_info).delay * 2; + makedelay = true; } } else { /* scroll forward the whole time */ if (s->offset >= s->width) { s->offset = 0; - s->start_tick = current_tick + LCDFN(scroll_info).delay * 2; + makedelay = true; } } + + if (makedelay) + s->start_tick = current_tick + LCDFN(scroll_info).delay + + LCDFN(scroll_info).ticks; + LCDFN(putsxyofs_style)(xpos, ypos, s->line, s->style, s->width, pf->height, s->offset); LCDFN(update_viewport_rect)(xpos, ypos, current_vp->width - xpos, - pf->height); + pf->height); } LCDFN(set_viewport)(old_vp); } |