summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-03-16 11:32:45 +0100
committerSean Harmer <sean.harmer@kdab.com>2015-08-03 14:44:01 +0000
commit2d8e5a80262e23b01ea911f619b344f94185ed5a (patch)
tree409dd1982fa4fa5add7359302c89540c1de09a4b /src
parent5be0ec8da8a63d75b0dd9c70119fc01e908f8618 (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.h2
-rw-r--r--src/input/input.pri6
-rw-r--r--src/input/inputhandler.cpp11
-rw-r--r--src/input/inputhandler_p.h7
-rw-r--r--src/input/inputmanagers_p.h11
-rw-r--r--src/input/mousecontroller.cpp117
-rw-r--r--src/input/mousecontroller_p.h89
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