31 keyboard_virtual_key virtual_key;
34 constexpr keyboard_key() noexcept : modifiers(keyboard_modifiers::none), virtual_key(keyboard_virtual_key::nul) {}
36 constexpr keyboard_key(
keyboard_modifiers modifiers, keyboard_virtual_key key) noexcept :
37 modifiers(modifiers), virtual_key(key)
41 keyboard_key(std::string_view key_combination) : modifiers(keyboard_modifiers::none), virtual_key(keyboard_virtual_key::nul)
43 hilet modifiers_and_vkey = split(key_combination,
'+');
44 hi_assert(modifiers_and_vkey.cbegin() != modifiers_and_vkey.cend());
46 hilet end_modifiers = modifiers_and_vkey.cend() - 1;
47 for (
auto i = modifiers_and_vkey.cbegin(); i != end_modifiers; ++i) {
51 virtual_key = to_keyboard_virtual_key(modifiers_and_vkey.back());
56 return hash_mix(modifiers, virtual_key);
59 [[nodiscard]]
friend bool operator==(keyboard_key
const &lhs, keyboard_key
const &rhs)
noexcept
61 return lhs.modifiers == rhs.modifiers && lhs.virtual_key == rhs.virtual_key;
64 [[nodiscard]]
friend std::string to_string(keyboard_key
const &rhs)
noexcept
66 return std::format(
"{}{}", rhs.modifiers, rhs.virtual_key);
71 return lhs << to_string(rhs);
#define hi_assert(expression,...)
Assert if expression is true.
Definition assert.hpp:199
keyboard_modifiers to_keyboard_modifiers(std::string_view s)
Parse a key-binding modifier name.
Definition keyboard_modifiers.hpp:51