diff options
Diffstat (limited to 'Kernel/Keyboard.h')
-rw-r--r-- | Kernel/Keyboard.h | 27 |
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; +}; |