mac: send keydown events for modifier flags change (#1574)

For example, keydown events when pressing/releasing the shift, alt, or control
keys. With this version this is needed ingame e.g. to pick up objects with
Shift.
shapetextures
Armin Burgmeier 2016-01-10 18:08:04 -08:00
parent 9b7b4bf30a
commit ef63aa0975
4 changed files with 46 additions and 4 deletions

View File

@ -294,6 +294,15 @@ int32_t mouseButtonFromEvent(NSEvent* event, DWORD* modifierFlags)
[event modifierFlags] & NSShiftKeyMask,
false, NULL
);
C4Window* stdWindow = self.controller.stdWindow;
if (stdWindow->eKind == C4ConsoleGUI::W_Viewport)
{
if (type == KEYEV_Down)
Console.EditCursor.KeyDown([event keyCode]+CocoaKeycodeOffset, [event modifierFlags]);
else
Console.EditCursor.KeyUp([event keyCode]+CocoaKeycodeOffset, [event modifierFlags]);
}
}
- (void)keyDown:(NSEvent*)event
@ -307,6 +316,31 @@ int32_t mouseButtonFromEvent(NSEvent* event, DWORD* modifierFlags)
[self keyEvent:event withKeyEventType:KEYEV_Up];
}
- (void)flagsChanged:(NSEvent*)event
{
// Send keypress/release events for relevant modifier keys
// keyDown() is not called for modifier keys.
C4KeyCode key = (C4KeyCode)([event keyCode] + CocoaKeycodeOffset);
int modifier = 0;
if (key == K_SHIFT_L || key == K_SHIFT_R)
modifier = NSShiftKeyMask;
if (key == K_CONTROL_L || key == K_CONTROL_R)
modifier = NSControlKeyMask;
if (key == K_COMMAND_L || key == K_COMMAND_R)
modifier = NSCommandKeyMask;
if (key == K_ALT_L || key == K_ALT_R)
modifier = NSAlternateKeyMask;
if (modifier != 0)
{
int modifierMask = [event modifierFlags];
if (modifierMask & modifier)
[self keyEvent:event withKeyEventType:KEYEV_Down];
else
[self keyEvent:event withKeyEventType:KEYEV_Up];
}
}
- (NSDragOperation) draggingEntered:(id<NSDraggingInfo>)sender
{
return NSDragOperationCopy;

View File

@ -229,6 +229,8 @@ extern C4KeyCode K_CONTROL_L;
extern C4KeyCode K_CONTROL_R;
extern C4KeyCode K_ALT_L;
extern C4KeyCode K_ALT_R;
extern C4KeyCode K_COMMAND_L;
extern C4KeyCode K_COMMAND_R;
extern C4KeyCode K_F1;
extern C4KeyCode K_F2;
extern C4KeyCode K_F3;

View File

@ -67,6 +67,7 @@ C4Window * C4Window::Init(C4Window::WindowKind windowKind, C4AbstractApp * pApp,
[controller.window setCollectionBehavior:[controller.window collectionBehavior] | NSWindowCollectionBehaviorFullScreenPrimary];
}
SetTitle(Title);
eKind = windowKind;
return this;
}
@ -151,6 +152,8 @@ C4KeyCode K_CONTROL_L = 0x3b + CocoaKeycodeOffset;
C4KeyCode K_CONTROL_R = 0x3e + CocoaKeycodeOffset;
C4KeyCode K_ALT_L = 58 + CocoaKeycodeOffset;
C4KeyCode K_ALT_R = 61 + CocoaKeycodeOffset;
C4KeyCode K_COMMAND_L = 55 + CocoaKeycodeOffset;
C4KeyCode K_COMMAND_R = 54 + CocoaKeycodeOffset;
C4KeyCode K_F1 = 122 + CocoaKeycodeOffset;
C4KeyCode K_F2 = 120 + CocoaKeycodeOffset;
C4KeyCode K_F3 = 99 + CocoaKeycodeOffset;

View File

@ -21,10 +21,13 @@ const C4KeyCodeMapEntry KeyCodeMap [] =
//{ VK_CLEAR , "Clear" , NULL },
{ K_RETURN , "Return" , NULL },
/*K( VK_SHIFT , "KeyShift" , "Shift" ),
K( VK_CONTROL , "KeyControl" , "Control" ),
K( VK_MENU , "Menu" , NULL ),
K( VK_PAUSE , "Pause" , NULL ),*/
{ K_SHIFT_L , "LeftShift" , "LShift" },
{ K_SHIFT_R , "RightShift" , "RShift" },
{ K_CONTROL_L , "LeftControl" , "LCtrl" },
{ K_CONTROL_R , "RightControl" , "RCtrl" },
{ K_ALT_L , "LeftAlt" , "LAlt" },
{ K_ALT_R , "RightAlt" , "RAlt" },
{ K_PAUSE , "Pause" , NULL },
/* K( VK_CAPITAL , "Capital" , NULL ),
K( VK_KANA , "Kana" , NULL ),