Mouse polling answers for Scott

Charles Silverman csilverm at acs.ryerson.ca
Wed Feb 27 11:17:01 EST 2002


Hi Scott,

  Thanks for not letting me off the hook :)

>At the very least, you have to answer the question: is asynchronous
>(real time) polling of the mouse buttons with the mouse function
>adequate, or is it important to preserve the event-based
>implementation of HyperCard (and I thought SuperCard, though I haven't
>actually tested that)?  In your case, I think the distinction would be
>"is it acceptable for "the mouse" to return "up" even if the mouse had
>been pressed down and up between sequential calls to the mouse
>function?


  I need the entire queue of mouse events since each user action is
significant for me. Some users have such a light and quick touch that it is
significant. For other users, slight touches are accidental. So I've got  to
catch and process everything. If we're talking about the same thing,
SuperCard preserves the events as well. There are times when I get rid of
everything that's happened up until a point in order to start from a clean
slate  with "flushevents."

Here's a shortened sample of how I register a user action...

On mousedown
   repeat while the mouse is down
   end repeat
   -- user start scanning through three objects in order to select one
   put "alphabet,wordlist,editor" into tObjects
   repeat with loop = 1 to 3
     set the threeD of fld (item loop of tObjects) to FALSE  --hilite field
     if timedWait() then
          --scan the options in the field
         --- this might nest quite a bit deeper
     end if
     set the threeD of fld (item loop of tObjects) to TRUE --unhilite field
   end repeat
End mousedown


Function timedWait
    global gDwelltime --number of seconds to hilite the selection before
                      --moving on to the next selection
    put the seconds into tStartTime
    repeat until the optionkey is down -- in case the loop goes forever :)
       if the seconds - tStartStart > gDwellTime then return FALSE
       if the mouse is down then
              repeat while the mouse is down
                 --- I might do something here in case
                  ---  very spastic user can't release the switch
              end repeat
              return TRUE
    end repeat
End timedWait



> A related issue is with the "wait" command.  With the current
>synchronous mouse function "wait until the mouse is down" will always
>return when the user clicks.  With an async function it's possible
>that you will miss a quick click because there may be a delay between
>when the wait function is able to make sequential checks.  If the
>mouse goes down and then back up in that interval, you'll miss it.

Then would doing "repeat while the mouse is down" be better than the wait.






More information about the use-livecode mailing list