summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorAlexander Levin <al.le@rockbox.org>2011-01-23 21:49:49 +0000
committerAlexander Levin <al.le@rockbox.org>2011-01-23 21:49:49 +0000
commitfb2d6a7a3a15f33b06b8efc3c0e5d93ae12cfbc2 (patch)
treefd3ca80ab42dd944afca0252eb80e71806ce9c69 /firmware
parent480c663e5b67d521f3e062fb90d10c7c5c186280 (diff)
downloadrockbox-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')
-rw-r--r--firmware/drivers/lcd-bitmap-common.c16
-rw-r--r--firmware/drivers/lcd-charcell.c13
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 }