diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-03-16 11:32:45 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-08-03 14:44:01 +0000 |
commit | 2d8e5a80262e23b01ea911f619b344f94185ed5a (patch) | |
tree | 409dd1982fa4fa5add7359302c89540c1de09a4b /src | |
parent | 5be0ec8da8a63d75b0dd9c70119fc01e908f8618 (diff) |
MouseController backend class for QMouseController
Change-Id: I8d042b79b58e9453f9836d55d2b5211f4ca1383c
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/input/handle_types_p.h | 2 | ||||
-rw-r--r-- | src/input/input.pri | 6 | ||||
-rw-r--r-- | src/input/inputhandler.cpp | 11 | ||||
-rw-r--r-- | src/input/inputhandler_p.h | 7 | ||||
-rw-r--r-- | src/input/inputmanagers_p.h | 11 | ||||
-rw-r--r-- | src/input/mousecontroller.cpp | 117 | ||||
-rw-r--r-- | src/input/mousecontroller_p.h | 89 |
7 files changed, 241 insertions, 2 deletions
diff --git a/src/input/handle_types_p.h b/src/input/handle_types_p.h index ac6b3fd55..b954e18ed 100644 --- a/src/input/handle_types_p.h +++ b/src/input/handle_types_p.h @@ -47,9 +47,11 @@ namespace Input { class KeyboardController; class KeyboardInput; +class MouseController; typedef QHandle<KeyboardController, 8> HKeyboardController; typedef QHandle<KeyboardInput, 16> HKeyboardInput; +typedef QHandle<MouseController, 8> HMouseController; } // Input diff --git a/src/input/input.pri b/src/input/input.pri index fef8289d0..4c4a8bd62 100644 --- a/src/input/input.pri +++ b/src/input/input.pri @@ -19,7 +19,8 @@ HEADERS += \ $$PWD/qmouseinput.h \ $$PWD/qmouseinput_p.h \ $$PWD/qmousecontroller_p.h \ - $$PWD/q3dmouseevent.h + $$PWD/q3dmouseevent.h \ + $$PWD/mousecontroller_p.h SOURCES += \ $$PWD/cameracontroller.cpp \ @@ -35,6 +36,7 @@ SOURCES += \ $$PWD/q3dkeyevent.cpp \ $$PWD/qmouseinput.cpp \ $$PWD/qmousecontroller.cpp \ - $$PWD/q3dmouseevent.cpp + $$PWD/q3dmouseevent.cpp \ + $$PWD/mousecontroller.cpp INCLUDEPATH += $$PWD diff --git a/src/input/inputhandler.cpp b/src/input/inputhandler.cpp index c0db01eee..6cfe8f248 100644 --- a/src/input/inputhandler.cpp +++ b/src/input/inputhandler.cpp @@ -49,6 +49,7 @@ namespace Input { InputHandler::InputHandler() : m_keyboardControllerManager(new KeyboardControllerManager()) , m_keyboardInputManager(new KeyboardInputManager()) + , m_mouseControllerManager(new MouseControllerManager()) , m_eventSource(Q_NULLPTR) , m_keyboardEventFilter(new KeyboardEventFilter()) { @@ -101,6 +102,16 @@ void InputHandler::removeKeyboardController(HKeyboardController controller) m_activeKeyboardControllers.removeAll(controller); } +void InputHandler::appendMouseController(HMouseController controller) +{ + m_activeMouseControllers.append(controller); +} + +void InputHandler::removeMouseController(HMouseController controller) +{ + m_activeMouseControllers.removeAll(controller); +} + // Return a vector of jobs to be performed for keyboard events // Handles all dependencies between jobs QVector<QAspectJobPtr> InputHandler::keyboardJobs() diff --git a/src/input/inputhandler_p.h b/src/input/inputhandler_p.h index d529f1860..c909d6bf1 100644 --- a/src/input/inputhandler_p.h +++ b/src/input/inputhandler_p.h @@ -52,6 +52,7 @@ namespace Input { class KeyboardInputManager; class KeyboardControllerManager; class KeyboardEventFilter; +class MouseControllerManager; class InputHandler { @@ -63,6 +64,7 @@ public: inline KeyboardControllerManager *keyboardControllerManager() const { return m_keyboardControllerManager; } inline KeyboardInputManager *keyboardInputManager() const { return m_keyboardInputManager; } + inline MouseControllerManager *mouseControllerManager() const { return m_mouseControllerManager; } void appendKeyEvent(const QKeyEvent &event); QList<QKeyEvent> pendingKeyEvents(); @@ -71,12 +73,17 @@ public: void appendKeyboardController(HKeyboardController controller); void removeKeyboardController(HKeyboardController controller); + void appendMouseController(HMouseController controller); + void removeMouseController(HMouseController controller); + QVector<QAspectJobPtr> keyboardJobs(); private: KeyboardControllerManager *m_keyboardControllerManager; KeyboardInputManager *m_keyboardInputManager; + MouseControllerManager *m_mouseControllerManager; QVector<HKeyboardController> m_activeKeyboardControllers; + QVector<HMouseController> m_activeMouseControllers; QObject *m_eventSource; KeyboardEventFilter *m_keyboardEventFilter; QList<QKeyEvent> m_pendingEvents; diff --git a/src/input/inputmanagers_p.h b/src/input/inputmanagers_p.h index 705668ab3..994519da4 100644 --- a/src/input/inputmanagers_p.h +++ b/src/input/inputmanagers_p.h @@ -41,6 +41,7 @@ #include <Qt3DInput/private/handle_types_p.h> #include <Qt3DInput/private/keyboardcontroller_p.h> #include <Qt3DInput/private/keyboardinput_p.h> +#include <Qt3DInput/private/mousecontroller_p.h> #include <Qt3DCore/private/qresourcemanager_p.h> QT_BEGIN_NAMESPACE @@ -69,6 +70,16 @@ public: KeyboardControllerManager() {} }; +class MouseControllerManager : public QResourceManager< + MouseController, + QNodeId, + 8, + Qt3D::ArrayAllocatingPolicy> +{ +public: + MouseControllerManager() {} +}; + } // Input } // Qt3D diff --git a/src/input/mousecontroller.cpp b/src/input/mousecontroller.cpp new file mode 100644 index 000000000..968f21ce0 --- /dev/null +++ b/src/input/mousecontroller.cpp @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "mousecontroller_p.h" +#include "inputmanagers_p.h" +#include "inputhandler_p.h" +#include "qmousecontroller.h" + +#include <Qt3DCore/qnode.h> +#include <Qt3DCore/qentity.h> +#include <Qt3DCore/qscenepropertychange.h> + +QT_BEGIN_NAMESPACE + +namespace Qt3D { + +namespace Input { + +MouseController::MouseController() + : QBackendNode() +{ +} + +MouseController::~MouseController() +{ +} + +void MouseController::updateFromPeer(QNode *peer) +{ + Q_UNUSED(peer); +} + +void MouseController::setInputHandler(InputHandler *handler) +{ + m_inputHandler = handler; +} + +void MouseController::addMouseInput(const QNodeId &input) +{ + if (!m_mouseInputs.contains(input)) + m_mouseInputs.append(input); +} + +void MouseController::removeMouseInput(const QNodeId &input) +{ + m_mouseInputs.removeOne(input); +} + +void MouseController::sceneChangeEvent(const QSceneChangePtr &e) +{ + Q_UNUSED(e); +} + +MouseControllerFunctor::MouseControllerFunctor(InputHandler *handler) + : m_handler(handler) +{ +} + +QBackendNode *MouseControllerFunctor::create(QNode *frontend, const QBackendNodeFactory *factory) const +{ + MouseController *controller = m_handler->mouseControllerManager()->getOrCreateResource(frontend->id()); + controller->setFactory(factory); + controller->setInputHandler(m_handler); + controller->setPeer(frontend); + m_handler->appendMouseController(m_handler->mouseControllerManager()->lookupHandle(frontend->id())); + return controller; +} + +QBackendNode *MouseControllerFunctor::get(const QNodeId &id) const +{ + return m_handler->mouseControllerManager()->lookupResource(id); +} + +void MouseControllerFunctor::destroy(const QNodeId &id) const +{ + m_handler->removeMouseController(m_handler->mouseControllerManager()->lookupHandle(id)); + m_handler->mouseControllerManager()->releaseResource(id); +} + +} // Input + +} // Qt3D + +QT_END_NAMESPACE diff --git a/src/input/mousecontroller_p.h b/src/input/mousecontroller_p.h new file mode 100644 index 000000000..6ff8198d8 --- /dev/null +++ b/src/input/mousecontroller_p.h @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QT3D_INPUT_MOUSECONTROLLER_H +#define QT3D_INPUT_MOUSECONTROLLER_H + +#include <Qt3DCore/qbackendnode.h> + +QT_BEGIN_NAMESPACE + +namespace Qt3D { + +namespace Input { + +class InputHandler; + +class MouseController : public QBackendNode +{ +public: + MouseController(); + ~MouseController(); + + void updateFromPeer(QNode *peer) Q_DECL_OVERRIDE; + void setInputHandler(InputHandler *handler); + + void addMouseInput(const QNodeId &input); + void removeMouseInput(const QNodeId &input); + +protected: + void sceneChangeEvent(const QSceneChangePtr &e) Q_DECL_OVERRIDE; + +private: + QVector<QNodeId> m_mouseInputs; + InputHandler *m_inputHandler; +}; + +class MouseControllerFunctor : public QBackendNodeFunctor +{ +public: + explicit MouseControllerFunctor(InputHandler *handler); + + QBackendNode *create(QNode *frontend, const QBackendNodeFactory *factory) const Q_DECL_OVERRIDE; + QBackendNode *get(const QNodeId &id) const Q_DECL_OVERRIDE; + void destroy(const QNodeId &id) const Q_DECL_OVERRIDE; + +private: + InputHandler *m_handler; +}; + +} // Input + +} // Qt3D + +QT_END_NAMESPACE + +#endif // MOUSECONTROLLER_H |