object beneath mouseLoc?

Dave Cragg dave.cragg at lacscentre.co.uk
Mon Jul 4 18:03:19 EDT 2011


On 4 Jul 2011, at 14:11, Ken Ray wrote:
> The only current way is through polling during
> mouseMove, which, although ugly, is usually fast enough even if you have
> hundreds of objects:
> 
> 
> on mouseMove
>    if the mouse is down then
>        repeat with x = 1 to the number of controls
>           if the mouseLoc is within the rect of control x then
>               -- do what you want to do with it
>           else
>               -- take some other action
>           end if
>       end repeat
>   end if
> end mouseMove

Scott Raney used to lecture us on avoiding polling with the mouse and  mouseLoc in situations like this. It's more efficient to use the x, y parameters passed in to mouseMove.  Something like this:


local sDown
on mouseUp
   put false into sDown
end mouseUp

on mouseRelease
   put false into sDown
end mouseRelease

on mouseDown
   put true into sDown
end mouseDown

on mouseMove x, y
   if sDown then
      repeat with k = 1 to the number of controls -- or whatver control list you need to test
         if (x,y) is within the rect of control k then
           -- do your thing here
         end if
      end repeat
   end if
end mouseMove

Cheers
Dave



More information about the use-livecode mailing list