Momentum Scrolling Script
    Jonathan Lynch 
    jonathandlynch at gmail.com
       
    Wed Jun 28 13:04:25 EDT 2017
    
    
  
I just realized I had the wrong way of checking to see if scrolling should
stop. Somehow it still worked, which is kinda weird. Here is the revised
script, with checking for tCount < 1 rather than tCount > 50
---------
Momentum Scrolling Code
Local StartDrag
Local AllowDrag
Local StartDragMil
Local CumulativeMomentum
on mousedown
   focus on nothing
   if word 1 of the name of the target = "button" or the isbutton of the
target = 1 then
      exit mousedown
   end if
   put (the mouseV)+(the vScroll of me) into AllowDrag
   put the milliseconds into StartDragMil
   put (the mouseV) into StartDrag
   repeat with CM = 1 to 5
      put 0 into CumulativeMomentum[CM]
   end repeat
   send momentumAccumulate to me in 0 milliseconds
end mousedown
on momentumAccumulate
   if mouse(1) <> "down" then
      exit momentumAccumulate
   end if
   put the milliseconds-StartDragMil into tTimeForLastMove
   put (the mouseV) into tCurrentMouseV
   put tCurrentMouseV - StartDrag into tLastDistanceCovered
   if tTimeForLastMove = 0 then
      put 1 into tTimeForLastMove
   end if
   repeat with CM = 5 down to 2
      put CumulativeMomentum[CM-1] into CumulativeMomentum[CM]
   end repeat
   put (tLastDistanceCovered*10) / tTimeForLastMove into
CumulativeMomentum[1]
   put tCurrentMouseV into StartDrag
   put the milliseconds into StartDragMil
   send momentumAccumulate to me in 5 milliseconds
end momentumAccumulate
on mousemove
   if AllowDrag <> empty then
      set the vScroll of me to AllowDrag-(the mouseV)
   end if
end mousemove
on mouseup
   put empty into AllowDrag
   put 0 into tCMTotal
   Repeat with CM = 1 to 5
      add CumulativeMomentum[CM] to tCMTotal
   end Repeat
   put tCMTotal/5 into tAverageMomentum
   put tAverageMomentum * 30 into tRemainingDistance
   doMomentumScrolling tRemainingDistance,50
end mouseup
on doMomentumScrolling tRemainingDistance, tCount
   if tCount < 1 then
      exit doMomentumScrolling
   end if
   if mouse(1) is "down" then
      exit doMomentumScrolling
   end if
   put tRemainingDistance/15 into tDistanceToMove
   put the vScroll of me into tVScroll
   set the vScroll of me to tVScroll - tDistanceToMove
   put tRemainingDistance-tDistanceToMove into tRemainingDistance
   put tCount-1 into tCount
   send "doMomentumScrolling tRemainingDistance, tCount" to me in 5
milliseconds
end doMomentumScrolling
On Wed, Jun 28, 2017 at 12:49 PM, Sean Cole (Pi) via use-livecode <
use-livecode at lists.runrev.com> wrote:
> Jonathan,
> I would also recommend using the var name prefixes as recommended by LC in
> thier Tips for Writing Good Code when sharing publicly. Like this I mean:
>
> Local sStartDrag
> Local sAllowDrag
> Local sStartDragMil
> Local sCumulativeMomentum
>
> on mousedown
>    focus on nothing
>    if word 1 of the name of the target = "button" or the isbutton of the
> target = 1 then
>       exit mousedown
>    end if
>    put (the mouseV)+(the vScroll of me) into sAllowDrag
>    put the milliseconds into sStartDragMil
>    put (the mouseV) into sStartDrag
>    repeat with CM = 1 to 5
>       put 0 into sCumulativeMomentum[CM]
>    end repeat
>    send momentumAccumulate to me in 0 milliseconds
> end mousedown
>
> on momentumAccumulate
> local tTimeForLastMove, tCurrentMouseV, tLastDistanceCovered
>    if mouse(1) <> "down" then
>       exit momentumAccumulate
>    end if
>    put the milliseconds-sStartDragMil into tTimeForLastMove
>    put (the mouseV) into tCurrentMouseV
>    put tCurrentMouseV - sStartDrag into tLastDistanceCovered
>    if tTimeForLastMove = 0 then
>       put 1 into tTimeForLastMove
>    end if
>    repeat with CM = 5 down to 2
>       put sCumulativeMomentum[CM-1] into sCumulativeMomentum[CM]
>    end repeat
>    put (tLastDistanceCovered*10) / tTimeForLastMove into
> sCumulativeMomentum[1]
>    put tCurrentMouseV into sStartDrag
>    put the milliseconds into sStartDragMil
>    send momentumAccumulate to me in 5 milliseconds
> end momentumAccumulate
>
> on mousemove
>    if sAllowDrag <> empty then
>       set the vScroll of me to sAllowDrag-(the mouseV)
>    end if
> end mousemove
>
> on mouseup
> local tCMTotal, tAverageMomentum, tRemainingDistance
>    put empty into sAllowDrag
>    put 0 into tCMTotal
>    Repeat with CM = 1 to 5
>       add sCumulativeMomentum[CM] to tCMTotal
>    end Repeat
>    put tCMTotal/5 into tAverageMomentum
>    put tAverageMomentum * 30 into tRemainingDistance
>    doMomentumScrolling tRemainingDistance,50
> end mouseup
>
> on doMomentumScrolling pRemainingDistance, pCount
> local tDistanceToMove
>    if pCount > 50 then
>       exit doMomentumScrolling
>    end if
>    if mouse(1) is "down" then
>       exit doMomentumScrolling
>    end if
>    put pRemainingDistance/15 into tDistanceToMove
>    put the vScroll of me into tVScroll
>    set the vScroll of me to tVScroll - tDistanceToMove
>    put pRemainingDistance-tDistanceToMove into pRemainingDistance
>    put pCount-1 into pCount
>    send "doMomentumScrolling pRemainingDistance, pCount" to me in 5
> milliseconds
> end doMomentumScrolling
>
>
> I hope this doesn't come across as patronising. You've obviously got some
> years of skill behind you and I don't want to come across as demeaning.
>
> Sean Cole
> *Pi Digital Productions Ltd*
>
> eMail Ts & Cs <http://pidigital.co.uk/emailTCs.rtf>   Pi Digital
> Productions Ltd is a UK registered limited company, no. 5255609
> _______________________________________________
> 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
>
-- 
Do all things with love
    
    
More information about the use-livecode
mailing list