/*
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
This file is part of the JUCE library .
Copyright ( c ) 2015 - ROLI Ltd .
Permission is granted to use this software under the terms of either :
a ) the GPL v2 ( or any later version )
b ) the Affero GPL v3
Details of these licenses can be found at : www . gnu . org / licenses
JUCE is distributed in the hope that it will be useful , but WITHOUT ANY
WARRANTY ; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE . See the GNU General Public License for more details .
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
To release a closed - source product which uses JUCE , commercial licenses are
available : visit www . juce . com for more information .
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
*/
# ifndef JUCE_MOUSEEVENT_H_INCLUDED
# define JUCE_MOUSEEVENT_H_INCLUDED
//==============================================================================
/**
Contains position and status information about a mouse event .
@ see MouseListener , Component : : mouseMove , Component : : mouseEnter , Component : : mouseExit ,
Component : : mouseDown , Component : : mouseUp , Component : : mouseDrag
*/
class JUCE_API MouseEvent
{
public :
//==============================================================================
/** Creates a MouseEvent.
Normally an application will never need to use this .
@ param source the source that ' s invoking the event
@ param position the position of the mouse , relative to the component that is passed - in
@ param modifiers the key modifiers at the time of the event
@ param eventComponent the component that the mouse event applies to
@ param originator the component that originally received the event
@ param eventTime the time the event happened
@ param mouseDownPos the position of the corresponding mouse - down event ( relative to the component that is passed - in ) .
If there isn ' t a corresponding mouse - down ( e . g . for a mouse - move ) , this will just be
the same as the current mouse - x position .
@ param mouseDownTime the time at which the corresponding mouse - down event happened
If there isn ' t a corresponding mouse - down ( e . g . for a mouse - move ) , this will just be
the same as the current mouse - event time .
@ param numberOfClicks how many clicks , e . g . a double - click event will be 2 , a triple - click will be 3 , etc
@ param mouseWasDragged whether the mouse has been dragged significantly since the previous mouse - down
*/
MouseEvent ( MouseInputSource source ,
Point < float > position ,
ModifierKeys modifiers ,
Component * eventComponent ,
Component * originator ,
Time eventTime ,
Point < float > mouseDownPos ,
Time mouseDownTime ,
int numberOfClicks ,
bool mouseWasDragged ) noexcept ;
/** Destructor. */
~ MouseEvent ( ) noexcept ;
//==============================================================================
/** The position of the mouse when the event occurred.
This value is relative to the top - left of the component to which the
event applies ( as indicated by the MouseEvent : : eventComponent field ) .
This is a more accurate floating - point version of the position returned by
getPosition ( ) and the integer x and y member variables .
*/
const Point < float > position ;
/** The x-position of the mouse when the event occurred.
This value is relative to the top - left of the component to which the
event applies ( as indicated by the MouseEvent : : eventComponent field ) .
For a floating - point coordinate , see MouseEvent : : position
*/
const int x ;
/** The y-position of the mouse when the event occurred.
This value is relative to the top - left of the component to which the
event applies ( as indicated by the MouseEvent : : eventComponent field ) .
For a floating - point coordinate , see MouseEvent : : position
*/
const int y ;
/** The key modifiers associated with the event.
This will let you find out which mouse buttons were down , as well as which
modifier keys were held down .
When used for mouse - up events , this will indicate the state of the mouse buttons
just before they were released , so that you can tell which button they let go of .
*/
const ModifierKeys mods ;
/** The component that this event applies to.
This is usually the component that the mouse was over at the time , but for mouse - drag
events the mouse could actually be over a different component and the events are
still sent to the component that the button was originally pressed on .
The x and y member variables are relative to this component ' s position .
If you use getEventRelativeTo ( ) to retarget this object to be relative to a different
component , this pointer will be updated , but originalComponent remains unchanged .
@ see originalComponent
*/
Component * const eventComponent ;
/** The component that the event first occurred on.
If you use getEventRelativeTo ( ) to retarget this object to be relative to a different
component , this value remains unchanged to indicate the first component that received it .
@ see eventComponent
*/
Component * const originalComponent ;
/** The time that this mouse-event occurred. */
const Time eventTime ;
/** The time that the corresponding mouse-down event occurred. */
const Time mouseDownTime ;
/** The source device that generated this event. */
MouseInputSource source ;
//==============================================================================
/** Returns the x coordinate of the last place that a mouse was pressed.
The coordinate is relative to the component specified in MouseEvent : : component .
@ see getDistanceFromDragStart , getDistanceFromDragStartX , mouseWasClicked
*/
int getMouseDownX ( ) const noexcept ;
/** Returns the y coordinate of the last place that a mouse was pressed.
The coordinate is relative to the component specified in MouseEvent : : component .
@ see getDistanceFromDragStart , getDistanceFromDragStartX , mouseWasClicked
*/
int getMouseDownY ( ) const noexcept ;
/** Returns the coordinates of the last place that a mouse was pressed.
The coordinates are relative to the component specified in MouseEvent : : component .
@ see getDistanceFromDragStart , getDistanceFromDragStartX , mouseWasClicked
*/
Point < int > getMouseDownPosition ( ) const noexcept ;
/** Returns the straight-line distance between where the mouse is now and where it
was the last time the button was pressed .
This is quite handy for things like deciding whether the user has moved far enough
for it to be considered a drag operation .
@ see getDistanceFromDragStartX
*/
int getDistanceFromDragStart ( ) const noexcept ;
/** Returns the difference between the mouse's current x postion and where it was
when the button was last pressed .
@ see getDistanceFromDragStart
*/
int getDistanceFromDragStartX ( ) const noexcept ;
/** Returns the difference between the mouse's current y postion and where it was
when the button was last pressed .
@ see getDistanceFromDragStart
*/
int getDistanceFromDragStartY ( ) const noexcept ;
/** Returns the difference between the mouse's current postion and where it was
when the button was last pressed .
@ see getDistanceFromDragStart
*/
Point < int > getOffsetFromDragStart ( ) const noexcept ;
/** Returns true if the mouse has just been clicked.
Used in either your mouseUp ( ) or mouseDrag ( ) methods , this will tell you whether
the user has dragged the mouse more than a few pixels from the place where the
mouse - down occurred .
Once they have dragged it far enough for this method to return false , it will continue
to return false until the mouse - up , even if they move the mouse back to the same
position where they originally pressed it . This means that it ' s very handy for
objects that can either be clicked on or dragged , as you can use it in the mouseDrag ( )
callback to ignore any small movements they might make while clicking .
@ returns true if the mouse wasn ' t dragged by more than a few pixels between
the last time the button was pressed and released .
*/
bool mouseWasClicked ( ) const noexcept ;
/** For a click event, the number of times the mouse was clicked in succession.
So for example a double - click event will return 2 , a triple - click 3 , etc .
*/
int getNumberOfClicks ( ) const noexcept { return numberOfClicks ; }
/** Returns the time that the mouse button has been held down for.
If called from a mouseDrag or mouseUp callback , this will return the
number of milliseconds since the corresponding mouseDown event occurred .
If called in other contexts , e . g . a mouseMove , then the returned value
may be 0 or an undefined value .
*/
int getLengthOfMousePress ( ) const noexcept ;
//==============================================================================
/** The position of the mouse when the event occurred.
This position is relative to the top - left of the component to which the
event applies ( as indicated by the MouseEvent : : eventComponent field ) .
For a floating - point position , see MouseEvent : : position
*/
Point < int > getPosition ( ) const noexcept ;
/** Returns the mouse x position of this event, in global screen coordinates.
The coordinates are relative to the top - left of the main monitor .
@ see getScreenPosition
*/
int getScreenX ( ) const ;
/** Returns the mouse y position of this event, in global screen coordinates.
The coordinates are relative to the top - left of the main monitor .
@ see getScreenPosition
*/
int getScreenY ( ) const ;
/** Returns the mouse position of this event, in global screen coordinates.
The coordinates are relative to the top - left of the main monitor .
@ see getMouseDownScreenPosition
*/
Point < int > getScreenPosition ( ) const ;
/** Returns the x coordinate at which the mouse button was last pressed.
The coordinates are relative to the top - left of the main monitor .
@ see getMouseDownScreenPosition
*/
int getMouseDownScreenX ( ) const ;
/** Returns the y coordinate at which the mouse button was last pressed.
The coordinates are relative to the top - left of the main monitor .
@ see getMouseDownScreenPosition
*/
int getMouseDownScreenY ( ) const ;
/** Returns the coordinates at which the mouse button was last pressed.
The coordinates are relative to the top - left of the main monitor .
@ see getScreenPosition
*/
Point < int > getMouseDownScreenPosition ( ) const ;
//==============================================================================
/** Creates a version of this event that is relative to a different component.
The x and y positions of the event that is returned will have been
adjusted to be relative to the new component .
The component pointer that is passed - in must not be null .
*/
MouseEvent getEventRelativeTo ( Component * newComponent ) const noexcept ;
/** Creates a copy of this event with a different position.
All other members of the event object are the same , but the x and y are
replaced with these new values .
*/
MouseEvent withNewPosition ( Point < float > newPosition ) const noexcept ;
/** Creates a copy of this event with a different position.
All other members of the event object are the same , but the x and y are
replaced with these new values .
*/
MouseEvent withNewPosition ( Point < int > newPosition ) const noexcept ;
//==============================================================================
/** Changes the application-wide setting for the double-click time limit.
This is the maximum length of time between mouse - clicks for it to be
considered a double - click . It ' s used by the Component class .
@ see getDoubleClickTimeout , MouseListener : : mouseDoubleClick
*/
static void setDoubleClickTimeout ( int timeOutMilliseconds ) noexcept ;
/** Returns the application-wide setting for the double-click time limit.
This is the maximum length of time between mouse - clicks for it to be
considered a double - click . It ' s used by the Component class .
@ see setDoubleClickTimeout , MouseListener : : mouseDoubleClick
*/
static int getDoubleClickTimeout ( ) noexcept ;
private :
//==============================================================================
const Point < float > mouseDownPos ;
const uint8 numberOfClicks , wasMovedSinceMouseDown ;
MouseEvent & operator = ( const MouseEvent & ) ;
} ;
//==============================================================================
/**
Contains status information about a mouse wheel event .
@ see MouseListener , MouseEvent
*/
struct MouseWheelDetails
{
//==============================================================================
/** The amount that the wheel has been moved in the X axis.
If isReversed is true , then a negative deltaX means that the wheel has been
pushed physically to the left .
If isReversed is false , then a negative deltaX means that the wheel has been
pushed physically to the right .
*/
float deltaX ;
/** The amount that the wheel has been moved in the Y axis.
If isReversed is true , then a negative deltaY means that the wheel has been
pushed physically upwards .
If isReversed is false , then a negative deltaY means that the wheel has been
pushed physically downwards .
*/
float deltaY ;
/** Indicates whether the user has reversed the direction of the wheel.
See deltaX and deltaY for an explanation of the effects of this value .
*/
bool isReversed ;
/** If true, then the wheel has continuous, un-stepped motion. */
bool isSmooth ;
/** If true, then this event is part of the intertial momentum phase that follows
the wheel being released . */
bool isInertial ;
} ;
# endif // JUCE_MOUSEEVENT_H_INCLUDED