Use Quarts to map raw keyboard to character code.
This commit is contained in:
@@ -1757,6 +1757,7 @@
|
|||||||
EEC7863F0E58208B00F559BC /* StepsDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEC7863D0E58208B00F559BC /* StepsDisplay.cpp */; };
|
EEC7863F0E58208B00F559BC /* StepsDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EEC7863D0E58208B00F559BC /* StepsDisplay.cpp */; };
|
||||||
F4BC045409E6B578003F770B /* ScreenGameplaySyncMachine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB55EB509A7E3D3008FDC69 /* ScreenGameplaySyncMachine.cpp */; };
|
F4BC045409E6B578003F770B /* ScreenGameplaySyncMachine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAB55EB509A7E3D3008FDC69 /* ScreenGameplaySyncMachine.cpp */; };
|
||||||
F4BC045509E6B582003F770B /* ScreenGameplaySyncMachine.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB55EB609A7E3D3008FDC69 /* ScreenGameplaySyncMachine.h */; };
|
F4BC045509E6B582003F770B /* ScreenGameplaySyncMachine.h in Headers */ = {isa = PBXBuildFile; fileRef = AAB55EB609A7E3D3008FDC69 /* ScreenGameplaySyncMachine.h */; };
|
||||||
|
F8FFD97A19E909ED00AEAA69 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8FFD97919E909ED00AEAA69 /* Accelerate.framework */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
/* Begin PBXContainerItemProxy section */
|
||||||
@@ -3249,6 +3250,8 @@
|
|||||||
EE9D33F414B81BE80098EB9C /* jutils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jutils.c; path = ../extern/libjpeg/jutils.c; sourceTree = SOURCE_ROOT; };
|
EE9D33F414B81BE80098EB9C /* jutils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jutils.c; path = ../extern/libjpeg/jutils.c; sourceTree = SOURCE_ROOT; };
|
||||||
EEC7863D0E58208B00F559BC /* StepsDisplay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StepsDisplay.cpp; path = ../src/StepsDisplay.cpp; sourceTree = "<group>"; };
|
EEC7863D0E58208B00F559BC /* StepsDisplay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StepsDisplay.cpp; path = ../src/StepsDisplay.cpp; sourceTree = "<group>"; };
|
||||||
EEC7863E0E58208B00F559BC /* StepsDisplay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StepsDisplay.h; path = ../src/StepsDisplay.h; sourceTree = "<group>"; };
|
EEC7863E0E58208B00F559BC /* StepsDisplay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StepsDisplay.h; path = ../src/StepsDisplay.h; sourceTree = "<group>"; };
|
||||||
|
F8FFD97719E907BA00AEAA69 /* vecLib.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = vecLib.framework; path = ../../../../../System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework; sourceTree = "<group>"; };
|
||||||
|
F8FFD97919E909ED00AEAA69 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
@@ -3284,6 +3287,7 @@
|
|||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
F8FFD97A19E909ED00AEAA69 /* Accelerate.framework in Frameworks */,
|
||||||
AA29CE3C0558741A00961A51 /* Cocoa.framework in Frameworks */,
|
AA29CE3C0558741A00961A51 /* Cocoa.framework in Frameworks */,
|
||||||
AA29CE3D0558741A00961A51 /* Carbon.framework in Frameworks */,
|
AA29CE3D0558741A00961A51 /* Carbon.framework in Frameworks */,
|
||||||
AA29CE3E0558741A00961A51 /* IOKit.framework in Frameworks */,
|
AA29CE3E0558741A00961A51 /* IOKit.framework in Frameworks */,
|
||||||
@@ -3506,6 +3510,8 @@
|
|||||||
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
|
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
F8FFD97919E909ED00AEAA69 /* Accelerate.framework */,
|
||||||
|
F8FFD97719E907BA00AEAA69 /* vecLib.framework */,
|
||||||
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
|
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
|
||||||
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
|
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
|
||||||
);
|
);
|
||||||
@@ -6264,7 +6270,7 @@
|
|||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
BuildIndependentTargetsInParallel = YES;
|
BuildIndependentTargetsInParallel = YES;
|
||||||
LastUpgradeCheck = 0460;
|
LastUpgradeCheck = 0610;
|
||||||
};
|
};
|
||||||
buildConfigurationList = AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */;
|
buildConfigurationList = AAC845130856A19700A9FEAB /* Build configuration list for PBXProject "stepmania" */;
|
||||||
compatibilityVersion = "Xcode 3.2";
|
compatibilityVersion = "Xcode 3.2";
|
||||||
@@ -8317,6 +8323,10 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CONFIGURATION_BUILD_DIR = "$(SYMROOT)";
|
CONFIGURATION_BUILD_DIR = "$(SYMROOT)";
|
||||||
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(SYSTEM_LIBRARY_DIR)/Frameworks/Accelerate.framework/Versions/A/Frameworks",
|
||||||
|
);
|
||||||
FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)";
|
FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)";
|
||||||
GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
|
GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
|
||||||
GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch";
|
GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch";
|
||||||
@@ -8387,8 +8397,9 @@
|
|||||||
LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/Libraries";
|
LIBRARY_SEARCH_PATHS = "$(PROJECT_DIR)/Libraries";
|
||||||
LINKER_DISPLAYS_MANGLED_NAMES = YES;
|
LINKER_DISPLAYS_MANGLED_NAMES = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
|
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
|
||||||
SDKROOT = macosx10.9;
|
SDKROOT = macosx;
|
||||||
SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)";
|
SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)";
|
||||||
STRIP_INSTALLED_PRODUCT = NO;
|
STRIP_INSTALLED_PRODUCT = NO;
|
||||||
STRIP_STYLE = "non-global";
|
STRIP_STYLE = "non-global";
|
||||||
@@ -8768,7 +8779,7 @@
|
|||||||
LINKER_DISPLAYS_MANGLED_NAMES = YES;
|
LINKER_DISPLAYS_MANGLED_NAMES = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
||||||
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
|
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
|
||||||
SDKROOT = macosx10.9;
|
SDKROOT = macosx;
|
||||||
SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)";
|
SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)";
|
||||||
STRIP_STYLE = "non-global";
|
STRIP_STYLE = "non-global";
|
||||||
USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../extern/jsoncpp/include $(PROJECT_DIR)/../extern/vorbis";
|
USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../extern/jsoncpp/include $(PROJECT_DIR)/../extern/vorbis";
|
||||||
@@ -8783,6 +8794,10 @@
|
|||||||
CONFIGURATION_BUILD_DIR = "$(SYMROOT)";
|
CONFIGURATION_BUILD_DIR = "$(SYMROOT)";
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
DEBUG_INFORMATION_FORMAT = stabs;
|
DEBUG_INFORMATION_FORMAT = stabs;
|
||||||
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(SYSTEM_LIBRARY_DIR)/Frameworks/Accelerate.framework/Versions/A/Frameworks",
|
||||||
|
);
|
||||||
FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)";
|
FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)";
|
||||||
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
|
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
|
||||||
GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
|
GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
|
||||||
@@ -9005,6 +9020,10 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CONFIGURATION_BUILD_DIR = "$(SYMROOT)";
|
CONFIGURATION_BUILD_DIR = "$(SYMROOT)";
|
||||||
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(SYSTEM_LIBRARY_DIR)/Frameworks/Accelerate.framework/Versions/A/Frameworks",
|
||||||
|
);
|
||||||
FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)";
|
FULL_NAME = "$(PRODUCT_NAME).$(WRAPPER_EXTENSION)";
|
||||||
GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch";
|
GCC_PREFIX_HEADER = "$(SRCROOT)/../src/archutils/Darwin/StepMania.pch";
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = _XOPEN_SOURCE;
|
GCC_PREPROCESSOR_DEFINITIONS = _XOPEN_SOURCE;
|
||||||
@@ -9072,7 +9091,7 @@
|
|||||||
LINKER_DISPLAYS_MANGLED_NAMES = YES;
|
LINKER_DISPLAYS_MANGLED_NAMES = YES;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
||||||
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
|
PRESERVE_DEAD_CODE_INITS_AND_TERMS = YES;
|
||||||
SDKROOT = macosx10.9;
|
SDKROOT = macosx;
|
||||||
SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)";
|
SHARED_PRECOMPS_DIR = "/Library/Caches/com.apple.Xcode.$(UID)/SharedPrecompiledHeaders/$(PRODUCT_NAME)/$(CONFIGURATION)";
|
||||||
STRIP_STYLE = "non-global";
|
STRIP_STYLE = "non-global";
|
||||||
USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../extern/jsoncpp/include $(PROJECT_DIR)/../extern/vorbis";
|
USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../extern/glew-1.5.8/include $(PROJECT_DIR)/../extern/jsoncpp/include $(PROJECT_DIR)/../extern/vorbis";
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ void InputHandler_MacOSX_HID::QueueCallback( void *target, int result, void *ref
|
|||||||
IOHIDQueueInterface **queue = (IOHIDQueueInterface **)sender;
|
IOHIDQueueInterface **queue = (IOHIDQueueInterface **)sender;
|
||||||
IOHIDEventStruct event;
|
IOHIDEventStruct event;
|
||||||
AbsoluteTime zeroTime = { 0, 0 };
|
AbsoluteTime zeroTime = { 0, 0 };
|
||||||
HIDDevice *dev = This->m_vDevices[int( refcon )];
|
HIDDevice *dev = This->m_vDevices[size_t( refcon )];
|
||||||
vector<DeviceInput> vPresses;
|
vector<DeviceInput> vPresses;
|
||||||
|
|
||||||
while( (result = CALL(queue, getNextEvent, &event, zeroTime, 0)) == kIOReturnSuccess )
|
while( (result = CALL(queue, getNextEvent, &event, zeroTime, 0)) == kIOReturnSuccess )
|
||||||
@@ -402,71 +402,17 @@ wchar_t InputHandler_MacOSX_HID::DeviceButtonToChar( DeviceButton button, bool b
|
|||||||
return L'\0';
|
return L'\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find the USB key code for this DeviceButton
|
// Use Quartz to translate device button to char
|
||||||
UInt8 iMacVirtualKey;
|
UInt8 iMacVirtualKey;
|
||||||
if( KeyboardDevice::DeviceButtonToMacVirtualKey( button, iMacVirtualKey ) )
|
if( KeyboardDevice::DeviceButtonToMacVirtualKey( button, iMacVirtualKey ) )
|
||||||
{
|
{
|
||||||
UInt32 modifiers = 0;
|
CGEventRef event = CGEventCreateKeyboardEvent( NULL, (CGKeyCode)iMacVirtualKey, true );
|
||||||
if( bUseCurrentKeyModifiers )
|
UniChar string[1];
|
||||||
modifiers = GetCurrentKeyModifiers();
|
UniCharCount length;
|
||||||
|
CGEventKeyboardGetUnicodeString( event, 1, &length, string );
|
||||||
// todo: handle Caps Lock -freem
|
if( length > 0 )
|
||||||
|
|
||||||
SInt16 iCurrentKeyScript = GetScriptManagerVariable( smKeyScript );
|
|
||||||
SInt16 iCurrentKeyLayoutID = GetScriptVariable( iCurrentKeyScript, smScriptKeys );
|
|
||||||
static SInt16 iLastKeyLayoutID = !iCurrentKeyLayoutID; // Just be different.
|
|
||||||
static UInt32 iDeadKeyState;
|
|
||||||
static UCKeyboardLayout **KeyLayout;
|
|
||||||
|
|
||||||
if( iCurrentKeyLayoutID != iLastKeyLayoutID )
|
|
||||||
{
|
{
|
||||||
iDeadKeyState = 0;
|
return string[0];
|
||||||
KeyLayout = (UCKeyboardLayout **)GetResource( 'uchr', iCurrentKeyLayoutID );
|
|
||||||
iLastKeyLayoutID = iCurrentKeyLayoutID;
|
|
||||||
}
|
|
||||||
if( KeyLayout )
|
|
||||||
{
|
|
||||||
UInt32 keyboardType = LMGetKbdType();
|
|
||||||
UInt32 nModifiers = bUseCurrentKeyModifiers ? GetCurrentKeyModifiers() : 0;
|
|
||||||
UniChar unicodeInputString[4];
|
|
||||||
UniCharCount length;
|
|
||||||
OSStatus status = UCKeyTranslate( *KeyLayout, iMacVirtualKey, kUCKeyActionDown, nModifiers,
|
|
||||||
keyboardType, 0, &iDeadKeyState, ARRAYLEN(unicodeInputString),
|
|
||||||
&length, unicodeInputString );
|
|
||||||
|
|
||||||
if( status )
|
|
||||||
return L'\0';
|
|
||||||
|
|
||||||
CFStringRef inputString = CFStringCreateWithCharacters( NULL, unicodeInputString, length );
|
|
||||||
char utf8InputString[7]; // Max size is 6 (although really only 4 are used) + null.
|
|
||||||
|
|
||||||
if( !CFStringGetCString(inputString, utf8InputString, 7, kCFStringEncodingUTF8) )
|
|
||||||
{
|
|
||||||
CFRelease( inputString );
|
|
||||||
return L'\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
wchar_t ch = utf8_get_char( utf8InputString );
|
|
||||||
|
|
||||||
CFRelease( inputString );
|
|
||||||
return ch == INVALID_CHAR ? L'\0' : ch;
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Fall back on the 'KCHR' resource.
|
|
||||||
static unsigned long state = 0;
|
|
||||||
static Ptr keymap = NULL;
|
|
||||||
Ptr new_keymap;
|
|
||||||
|
|
||||||
new_keymap = (Ptr)GetScriptManagerVariable(smKCHRCache);
|
|
||||||
if( new_keymap != keymap )
|
|
||||||
{
|
|
||||||
keymap = new_keymap;
|
|
||||||
state = 0;
|
|
||||||
}
|
|
||||||
// XXX: Only returns ascii. é will be returned as e.
|
|
||||||
return KeyTranslate( keymap, UInt16(iMacVirtualKey)|modifiers, &state ) & 0xFF;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user