summaryrefslogtreecommitdiff
path: root/Kernel/Keyboard.h
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/Keyboard.h')
-rw-r--r--Kernel/Keyboard.h27
1 files changed, 21 insertions, 6 deletions
diff --git a/Kernel/Keyboard.h b/Kernel/Keyboard.h
index 7f374b840a..923c3ab9aa 100644
--- a/Kernel/Keyboard.h
+++ b/Kernel/Keyboard.h
@@ -6,15 +6,25 @@
#include <VirtualFileSystem/CharacterDevice.h>
#include "IRQHandler.h"
-class KeyboardClient {
-public:
- virtual ~KeyboardClient();
- virtual void onKeyPress(byte) = 0;
-};
+class KeyboardClient;
class Keyboard final : public IRQHandler, public CharacterDevice {
AK_MAKE_ETERNAL
public:
+ enum Modifier {
+ Mod_Alt = 0x01,
+ Mod_Ctrl = 0x02,
+ Mod_Shift = 0x04,
+ };
+
+ struct Key {
+ byte character { 0 };
+ byte modifiers { 0 };
+ bool alt() { return modifiers & Mod_Alt; }
+ bool ctrl() { return modifiers & Mod_Ctrl; }
+ bool shift() { return modifiers & Mod_Shift; }
+ };
+
static Keyboard& the() PURE;
virtual ~Keyboard() override;
@@ -34,7 +44,12 @@ private:
void emit(byte);
KeyboardClient* m_client { nullptr };
- CircularQueue<byte, 16> m_queue;
+ CircularQueue<Key, 16> m_queue;
byte m_modifiers { 0 };
};
+class KeyboardClient {
+public:
+ virtual ~KeyboardClient();
+ virtual void onKeyPress(Keyboard::Key) = 0;
+};