diff options
author | Mohamed Tarek <mt@rockbox.org> | 2009-10-09 00:56:37 +0000 |
---|---|---|
committer | Mohamed Tarek <mt@rockbox.org> | 2009-10-09 00:56:37 +0000 |
commit | 228260722489d0c665dd025e61af053b0247d99d (patch) | |
tree | b1fd5b41e6a0c63a0be76143f89479465e6b09fc /firmware/drivers | |
parent | d7cdd0866495ad9605615bd18d09629880633e76 (diff) | |
download | rockbox-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/drivers')
-rw-r--r-- | firmware/drivers/lcd-bitmap-common.c | 9 |
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, |