All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.native.osx.NativeToJava.c Maven / Gradle / Ivy

There is a newer version: 2.1.0
Show newest version
/* JNativeHook: Global keyboard and mouse hooking for Java.
 * Copyright (C) 2006-2017 Alexander Barker.  All Rights Received.
 * https://github.com/kwhat/jnativehook/
 *
 * JNativeHook is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published
 * by the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * JNativeHook is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see .
 */

// Reference: http://developer.apple.com/mac/library/documentation/Carbon/Reference/CarbonRefUpdate/Articles/Carbon_10.4-10.5_SymbolChanges.html
#include  // For CoreGraphics kCGEventFlagMask constants.

#include "NativeToJava.h"
#include "OSXInputHelpers.h"

JKeyDatum NativeToJKey(unsigned int keysym) {
	JKeyDatum jkey;
	jkey.rawcode = keysym;
	jkey.location = org_jnativehook_keyboard_NativeKeyEvent_LOCATION_STANDARD;

	switch ((unsigned int) keysym) {
		case kVK_Return:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_ENTER;
			return jkey;
		case kVK_Delete:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_BACK_SPACE;
			return jkey;
		case kVK_Tab:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_TAB;
			return jkey;
		/* case XK_Cancel:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_CANCEL;
			return jkey; */


		case kVK_Shift:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_SHIFT;
			goto LOCATION_L;
		case kVK_Control:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_CONTROL;
			goto LOCATION_L;
		case kVK_Option:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_ALT;
			goto LOCATION_L;
		case kVK_Command:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_META;
			goto LOCATION_L;
		/* case XK_Super_L:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_WINDOWS;
			return jkey; */
		LOCATION_L:
			jkey.location = org_jnativehook_keyboard_NativeKeyEvent_LOCATION_LEFT;

		case kVK_RightShift:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_SHIFT;
			goto LOCATION_R;
		case kVK_RightControl:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_CONTROL;
			goto LOCATION_R;
		case kVK_RightOption:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_ALT;
			goto LOCATION_R;
		case kVK_RightCommand:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_META;
			goto LOCATION_R;
		/* case XK_Super_R:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_WINDOWS;
			goto LOCATION_R; */
		LOCATION_R:
			jkey.location = org_jnativehook_keyboard_NativeKeyEvent_LOCATION_RIGHT;
			return jkey;

		case kVK_ContextMenu:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_CONTEXT_MENU;
			return jkey;


		/* case XK_Pause:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_PAUSE;
			return jkey; */
		case kVK_CapsLock:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_CAPS_LOCK;
			return jkey;
		case kVK_Escape:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_ESCAPE;
			return jkey;
		case kVK_Space:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_SPACE;
			return jkey;


		case kVK_UpArrow:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_UP;
			return jkey;
		case kVK_DownArrow:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DOWN;
			return jkey;
		case kVK_LeftArrow:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_LEFT;
			return jkey;
		case kVK_RightArrow:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_RIGHT;
			return jkey;

		case kVK_ANSI_Comma:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_COMMA;
			return jkey;
		case kVK_ANSI_Minus:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_MINUS;
			return jkey;
		case kVK_ANSI_Period:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_PERIOD;
			return jkey;
		case kVK_ANSI_Slash:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_SLASH;
			return jkey;


		case kVK_ANSI_0:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_0;
			return jkey;
		case kVK_ANSI_1:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_1;
			return jkey;
		case kVK_ANSI_2:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_2;
			return jkey;
		case kVK_ANSI_3:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_3;
			return jkey;
		case kVK_ANSI_4:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_4;
			return jkey;
		case kVK_ANSI_5:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_5;
			return jkey;
		case kVK_ANSI_6:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_6;
			return jkey;
		case kVK_ANSI_7:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_7;
			return jkey;
		case kVK_ANSI_8:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_8;
			return jkey;
		case kVK_ANSI_9:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_9;
			return jkey;


		case kVK_ANSI_Semicolon:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_SEMICOLON;
			return jkey;
		case kVK_ANSI_Equal:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_EQUALS;
			return jkey;


		case kVK_ANSI_A:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_A;
			return jkey;
		case kVK_ANSI_B:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_B;
			return jkey;
		case kVK_ANSI_C:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_C;
			return jkey;
		case kVK_ANSI_D:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_D;
			return jkey;
		case kVK_ANSI_E:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_E;
			return jkey;
		case kVK_ANSI_F:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F;
			return jkey;
		case kVK_ANSI_G:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_G;
			return jkey;
		case kVK_ANSI_H:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_H;
			return jkey;
		case kVK_ANSI_I:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_I;
			return jkey;
		case kVK_ANSI_J:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_J;
			return jkey;
		case kVK_ANSI_K:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_K;
			return jkey;
		case kVK_ANSI_L:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_L;
			return jkey;
		case kVK_ANSI_M:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_M;
			return jkey;
		case kVK_ANSI_N:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_N;
			return jkey;
		case kVK_ANSI_O:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_O;
			return jkey;
		case kVK_ANSI_P:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_P;
			return jkey;
		case kVK_ANSI_Q:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_Q;
			return jkey;
		case kVK_ANSI_R:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_R;
			return jkey;
		case kVK_ANSI_S:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_S;
			return jkey;
		case kVK_ANSI_T:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_T;
			return jkey;
		case kVK_ANSI_U:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_U;
			return jkey;
		case kVK_ANSI_V:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_V;
			return jkey;
		case kVK_ANSI_W:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_W;
			return jkey;
		case kVK_ANSI_X:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_X;
			return jkey;
		case kVK_ANSI_Y:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_Y;
			return jkey;
		case kVK_ANSI_Z:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_Z;
			return jkey;


		case kVK_ANSI_LeftBracket:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_OPEN_BRACKET;
			return jkey;
		case kVK_ANSI_Backslash:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_BACK_SLASH;
			return jkey;
		case kVK_ANSI_RightBracket:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_CLOSE_BRACKET;
			return jkey;


		case kVK_ANSI_Keypad0:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_NUMPAD0;
			goto LOCATION_NP;
		case kVK_ANSI_Keypad1:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_NUMPAD1;
			goto LOCATION_NP;
		case kVK_ANSI_Keypad2:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_NUMPAD2;
			goto LOCATION_NP;
		case kVK_ANSI_Keypad3:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_NUMPAD3;
			goto LOCATION_NP;
		case kVK_ANSI_Keypad4:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_NUMPAD4;
			goto LOCATION_NP;
		case kVK_ANSI_Keypad5:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_NUMPAD5;
			goto LOCATION_NP;
		case kVK_ANSI_Keypad6:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_NUMPAD6;
			goto LOCATION_NP;
		case kVK_ANSI_Keypad7:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_NUMPAD7;
			goto LOCATION_NP;
		case kVK_ANSI_Keypad8:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_NUMPAD8;
			goto LOCATION_NP;
		case kVK_ANSI_Keypad9:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_NUMPAD9;
			goto LOCATION_NP;

		case kVK_ANSI_KeypadMultiply:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_MULTIPLY;
			goto LOCATION_NP;
		case kVK_ANSI_KeypadPlus:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_ADD;
			goto LOCATION_NP;
		/* case XK_KP_Separator:			// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_SEPARATOR;
			goto LOCATION_NP; */
		case kVK_ANSI_KeypadMinus:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_SUBTRACT;
			goto LOCATION_NP;
		case kVK_ANSI_KeypadDecimal:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DECIMAL;
			goto LOCATION_NP;
		case kVK_ANSI_KeypadDivide:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DIVIDE;
			goto LOCATION_NP;
		case kVK_ANSI_KeypadClear:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_CLEAR;
			goto LOCATION_NP;
		/* case XK_Num_Lock:				// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_NUM_LOCK;
			goto LOCATION_NP;
		case XK_Scroll_Lock:				// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_SCROLL_LOCK;
			goto LOCATION_NP; */
		LOCATION_NP:
			jkey.location = org_jnativehook_keyboard_NativeKeyEvent_LOCATION_NUMPAD;
			return jkey;

		case kVK_F1:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F1;
			return jkey;
		case kVK_F2:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F2;
			return jkey;
		case kVK_F3:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F3;
			return jkey;
		case kVK_F4:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F4;
			return jkey;
		case kVK_F5:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F5;
			return jkey;
		case kVK_F6:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F6;
			return jkey;
		case kVK_F7:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F7;
			return jkey;
		case kVK_F8:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F8;
			return jkey;
		case kVK_F9:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F9;
			return jkey;
		case kVK_F10:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F10;
			return jkey;
		case kVK_F11:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F11;
			return jkey;
		case kVK_F12:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F12;
			return jkey;

		case kVK_F13:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F13;
			return jkey;
		case kVK_F14:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F14;
			return jkey;
		case kVK_F15:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F15;
			return jkey;
		case kVK_F16:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F16;
			return jkey;
		case kVK_F17:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F17;
			return jkey;
		case kVK_F18:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F18;
			return jkey;
		case kVK_F19:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F19;
			return jkey;
		case kVK_F20:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F20;
			return jkey;
		/* case XK_F21:						// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F21;
			return jkey;
		case XK_F22:						// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F22;
			return jkey;
		case XK_F23:						// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F23;
			return jkey;
		case XK_F24:						// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_F24;
			return jkey; */


		/* case XK_Print:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_PRINTSCREEN;
			return jkey;
		case XK_Insert:						// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_INSERT;
			return jkey; */
		case kVK_Help:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_HELP;
			return jkey;
		case kVK_ForwardDelete:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DELETE;
			return jkey;


		case kVK_PageUp:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_PAGE_UP;
			return jkey;
		case kVK_PageDown:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_PAGE_DOWN;
			return jkey;
		case kVK_Home:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_HOME;
			return jkey;
		case kVK_End:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_END;
			return jkey;


		case kVK_ANSI_Quote:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_QUOTE;
			return jkey;
		case kVK_ANSI_Grave:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_BACK_QUOTE;
			return jkey;


		// For European keyboards
		/*
		case XK_dead_grave:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DEAD_GRAVE;
			return jkey;
		case XK_dead_acute:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DEAD_ACUTE;
			return jkey;
		case XK_dead_circumflex:			* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DEAD_CIRCUMFLEX;
			return jkey;
		case XK_dead_tilde:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DEAD_TILDE;
			return jkey;
		case XK_dead_macron:				* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DEAD_MACRON;
			return jkey;
		case XK_dead_breve:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DEAD_BREVE;
			return jkey;
		case XK_dead_abovedot:				* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DEAD_ABOVEDOT;
			return jkey;
		case XK_dead_diaeresis:				* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DEAD_DIAERESIS;
			return jkey;
		case XK_dead_abovering:				* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DEAD_ABOVERING;
			return jkey;
		case XK_dead_doubleacute:			* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DEAD_DOUBLEACUTE;
			return jkey;
		case XK_dead_caron:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DEAD_CARON;
			return jkey;
		case XK_dead_cedilla:				* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DEAD_CEDILLA;
			return jkey;
		case XK_dead_ogonek:				* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DEAD_OGONEK;
			return jkey;
		case XK_dead_iota:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DEAD_IOTA;
			return jkey;
		case XK_dead_voiced_sound:			* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DEAD_VOICED_SOUND;
			return jkey;
		case XK_dead_semivoiced_sound:		* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DEAD_SEMIVOICED_SOUND;
			return jkey;
		*/


		// Unknown Keyboard Codes
		/*
		case XK_ampersand:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_AMPERSAND;
			return jkey;
		case XK_asterisk:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_ASTERISK;
			return jkey;
		case XK_quotedbl:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_QUOTEDBL;
			return jkey;
		case XK_less:						// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_LESS;
			return jkey;
		case XK_greater:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_GREATER;
			return jkey;
		case XK_braceleft:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_BRACELEFT;
			return jkey;
		case XK_braceright:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_BRACERIGHT;
			return jkey;
		*/


		// Unknown Extended Keyboard Codes
		/*
		case XK_at:							* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_AT;
			return jkey;
		case XK_colon:						* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_COLON;
			return jkey;
		case XK_asciicircum:				* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_CIRCUMFLEX;
			return jkey;
		case XK_dollar:						* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_DOLLAR;
			return jkey;
		case XK_EuroSign:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_EURO_SIGN;
			return jkey;
		case XK_exclam:						* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_EXCLAMATION_MARK;
			return jkey;
		case XK_exclamdown:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_INVERTED_EXCLAMATION_MARK;
			return jkey;
		case XK_parenleft:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_LEFT_PARENTHESIS;
			return jkey;
		case XK_numbersign:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_NUMBER_SIGN;
			return jkey;
		case XK_plus:						* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_PLUS;
			return jkey;
		case XK_parenright:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_RIGHT_PARENTHESIS;
			return jkey;
		case kVK_JIS_Underscore:			* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_UNDERSCORE;
			return jkey;
		*/


		// For input method support on Asian Keyboards
		/* case XK_Cancel:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_FINAL;
			return jkey;
		case XK_Henkan:						* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_CONVERT;
			return jkey;
		case XK_Muhenkan:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_NONCONVERT;
			return jkey;
		case XK_VoidSymbol:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_ACCEPT;
			return jkey;
		case XK_Mode_switch:				* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_MODECHANGE;
			return jkey; */
		case kVK_JIS_Kana:					/* TODO Testing Needed */
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_KANA;
			return jkey;
		/* case XK_Kanji:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_KANJI;
			return jkey; */
		case kVK_JIS_Eisu:					/* TODO Testing Needed */
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_ALPHANUMERIC;
			return jkey;
		/* case XK_Katakana:				* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_KATAKANA;
			return jkey;
		case XK_Hiragana:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_HIRAGANA;
			return jkey;
		case XK_Zenkaku:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_FULL_WIDTH;
			return jkey;
		case XK_Hankaku:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_HALF_WIDTH;
			return jkey;
		case XK_Romaji:						* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_ROMAN_CHARACTERS;
			return jkey;
		case XK_Zen_Koho:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_ALL_CANDIDATES;
			return jkey;
		case XK_Mae_Koho:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_PREVIOUS_CANDIDATE;
			return jkey;
		case XK_Kanji_Bangou:				* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_CODE_INPUT;
			return jkey;
		case XK_Hiragana_Katakana:			* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_JAPANESE_KATAKANA;
			return jkey;
		case XK_Hiragana_Katakana:			* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_JAPANESE_HIRAGANA;
			return jkey;
		case XK_Romaji:						* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_JAPANESE_ROMAN;
			return jkey;
		case XK_Kana_Lock:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_KANA_LOCK;
			return jkey;
		case XK_VoidSymbol:					* Unknown Apple Support *
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_INPUT_METHOD_ON_OFF;
			return jkey; */


		// For Sun keyboards
		/*
		#ifdef SUN_KEYBOARD
		case SunXK_Cut:						// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_CUT;
			return jkey;
		case SunXK_Copy:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_COPY;
			return jkey;
		case SunXK_Paste:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_PASTE;
			return jkey;
		case SunXK_Undo:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_UNDO;
			return jkey;
		case SunXK_Again:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_AGAIN;
			return jkey;
		case SunXK_Find:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_FIND;
			return jkey;
		case SunXK_Props:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_PROPS;
			return jkey;
		case SunXK_Stop:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_STOP;
			return jkey;
		case SunXK_Compose:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_COMPOSE;
			return jkey;
		case SunXK_AltGraph:				// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_ALT_GRAPH;
			return jkey;
		#endif
		*/

		/* case XK_Begin:					// No Apple Support
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_BEGIN;
			return jkey; */

		default:
		case 0xFF:
			jkey.keycode = org_jnativehook_keyboard_NativeKeyEvent_VK_UNDEFINED;
			return jkey;
	}
}

