| /**************************************************************************** |
| ** |
| ** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the Qt3D module of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:LGPL$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** GNU Lesser General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU Lesser |
| ** General Public License version 3 as published by the Free Software |
| ** Foundation and appearing in the file LICENSE.LGPL3 included in the |
| ** packaging of this file. Please review the following information to |
| ** ensure the GNU Lesser General Public License version 3 requirements |
| ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. |
| ** |
| ** GNU General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU |
| ** General Public License version 2.0 or (at your option) the GNU General |
| ** Public license version 3 or any later version approved by the KDE Free |
| ** Qt Foundation. The licenses are as published by the Free Software |
| ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 |
| ** included in the packaging of this file. Please review the following |
| ** information to ensure the GNU General Public License requirements will |
| ** be met: https://www.gnu.org/licenses/gpl-2.0.html and |
| ** https://www.gnu.org/licenses/gpl-3.0.html. |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| #include "qmouseevent.h" |
| |
| QT_BEGIN_NAMESPACE |
| |
| namespace Qt3DInput { |
| |
| namespace { |
| |
| template<typename EventClass, typename QtEventClass> |
| typename EventClass::Modifiers modifiersForEvent(const QtEventClass &event) |
| { |
| const Qt::KeyboardModifiers eventModifiers = event.modifiers(); |
| int modifiers = EventClass::NoModifier; |
| |
| if (eventModifiers & Qt::ShiftModifier) |
| modifiers |= EventClass::ShiftModifier; |
| |
| if (eventModifiers & Qt::ControlModifier) |
| modifiers |= EventClass::ControlModifier; |
| |
| if (eventModifiers & Qt::AltModifier) |
| modifiers |= EventClass::AltModifier; |
| |
| if (eventModifiers & Qt::MetaModifier) |
| modifiers |= EventClass::MetaModifier; |
| |
| if (eventModifiers & Qt::KeypadModifier) |
| modifiers |= EventClass::KeypadModifier; |
| |
| // Abuse the int used to store an enum to store multiple |
| // modifiers into one |
| return static_cast<typename EventClass::Modifiers>(modifiers); |
| } |
| |
| } // anonymous |
| |
| // Notes: |
| // Maybe we should provide the world pos of the intersection |
| // The distance t along the segment line at which the intersection occurs |
| // Screen Pos / Mouse Pos / Viewport Pos |
| // The intersection Ray |
| // These can always be added in follow up commits once the input API takes shape |
| |
| /*! |
| * \qmltype MouseEvent |
| * \instantiates Qt3DInput::QMouseEvent |
| * \inqmlmodule Qt3D.Input |
| * \since 5.5 |
| * \brief Provides parameters that describe a mouse event. |
| * |
| * Mouse events occur when a mouse button is pressed and the ray |
| * traversing the view, originating from the mouse position intersects with one |
| * or more elements of the scene. |
| * |
| * \sa KeyEvent, WheelEvent, MouseHandler |
| */ |
| |
| /*! |
| * \qmlproperty int Qt3D.Input::MouseEvent::x |
| * Specifies The X coordinate of the mouse event |
| * \readonly |
| */ |
| |
| /*! |
| * \qmlproperty int Qt3D.Input::MouseEvent::y |
| * Specifies The Y coordinate of the mouse event |
| * \readonly |
| */ |
| |
| /*! |
| * \qmlproperty bool Qt3D.Input::MouseEvent::wasHeld |
| * Specifies if a mouse button was held down during the mouse event |
| * \readonly |
| */ |
| |
| /*! |
| * \qmlproperty Buttons Qt3D.Input::MouseEvent::button |
| * Specifies the button triggering the mouse event |
| * \readonly |
| */ |
| |
| /*! |
| * \qmlproperty int Qt3D.Input::MouseEvent::buttons |
| * Specifies the button triggering the mouse event |
| * \readonly |
| */ |
| |
| /*! |
| * \qmlproperty Modifiers Qt3D.Input::MouseEvent::modifiers |
| * Specifies if any modifiers were applied to the mouse event |
| * \readonly |
| */ |
| |
| /*! |
| * \qmlproperty bool Qt3D.Input::MouseEvent::accepted |
| * Specifies if the mouse event has been accepted |
| */ |
| |
| /*! |
| * \class Qt3DInput::QMouseEvent |
| * \inheaderfile Qt3DInput/QMouseEvent |
| * \inmodule Qt3DInput |
| * |
| * \brief The Qt3DCore::QMouseEvent contains parameters that describe a mouse event. |
| * |
| * Mouse events occur when a mouse button is pressed and the ray |
| * traversing the view, originating from the mouse position intersects with one |
| * or more elements of the scene. |
| * |
| * \since 5.5 |
| * |
| * \sa QKeyEvent, QWheelEvent, QMouseHandler |
| * |
| */ |
| |
| /*! |
| * \property QMouseEvent::x |
| * Specifies The X coordinate of the mouse event |
| * \readonly |
| */ |
| |
| /*! |
| * \property QMouseEvent::y |
| * Specifies The y coordinate of the mouse event |
| * \readonly |
| */ |
| |
| /*! |
| * \property QMouseEvent::wasHeld |
| * Specifies if a mouse button was held down during the mouse event |
| * \readonly |
| */ |
| |
| /*! |
| * \property QMouseEvent::button |
| * Specifies the button triggering the mouse event |
| * \readonly |
| */ |
| |
| /*! |
| * \property QMouseEvent::buttons |
| * Specifies the button triggering the mouse event |
| * \readonly |
| */ |
| |
| /*! |
| * \property QMouseEvent::modifiers |
| * Specifies if any modifiers were applied to the mouse event |
| * \readonly |
| */ |
| |
| /*! |
| * \property QMouseEvent::accepted |
| * Specifies if the mouse event has been accepted |
| */ |
| |
| /*! |
| * \enum Qt3DInput::QMouseEvent::Buttons |
| * |
| * \value LeftButton |
| * \value RightButton |
| * \value MiddleButton |
| * \value BackButton |
| * \value NoButton |
| */ |
| |
| /*! |
| * \enum Qt3DInput::QMouseEvent::Modifiers |
| * |
| * \value NoModifier |
| * \value ShiftModifier |
| * \value ControlModifier |
| * \value AltModifier |
| * \value MetaModifier |
| * \value KeypadModifier |
| */ |
| |
| /*! |
| * \typedef Qt3DInput::QMouseEventPtr |
| * \relates Qt3DInput::QMouseEvent |
| * |
| * A shared pointer for QMouseEvent. |
| */ |
| |
| /*! |
| * \fn int Qt3DInput::QMouseEvent::x() const |
| * |
| * Returns the x position of the mouse event. |
| */ |
| |
| /*! |
| * \fn int Qt3DInput::QMouseEvent::y() const |
| * |
| * Returns the y position of the mouse event. |
| */ |
| |
| /*! |
| * \fn bool Qt3DInput::QMouseEvent::isAccepted() const |
| * |
| * Returns whether the event was accepted. |
| */ |
| |
| /*! |
| * \fn void Qt3DInput::QMouseEvent::setAccepted(bool accepted) |
| * |
| * Sets the event as accepted if \a accepted is true. |
| * |
| * \note When an event is accepted, it will prevent further propagation to other |
| * listeners. |
| */ |
| |
| /*! |
| * \fn QEvent::Type Qt3DInput::QMouseEvent::type() const |
| * |
| * Returns the QEvent::Type of the event. |
| */ |
| |
| /*! |
| * Constructs a new QMouseEvent instance for the QMouseEvent \a e. |
| */ |
| QMouseEvent::QMouseEvent(const QT_PREPEND_NAMESPACE(QMouseEvent) &e) |
| : QObject() |
| , m_event(e) |
| { |
| } |
| |
| QMouseEvent::~QMouseEvent() |
| { |
| } |
| |
| /*! |
| * Returns the mouse button of the mouse event. |
| */ |
| QMouseEvent::Buttons QMouseEvent::button() const |
| { |
| switch (m_event.button()) { |
| case Qt::LeftButton: |
| return QMouseEvent::LeftButton; |
| case Qt::RightButton: |
| return QMouseEvent::RightButton; |
| case Qt::MiddleButton: |
| return QMouseEvent::MiddleButton; |
| case Qt::BackButton: |
| return QMouseEvent::BackButton; |
| default: |
| return QMouseEvent::NoButton; |
| } |
| } |
| |
| /*! |
| * Returns a bitfield to be used to check for mouse buttons that may be |
| * accompanying the mouse event. |
| */ |
| int QMouseEvent::buttons() const |
| { |
| return m_event.buttons(); |
| } |
| |
| /*! |
| * Returns the keyboard modifiers that may be accompanying the mouse event. |
| */ |
| QMouseEvent::Modifiers QMouseEvent::modifiers() const |
| { |
| return modifiersForEvent<QMouseEvent, decltype(m_event)>(m_event); |
| } |
| |
| /*! |
| * \qmltype WheelEvent |
| * \instantiates Qt3DInput::QWheelEvent |
| * \inqmlmodule Qt3D.Input |
| * \since 5.5 |
| * \brief Contains parameters that describe a mouse wheel event. |
| * |
| * Mouse wheel events occur when the mouse wheel is rotated. |
| * |
| * \sa KeyEvent, MouseEvent, MouseHandler |
| * |
| */ |
| |
| /*! |
| * \qmlproperty int Qt3D.Input::WheelEvent::x |
| * Specifies The X coordinate of the mouse wheel event |
| * \readonly |
| */ |
| |
| /*! |
| * \qmlproperty int Qt3D.Input::WheelEvent::y |
| * Specifies The Y coordinate of the mouse wheel event |
| * \readonly |
| */ |
| |
| /*! |
| * \qmlproperty Point Qt3D.Input::WheelEvent::angleDelta |
| * Specifies The change wheel angle of the mouse wheel event |
| * \readonly |
| */ |
| |
| /*! |
| * \qmlproperty int Qt3D.Input::WheelEvent::buttons |
| * Specifies the button if present in the mouse wheel event |
| * \readonly |
| */ |
| |
| /*! |
| * \qmlproperty Modifiers Qt3D.Input::WheelEvent::modifiers |
| * Specifies if any modifiers were applied to the mouse wheel event |
| * \readonly |
| */ |
| |
| /*! |
| * \qmlproperty bool Qt3D.Input::WheelEvent::accepted |
| * Specifies if the mouse wheel event has been accepted |
| */ |
| |
| /*! |
| * \class Qt3DInput::QWheelEvent |
| * \inheaderfile Qt3DInput/QWheelEvent |
| * \inmodule Qt3DInput |
| * |
| * \brief The QWheelEvent class contains parameters that describe a mouse wheel event. |
| * |
| * Mouse wheel events occur when the mouse is rotated. |
| * |
| * \since 5.5 |
| * |
| * \sa QKeyEvent, QMouseEvent, QMouseHandler |
| * |
| */ |
| |
| /*! |
| * \property QWheelEvent::x |
| * Specifies The X coordinate of the mouse wheel event |
| * \readonly |
| */ |
| |
| /*! |
| * \property QWheelEvent::y |
| * Specifies The Y coordinate of the mouse wheel event |
| * \readonly |
| */ |
| |
| /*! |
| * \property QWheelEvent::angleDelta |
| * Specifies The change wheel angle of the mouse wheel event |
| * \readonly |
| */ |
| |
| /*! |
| * \property QWheelEvent::buttons |
| * Specifies the button if present in the mouse wheel event |
| * \readonly |
| */ |
| |
| /*! |
| * \property QWheelEvent::modifiers |
| * Specifies if any modifiers were applied to the mouse wheel event |
| * \readonly |
| */ |
| |
| /*! |
| * \property QWheelEvent::accepted |
| * Specifies if the mouse wheel event has been accepted |
| */ |
| |
| /*! |
| * \enum Qt3DInput::QWheelEvent::Buttons |
| * |
| * \value LeftButton |
| * \value RightButton |
| * \value MiddleButton |
| * \value BackButton |
| * \value NoButton |
| */ |
| |
| /*! |
| * \enum Qt3DInput::QWheelEvent::Modifiers |
| * |
| * \value NoModifier |
| * \value ShiftModifier |
| * \value ControlModifier |
| * \value AltModifier |
| * \value MetaModifier |
| * \value KeypadModifier |
| */ |
| |
| |
| /*! |
| * \typedef Qt3DInput::QWheelEventPtr |
| * \relates Qt3DInput::QWheelEvent |
| * |
| * A shared pointer for QWheelEvent. |
| */ |
| |
| /*! |
| * \fn int Qt3DInput::QWheelEvent::x() const |
| * |
| * Returns the x position of the mouse event. |
| */ |
| |
| /*! |
| * \fn int Qt3DInput::QWheelEvent::y() const |
| * |
| * Returns the x position of the mouse event. |
| */ |
| |
| /*! |
| * \fn QPoint Qt3DInput::QWheelEvent::angleDelta() const |
| * |
| * Returns the distance that the wheel is rotated, in eighths of a degree. A |
| * positive value indicates that the wheel was rotated forward (away from the |
| * user), a negative value indicates the wheel was rotated backward (toward the |
| * user). |
| */ |
| |
| /*! |
| * \fn bool Qt3DInput::QWheelEvent::isAccepted() const |
| * |
| * Returns whether the event was accepted. |
| */ |
| |
| /*! |
| * \fn void Qt3DInput::QWheelEvent::setAccepted(bool accepted) |
| * |
| * Sets the event as accepted if \a accepted is true. |
| * |
| * \note When an event is accepted, it will prevent further propagation to other |
| * listeners. |
| */ |
| |
| /*! |
| * \fn QEvent::Type Qt3DInput::QWheelEvent::type() const |
| * |
| * Returns the QEvent::Type of the event. |
| */ |
| |
| #if QT_CONFIG(wheelevent) |
| /*! |
| * Constructs a new QWheelEvent instance from the QWheelEvent \a e. |
| */ |
| QWheelEvent::QWheelEvent(const QT_PREPEND_NAMESPACE(QWheelEvent) &e) |
| : QObject() |
| , m_event(e) |
| { |
| } |
| |
| QWheelEvent::~QWheelEvent() |
| { |
| } |
| |
| /*! |
| * Returns a bitfield to be used to check for mouse buttons that may be |
| * accompanying the wheel event. |
| */ |
| int QWheelEvent::buttons() const |
| { |
| return m_event.buttons(); |
| } |
| |
| /*! |
| * Returns the keyboard modifiers that may be accompanying the wheel event. |
| */ |
| QWheelEvent::Modifiers QWheelEvent::modifiers() const |
| { |
| return modifiersForEvent<QWheelEvent, decltype(m_event)>(m_event); |
| } |
| #endif // QT_CONFIG(wheelevent) |
| |
| } // namespace Qt3DInput |
| |
| QT_END_NAMESPACE |