rename keycode, mousecode enumerations

This commit is contained in:
MihailRis
2025-04-02 17:39:31 +03:00
parent 9843a1fc27
commit 881edb7b28
22 changed files with 160 additions and 154 deletions
+15 -15
View File
@@ -168,10 +168,10 @@ public:
uint currentFrame = 0;
uint frames[KEYS_BUFFER_SIZE] {};
std::vector<uint> codepoints;
std::vector<keycode> pressedKeys;
std::vector<Keycode> pressedKeys;
Bindings bindings;
bool keys[KEYS_BUFFER_SIZE] {};
std::unordered_map<keycode, util::HandlersList<>> keyCallbacks;
std::unordered_map<Keycode, util::HandlersList<>> keyCallbacks;
GLFWInput(GLFWwindow* window)
: window(window) {
@@ -196,11 +196,11 @@ public:
bool newstate = false;
switch (binding.type) {
case inputtype::keyboard:
newstate = pressed(static_cast<keycode>(binding.code));
case InputType::KEYBOARD:
newstate = pressed(static_cast<Keycode>(binding.code));
break;
case inputtype::mouse:
newstate = clicked(static_cast<mousecode>(binding.code));
case InputType::MOUSE:
newstate = clicked(static_cast<Mousecode>(binding.code));
break;
}
@@ -224,13 +224,13 @@ public:
keys[key] = pressed;
frames[key] = currentFrame;
if (pressed && !prevPressed) {
const auto& callbacks = keyCallbacks.find(static_cast<keycode>(key));
const auto& callbacks = keyCallbacks.find(static_cast<Keycode>(key));
if (callbacks != keyCallbacks.end()) {
callbacks->second.notify();
}
}
if (pressed) {
pressedKeys.push_back(static_cast<keycode>(key));
pressedKeys.push_back(static_cast<Keycode>(key));
}
}
@@ -251,24 +251,24 @@ public:
return scroll;
}
bool pressed(keycode key) const override {
bool pressed(Keycode key) const override {
int keycode = static_cast<int>(key);
if (keycode < 0 || keycode >= KEYS_BUFFER_SIZE) {
return false;
}
return keys[keycode];
}
bool jpressed(keycode keycode) const override {
bool jpressed(Keycode keycode) const override {
return pressed(keycode) &&
frames[static_cast<int>(keycode)] == currentFrame;
}
bool clicked(mousecode code) const override {
bool clicked(Mousecode code) const override {
return pressed(
static_cast<keycode>(MOUSE_KEYS_OFFSET + static_cast<int>(code))
static_cast<Keycode>(MOUSE_KEYS_OFFSET + static_cast<int>(code))
);
}
bool jclicked(mousecode code) const override {
bool jclicked(Mousecode code) const override {
return clicked(code) &&
frames[static_cast<int>(code) + MOUSE_KEYS_OFFSET] ==
currentFrame;
@@ -311,11 +311,11 @@ public:
return bindings;
}
observer_handler addKeyCallback(keycode key, KeyCallback callback) override {
ObserverHandler addKeyCallback(Keycode key, KeyCallback callback) override {
return keyCallbacks[key].add(std::move(callback));
}
const std::vector<keycode>& getPressedKeys() const override {
const std::vector<Keycode>& getPressedKeys() const override {
return pressedKeys;
}
+31 -31
View File
@@ -56,7 +56,7 @@ static std::unordered_map<std::string, int> mousecodes {
static std::unordered_map<int, std::string> keynames {};
static std::unordered_map<int, std::string> buttonsnames{};
std::string input_util::get_name(mousecode code) {
std::string input_util::get_name(Mousecode code) {
auto found = buttonsnames.find(static_cast<int>(code));
if (found == buttonsnames.end()) {
return "unknown";
@@ -64,7 +64,7 @@ std::string input_util::get_name(mousecode code) {
return found->second;
}
std::string input_util::get_name(keycode code) {
std::string input_util::get_name(Keycode code) {
auto found = keynames.find(static_cast<int>(code));
if (found == keynames.end()) {
return "unknown";
@@ -72,17 +72,17 @@ std::string input_util::get_name(keycode code) {
return found->second;
}
void Binding::reset(inputtype type, int code) {
void Binding::reset(InputType type, int code) {
this->type = type;
this->code = code;
}
void Binding::reset(keycode code) {
reset(inputtype::keyboard, static_cast<int>(code));
void Binding::reset(Keycode code) {
reset(InputType::KEYBOARD, static_cast<int>(code));
}
void Binding::reset(mousecode code) {
reset(inputtype::mouse, static_cast<int>(code));
void Binding::reset(Mousecode code) {
reset(InputType::MOUSE, static_cast<int>(code));
}
void input_util::initialize() {
@@ -103,23 +103,23 @@ void input_util::initialize() {
}
}
keycode input_util::keycode_from(const std::string& name) {
Keycode input_util::keycode_from(const std::string& name) {
const auto& found = keycodes.find(name);
if (found == keycodes.end()) {
return keycode::UNKNOWN;
return Keycode::UNKNOWN;
}
return static_cast<keycode>(found->second);
return static_cast<Keycode>(found->second);
}
mousecode input_util::mousecode_from(const std::string& name) {
Mousecode input_util::mousecode_from(const std::string& name) {
const auto& found = mousecodes.find(name);
if (found == mousecodes.end()) {
return mousecode::UNKNOWN;
return Mousecode::UNKNOWN;
}
return static_cast<mousecode>(found->second);
return static_cast<Mousecode>(found->second);
}
std::string input_util::to_string(keycode code) {
std::string input_util::to_string(Keycode code) {
int icode_repr = static_cast<int>(code);
const char* name =
glfwGetKeyName(icode_repr, glfwGetKeyScancode(icode_repr));
@@ -212,21 +212,21 @@ std::string input_util::to_string(keycode code) {
return std::string(name);
}
std::string input_util::to_string(mousecode code) {
std::string input_util::to_string(Mousecode code) {
switch (code) {
case mousecode::BUTTON_1:
case Mousecode::BUTTON_1:
return "LMB";
case mousecode::BUTTON_2:
case Mousecode::BUTTON_2:
return "RMB";
case mousecode::BUTTON_3:
case Mousecode::BUTTON_3:
return "MMB";
case mousecode::BUTTON_4:
case mousecode::BUTTON_5:
case mousecode::BUTTON_6:
case mousecode::BUTTON_7:
case mousecode::BUTTON_8:
case Mousecode::BUTTON_4:
case Mousecode::BUTTON_5:
case Mousecode::BUTTON_6:
case Mousecode::BUTTON_7:
case Mousecode::BUTTON_8:
return "XButton " + std::to_string(static_cast<int>(code) -
static_cast<int>(mousecode::BUTTON_3));
static_cast<int>(Mousecode::BUTTON_3));
default:
return "unknown button";
}
@@ -251,13 +251,13 @@ void Bindings::read(const dv::value& map, BindType bindType) {
for (auto& [name, value] : section.asObject()) {
auto key = sectionName + "." + name;
auto [prefix, codename] = util::split_at(value.asString(), ':');
inputtype type;
InputType type;
int code;
if (prefix == "key") {
type = inputtype::keyboard;
type = InputType::KEYBOARD;
code = static_cast<int>(input_util::keycode_from(codename));
} else if (prefix == "mouse") {
type = inputtype::mouse;
type = InputType::MOUSE;
code = static_cast<int>(input_util::mousecode_from(codename));
} else {
logger.error()
@@ -282,15 +282,15 @@ std::string Bindings::write() const {
const auto& binding = entry.second;
std::string value;
switch (binding.type) {
case inputtype::keyboard:
case InputType::KEYBOARD:
value =
"key:" +
input_util::get_name(static_cast<keycode>(binding.code));
input_util::get_name(static_cast<Keycode>(binding.code));
break;
case inputtype::mouse:
case InputType::MOUSE:
value =
"mouse:" +
input_util::get_name(static_cast<mousecode>(binding.code));
input_util::get_name(static_cast<Mousecode>(binding.code));
break;
default:
throw std::runtime_error("unsupported control type");
+38 -32
View File
@@ -15,7 +15,7 @@ enum class BindType {
};
/// @brief Represents glfw3 keycode values.
enum class keycode : int {
enum class Keycode : int {
SPACE = 32,
APOSTROPHE = 39,
COMMA = 44,
@@ -108,7 +108,7 @@ enum class keycode : int {
/// @brief Represents glfw3 mouse button IDs.
/// @details There is a subset of glfw3 mouse button IDs.
enum class mousecode : int {
enum class Mousecode : int {
BUTTON_1 = 0, // Left mouse button
BUTTON_2 = 1, // Right mouse button
BUTTON_3 = 2, // Middle mouse button
@@ -120,43 +120,49 @@ enum class mousecode : int {
UNKNOWN = -1,
};
inline mousecode MOUSECODES_ALL[] {
mousecode::BUTTON_1, mousecode::BUTTON_2, mousecode::BUTTON_3, mousecode::BUTTON_4,
mousecode::BUTTON_5, mousecode::BUTTON_6, mousecode::BUTTON_7, mousecode::BUTTON_8 };
inline Mousecode MOUSECODES_ALL[] {
Mousecode::BUTTON_1,
Mousecode::BUTTON_2,
Mousecode::BUTTON_3,
Mousecode::BUTTON_4,
Mousecode::BUTTON_5,
Mousecode::BUTTON_6,
Mousecode::BUTTON_7,
Mousecode::BUTTON_8};
namespace input_util {
void initialize();
keycode keycode_from(const std::string& name);
mousecode mousecode_from(const std::string& name);
Keycode keycode_from(const std::string& name);
Mousecode mousecode_from(const std::string& name);
/// @return Key label by keycode
std::string to_string(keycode code);
std::string to_string(Keycode code);
/// @return Mouse button label by keycode
std::string to_string(mousecode code);
std::string to_string(Mousecode code);
/// @return Key name by keycode
std::string get_name(keycode code);
std::string get_name(Keycode code);
/// @return Mouse button name by keycode
std::string get_name(mousecode code);
std::string get_name(Mousecode code);
}
enum class inputtype {
keyboard,
mouse,
enum class InputType {
KEYBOARD,
MOUSE,
};
struct Binding {
util::HandlersList<> onactived;
inputtype type;
InputType type;
int code;
bool state = false;
bool justChange = false;
bool enabled = true;
Binding() = default;
Binding(inputtype type, int code) : type(type), code(code) {
Binding(InputType type, int code) : type(type), code(code) {
}
bool active() const {
@@ -167,17 +173,17 @@ struct Binding {
return state && justChange;
}
void reset(inputtype, int);
void reset(keycode);
void reset(mousecode);
void reset(InputType, int);
void reset(Keycode);
void reset(Mousecode);
inline std::string text() const {
switch (type) {
case inputtype::keyboard: {
return input_util::to_string(static_cast<keycode>(code));
case InputType::KEYBOARD: {
return input_util::to_string(static_cast<Keycode>(code));
}
case inputtype::mouse: {
return input_util::to_string(static_cast<mousecode>(code));
case InputType::MOUSE: {
return input_util::to_string(static_cast<Mousecode>(code));
}
}
return "<unknown input type>";
@@ -223,11 +229,11 @@ public:
const Binding& require(const std::string& name) const;
void bind(const std::string& name, inputtype type, int code) {
void bind(const std::string& name, InputType type, int code) {
bindings.try_emplace(name, Binding(type, code));
}
void rebind(const std::string& name, inputtype type, int code) {
void rebind(const std::string& name, InputType type, int code) {
require(name) = Binding(type, code);
}
@@ -262,11 +268,11 @@ public:
virtual int getScroll() = 0;
virtual bool pressed(keycode keycode) const = 0;
virtual bool jpressed(keycode keycode) const = 0;
virtual bool pressed(Keycode keycode) const = 0;
virtual bool jpressed(Keycode keycode) const = 0;
virtual bool clicked(mousecode mousecode) const = 0;
virtual bool jclicked(mousecode mousecode) const = 0;
virtual bool clicked(Mousecode mousecode) const = 0;
virtual bool jclicked(Mousecode mousecode) const = 0;
virtual CursorState getCursor() const = 0;
@@ -277,12 +283,12 @@ public:
virtual const Bindings& getBindings() const = 0;
virtual observer_handler addKeyCallback(keycode key, KeyCallback callback) = 0;
virtual ObserverHandler addKeyCallback(Keycode key, KeyCallback callback) = 0;
virtual const std::vector<keycode>& getPressedKeys() const = 0;
virtual const std::vector<Keycode>& getPressedKeys() const = 0;
virtual const std::vector<uint>& getCodepoints() const = 0;
observer_handler addCallback(const std::string& name, KeyCallback callback) {
ObserverHandler addCallback(const std::string& name, KeyCallback callback) {
return getBindings().require(name).onactived.add(callback);
}
};