summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorMohamed Tarek <mt@rockbox.org>2009-10-09 00:56:37 +0000
committerMohamed Tarek <mt@rockbox.org>2009-10-09 00:56:37 +0000
commit228260722489d0c665dd025e61af053b0247d99d (patch)
treeb1fd5b41e6a0c63a0be76143f89479465e6b09fc /firmware
parentd7cdd0866495ad9605615bd18d09629880633e76 (diff)
downloadrockbox-228260722489d0c665dd025e61af053b0247d99d.tar.gz
rockbox-228260722489d0c665dd025e61af053b0247d99d.zip
Handle text scrolling in RTL.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23021 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r--firmware/drivers/lcd-bitmap-common.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/firmware/drivers/lcd-bitmap-common.c b/firmware/drivers/lcd-bitmap-common.c
index b4bc11c706..9d5c78b905 100644
--- a/firmware/drivers/lcd-bitmap-common.c
+++ b/firmware/drivers/lcd-bitmap-common.c
@@ -302,7 +302,8 @@ void LCDFN(scroll_fn)(void)
302 302
303 LCDFN(set_viewport)(s->vp); 303 LCDFN(set_viewport)(s->vp);
304 304
305 if (s->backward) 305 if (s->backward ^ VP_IS_RTL(current_vp))
306 /* contrary to LTR, this is "forward" in RTL */
306 s->offset -= LCDFN(scroll_info).step; 307 s->offset -= LCDFN(scroll_info).step;
307 else 308 else
308 s->offset += LCDFN(scroll_info).step; 309 s->offset += LCDFN(scroll_info).step;
@@ -312,13 +313,13 @@ void LCDFN(scroll_fn)(void)
312 ypos = s->y * pf->height; 313 ypos = s->y * pf->height;
313 314
314 if (s->bidir) { /* scroll bidirectional */ 315 if (s->bidir) { /* scroll bidirectional */
315 if (s->offset <= 0) { 316 if (abs(s->offset) <= 0) {
316 /* at beginning of line */ 317 /* at beginning of line */
317 s->offset = 0; 318 s->offset = 0;
318 s->backward = false; 319 s->backward = false;
319 s->start_tick = current_tick + LCDFN(scroll_info).delay * 2; 320 s->start_tick = current_tick + LCDFN(scroll_info).delay * 2;
320 } 321 }
321 if (s->offset >= s->width - (current_vp->width - xpos)) { 322 if (abs(s->offset) >= s->width - (current_vp->width - xpos)) {
322 /* at end of line */ 323 /* at end of line */
323 s->offset = s->width - (current_vp->width - xpos); 324 s->offset = s->width - (current_vp->width - xpos);
324 s->backward = true; 325 s->backward = true;
@@ -327,7 +328,7 @@ void LCDFN(scroll_fn)(void)
327 } 328 }
328 else { 329 else {
329 /* scroll forward the whole time */ 330 /* scroll forward the whole time */
330 if (s->offset >= s->width) 331 if (abs(s->offset) >= s->width)
331 s->offset %= s->width; 332 s->offset %= s->width;
332 } 333 }
333 LCDFN(putsxyofs_style)(xpos, ypos, s->line, s->style, s->width, 334 LCDFN(putsxyofs_style)(xpos, ypos, s->line, s->style, s->width,