|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453 |
- /*
- ==============================================================================
-
- This file is part of the JUCE library.
- Copyright (c) 2020 - Raw Material Software Limited
-
- JUCE is an open source library subject to commercial or open-source
- licensing.
-
- By using JUCE, you agree to the terms of both the JUCE 6 End-User License
- Agreement and JUCE Privacy Policy (both effective as of the 16th June 2020).
-
- End User License Agreement: www.juce.com/juce-6-licence
- Privacy Policy: www.juce.com/juce-privacy-policy
-
- Or: You may also use this code under the terms of the GPL v3 (see
- www.gnu.org/licenses).
-
- JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
- EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
- DISCLAIMED.
-
- ==============================================================================
- */
-
- namespace juce
- {
-
- //==============================================================================
- /**
- Contains position and status information about a mouse event.
-
- @see MouseListener, Component::mouseMove, Component::mouseEnter, Component::mouseExit,
- Component::mouseDown, Component::mouseUp, Component::mouseDrag
-
- @tags{GUI}
- */
- class JUCE_API MouseEvent final
- {
- 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 pressure the pressure of the touch or stylus, in the range 0 to 1. Devices that
- do not support force information may return 0.0, 1.0, or a negative value,
- depending on the platform
- @param orientation the orientation of the touch input for this event in radians. The default is 0
- @param rotation the rotation of the pen device for this event in radians. The default is 0
- @param tiltX the tilt of the pen device along the x-axis between -1.0 and 1.0. The default is 0
- @param tiltY the tilt of the pen device along the y-axis between -1.0 and 1.0. The default is 0
- @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,
- float pressure,
- float orientation, float rotation,
- float tiltX, float tiltY,
- 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 pressure of the touch or stylus for this event.
- The range is 0 (soft) to 1 (hard).
- If the input device doesn't provide any pressure data, it may return a negative
- value here, or 0.0 or 1.0, depending on the platform.
- */
- const float pressure;
-
- /** The orientation of the touch input for this event in radians where 0 indicates a touch aligned with the x-axis
- and pointing from left to right; increasing values indicate rotation in the clockwise direction. The default is 0.
- */
- const float orientation;
-
- /** The rotation of the pen device for this event in radians. Indicates the clockwise
- rotation, or twist, of the pen. The default is 0.
- */
- const float rotation;
-
- /** The tilt of the pen device along the x-axis between -1.0 and 1.0. A positive value indicates
- a tilt to the right. The default is 0.
- */
- const float tiltX;
-
- /** The tilt of the pen device along the y-axis between -1.0 and 1.0. A positive value indicates
- a tilt toward the user. The default is 0.
- */
- const float tiltY;
-
- /** The coordinates of the last place that a mouse button was pressed.
- The coordinates are relative to the component specified in MouseEvent::component.
- @see getDistanceFromDragStart, getDistanceFromDragStartX, mouseWasDraggedSinceMouseDown
- */
- const Point<float> mouseDownPosition;
-
- /** 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, mouseWasDraggedSinceMouseDown
- */
- 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, mouseWasDraggedSinceMouseDown
- */
- 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.
- For a floating point version of this value, see mouseDownPosition.
- @see mouseDownPosition, getDistanceFromDragStart, getDistanceFromDragStartX, mouseWasDraggedSinceMouseDown
- */
- 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 position 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 position and where it was
- when the button was last pressed.
-
- @see getDistanceFromDragStart
- */
- int getDistanceFromDragStartY() const noexcept;
-
- /** Returns the difference between the mouse's current position and where it was
- when the button was last pressed.
-
- @see getDistanceFromDragStart
- */
- Point<int> getOffsetFromDragStart() const noexcept;
-
- /** Returns true if the user seems to be performing a drag gesture.
-
- This is only meaningful if called in either a mouseUp() or mouseDrag() method.
-
- It will return true if the user has dragged the mouse more than a few pixels from the place
- where the mouse-down occurred or the mouse has been held down for a significant amount of time.
-
- Once they have dragged it far enough for this method to return true, it will continue
- to return true until the mouse-up, even if they move the mouse back to the same
- location at which the mouse-down happened. 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 small movements they might make while trying to click.
- */
- bool mouseWasDraggedSinceMouseDown() const noexcept;
-
- /** Returns true if the mouse event is part of a click gesture rather than a drag.
- This is effectively the opposite of mouseWasDraggedSinceMouseDown()
- */
- 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;
-
- /** Returns true if the pressure value for this event is meaningful. */
- bool isPressureValid() const noexcept;
-
- /** Returns true if the orientation value for this event is meaningful. */
- bool isOrientationValid() const noexcept;
-
- /** Returns true if the rotation value for this event is meaningful. */
- bool isRotationValid() const noexcept;
-
- /** Returns true if the current tilt value (either x- or y-axis) is meaningful. */
- bool isTiltValid (bool tiltX) 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 uint8 numberOfClicks, wasMovedSinceMouseDown;
-
- MouseEvent& operator= (const MouseEvent&);
- };
-
-
- //==============================================================================
- /**
- Contains status information about a mouse wheel event.
-
- @see MouseListener, MouseEvent
-
- @tags{GUI}
- */
- struct MouseWheelDetails final
- {
- //==============================================================================
- /** 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 inertial momentum phase that follows
- the wheel being released. */
- bool isInertial;
- };
-
- //==============================================================================
- /**
- Contains status information about a pen event.
-
- @see MouseListener, MouseEvent
-
- @tags{GUI}
- */
- struct PenDetails final
- {
- /**
- The rotation of the pen device in radians. Indicates the clockwise rotation, or twist,
- of the pen. The default is 0.
- */
- float rotation;
-
- /**
- Indicates the angle of tilt of the pointer in a range of -1.0 to 1.0 along the x-axis where
- a positive value indicates a tilt to the right. The default is 0.
- */
- float tiltX;
-
- /**
- Indicates the angle of tilt of the pointer in a range of -1.0 to 1.0 along the y-axis where
- a positive value indicates a tilt toward the user. The default is 0.
- */
- float tiltY;
- };
-
- } // namespace juce
|