• Status Closed
  • Percent Complete
  • Task Type Patches
  • Category User Interface
  • Assigned To No-one
  • Operating System All players
  • Severity Low
  • Priority Very Low
  • Reported Version
  • Due in Version Undecided
  • Due Date Undecided
  • Votes
  • Private
Attached to Project: Rockbox
Opened by raybert - 2005-07-22
Last edited by jdgordon - 2007-07-31

FS#2594 - Jump-back scrolling patch

This patch implements an alternative quasi bi-directional scroll for
rockbox. “Jump-back scrolling” differs from the normal bi-di scrolling
by jumping back to the start of the string rather than right-scrolling
(who can read backwards-scrolling text, anyway? – especially while
driving your car? ;)

The animation steps in jump-back scrolling are thus:

1) display the string with left-most character visible
2) pause for the “scroll delay” 3) scroll left until right-most character is visible
4) pause again
5) jump back to the left-most character
6) repeat at (2)

The current version of this patch replaces the old bidi scrolling (note
that the “Bidi Scroll Limit” option still works; to achieve jump-back
scrolling all the time I recommend you set “Bidi Scroll Limit” to the max
value (200%)). A complete/proper implementation should probably
offer an option to choose between jump-back and old-bidi. Maybe


Closed by  jdgordon
2007-07-31 12:43
Reason for closing:  Out of Date

Should this work on the H120? - patching succeeded but I
can’t make it work.

The bad news is that the patch (as posted) only works for recorder models
(and I forgot to mention that; sorry).

The good news is that the scroll_thread() routine is identical for the H100-
series, so the same changes should work. Replace the entire
scroll_thread() routine in firmware/drivers/lcd-h100.c with the patched
version from firmware/drivers/lcd-recorder.c and re-compile. That should do
the trick. (scroll_thread() is the last routine in both files.)

When I get a chance later I’ll post a new version of the patch that works on
the H100’s (and I’ll check if any others can use it also).

Good luck!

Update 20050710-2:


– Added support for iRiver H100-series (and remote). UNTESTED, except
for simulator build (sorry but I don’t have an iRiver and I don’t have the tool
chain to test the build). Note: my previous comment was incorrect; a couple
more things needed to be done in addition to updating scroll_thread() to get
it to work. (lshachar, please let me know if it works.)

– Completely disabled the “Bidi Scroll Limit” option. This feature essentially
disables bidi scrolling for lines that are too long. The largest value for this
setting is 200%, which equates to 2X the display width (i.e. bidi scrolling is
disabled for any line longer than that). (I misunderstood how this worked
earlier.) “Bidi Scroll Limit” now does nothing and jump-back quasi-bidi
scrolling is always enabled.

– Changed the time delay after the jump back to be half of the scrolling
delay time (from options). This just feels more natural. I like it at 800ms.

– Cleaned-up the preprocessor-conditional code. I still consider this patch
to be an incomplete implementation because the old bidi scrolling is
permanently lost when the patch is applied; there should be an option to
select which you prefer. (The code clean-up will make this easier to
implement… someday… ;)


Jump-back scroll patch
Revision: 3
Daily build: 2005-07-10
Supports: Archos Recorders, iRiver H100-series (including remote), and
(possibly) any device with a bitmapped LCD display(?)

This is a major update of the jump-back scroll patch that now provides a
complete implementation including the ability to select your desired scroll
type from Settings.

I’ve described previous releases of this patch as “incomplete” and as being
primarily a proof-of-concept to determine if I (or anyone else) actually liked
the so-called “jump-back” scrolling. I’ve now concluded that it is good and
I’ve coded-up a “proper” patch with the hope that it might find a permanent
home in the rockbox code base.

This update restores the older scroll functionality on a conditional basis and
actually enhances the overall scrolling functionality beyond just providing a
new scroll type.

