Scroll increment

John john at onechip.com
Wed Jan 1 00:59:27 CET 2014


   The following code works well enough (it could use a bit of tweaking) when using a magic mouse.  You can scroll one pixel at a time when you move your finger slowly and, the faster you move, the more it scrolls.  When using a “click wheel” style mouse this does not work very well because the rawKeyDown events fire too slowly.  Does any one have an insight on how to fix this?  This script works by measuring the frequency of rawKeyDown events (how many occur in a 75 millisecond window) and uses that value to look up a scroll increment from an acceleration curve.

   If you wan to try this, create a field and put a scroll bar, named "scroll position” next to it.  Put the following script into the field:

local keyCount, startMilliSec
on rawKeyDown pKey
   local accel
   
   if pKey = "65308" or pKey = "65309" then  -- if it is the scroll wheel
      
      if startMilliSec + 75 < the milliseconds then -- if our timer has expired scroll the field
         put the milliseconds into startMilliSec    -- get a new time value
        
         put item keycount of "1,2,4,7,25,50,150,250,400,800" into accel -- calculate an accel curve
         
         if pKey = "65308" then set the vScroll of me to the vScroll of me + accel -- Scrolls down
         if pKey = "65309" then set the vScroll of me to the vScroll of me - accel -- Scrolls Up
         
         put (the vscroll of me) & "  " & (the textheightsum of me - the height of me) & "  " & (the height of me)
         
         -- If there is a scroll bar sitting next to the field that should be updated
         set the thumbPosition of scrollbar "scroll position" to (the endValue of scrollbar "scroll position") \
         *(the vscroll of me / (the textheightsum of me - the height of me))
         
         put 0 into keyCount -- reset the 'frequency' counter
      end if
      
      if startMilliSec + 75 > the milliseconds then -- if we are in our timerperiod
         add 1 to keycount  -- sum the the number of events
      end if
      
   end if
   
   pass rawKeyDown -- if you wan to be able to type in the field
end rawKeyDown


Thanks,
John


On Dec 31, 2013, at 12:38 PM, John <John at OneChip.com> wrote:

>   I was hoping there was something I was missing (a property for instance) that set the “scroll increment” but it looks there isn’t.  I will try to roll my own to try and get closer to a native feel.  If it works out I will report back to the list.
> 
> Jaque,
> 
> I am using a magic mouse as well.  It wasn’t how fast the field scrolled (that is proportional to my finger speed), it was how finely grained the scrolling is.  When moving my finger slowly on a tall field (1000 px high) the field jumps in 10 text line increments.  On a short field (100 px high) the field jumps one line at a time.  Using a native app (Preview for instance) there is no “jumping” behavior at all.  Testing with a “click wheel” mouse on a native app does result in discrete jumps, one for every click.
> 
> 
> Paul,
> 
> Thanks much for the head start, I will start with what you have and see if I can add accelerated scrolling in the like.
> 
> 
> Thanks,
> John
> 
> 
> On Dec 31, 2013, at 11:19 AM, Paul Hibbert <paulhibbert at mac.com> wrote:
> 
>> Jacque,
>> 
>> Same issues with different mice (here at least).
>> 
>> John,
>> 
>> You could try setting the scroll rate yourself, I tried the following scripts and it worked, but I didn't have time to figure out the accelerated scrolling that users may expect…
>> 
>> -- Add this command to the script of each scrolling field
>> on rawKeyDown pKey
>>  put the long name of me into tField
>>  scrollRatePref pKey,tField
>> end rawKeyDown
>> 
>> -- Add this command to your stack or card script
>> command scrollRatePref pKey,pField
>>  -- Add a temporary scrollBar to make testing easier, then just hard code tScrollRate
>>  -- when you find the value that suits you, or set it up as a user preference. Try a value of 8 for starters.
>> 
>>  put the thumbPos of sb "tempScrollRate" into tScrollRate
>> 
>>  if pKey = "65308" then set the vScroll of pField to the vScroll of pField + tScrollRate -- Scrolls down
>>  if pKey = "65309" then set the vScroll of pField to the vScroll of pField - tScrollRate -- Scrolls Up
>> 
>> end scrollRatePref
>> 
>> If your field scrolls horizontally, 65310 scrolls right & 65311 scrolls left.
>> 
>> There are probably many better ways and lots more options, but this demonstrates the point.
>> 
>> Paul
>> 
>> 
>> On 2013-12-31, at 10:39 AM, J. Landman Gay <jacque at hyperactivesw.com> wrote:
>> 
>>> On 12/30/13 11:52 PM, John wrote:
>>>> 
>>>> The standard scrolling field in liveCode supports the a mouse scroll
>>>> wheel.  What is a bit unusual is that the height of the field
>>>> dictates how far the field “hops” as you scroll. In short fields (50
>>>> high) the field “jumps” in ½ character height increments (assuming
>>>> the default font and size are used).  In 100 high fields it is one
>>>> line at a time increasing to 10 lines at a time when the field is
>>>> 1000 high.
>>> 
>>> I think this may depend on your mouse and the OS. On my Mac using a magic mouse the amount of scroll depends on how fast I move my finger. On a mouse with a fixed scroll wheel it's probably different and may depend on the number of messages the scroll wheel sends for each change.
>>> 
>>> I'm just guessing, so it would be interesting to see if you get different results with a different mouse.
>>> 
>>> -- 
>>> Jacqueline Landman Gay         |     jacque at hyperactivesw.com
>>> HyperActive Software           |     http://www.hyperactivesw.com
>>> 
>>> 
>>> _______________________________________________
>>> use-livecode mailing list
>>> use-livecode at lists.runrev.com
>>> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
>>> http://lists.runrev.com/mailman/listinfo/use-livecode
>> 
>> 
>> _______________________________________________
>> use-livecode mailing list
>> use-livecode at lists.runrev.com
>> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
>> http://lists.runrev.com/mailman/listinfo/use-livecode
> 
> 
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode




More information about the use-livecode mailing list