More drawing tool woes: no mouseDown or mouseUp sent?

Richard Gaskin ambassador at fourthworld.com
Sun Sep 11 19:28:51 EDT 2005


Alejandro Tejada wrote:
> on Sat, 10 Sep 2005 
> Richard Gaskin wrote:
> 
> 
>>I'm making a specialized drawing tool, and I need to
>>know when the mouse 
>>is clicked outside of any control while the pointer
>>tool is active
> 
> 
> A frontscript could do what you want,

A frontscript can only respond to messages that exist.  In this case, 
the issue is that mouseDowns and mouseUps that occur on the card outside 
of any objects are not sent when the pointer tool is active.

Well, actually the mouseDown and mouseUp ARE sent, but only when button 
3 on the mouse is pressed; the messages aren't sent for button 1.

While we wait for mousedown and mouseup to become more orthogonal, or 
alternatively to the implementation of SuperCard's pointerDown and 
pointerUp messages, thus far the best workaround for the missing 
messages is a polling solution.

Polling is normally something I avoid unless absolutely necessary, as 
it's ususally much less efficient that getting a message: messages come 
from the engine's event loop, while polling is effectively running your 
own scripted event loop on top of that.  Moreoever, with polling 
solutions most of the time whatever you're checking isn't what you need, 
waiting for the one time out of thousands that you do.

For example, in this case we could use a timer sent to itself repeatedly 
which monitors if the mouseclick is true, and if so whether there is no 
target control.  If both conditions are true when can send ourselves a 
message to do what we need in lieu of getting a mouseUp.

One problem with timers is that they eat up a lot of processor time. 
Testing on 1/10th-second increments (100 millisecs) brought the idle 
processing for my app to almost 30%.  Bringing that down to a 
quarter-second (250 milliseconds) interval reduced it to about 10-15%, 
still more than I'd care for something this trivial.

Thinking outside the box, Ken suggested looking into mouseMove, checking 
if the mouse is down.  That option turns out to consume far less 
processor time, and for the moment is the one I'm going with.

But the day we get a true message for this I'll be ever so happy to back 
out that code. :)

--
  Richard Gaskin
  Managing Editor, revJournal
  _______________________________________________________
  Rev tips, tutorials and more: http://www.revJournal.com



More information about the use-livecode mailing list