7#include "../required.hpp"
8#include "../exception.hpp"
9#include "../strings.hpp"
19enum class keyboard_modifiers : uint8_t {
27[[nodiscard]]
constexpr keyboard_modifiers operator|(keyboard_modifiers lhs, keyboard_modifiers rhs)
noexcept
29 return static_cast<keyboard_modifiers
>(
static_cast<uint8_t
>(lhs) |
static_cast<uint8_t
>(rhs));
32constexpr keyboard_modifiers &operator|=(keyboard_modifiers &lhs, keyboard_modifiers rhs)
noexcept
38[[nodiscard]]
constexpr bool operator>=(keyboard_modifiers lhs, keyboard_modifiers rhs)
noexcept {
39 ttlet lhs_ =
static_cast<uint8_t
>(lhs);
40 ttlet rhs_ =
static_cast<uint8_t
>(rhs);
41 return (lhs_ & rhs_) == rhs_;
47inline keyboard_modifiers to_keyboard_modifiers(std::string_view s)
49 if (std::ssize(s) == 0) {
50 throw parse_error(
"Empty keyboard modifier");
54 ttlet s_lower = to_lower(
55 (s.back() ==
'+') ? s.substr(0, std::ssize(s) - 1) : s
58 if (s_lower ==
"shift") {
59 return keyboard_modifiers::Shift;
60 }
else if (s_lower ==
"control" || s_lower ==
"ctrl" || s_lower ==
"cntr") {
61 return keyboard_modifiers::Control;
62 }
else if (s_lower ==
"alt" || s_lower ==
"option" || s_lower ==
"meta") {
63 return keyboard_modifiers::Alt;
65 s_lower ==
"windows" || s_lower ==
"win" ||
66 s_lower ==
"command" || s_lower ==
"cmd" ||
69 return keyboard_modifiers::Super;
71 throw parse_error(
"Unknown keyboard modifier '{}'", s);
79 if (modifiers >= keyboard_modifiers::Shift) {
82 if (modifiers >= keyboard_modifiers::Control) {
85 if (modifiers >= keyboard_modifiers::Alt) {
88 if (modifiers >= keyboard_modifiers::Super) {
105struct hash<tt::keyboard_modifiers> {
106 [[nodiscard]]
size_t operator() (tt::keyboard_modifiers
const &rhs)
const noexcept {