#pragma once #include #include #include #include namespace LibInput { class KeyboardLayout { public: static BAN::ErrorOr initialize(); static KeyboardLayout& get(); KeyEvent key_event_from_raw(RawKeyEvent); BAN::ErrorOr load_from_file(BAN::StringView path); BAN::Span keymap_normal() const { return m_keycode_to_key_normal.span(); } BAN::Span keymap_shift() const { return m_keycode_to_key_shift.span(); } BAN::Span keymap_altgr() const { return m_keycode_to_key_altgr.span(); } private: KeyboardLayout(); private: BAN::Array m_keycode_to_key_normal; BAN::Array m_keycode_to_key_shift; BAN::Array m_keycode_to_key_altgr; friend class BAN::UniqPtr; }; }