| @@ -91,23 +91,23 @@ void TextField::onSelectKey(const event::SelectKey& e) { | |||||
| } | } | ||||
| e.consume(this); | e.consume(this); | ||||
| } | } | ||||
| else if (e.key == GLFW_KEY_LEFT && (e.mods & RACK_MOD_MASK) == 0) { | |||||
| if ((e.mods & RACK_MOD_MASK) == RACK_MOD_CTRL) { | |||||
| else if (e.key == GLFW_KEY_LEFT) { | |||||
| if (e.mods & RACK_MOD_CTRL) { | |||||
| while (--cursor > 0) { | while (--cursor > 0) { | ||||
| if (text[cursor] == ' ') | |||||
| if (text[cursor - 1] == ' ') | |||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| cursor--; | cursor--; | ||||
| } | } | ||||
| if ((e.mods & RACK_MOD_MASK) == 0) { | |||||
| if (!(e.mods & GLFW_MOD_SHIFT)) { | |||||
| selection = cursor; | selection = cursor; | ||||
| } | } | ||||
| e.consume(this); | e.consume(this); | ||||
| } | } | ||||
| else if (e.key == GLFW_KEY_RIGHT && (e.mods & RACK_MOD_MASK) == 0) { | |||||
| if ((e.mods & RACK_MOD_MASK) == RACK_MOD_CTRL) { | |||||
| else if (e.key == GLFW_KEY_RIGHT) { | |||||
| if (e.mods & RACK_MOD_CTRL) { | |||||
| while (++cursor < (int) text.size()) { | while (++cursor < (int) text.size()) { | ||||
| if (text[cursor] == ' ') | if (text[cursor] == ' ') | ||||
| break; | break; | ||||
| @@ -116,7 +116,7 @@ void TextField::onSelectKey(const event::SelectKey& e) { | |||||
| else { | else { | ||||
| cursor++; | cursor++; | ||||
| } | } | ||||
| if ((e.mods & RACK_MOD_MASK) == 0) { | |||||
| if (!(e.mods & GLFW_MOD_SHIFT)) { | |||||
| selection = cursor; | selection = cursor; | ||||
| } | } | ||||
| e.consume(this); | e.consume(this); | ||||
| @@ -125,45 +125,45 @@ void TextField::onSelectKey(const event::SelectKey& e) { | |||||
| selection = cursor = 0; | selection = cursor = 0; | ||||
| e.consume(this); | e.consume(this); | ||||
| } | } | ||||
| else if (e.key == GLFW_KEY_HOME && (e.mods & RACK_MOD_MASK) == GLFW_MOD_SHIFT) { | |||||
| cursor = 0; | |||||
| e.consume(this); | |||||
| } | |||||
| else if (e.key == GLFW_KEY_END && (e.mods & RACK_MOD_MASK) == 0) { | else if (e.key == GLFW_KEY_END && (e.mods & RACK_MOD_MASK) == 0) { | ||||
| selection = cursor = text.size(); | selection = cursor = text.size(); | ||||
| e.consume(this); | e.consume(this); | ||||
| } | } | ||||
| else if (e.key == GLFW_KEY_V && (e.mods & RACK_MOD_MASK) == 0) { | |||||
| if ((e.mods & RACK_MOD_MASK) == RACK_MOD_CTRL) { | |||||
| const char* newText = glfwGetClipboardString(APP->window->win); | |||||
| if (newText) | |||||
| insertText(newText); | |||||
| } | |||||
| else if (e.key == GLFW_KEY_END && (e.mods & RACK_MOD_MASK) == GLFW_MOD_SHIFT) { | |||||
| cursor = text.size(); | |||||
| e.consume(this); | e.consume(this); | ||||
| } | } | ||||
| else if (e.key == GLFW_KEY_X && (e.mods & RACK_MOD_MASK) == 0) { | |||||
| if ((e.mods & RACK_MOD_MASK) == RACK_MOD_CTRL) { | |||||
| if (cursor != selection) { | |||||
| int begin = std::min(cursor, selection); | |||||
| std::string selectedText = text.substr(begin, std::abs(selection - cursor)); | |||||
| glfwSetClipboardString(APP->window->win, selectedText.c_str()); | |||||
| insertText(""); | |||||
| } | |||||
| } | |||||
| else if (e.key == GLFW_KEY_V && (e.mods & RACK_MOD_MASK) == RACK_MOD_CTRL) { | |||||
| const char* newText = glfwGetClipboardString(APP->window->win); | |||||
| if (newText) | |||||
| insertText(newText); | |||||
| e.consume(this); | e.consume(this); | ||||
| } | } | ||||
| else if (e.key == GLFW_KEY_C && (e.mods & RACK_MOD_MASK) == 0) { | |||||
| if ((e.mods & RACK_MOD_MASK) == RACK_MOD_CTRL) { | |||||
| if (cursor != selection) { | |||||
| int begin = std::min(cursor, selection); | |||||
| std::string selectedText = text.substr(begin, std::abs(selection - cursor)); | |||||
| glfwSetClipboardString(APP->window->win, selectedText.c_str()); | |||||
| } | |||||
| else if (e.key == GLFW_KEY_X && (e.mods & RACK_MOD_MASK) == RACK_MOD_CTRL) { | |||||
| if (cursor != selection) { | |||||
| int begin = std::min(cursor, selection); | |||||
| std::string selectedText = text.substr(begin, std::abs(selection - cursor)); | |||||
| glfwSetClipboardString(APP->window->win, selectedText.c_str()); | |||||
| insertText(""); | |||||
| } | } | ||||
| e.consume(this); | e.consume(this); | ||||
| } | } | ||||
| else if (e.key == GLFW_KEY_A && (e.mods & RACK_MOD_MASK) == 0) { | |||||
| if ((e.mods & RACK_MOD_MASK) == RACK_MOD_CTRL) { | |||||
| selectAll(); | |||||
| else if (e.key == GLFW_KEY_C && (e.mods & RACK_MOD_MASK) == RACK_MOD_CTRL) { | |||||
| if (cursor != selection) { | |||||
| int begin = std::min(cursor, selection); | |||||
| std::string selectedText = text.substr(begin, std::abs(selection - cursor)); | |||||
| glfwSetClipboardString(APP->window->win, selectedText.c_str()); | |||||
| } | } | ||||
| e.consume(this); | e.consume(this); | ||||
| } | } | ||||
| else if (e.key == GLFW_KEY_A && (e.mods & RACK_MOD_MASK) == RACK_MOD_CTRL) { | |||||
| selectAll(); | |||||
| e.consume(this); | |||||
| } | |||||
| else if (e.key == GLFW_KEY_ENTER && (e.mods & RACK_MOD_MASK) == 0) { | else if (e.key == GLFW_KEY_ENTER && (e.mods & RACK_MOD_MASK) == 0) { | ||||
| if (multiline) { | if (multiline) { | ||||
| insertText("\n"); | insertText("\n"); | ||||