6#include "TTauri/Foundation/required.hpp"
7#include "TTauri/Foundation/exceptions.hpp"
8#include "TTauri/Foundation/strings.hpp"
18enum class KeyboardModifiers : uint8_t {
26[[nodiscard]]
constexpr KeyboardModifiers operator|(KeyboardModifiers lhs, KeyboardModifiers rhs)
noexcept
28 return static_cast<KeyboardModifiers
>(
static_cast<uint8_t
>(lhs) |
static_cast<uint8_t
>(rhs));
31constexpr KeyboardModifiers &operator|=(KeyboardModifiers &lhs, KeyboardModifiers rhs)
noexcept
37[[nodiscard]]
constexpr bool operator>=(KeyboardModifiers lhs, KeyboardModifiers rhs)
noexcept {
38 ttlet lhs_ =
static_cast<uint8_t
>(lhs);
39 ttlet rhs_ =
static_cast<uint8_t
>(rhs);
40 return (lhs_ & rhs_) == rhs_;
46inline KeyboardModifiers to_KeyboardModifiers(std::string_view s)
49 TTAURI_THROW(parse_error(
"Empty keyboard modifier"));
53 ttlet s_lower = to_lower(
54 (s.back() ==
'+') ? s.substr(0, ssize(s) - 1) : s
57 if (s_lower ==
"shift") {
58 return KeyboardModifiers::Shift;
59 }
else if (s_lower ==
"control" || s_lower ==
"ctrl" || s_lower ==
"cntr") {
60 return KeyboardModifiers::Control;
61 }
else if (s_lower ==
"alt" || s_lower ==
"option" || s_lower ==
"meta") {
62 return KeyboardModifiers::Alt;
64 s_lower ==
"windows" || s_lower ==
"win" ||
65 s_lower ==
"command" || s_lower ==
"cmd" ||
68 return KeyboardModifiers::Super;
70 TTAURI_THROW(parse_error(
"Unknown keyboard modifier '{}'", s));
78 if (modifiers >= KeyboardModifiers::Shift) {
81 if (modifiers >= KeyboardModifiers::Control) {
84 if (modifiers >= KeyboardModifiers::Alt) {
87 if (modifiers >= KeyboardModifiers::Super) {
104struct hash<tt::KeyboardModifiers> {
105 [[nodiscard]]
size_t operator() (tt::KeyboardModifiers
const &rhs)
const noexcept {