|
@@ -15,12 +15,9 @@ std::string getKeyName(int key) { |
|
|
case GLFW_KEY_SPACE: return "Space"; |
|
|
case GLFW_KEY_SPACE: return "Space"; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const char* keyNameC = glfwGetKeyName(key, GLFW_KEY_UNKNOWN); |
|
|
|
|
|
if (keyNameC) { |
|
|
|
|
|
std::string keyName = keyNameC; |
|
|
|
|
|
if (keyName.size() == 1) |
|
|
|
|
|
keyName[0] = std::toupper((unsigned char) keyName[0]); |
|
|
|
|
|
return keyName; |
|
|
|
|
|
|
|
|
// Printable characters |
|
|
|
|
|
if (key < 128) { |
|
|
|
|
|
return std::string(1, (char) key); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// Unprintable keys with names |
|
|
// Unprintable keys with names |
|
@@ -64,6 +61,29 @@ std::string getKeyCommandName(int key, int mods) { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool Widget::KeyBaseEvent::isKeyCommand(int key, int mods) const { |
|
|
|
|
|
// Reject if mods don't match |
|
|
|
|
|
if ((this->mods & RACK_MOD_MASK) != mods) |
|
|
|
|
|
return false; |
|
|
|
|
|
// Reject invalid keys |
|
|
|
|
|
if (this->key < 32) |
|
|
|
|
|
return false; |
|
|
|
|
|
// Are both keys printable? |
|
|
|
|
|
if (this->key < 128 && key < 128) { |
|
|
|
|
|
// Is the event a printable ASCII character? |
|
|
|
|
|
if (this->keyName.size() == 1) { |
|
|
|
|
|
// Uppercase event key name |
|
|
|
|
|
char k = this->keyName[0]; |
|
|
|
|
|
if (k >= 'a' && k <= 'z') |
|
|
|
|
|
k += 'A' - 'a'; |
|
|
|
|
|
return k == key; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
// Check equal QWERTY keys, printable or not |
|
|
|
|
|
return this->key == key; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void EventState::setHoveredWidget(widget::Widget* w) { |
|
|
void EventState::setHoveredWidget(widget::Widget* w) { |
|
|
if (w == hoveredWidget) |
|
|
if (w == hoveredWidget) |
|
|
return; |
|
|
return; |
|
@@ -364,7 +384,7 @@ bool EventState::handleKey(math::Vec pos, int key, int scancode, int action, int |
|
|
eSelectKey.context = &cSelectKey; |
|
|
eSelectKey.context = &cSelectKey; |
|
|
eSelectKey.key = key; |
|
|
eSelectKey.key = key; |
|
|
eSelectKey.scancode = scancode; |
|
|
eSelectKey.scancode = scancode; |
|
|
const char* keyName = glfwGetKeyName(key, scancode); |
|
|
|
|
|
|
|
|
const char* keyName = glfwGetKeyName(key, GLFW_KEY_UNKNOWN); |
|
|
if (keyName) |
|
|
if (keyName) |
|
|
eSelectKey.keyName = keyName; |
|
|
eSelectKey.keyName = keyName; |
|
|
eSelectKey.action = action; |
|
|
eSelectKey.action = action; |
|
@@ -381,7 +401,7 @@ bool EventState::handleKey(math::Vec pos, int key, int scancode, int action, int |
|
|
eHoverKey.pos = pos; |
|
|
eHoverKey.pos = pos; |
|
|
eHoverKey.key = key; |
|
|
eHoverKey.key = key; |
|
|
eHoverKey.scancode = scancode; |
|
|
eHoverKey.scancode = scancode; |
|
|
const char* keyName = glfwGetKeyName(key, scancode); |
|
|
|
|
|
|
|
|
const char* keyName = glfwGetKeyName(key, GLFW_KEY_UNKNOWN); |
|
|
if (keyName) |
|
|
if (keyName) |
|
|
eHoverKey.keyName = keyName; |
|
|
eHoverKey.keyName = keyName; |
|
|
eHoverKey.action = action; |
|
|
eHoverKey.action = action; |
|
|