Click to go to the home page.

This Document
What this page is about
Mouse Handlers for Window Elements
Mouse Handlers for Menu Elements

See Also
Cursor Control
Open a Window
Close a Window
Close My Window
Handle
Rollover

 

Site Nav

css drop down menu by Css3Menu.com

Writing Mouse Handlers

Click to go to top of document. What this page is about

If you develop mouse handlers in your app, you may wish to give certain of them the following form to be consistent with the form of the WFS behaviors. Some of the WFS behaviors contain mouse handlers, and some of the mouse handlers do not execute unconditionally but according to certain conditions described below.

Click to go to top of document. Mouse Handlers for Window Elements

Click to go to top of section. Form for mouseEnter, mouseUp, and mouseLeave

If you attach behaviors that contain mouse handlers to Window Elements, you may wish to give the mouseEnter, mouseUp, and mouseLeave handlers the following form. Whether you should will of course depend on your intentions and the nature of the functionality you are implementing. However, I thought it best to provide these notes concerning the standard form of WFS behaviors. A tricky issue that I have sweated to make as simple as possible.

When WFS behaviors have mouse event handlers that are not mentioned below, the event handlers execute unconditionally.

property spriteNum

 

on mouseEnter me

  if the mouseDown = FALSE then

    --PUT YOUR CODE HERE

  end if

end mouseenter

 

on mouseUp me

  if the clickOn = spriteNum then

    --PUT YOUR CODE HERE

  end if

end mouseUp

on mouseLeave me

  if the mouseDown = FALSE then

    --PUT YOUR CODE HERE

  end if

end mouseleave

Click to go to top of section. mouseEnter notes

In windows, when you mouse enter an element, you do not normally want the mouseEnter behavior to be triggered unless the mouse is up. For instance, if you are dragging something around the window and you happen to mouse enter an element that has a mouseEnter behavior attached to it, you normally do not want the mouseEnter behavior to be triggered.

There will be exceptions to this, but the "Close My Window", "Open a Window", "Close a Window", and "Rollover" behaviors contain mouseEnter handlers that do not execute if the mouse is down when you enter sprites that have these behaviors.

Neither does the "Cursor Control" behavior change the cursor if you enter a sprite that has the "Cursor Control" behavior while the mouse is down.

Click to go to top of section. mouseUp notes

Suppose window element B has a mouseUp handler in some behavior attached to it. You mouse down on element A, keep the mouse down, drag to element B, and release the mouse. Normally you would not want the mouseUp behavior of element B to execute. Unless you were dragging element A onto element B. In which case the mouseUp handler of element B would not execute if A also contained a mouseUp handler. So in either case, we normally do not want the mouseUp of B to execute when it was not the last item clicked.

There will be exceptions to this rule of course. But the "Close My Window", "Open a Window", and "Close a Window" behaviors have mouseUp handlers that do not execute if the sprites to which they are attached were not the last sprites clicked.

The "Cursor Control" behavior does, however, execute unconditionally on mouseUp. This is intentional.

Click to go to top of section. mouseLeave notes

The argument concerning why I have chosen the form I have for the mouseLeave handler is the same as the argument concerning the form I've chosen for mouseEnter.

There will be exceptions to this rule, of course. But the "Open a Window" behavior contains a mouseLeave handler that does not execute if the mouse is down when you leave the sprite.

The "Rollover", "5: Close My Window" and "Close A Window" behaviors also contain a mouseLeave handler, but the window is closed regardless of whether the mouse is down or not. This avoids the case where the user enters, mouses down, leaves the sprite, and thus leaves the window open. I thought you normally would want the window to be closed in this case.

The "Cursor Control" behavior does not execute if you leave a sprite to which it is attached when the mouse is down.

Click to go to top of document. Mouse Handlers for Menu Elements

Click to go to top of section. Form for Menu Element Mouse Handlers

The "Menu Verb" behavior is the central behavior concerning mouse events and menus. The "Menu Verb" behavior contains mouseEnter, mouseDown, mouseUp, mouseLeave, and rightMouseDown handlers, and these execute unconditionally. Consequently, if you write and attach mouse handlers to menu items, let the mouse events execute unconditionally unless this is contrary to your intentions. That is the standard, in any case.

Click to go to top of section. Notes on Rationale for the Form

If you play with menus in standard applications, you see that they behave a bit different from window elements. For instance, if you click to open a menu, keep the mouse down, drag to a menu item, and release the mouse, the selection is made. Compare this with what happens when you mouse down on a window element button, keep the mouse down, drag to a different button, and release the mouse. The button does not behave as though it has been clicked, though the triggering event is mouseUp.

Why are window and menu elements different this way? Because menus are built for speed of selection; they let you be a bit inconsistent yet you get what you want. Whereas window elements make sure you can cancel an operation if you mousedown and then change your mind.

In keeping with an attempt to let WFS menus behave like standard menus, if so configured, the standard mouse handlers are a bit different from the standard window mouse handlers. The "Menu Verb" behavior contains mouseEnter, mouseDown, mouseUp, mouseLeave, and rightMouseDown handlers, and these execute unconditionally.

Consequently, they are slightly inconsistent with the "Cursor Control" behavior. But only slightly so. The mouseEnter and mouseLeave handlers of the "Cursor Control" behavior do not execute if the mouse is down when the events are triggered, whereas these events will be triggered if the mouse is down in the "Menu Verb" handler.

 

Click to go to the home pageWriting Mouse Handlers