|  | @@ -37,10 +37,108 @@ | 
														
													
														
															
																|  |  | #include "WindowParameters.hpp" |  |  | #include "WindowParameters.hpp" | 
														
													
														
															
																|  |  | #include "ResizeHandle.hpp" |  |  | #include "ResizeHandle.hpp" | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | GLFWAPI const char* glfwGetClipboardString(GLFWwindow* window) { return nullptr; } |  |  |  | 
														
													
														
															
																|  |  | GLFWAPI void glfwSetClipboardString(GLFWwindow* window, const char*) {} |  |  |  | 
														
													
														
															
																|  |  | GLFWAPI const char* glfwGetKeyName(int key, int scancode) { return nullptr; } |  |  |  | 
														
													
														
															
																|  |  | GLFWAPI int glfwGetKeyScancode(int key) { return 0; } |  |  |  | 
														
													
														
															
																|  |  |  |  |  | GLFWAPI const char* glfwGetClipboardString(GLFWwindow*) { return nullptr; } | 
														
													
														
															
																|  |  |  |  |  | GLFWAPI void glfwSetClipboardString(GLFWwindow*, const char*) {} | 
														
													
														
															
																|  |  |  |  |  | GLFWAPI int glfwGetKeyScancode(int) { return 0; } | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  |  |  |  | GLFWAPI const char* glfwGetKeyName(const int key, int) | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | switch (key) | 
														
													
														
															
																|  |  |  |  |  | { | 
														
													
														
															
																|  |  |  |  |  | case '\"': return "\""; | 
														
													
														
															
																|  |  |  |  |  | case '\'': return "\'"; | 
														
													
														
															
																|  |  |  |  |  | case '\\': return "\\"; | 
														
													
														
															
																|  |  |  |  |  | case ' ': return " "; | 
														
													
														
															
																|  |  |  |  |  | case '!': return "!"; | 
														
													
														
															
																|  |  |  |  |  | case '#': return "#"; | 
														
													
														
															
																|  |  |  |  |  | case '$': return "$"; | 
														
													
														
															
																|  |  |  |  |  | case '%': return "%"; | 
														
													
														
															
																|  |  |  |  |  | case '&': return "&"; | 
														
													
														
															
																|  |  |  |  |  | case '(': return "("; | 
														
													
														
															
																|  |  |  |  |  | case ')': return ")"; | 
														
													
														
															
																|  |  |  |  |  | case '*': return "*"; | 
														
													
														
															
																|  |  |  |  |  | case '+': return "+"; | 
														
													
														
															
																|  |  |  |  |  | case ',': return ","; | 
														
													
														
															
																|  |  |  |  |  | case '-': return "-"; | 
														
													
														
															
																|  |  |  |  |  | case '.': return "."; | 
														
													
														
															
																|  |  |  |  |  | case '/': return "/"; | 
														
													
														
															
																|  |  |  |  |  | case '0': return "0"; | 
														
													
														
															
																|  |  |  |  |  | case '1': return "1"; | 
														
													
														
															
																|  |  |  |  |  | case '2': return "2"; | 
														
													
														
															
																|  |  |  |  |  | case '3': return "3"; | 
														
													
														
															
																|  |  |  |  |  | case '4': return "4"; | 
														
													
														
															
																|  |  |  |  |  | case '5': return "5"; | 
														
													
														
															
																|  |  |  |  |  | case '6': return "6"; | 
														
													
														
															
																|  |  |  |  |  | case '7': return "7"; | 
														
													
														
															
																|  |  |  |  |  | case '8': return "8"; | 
														
													
														
															
																|  |  |  |  |  | case '9': return "9"; | 
														
													
														
															
																|  |  |  |  |  | case ':': return ":"; | 
														
													
														
															
																|  |  |  |  |  | case ';': return ";"; | 
														
													
														
															
																|  |  |  |  |  | case '<': return "<"; | 
														
													
														
															
																|  |  |  |  |  | case '=': return "="; | 
														
													
														
															
																|  |  |  |  |  | case '>': return ">"; | 
														
													
														
															
																|  |  |  |  |  | case '?': return "?"; | 
														
													
														
															
																|  |  |  |  |  | case '@': return "@"; | 
														
													
														
															
																|  |  |  |  |  | case 'A': return "A"; | 
														
													
														
															
																|  |  |  |  |  | case 'B': return "B"; | 
														
													
														
															
																|  |  |  |  |  | case 'C': return "C"; | 
														
													
														
															
																|  |  |  |  |  | case 'D': return "D"; | 
														
													
														
															
																|  |  |  |  |  | case 'E': return "E"; | 
														
													
														
															
																|  |  |  |  |  | case 'F': return "F"; | 
														
													
														
															
																|  |  |  |  |  | case 'G': return "G"; | 
														
													
														
															
																|  |  |  |  |  | case 'H': return "H"; | 
														
													
														
															
																|  |  |  |  |  | case 'I': return "I"; | 
														
													
														
															
																|  |  |  |  |  | case 'J': return "J"; | 
														
													
														
															
																|  |  |  |  |  | case 'K': return "K"; | 
														
													
														
															
																|  |  |  |  |  | case 'L': return "L"; | 
														
													
														
															
																|  |  |  |  |  | case 'M': return "M"; | 
														
													
														
															
																|  |  |  |  |  | case 'N': return "N"; | 
														
													
														
															
																|  |  |  |  |  | case 'O': return "O"; | 
														
													
														
															
																|  |  |  |  |  | case 'P': return "P"; | 
														
													
														
															
																|  |  |  |  |  | case 'Q': return "Q"; | 
														
													
														
															
																|  |  |  |  |  | case 'R': return "R"; | 
														
													
														
															
																|  |  |  |  |  | case 'S': return "S"; | 
														
													
														
															
																|  |  |  |  |  | case 'T': return "T"; | 
														
													
														
															
																|  |  |  |  |  | case 'U': return "U"; | 
														
													
														
															
																|  |  |  |  |  | case 'V': return "V"; | 
														
													
														
															
																|  |  |  |  |  | case 'W': return "W"; | 
														
													
														
															
																|  |  |  |  |  | case 'X': return "X"; | 
														
													
														
															
																|  |  |  |  |  | case 'Y': return "Y"; | 
														
													
														
															
																|  |  |  |  |  | case 'Z': return "Z"; | 
														
													
														
															
																|  |  |  |  |  | case '[': return "["; | 
														
													
														
															
																|  |  |  |  |  | case ']': return "]"; | 
														
													
														
															
																|  |  |  |  |  | case '^': return "^"; | 
														
													
														
															
																|  |  |  |  |  | case '_': return "_"; | 
														
													
														
															
																|  |  |  |  |  | case '`': return "`"; | 
														
													
														
															
																|  |  |  |  |  | case 'a': return "a"; | 
														
													
														
															
																|  |  |  |  |  | case 'b': return "b"; | 
														
													
														
															
																|  |  |  |  |  | case 'c': return "c"; | 
														
													
														
															
																|  |  |  |  |  | case 'd': return "d"; | 
														
													
														
															
																|  |  |  |  |  | case 'e': return "e"; | 
														
													
														
															
																|  |  |  |  |  | case 'f': return "f"; | 
														
													
														
															
																|  |  |  |  |  | case 'g': return "g"; | 
														
													
														
															
																|  |  |  |  |  | case 'h': return "h"; | 
														
													
														
															
																|  |  |  |  |  | case 'i': return "i"; | 
														
													
														
															
																|  |  |  |  |  | case 'j': return "j"; | 
														
													
														
															
																|  |  |  |  |  | case 'k': return "k"; | 
														
													
														
															
																|  |  |  |  |  | case 'l': return "l"; | 
														
													
														
															
																|  |  |  |  |  | case 'm': return "m"; | 
														
													
														
															
																|  |  |  |  |  | case 'n': return "n"; | 
														
													
														
															
																|  |  |  |  |  | case 'o': return "o"; | 
														
													
														
															
																|  |  |  |  |  | case 'p': return "p"; | 
														
													
														
															
																|  |  |  |  |  | case 'q': return "q"; | 
														
													
														
															
																|  |  |  |  |  | case 'r': return "r"; | 
														
													
														
															
																|  |  |  |  |  | case 's': return "s"; | 
														
													
														
															
																|  |  |  |  |  | case 't': return "t"; | 
														
													
														
															
																|  |  |  |  |  | case 'u': return "u"; | 
														
													
														
															
																|  |  |  |  |  | case 'v': return "v"; | 
														
													
														
															
																|  |  |  |  |  | case 'w': return "w"; | 
														
													
														
															
																|  |  |  |  |  | case 'x': return "x"; | 
														
													
														
															
																|  |  |  |  |  | case 'y': return "y"; | 
														
													
														
															
																|  |  |  |  |  | case 'z': return "z"; | 
														
													
														
															
																|  |  |  |  |  | default: return nullptr; | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | namespace rack { |  |  | namespace rack { | 
														
													
														
															
																|  |  | namespace app { |  |  | namespace app { | 
														
													
												
													
														
															
																|  | @@ -343,45 +441,21 @@ protected: | 
														
													
														
															
																|  |  | const int mods = glfwMods(ev.mod); |  |  | const int mods = glfwMods(ev.mod); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | int button; |  |  | int button; | 
														
													
														
															
																|  |  | #ifdef DISTRHO_OS_MAC |  |  |  | 
														
													
														
															
																|  |  |  |  |  |  | 
														
													
														
															
																|  |  | switch (ev.button) |  |  | switch (ev.button) | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  | case 1: |  |  |  | 
														
													
														
															
																|  |  | button = GLFW_MOUSE_BUTTON_LEFT; |  |  |  | 
														
													
														
															
																|  |  | break; |  |  |  | 
														
													
														
															
																|  |  | case 2: |  |  |  | 
														
													
														
															
																|  |  | button = GLFW_MOUSE_BUTTON_RIGHT; |  |  |  | 
														
													
														
															
																|  |  | break; |  |  |  | 
														
													
														
															
																|  |  | case 3: |  |  |  | 
														
													
														
															
																|  |  | button = GLFW_MOUSE_BUTTON_MIDDLE; |  |  |  | 
														
													
														
															
																|  |  | break; |  |  |  | 
														
													
														
															
																|  |  | default: |  |  |  | 
														
													
														
															
																|  |  | button = 0; |  |  |  | 
														
													
														
															
																|  |  | break; |  |  |  | 
														
													
														
															
																|  |  | } |  |  |  | 
														
													
														
															
																|  |  |  |  |  | case 1: button = GLFW_MOUSE_BUTTON_LEFT;   break; | 
														
													
														
															
																|  |  |  |  |  | #ifdef DISTRHO_OS_MAC | 
														
													
														
															
																|  |  |  |  |  | case 2: button = GLFW_MOUSE_BUTTON_RIGHT;  break; | 
														
													
														
															
																|  |  |  |  |  | case 3: button = GLFW_MOUSE_BUTTON_MIDDLE; break; | 
														
													
														
															
																|  |  | #else |  |  | #else | 
														
													
														
															
																|  |  | switch (ev.button) |  |  |  | 
														
													
														
															
																|  |  | { |  |  |  | 
														
													
														
															
																|  |  | case 1: |  |  |  | 
														
													
														
															
																|  |  | button = GLFW_MOUSE_BUTTON_LEFT; |  |  |  | 
														
													
														
															
																|  |  | break; |  |  |  | 
														
													
														
															
																|  |  | case 2: |  |  |  | 
														
													
														
															
																|  |  | button = GLFW_MOUSE_BUTTON_MIDDLE; |  |  |  | 
														
													
														
															
																|  |  | break; |  |  |  | 
														
													
														
															
																|  |  | case 3: |  |  |  | 
														
													
														
															
																|  |  | button = GLFW_MOUSE_BUTTON_RIGHT; |  |  |  | 
														
													
														
															
																|  |  | break; |  |  |  | 
														
													
														
															
																|  |  | //         case 4: |  |  |  | 
														
													
														
															
																|  |  | //             button = GLFW_MOUSE_WHEELUP; |  |  |  | 
														
													
														
															
																|  |  | //             break; |  |  |  | 
														
													
														
															
																|  |  | //         case 5: |  |  |  | 
														
													
														
															
																|  |  | //             button = GLFW_MOUSE_WHEELDOWN; |  |  |  | 
														
													
														
															
																|  |  | //             break; |  |  |  | 
														
													
														
															
																|  |  |  |  |  | case 2: button = GLFW_MOUSE_BUTTON_MIDDLE; break; | 
														
													
														
															
																|  |  |  |  |  | case 3: button = GLFW_MOUSE_BUTTON_RIGHT;  break; | 
														
													
														
															
																|  |  |  |  |  | #endif | 
														
													
														
															
																|  |  | default: |  |  | default: | 
														
													
														
															
																|  |  | button = 0; |  |  |  | 
														
													
														
															
																|  |  |  |  |  | button = ev.button; | 
														
													
														
															
																|  |  | break; |  |  | break; | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | #endif |  |  |  | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | /* |  |  | /* | 
														
													
														
															
																|  |  | #if defined ARCH_MAC |  |  | #if defined ARCH_MAC | 
														
													
												
													
														
															
																|  | @@ -422,7 +496,8 @@ protected: | 
														
													
														
															
																|  |  | scrollDelta = scrollDelta.mult(50.0); |  |  | scrollDelta = scrollDelta.mult(50.0); | 
														
													
														
															
																|  |  | #endif |  |  | #endif | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | const ScopedContext sc(this, glfwMods(ev.mod)); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | const int mods = glfwMods(ev.mod); | 
														
													
														
															
																|  |  |  |  |  | const ScopedContext sc(this, mods); | 
														
													
														
															
																|  |  | return context->event->handleScroll(fLastMousePos, scrollDelta); |  |  | return context->event->handleScroll(fLastMousePos, scrollDelta); | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
												
													
														
															
																|  | @@ -431,7 +506,8 @@ protected: | 
														
													
														
															
																|  |  | if (ev.character <= ' ' || ev.character >= kKeyDelete) |  |  | if (ev.character <= ' ' || ev.character >= kKeyDelete) | 
														
													
														
															
																|  |  | return false; |  |  | return false; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | const ScopedContext sc(this, glfwMods(ev.mod)); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | const int mods = glfwMods(ev.mod); | 
														
													
														
															
																|  |  |  |  |  | const ScopedContext sc(this, mods); | 
														
													
														
															
																|  |  | return context->event->handleText(fLastMousePos, ev.character); |  |  | return context->event->handleText(fLastMousePos, ev.character); | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
												
													
														
															
																|  | @@ -562,7 +638,7 @@ protected: | 
														
													
														
															
																|  |  | try { |  |  | try { | 
														
													
														
															
																|  |  | context->patch->load(sfilename); |  |  | context->patch->load(sfilename); | 
														
													
														
															
																|  |  | } catch (rack::Exception& e) { |  |  | } catch (rack::Exception& e) { | 
														
													
														
															
																|  |  | std::string message = rack::string::f("Could not load patch: %s", e.what()); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | std::string message = rack::string::f("Could not load patch: %s", e.what()); | 
														
													
														
															
																|  |  | asyncDialog::create(message.c_str()); |  |  | asyncDialog::create(message.c_str()); | 
														
													
														
															
																|  |  | return; |  |  | return; | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
												
													
														
															
																|  | 
 |