jint NativeToJButton(unsigned int button) {
	switch (button) {
		case kVK_LBUTTON:
			return org_jnativehook_mouse_NativeMouseEvent_BUTTON1;
		case kVK_RBUTTON:
			return org_jnativehook_mouse_NativeMouseEvent_BUTTON2;
		case kVK_MBUTTON:
			return org_jnativehook_mouse_NativeMouseEvent_BUTTON3;
		case kVK_XBUTTON1:
			return org_jnativehook_mouse_NativeMouseEvent_BUTTON4;
		case kVK_XBUTTON2:
			return org_jnativehook_mouse_NativeMouseEvent_BUTTON5;

		default:
			return org_jnativehook_mouse_NativeMouseEvent_NOBUTTON;
	}
}

jint NativeToJEventMask(unsigned int mask) {
	jint java_mask = 0;

	if (mask & kCGEventFlagMaskShift)
		java_mask |= org_jnativehook_NativeInputEvent_SHIFT_MASK;

	if (mask & kCGEventFlagMaskControl)
		java_mask |= org_jnativehook_NativeInputEvent_CTRL_MASK;

	if (mask & kCGEventFlagMaskCommand)
		java_mask |= org_jnativehook_NativeInputEvent_META_MASK;

	if (mask & kCGEventFlagMaskAlternate)
		java_mask |= org_jnativehook_NativeInputEvent_ALT_MASK;


	if (mask & kCGEventFlagMaskButtonLeft)
		java_mask |= org_jnativehook_NativeInputEvent_BUTTON1_MASK;

	if (mask & kCGEventFlagMaskButtonRight)
		java_mask |= org_jnativehook_NativeInputEvent_BUTTON2_MASK;

	if (mask & kCGEventFlagMaskButtonCenter)
		java_mask |= org_jnativehook_NativeInputEvent_BUTTON3_MASK;

	if (mask & kCGEventFlagMaskXButton1)
		java_mask |= org_jnativehook_NativeInputEvent_BUTTON4_MASK;

	if (mask & kCGEventFlagMaskXButton2)
		java_mask |= org_jnativehook_NativeInputEvent_BUTTON5_MASK;

	return java_mask;
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy