261 NSShiftKeyMask, 262 //kCGSFlagsMaskAppleShiftKey, 263 //kCGSFlagsMaskAppleRightShiftKey, 264 56, 265 60, 266 java_awt_event_InputEvent_SHIFT_DOWN_MASK, 267 java_awt_event_InputEvent_SHIFT_MASK, 268 java_awt_event_KeyEvent_VK_SHIFT 269 }, 270 { 271 NSControlKeyMask, 272 //kCGSFlagsMaskAppleControlKey, 273 //kCGSFlagsMaskAppleRightControlKey, 274 59, 275 62, 276 java_awt_event_InputEvent_CTRL_DOWN_MASK, 277 java_awt_event_InputEvent_CTRL_MASK, 278 java_awt_event_KeyEvent_VK_CONTROL 279 }, 280 { 281 NSAlternateKeyMask, 282 //kCGSFlagsMaskAppleLeftAlternateKey, 283 //kCGSFlagsMaskAppleRightAlternateKey, 284 58, 285 0, 286 java_awt_event_InputEvent_ALT_DOWN_MASK, 287 java_awt_event_InputEvent_ALT_MASK, 288 java_awt_event_KeyEvent_VK_ALT 289 }, 290 { 291 NSAlternateKeyMask, 292 0, 293 61, 294 java_awt_event_InputEvent_ALT_DOWN_MASK | java_awt_event_InputEvent_ALT_GRAPH_DOWN_MASK, 295 java_awt_event_InputEvent_ALT_MASK | java_awt_event_InputEvent_ALT_GRAPH_MASK, 296 java_awt_event_KeyEvent_VK_ALT | java_awt_event_KeyEvent_VK_ALT_GRAPH 297 }, 298 { 299 NSCommandKeyMask, 300 //kCGSFlagsMaskAppleLeftCommandKey, 301 //kCGSFlagsMaskAppleRightCommandKey, 302 55, 303 54, 304 java_awt_event_InputEvent_META_DOWN_MASK, 305 java_awt_event_InputEvent_META_MASK, 306 java_awt_event_KeyEvent_VK_META 307 }, 308 // NSNumericPadKeyMask 309 { 310 NSHelpKeyMask, 311 0, 312 0, 313 0, // no Java equivalent 314 0, // no Java equivalent 315 java_awt_event_KeyEvent_VK_HELP 316 }, 317 // NSFunctionKeyMask 318 {0, 0, 0, 0, 0, 0} 319 }; 320 321 static BOOL leftAltKeyPressed; 322 323 /* 324 * Almost all unicode characters just go from NS to Java with no translation. 325 * For the few exceptions, we handle it here with this small table. 326 */ 327 #define ALL_NS_KEY_MODIFIERS_MASK \ 328 (NSShiftKeyMask | NSControlKeyMask | NSAlternateKeyMask | NSCommandKeyMask) 329 330 static struct _char { 331 NSUInteger modifier; 332 unichar nsChar; 333 unichar javaChar; 334 } 335 const charTable[] = { 336 // map enter on keypad to same as return key 337 {0, NSEnterCharacter, NSNewlineCharacter}, 338 339 // [3134616] return newline instead of carriage return 340 {0, NSCarriageReturnCharacter, NSNewlineCharacter}, 341 542 continue; 543 } 544 *javaKeyType = (cur->nsMask & nsFlags) ? 545 java_awt_event_KeyEvent_KEY_PRESSED : 546 java_awt_event_KeyEvent_KEY_RELEASED; 547 break; 548 } 549 } 550 } 551 552 /* 553 * This returns the java modifiers for a key NSEvent. 554 */ 555 jint NsKeyModifiersToJavaModifiers(NSUInteger nsFlags, BOOL isExtMods) 556 { 557 jint javaModifiers = 0; 558 const struct _nsKeyToJavaModifier* cur; 559 560 for (cur = nsKeyToJavaModifierTable; cur->nsMask != 0; ++cur) { 561 if ((cur->nsMask & nsFlags) != 0) { 562 javaModifiers |= isExtMods ? cur->javaExtMask : cur->javaMask; 563 if (cur->nsMask == NSAlternateKeyMask && leftAltKeyPressed == NO) { 564 continue; 565 } 566 break; 567 } 568 } 569 570 return javaModifiers; 571 } 572 573 /* 574 * This returns the NSEvent flags for java key modifiers. 575 */ 576 NSUInteger JavaModifiersToNsKeyModifiers(jint javaModifiers, BOOL isExtMods) 577 { 578 NSUInteger nsFlags = 0; 579 const struct _nsKeyToJavaModifier* cur; 580 581 for (cur = nsKeyToJavaModifierTable; cur->nsMask != 0; ++cur) { 582 jint mask = isExtMods? cur->javaExtMask : cur->javaMask; 583 if ((mask & javaModifiers) != 0) { 584 nsFlags |= cur->nsMask; 585 } 586 } | 261 NSShiftKeyMask, 262 //kCGSFlagsMaskAppleShiftKey, 263 //kCGSFlagsMaskAppleRightShiftKey, 264 56, 265 60, 266 java_awt_event_InputEvent_SHIFT_DOWN_MASK, 267 java_awt_event_InputEvent_SHIFT_MASK, 268 java_awt_event_KeyEvent_VK_SHIFT 269 }, 270 { 271 NSControlKeyMask, 272 //kCGSFlagsMaskAppleControlKey, 273 //kCGSFlagsMaskAppleRightControlKey, 274 59, 275 62, 276 java_awt_event_InputEvent_CTRL_DOWN_MASK, 277 java_awt_event_InputEvent_CTRL_MASK, 278 java_awt_event_KeyEvent_VK_CONTROL 279 }, 280 { 281 NSCommandKeyMask, 282 //kCGSFlagsMaskAppleLeftCommandKey, 283 //kCGSFlagsMaskAppleRightCommandKey, 284 55, 285 54, 286 java_awt_event_InputEvent_META_DOWN_MASK, 287 java_awt_event_InputEvent_META_MASK, 288 java_awt_event_KeyEvent_VK_META 289 }, 290 { 291 NSAlternateKeyMask, 292 //kCGSFlagsMaskAppleLeftAlternateKey, 293 //kCGSFlagsMaskAppleRightAlternateKey, 294 58, 295 0, 296 java_awt_event_InputEvent_ALT_DOWN_MASK, 297 java_awt_event_InputEvent_ALT_MASK, 298 java_awt_event_KeyEvent_VK_ALT 299 }, 300 { 301 NSAlternateKeyMask, 302 0, 303 61, 304 java_awt_event_InputEvent_ALT_DOWN_MASK | java_awt_event_InputEvent_ALT_GRAPH_DOWN_MASK, 305 java_awt_event_InputEvent_ALT_MASK | java_awt_event_InputEvent_ALT_GRAPH_MASK, 306 java_awt_event_KeyEvent_VK_ALT | java_awt_event_KeyEvent_VK_ALT_GRAPH 307 }, 308 // NSNumericPadKeyMask 309 { 310 NSHelpKeyMask, 311 0, 312 0, 313 0, // no Java equivalent 314 0, // no Java equivalent 315 java_awt_event_KeyEvent_VK_HELP 316 }, 317 // NSFunctionKeyMask 318 {0, 0, 0, 0, 0, 0} 319 }; 320 321 static BOOL leftAltKeyPressed; 322 static BOOL altGRPressed = NO; 323 324 /* 325 * Almost all unicode characters just go from NS to Java with no translation. 326 * For the few exceptions, we handle it here with this small table. 327 */ 328 #define ALL_NS_KEY_MODIFIERS_MASK \ 329 (NSShiftKeyMask | NSControlKeyMask | NSAlternateKeyMask | NSCommandKeyMask) 330 331 static struct _char { 332 NSUInteger modifier; 333 unichar nsChar; 334 unichar javaChar; 335 } 336 const charTable[] = { 337 // map enter on keypad to same as return key 338 {0, NSEnterCharacter, NSNewlineCharacter}, 339 340 // [3134616] return newline instead of carriage return 341 {0, NSCarriageReturnCharacter, NSNewlineCharacter}, 342 543 continue; 544 } 545 *javaKeyType = (cur->nsMask & nsFlags) ? 546 java_awt_event_KeyEvent_KEY_PRESSED : 547 java_awt_event_KeyEvent_KEY_RELEASED; 548 break; 549 } 550 } 551 } 552 553 /* 554 * This returns the java modifiers for a key NSEvent. 555 */ 556 jint NsKeyModifiersToJavaModifiers(NSUInteger nsFlags, BOOL isExtMods) 557 { 558 jint javaModifiers = 0; 559 const struct _nsKeyToJavaModifier* cur; 560 561 for (cur = nsKeyToJavaModifierTable; cur->nsMask != 0; ++cur) { 562 if ((cur->nsMask & nsFlags) != 0) { 563 564 if (cur->nsMask == NSAlternateKeyMask) { 565 if (leftAltKeyPressed == YES) { 566 javaModifiers |= isExtMods? cur->javaExtMask : cur->javaMask; 567 if (altGRPressed == NO) 568 break; 569 } else { 570 leftAltKeyPressed = YES; 571 altGRPressed = YES; 572 continue; 573 } 574 } 575 javaModifiers |= isExtMods ? cur->javaExtMask : cur->javaMask; 576 } 577 } 578 579 return javaModifiers; 580 } 581 582 /* 583 * This returns the NSEvent flags for java key modifiers. 584 */ 585 NSUInteger JavaModifiersToNsKeyModifiers(jint javaModifiers, BOOL isExtMods) 586 { 587 NSUInteger nsFlags = 0; 588 const struct _nsKeyToJavaModifier* cur; 589 590 for (cur = nsKeyToJavaModifierTable; cur->nsMask != 0; ++cur) { 591 jint mask = isExtMods? cur->javaExtMask : cur->javaMask; 592 if ((mask & javaModifiers) != 0) { 593 nsFlags |= cur->nsMask; 594 } 595 } |