diff options
Diffstat (limited to 'platform/osx/os_osx.mm')
-rw-r--r-- | platform/osx/os_osx.mm | 59 |
1 files changed, 43 insertions, 16 deletions
diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm index 065fe52b09..b5503fcd73 100644 --- a/platform/osx/os_osx.mm +++ b/platform/osx/os_osx.mm @@ -139,12 +139,10 @@ static int button_mask=0; - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { -/* _Godotwindow* window; + if (OS_OSX::singleton->get_main_loop()) + OS_OSX::singleton->get_main_loop()->notification(MainLoop::NOTIFICATION_WM_QUIT_REQUEST); - for (window = _Godot.windowListHead; window; window = window->next) - _GodotInputWindowCloseRequest(window); -*/ - return NSTerminateCancel; + return NSTerminateCancel; } - (void)applicationDidHide:(NSNotification *)notification @@ -772,20 +770,48 @@ static int translateKey(unsigned int key) - (void)flagsChanged:(NSEvent *)event { - /* int action; - unsigned int newModifierFlags = - [event modifierFlags] & NSDeviceIndependentModifierFlagsMask; + InputEvent ev; + int key = [event keyCode]; + int mod = [event modifierFlags]; - if (newModifierFlags > window->ns.modifierFlags) - action = GLFW_PRESS; - else - action = GLFW_RELEASE; + ev.type=InputEvent::KEY; + + if (key == 0x36 || key == 0x37) { + if (mod & NSCommandKeyMask) { + mod&= ~NSCommandKeyMask; + ev.key.pressed = true; + } else { + ev.key.pressed = false; + } + } else if (key == 0x38 || key == 0x3c) { + if (mod & NSShiftKeyMask) { + mod&= ~NSShiftKeyMask; + ev.key.pressed = true; + } else { + ev.key.pressed = false; + } + } else if (key == 0x3a || key == 0x3d) { + if (mod & NSAlternateKeyMask) { + mod&= ~NSAlternateKeyMask; + ev.key.pressed = true; + } else { + ev.key.pressed = false; + } + } else if (key == 0x3b || key == 0x3e) { + if (mod & NSControlKeyMask) { + mod&= ~NSControlKeyMask; + ev.key.pressed = true; + } else { + ev.key.pressed = false; + } + } else { + return; + } - window->ns.modifierFlags = newModifierFlags; + ev.key.mod=translateFlags(mod); + ev.key.scancode = latin_keyboard_keycode_convert(translateKey(key)); - const int key = translateKey([event keyCode]); - const int mods = translateFlags([event modifierFlags]); - _glfwInputKey(window, key, [event keyCode], action, mods);*/ + OS_OSX::singleton->push_input(ev); } - (void)keyUp:(NSEvent *)event @@ -1435,6 +1461,7 @@ Point2 OS_OSX::get_window_position() const { Size2 wp([window_object frame].origin.x, [window_object frame].origin.y); wp*=display_scale; + return wp; }; |