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
40 ttlet lhs_ =
static_cast<uint8_t
>(lhs);
41 ttlet rhs_ =
static_cast<uint8_t
>(rhs);
42 return (lhs_ & rhs_) == rhs_;
48inline keyboard_modifiers to_keyboard_modifiers(std::string_view s)
50 if (std::ssize(s) == 0) {
51 throw parse_error(
"Empty keyboard modifier");
55 ttlet s_lower = to_lower((s.back() ==
'+') ? s.substr(0, std::ssize(s) - 1) : s);
57 if (s_lower ==
"shift") {
58 return keyboard_modifiers::Shift;
59 }
else if (s_lower ==
"control" || s_lower ==
"ctrl" || s_lower ==
"cntr") {
60 return keyboard_modifiers::Control;
61 }
else if (s_lower ==
"alt" || s_lower ==
"option" || s_lower ==
"meta") {
62 return keyboard_modifiers::Alt;
63 }
else if (s_lower ==
"windows" || s_lower ==
"win" || s_lower ==
"command" || s_lower ==
"cmd" || s_lower ==
"super") {
64 return keyboard_modifiers::Super;
66 throw parse_error(
"Unknown keyboard modifier '{}'", s);
74 if (modifiers >= keyboard_modifiers::Shift) {
77 if (modifiers >= keyboard_modifiers::Control) {
80 if (modifiers >= keyboard_modifiers::Alt) {
83 if (modifiers >= keyboard_modifiers::Super) {
100struct hash<tt::keyboard_modifiers> {
101 [[nodiscard]]
size_t operator()(tt::keyboard_modifiers
const &rhs)
const noexcept
107template<
typename CharT>
108struct std::formatter<tt::keyboard_modifiers, CharT> : std::formatter<std::string_view, CharT> {
109 auto format(tt::keyboard_modifiers
const &t,
auto &fc)
111 return std::formatter<std::string_view, CharT>::format(tt::to_string(t), fc);
constexpr alignment operator|(vertical_alignment lhs, horizontal_alignment rhs) noexcept
Combine vertical and horizontal alignment.
Definition alignment.hpp:91