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 | |
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
-rw-r--r-- | firmware/drivers/lcd-bitmap-common.c | 16 | ||||
-rw-r--r-- | firmware/drivers/lcd-charcell.c | 13 |
2 files changed, 20 insertions, 9 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) | |||
435 | int index; | 435 | int index; |
436 | int xpos, ypos; | 436 | int xpos, ypos; |
437 | struct viewport* old_vp = current_vp; | 437 | struct viewport* old_vp = current_vp; |
438 | bool makedelay = false; | ||
438 | 439 | ||
439 | for ( index = 0; index < LCDFN(scroll_info).lines; index++ ) { | 440 | for ( index = 0; index < LCDFN(scroll_info).lines; index++ ) { |
440 | s = &LCDFN(scroll_info).scroll[index]; | 441 | s = &LCDFN(scroll_info).scroll[index]; |
@@ -459,26 +460,31 @@ void LCDFN(scroll_fn)(void) | |||
459 | /* at beginning of line */ | 460 | /* at beginning of line */ |
460 | s->offset = 0; | 461 | s->offset = 0; |
461 | s->backward = false; | 462 | s->backward = false; |
462 | s->start_tick = current_tick + LCDFN(scroll_info).delay * 2; | 463 | makedelay = true; |
463 | } | 464 | } |
464 | if (s->offset >= s->width - (current_vp->width - xpos)) { | 465 | else if (s->offset >= s->width - (current_vp->width - xpos)) { |
465 | /* at end of line */ | 466 | /* at end of line */ |
466 | s->offset = s->width - (current_vp->width - xpos); | 467 | s->offset = s->width - (current_vp->width - xpos); |
467 | s->backward = true; | 468 | s->backward = true; |
468 | s->start_tick = current_tick + LCDFN(scroll_info).delay * 2; | 469 | makedelay = true; |
469 | } | 470 | } |
470 | } | 471 | } |
471 | else { | 472 | else { |
472 | /* scroll forward the whole time */ | 473 | /* scroll forward the whole time */ |
473 | if (s->offset >= s->width) { | 474 | if (s->offset >= s->width) { |
474 | s->offset = 0; | 475 | s->offset = 0; |
475 | s->start_tick = current_tick + LCDFN(scroll_info).delay * 2; | 476 | makedelay = true; |
476 | } | 477 | } |
477 | } | 478 | } |
479 | |||
480 | if (makedelay) | ||
481 | s->start_tick = current_tick + LCDFN(scroll_info).delay + | ||
482 | LCDFN(scroll_info).ticks; | ||
483 | |||
478 | LCDFN(putsxyofs_style)(xpos, ypos, s->line, s->style, s->width, | 484 | LCDFN(putsxyofs_style)(xpos, ypos, s->line, s->style, s->width, |
479 | pf->height, s->offset); | 485 | pf->height, s->offset); |
480 | LCDFN(update_viewport_rect)(xpos, ypos, current_vp->width - xpos, | 486 | LCDFN(update_viewport_rect)(xpos, ypos, current_vp->width - xpos, |
481 | pf->height); | 487 | pf->height); |
482 | } | 488 | } |
483 | LCDFN(set_viewport)(old_vp); | 489 | LCDFN(set_viewport)(old_vp); |
484 | } | 490 | } |
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 | } |