1// Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB).
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "keyboardhandler_p.h"
5
6#include <Qt3DInput/qkeyboarddevice.h>
7#include <Qt3DInput/qkeyboardhandler.h>
8#include <QtCore/QVariant>
9
10#include <Qt3DInput/private/inputhandler_p.h>
11#include <Qt3DInput/private/inputmanagers_p.h>
12#include <Qt3DInput/private/qkeyboardhandler_p.h>
13
14QT_BEGIN_NAMESPACE
15
16
17namespace Qt3DInput {
18namespace Input {
19
20using namespace Qt3DCore;
21
22KeyboardHandler::KeyboardHandler()
23 : BackendNode(QBackendNode::ReadWrite)
24 , m_inputHandler(nullptr)
25 , m_focus(false)
26{
27}
28
29Qt3DCore::QNodeId KeyboardHandler::keyboardDevice() const
30{
31 return m_keyboardDevice;
32}
33
34void KeyboardHandler::setInputHandler(InputHandler *handler)
35{
36 m_inputHandler = handler;
37}
38
39// Called by the KeyboadDevice when the focus for the KeyboardHandler has changed
40// Sends a change notification so that the frontend can update itself
41void KeyboardHandler::setFocus(bool focus)
42{
43 if (focus != m_focus)
44 m_focus = focus;
45}
46
47void KeyboardHandler::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime)
48{
49 BackendNode::syncFromFrontEnd(frontEnd, firstTime);
50 const Qt3DInput::QKeyboardHandler *node = qobject_cast<const Qt3DInput::QKeyboardHandler *>(object: frontEnd);
51 if (!node)
52 return;
53
54 if (firstTime)
55 m_focus = false;
56
57 bool focusRequest = false;
58 auto id = Qt3DCore::qIdForNode(node: node->sourceDevice());
59 if (m_keyboardDevice != id) {
60 setSourcerDevice(id);
61 focusRequest = m_focus;
62 }
63
64 if (m_focus != node->focus())
65 focusRequest = node->focus();
66
67 if (focusRequest)
68 requestFocus();
69}
70
71void KeyboardHandler::requestFocus()
72{
73 KeyboardDevice *keyboardDevice = m_inputHandler->keyboardDeviceManager()->lookupResource(id: m_keyboardDevice);
74 if (keyboardDevice && isEnabled())
75 keyboardDevice->requestFocusForInput(inputId: peerId());
76}
77
78void KeyboardHandler::setSourcerDevice(QNodeId device)
79{
80 m_keyboardDevice = device;
81}
82
83KeyboardHandlerFunctor::KeyboardHandlerFunctor(InputHandler *handler)
84 : m_handler(handler)
85{
86}
87
88Qt3DCore::QBackendNode *KeyboardHandlerFunctor::create(Qt3DCore::QNodeId id) const
89{
90 KeyboardHandler *input = m_handler->keyboardInputManager()->getOrCreateResource(id);
91 input->setInputHandler(m_handler);
92 return input;
93}
94
95QBackendNode *KeyboardHandlerFunctor::get(QNodeId id) const
96{
97 return m_handler->keyboardInputManager()->lookupResource(id);
98}
99
100void KeyboardHandlerFunctor::destroy(QNodeId id) const
101{
102 m_handler->keyboardInputManager()->releaseResource(id);
103}
104
105} // namespace Input
106} // namespace Qt3DInput
107
108QT_END_NAMESPACE
109

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

source code of qt3d/src/input/backend/keyboardhandler.cpp