Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qapplekeymapper_p.h
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QAPPLEKEYMAPPER_H
5#define QAPPLEKEYMAPPER_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#ifdef Q_OS_MACOS
19#include <Carbon/Carbon.h>
20#endif
21
22#include <QtCore/QList>
23#include <QtCore/QHash>
24#include <QtGui/QKeyEvent>
25
26#include <QtCore/private/qcore_mac_p.h>
27
29
30class Q_GUI_EXPORT QAppleKeyMapper
31{
32public:
33 static Qt::KeyboardModifiers queryKeyboardModifiers();
35 static Qt::Key fromNSString(Qt::KeyboardModifiers qtMods, NSString *characters,
36 NSString *charactersIgnoringModifiers, QString &text);
37#ifdef Q_OS_MACOS
38 static Qt::KeyboardModifiers fromCocoaModifiers(NSEventModifierFlags cocoaModifiers);
39 static NSEventModifierFlags toCocoaModifiers(Qt::KeyboardModifiers);
40
41 static QChar toCocoaKey(Qt::Key key);
42 static Qt::Key fromCocoaKey(QChar keyCode);
43#else
44 static Qt::Key fromUIKitKey(NSString *keyCode);
45 static Qt::KeyboardModifiers fromUIKitModifiers(ulong uikitModifiers);
46 static ulong toUIKitModifiers(Qt::KeyboardModifiers);
47#endif
48private:
49#ifdef Q_OS_MACOS
50 static constexpr int kNumModifierCombinations = 16;
51 struct KeyMap : std::array<char32_t, kNumModifierCombinations>
52 {
53 // Initialize first element to a sentinel that allows us
54 // to distinguish an uninitialized map from an initialized.
55 // Using 0 would not allow us to map U+0000 (NUL), however
56 // unlikely that is.
57 KeyMap() : std::array<char32_t, 16>{Qt::Key_unknown} {}
58 };
59
60 bool updateKeyboard();
61
62 using VirtualKeyCode = unsigned short;
63 const KeyMap &keyMapForKey(VirtualKeyCode virtualKey) const;
64
65 QCFType<TISInputSourceRef> m_currentInputSource = nullptr;
66
67 enum { NullMode, UnicodeMode, OtherMode } m_keyboardMode = NullMode;
68 const UCKeyboardLayout *m_keyboardLayoutFormat = nullptr;
69 KeyboardLayoutKind m_keyboardKind = kKLKCHRuchrKind;
70
71 mutable QHash<VirtualKeyCode, KeyMap> m_keyMap;
72#endif
73};
74
76
77#endif
78
static Qt::Key fromUIKitKey(NSString *keyCode)
QList< int > possibleKeys(const QKeyEvent *event) const
static Qt::KeyboardModifiers queryKeyboardModifiers()
\inmodule QtCore
Definition qchar.h:48
\inmodule QtCore
Definition qhash.h:818
The QKeyEvent class describes a key event.
Definition qevent.h:423
Definition qlist.h:74
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
QString text
Combined button and popup list for selecting options.
@ Key_unknown
GLuint64 key
struct _cl_event * event
GLenum array
unsigned long ulong
Definition qtypes.h:30
QList< QChar > characters