summaryrefslogtreecommitdiffstats
path: root/src/runtime/Qt3DSInputEngine.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/Qt3DSInputEngine.h')
-rw-r--r--src/runtime/Qt3DSInputEngine.h125
1 files changed, 125 insertions, 0 deletions
diff --git a/src/runtime/Qt3DSInputEngine.h b/src/runtime/Qt3DSInputEngine.h
new file mode 100644
index 0000000..bf75e5a
--- /dev/null
+++ b/src/runtime/Qt3DSInputEngine.h
@@ -0,0 +1,125 @@
+/****************************************************************************
+**
+** Copyright (C) 1993-2009 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** 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 General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) 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.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-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#pragma once
+
+//==============================================================================
+// Includes
+//==============================================================================
+#include "Qt3DSKernelTypes.h"
+#include "Qt3DSPickFrame.h"
+#include "foundation/Qt3DSRefCounted.h"
+#include "EASTL/vector.h"
+#include "foundation/Qt3DSDataRef.h"
+
+//==============================================================================
+// Namespace
+//==============================================================================
+namespace qt3ds {
+namespace runtime {
+ class IApplication;
+}
+}
+namespace Q3DStudio {
+
+//==============================================================================
+// Forwards
+//==============================================================================
+class CRuntime;
+union UVariant;
+class CInputEventProvider;
+
+//==============================================================================
+/**
+* @class CInputEngine
+* @brief The basic input engine
+*/
+class CInputEngine
+{
+ //==============================================================================
+ // Fields
+ //==============================================================================
+protected:
+ SInputFrame m_InputFrame; ///< The data describing the input state
+ eastl::vector<eastl::pair<float, float>> m_PickInput;
+ bool m_BeginPickInput;
+ qt3ds::runtime::IApplication *m_Application; ///< The Runtime object
+ qt3ds::foundation::NVScopedRefCounted<CInputEventProvider>
+ m_InputEventProvider; ///< The event provider for keyboard
+
+ //==============================================================================
+ // Methods
+ //==============================================================================
+public: // Construction
+ typedef qt3ds::foundation::NVConstDataRef<const eastl::pair<float, float>> TPickInputList;
+ CInputEngine();
+ virtual ~CInputEngine();
+
+public: // Runtime interfaces
+ void SetApplication(qt3ds::runtime::IApplication *inApplication);
+
+public:
+ // Access
+ virtual SInputFrame &GetInputFrame();
+ virtual SKeyInputFrame &GetKeyInputFrame();
+
+ // Setters
+ // Multitouch is handled by using BeginPickInput, SetPickInput (several times), and EndPickInput
+ // pairs.
+ // The assumption here is that the pick input is static until changed. So to clear it you need
+ // a
+ // begin, end pair without any other pieces.
+ virtual void BeginPickInput();
+ virtual void SetPickInput(FLOAT inX, FLOAT inY, BOOL inValid = true);
+ virtual void EndPickInput();
+ virtual TPickInputList GetPickInput() const;
+ virtual void SetPickFlags(INT32 inFlags);
+ virtual void SetKeyState(INT32 inKeyCode, BOOL inDown);
+ virtual void SetButtonState(INT32 inButtonCode, BOOL inDown);
+ virtual void SetScrollValue(INT32 inFlags, INT16 value);
+ virtual void SetModifierFlag(INT32 inFlag);
+
+ // Keyboard hook
+ virtual void HandleKeyboard(INT32 inKeyCode, INT32 inPressed, INT32 inRepeat = 0);
+
+ // Other input
+ virtual void HandleButton(INT32 inButtonCode, INT32 inPressed, INT32 inRepeat = 0);
+ virtual void HandleAxis(INT32 inAxisCode, FLOAT inValue);
+
+ // Helpers
+ // virtual INT32 ConvertKeyCode( INT32 inKeyCode, BOOL inShift );
+ // TODO: SK - To quickly restore functionality, but this is should be in tegra-specific project.
+ virtual void ClearInputFrame();
+ virtual BOOL TranslateEvent(const CHAR *inEvent);
+
+ void MarkApplicationDirty();
+};
+
+} // namespace Q3DStudio