There is now a new entry in the settings menu under General→Display-
>Scrolling called “Scroll Type”. It allows the user to choose between four
“scroll types”: “auto”, “bidirectional”, “jump-back”, and “continuous”. If the
uses selects a scroll type of “bidirectional”, “jump-back”, or “continuous”
that scroll type will be used for all scrolling, unconditionally. If the user
selects “auto”, rockbox will automatically choose one of the other three for
each string, depending on the length of that string and the value of the
“Bidirectional scroll limit” setting.

– ‘Bidirectional’ (aka ‘bidi’) is the same old bidi scroll that has been in
rockbox for some time: i.e. scroll all the way left, pause, scroll all the way
right, pause, repeat.

– ‘Jump-back’ is the new quasi-bidi scroll introduced by this patch and its
predecessors: i.e. scroll all the way left, pause, jump back to the start,
pause, repeat.

– ‘Continuous’ is the second old scroll that has been in rockbox for some
time. It is sometimes also referred to as “wrap around” or “marquis”
scrolling: i.e. scroll left always; at the end of the string display some
spacing followed by the start of the text again (while the end of the text is
still visible).

– ‘Auto’ is an enhanced version of the standard rockbox scroll which
automatically chooses between bidi and continuous scrolling based on the
length of the string to be scrolled and the “Bidirectional scroll limit” setting (i.
e. if the length of the string is greater than “Bidirectional scroll limit” percent
of the display width, use continuous scrolling, otherwise use bidi). The new
auto works in a similar fashion except that it uses three logical partitions
instead of two: short, middle, and long. The middle partition is the default
and uses jump-back scrolling. The long partition is determined using
“Bidirectional scroll limit” and uses continuous scrolling (as before). The
short partition is determined by taking half of the “Bidirectional scroll limit”
and it uses bidi scrolling. This results in the following: normal strings use
jump-back scrolling, extra long strings use continuous scrolling, and extra
short strings use bidi scrolling. The positioning of the partitions can be
tweaked by changing the “Bidirectional scroll limit” setting. (Note that for
small values of “Bidirectional scroll limit” the short partition will be effectively

A few additional minor changes have also been introduced:

– In continuous scrolling, the spacing used between the end of the
departing string and the start of arriving string now includes an ellipsis: " …

– Some scrolling parameters, such as scroll delay, were previously not
being set for the remote control on the iRiver H100-series. These
parameters are now set, however: the values come from the “Scrolling”
settings page rather than the “Remote” settings page. It may prove
desirable to duplicate some of these settings on the “Remote” settings
page so that the remote can have settings that are distinct from the main
display. But, for now, they are shared.


Jump-back scroll patch
Revision: 4
Daily build: 2005-09-01
Supports: Archos Recorders, iRiver H100-series (including
remote), and (possibly) any device with a bitmapped LCD display(?)

Updated for 9/1 daily build.

A little late, I know… I tried posting it in early september but sf wouldn’t let
me for some reason. I planned to try again later, but forgot. I just realized
that tonight.

This revision *does* work with rockbox 2.5. I just tried it tonight; some
hunks don’t match anymore at the same line # but patch can figure it out.

Nevertheless, I plan to release a 2.5 revision also…

Jump-back scroll patch
Revision: 5
Daily build: n/a (rockbox release 2.5)
Supports: Archos Recorders, iRiver H100-series (including
remote), and (possibly) any device with a bitmapped LCD

Updated for Rockbox 2.5.

This patch would be a vast improvement over the current scrolling.
Does it work with the latest builds?

Dan, you know you can modify the scrolling behaviour? It doesn’t have to be bi-di, it can be set to continuous loop.

And I very much doubt this will work currently unless modified. A lot has changed in 18 months ;)

I know you can modify the scrolling, however, I find both versions of scrolling to be difficult to read. The only workable solution I’ve found involves making the scrolling tediously slow. If there was only a feature to insert a gap between the end of the line and the start, or if only this patch was up to date…

But since this patch has gone dead, I’ll have to make do…


Available keyboard shortcuts


Task Details

Task Editing