Accelerating scrollbar

SyntaxEditor Brainstorming Forum

Posted 15 years ago by Actipro Software Support - Cleveland, OH, USA
I was working on the scrolling today and was thinking, wouldn't it be neat to have a vertical scrollbar that started off scrolling one line at a time when you held down the mouse over the arrow buttons, but as you held it down longer, accelerated to scrolling up to say three lines at a time.

The point of this would be to allow you to more quickly scroll long distances when you are continuing to scroll.

Maybe it would take five seconds or so of scrolling to reach peak three-line speed. Then next time you clicked and held the arrow button again, it started back at one line at a time.

What do you think about this idea? Also, what properties would you like to see to configure it if you do like it.

Actipro Software Support

Comments (4)

Posted 15 years ago by Boyd - Sr. Software Developer, Patterson Consulting, LLC
So simple... so easy. Why isn't anyone else doing this already?

I think you pretty much pinned down the core requirements. A simple bool to turn the feature on/off, a delay interval to start fast scrolling, and an accelerated line scroll amount. Would you just have one phase of fast scrolling or would it get progressively faster with each passed interval? Might be overkill to have more than one.

How about a visual indicator that the scrolling has hit warp speed? Perhaps the template for drawing the scrollbar could change slightly. The thumb track, for instance, could change colors.
Posted 15 years ago by Mike Strobel - New York, NY
Maybe a translucent "fast-forward" icon (think ">>" or ">>>", rotated 90/180/270 degrees as necessary) could appear right next to the up/down/left/right buttons? You could put it in an adorner layer so it could be displayed to the top or left of the scrollbar itself. Or maybe it would be better do put it in the track, since not all scrollbar templates have buttons.

Regardless, I think it's a good idea. You could would provide a collection property of scroll speeds, each with the number of lines scrolled and a minimum threshold. A simpler approach would be to define two properties--the threshold before jumping to the next faster scroll speed (in milliseconds or number of lines scrolled), and an int[] property of the speeds (similar to how line dashes in WPF are represented with a double[] property).

I suspect, however, that Boyd is correct in that one phase of fast scrolling would suffice for most scenarios.
Posted 15 years ago by Actipro Software Support - Cleveland, OH, USA
I got a non-configurable version working last night without too much trouble. Basically I have the interval as 3 seconds, and it will increase the number of lines scrolled by 1 each interval, up to a max of 4 lines scrolling with each small change. I kind of like the ramp up effect.

So the configurable options based on what I have are:
* ScrollBarAccelerationInterval (TimeSpan: default of 0:0:3)
* ScrollBarAccelerationMaximum (int: default of 4, can range 1-10)

For turning it on and off, should we do an additional boolean prop or just intepret value of 1 as off? Right now I interpret 1 as off.

I don't have a visual indicator in place at the moment other than you noticing that lines start scrolling faster.

Actipro Software Support

Posted 15 years ago by Matt Whitfield
I don't think it needs a visual indicator particularly. Top job & great idea.