diff --git a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSX.h b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSX.h index 02e65bd609..30e8011478 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSX.h +++ b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSX.h @@ -1,7 +1,6 @@ #pragma once #include "../ControllerInterface.h" -#include namespace ciface { @@ -11,51 +10,5 @@ namespace OSX void Init( std::vector& devices ); void DeInit(); -class Keyboard : public ControllerInterface::Device -{ - friend class ControllerInterface; - friend class ControllerInterface::ControlReference; - -protected: - - class Input : public ControllerInterface::Device::Input - { - friend class Keyboard; - protected: - virtual ControlState GetState() = 0; - }; - - class Key : public Input - { - friend class Keyboard; - public: - std::string GetName() const; - protected: - Key( IOHIDElementRef key_element ); - ControlState GetState(); - private: - IOHIDElementRef m_key_element; - std::string m_key_name; - }; - - bool UpdateInput(); - bool UpdateOutput(); - - ControlState GetInputState( const ControllerInterface::Device::Input* const input ); - void SetOutputState( const ControllerInterface::Device::Output* const output, const ControlState state ); - -public: - Keyboard(IOHIDDeviceRef device, int index); - - std::string GetName() const; - std::string GetSource() const; - int GetId() const; - -private: - IOHIDDeviceRef m_device; - int m_device_index; - std::string m_device_name; -}; - } } diff --git a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSX.mm b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSX.mm index 7107a314df..8696fb407d 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSX.mm +++ b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSX.mm @@ -3,6 +3,8 @@ #ifdef CIFACE_USE_OSX #include "OSX.h" +#include "OSXKeyboard.h" +#include "OSXMouse.h" #include #include @@ -15,38 +17,38 @@ namespace OSX static IOHIDManagerRef HIDManager = NULL; static CFStringRef OurRunLoop = CFSTR("DolphinOSXInput"); -unsigned int KeyboardIndex = 0; - static void DeviceMatching_callback(void* inContext, IOReturn inResult, void* inSender, IOHIDDeviceRef inIOHIDDeviceRef) { - NSLog(@"-------------------------"); - NSLog(@"Got Device: %@", IOHIDDeviceGetProperty(inIOHIDDeviceRef, CFSTR(kIOHIDProductKey))); + //NSLog(@"-------------------------"); + //NSLog(@"Got Device: %@", IOHIDDeviceGetProperty(inIOHIDDeviceRef, CFSTR(kIOHIDProductKey))); // Add to the devices vector if it's of a type we want if (IOHIDDeviceConformsTo(inIOHIDDeviceRef, kHIDPage_GenericDesktop, kHIDUsage_GD_Keyboard) || IOHIDDeviceConformsTo(inIOHIDDeviceRef, kHIDPage_GenericDesktop, kHIDUsage_GD_Keypad)) { std::vector *devices = (std::vector *)inContext; - devices->push_back(new Keyboard(inIOHIDDeviceRef, KeyboardIndex++)); + devices->push_back(new Keyboard(inIOHIDDeviceRef)); + } + if (IOHIDDeviceConformsTo(inIOHIDDeviceRef, kHIDPage_GenericDesktop, kHIDUsage_GD_Mouse)) + { + std::vector *devices = (std::vector *)inContext; + devices->push_back(new Mouse(inIOHIDDeviceRef)); } /* - // One of the built-in mice devices insta-crash :( - else if (IOHIDDeviceConformsTo(inIOHIDDeviceRef, kHIDPage_GenericDesktop, kHIDUsage_GD_Mouse)) - { - } // Probably just a lot of fiddling...but then we can kill SDL dependency (?) else if (IOHIDDeviceConformsTo(inIOHIDDeviceRef, kHIDPage_GenericDesktop, kHIDUsage_GD_GamePad)) { + std::vector *devices = (std::vector *)inContext; + devices->push_back(); } */ else { // Actually, we don't want it - NSLog(@"Throwing away..."); #define shortlog(x) //#define shortlog(x) NSLog(@"%s: %@", x, IOHIDDeviceGetProperty(inIOHIDDeviceRef, CFSTR(x))); shortlog(kIOHIDTransportKey) @@ -75,26 +77,29 @@ static void DeviceMatching_callback(void* inContext, void Init( std::vector& devices ) { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + HIDManager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone); if (!HIDManager) NSLog(@"Failed to create HID Manager reference"); // HID Manager will give us the following devices: // Keyboard, Keypad, Mouse, GamePad - NSArray *matchingDevices = [NSArray arrayWithObjects: - [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithInteger:kHIDPage_GenericDesktop], @ kIOHIDDeviceUsagePageKey, - [NSNumber numberWithInteger:kHIDUsage_GD_Keyboard], @ kIOHIDDeviceUsageKey, nil], - [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithInteger:kHIDPage_GenericDesktop], @ kIOHIDDeviceUsagePageKey, - [NSNumber numberWithInteger:kHIDUsage_GD_Keypad], @ kIOHIDDeviceUsageKey, nil], - [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithInteger:kHIDPage_GenericDesktop], @ kIOHIDDeviceUsagePageKey, - [NSNumber numberWithInteger:kHIDUsage_GD_Mouse], @ kIOHIDDeviceUsageKey, nil], - [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithInteger:kHIDPage_GenericDesktop], @ kIOHIDDeviceUsagePageKey, - [NSNumber numberWithInteger:kHIDUsage_GD_GamePad], @ kIOHIDDeviceUsageKey, nil], - nil]; + NSArray *matchingDevices = + [NSArray arrayWithObjects: + [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInteger:kHIDPage_GenericDesktop], @ kIOHIDDeviceUsagePageKey, + [NSNumber numberWithInteger:kHIDUsage_GD_Keyboard], @ kIOHIDDeviceUsageKey, nil], + [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInteger:kHIDPage_GenericDesktop], @ kIOHIDDeviceUsagePageKey, + [NSNumber numberWithInteger:kHIDUsage_GD_Keypad], @ kIOHIDDeviceUsageKey, nil], + [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInteger:kHIDPage_GenericDesktop], @ kIOHIDDeviceUsagePageKey, + [NSNumber numberWithInteger:kHIDUsage_GD_Mouse], @ kIOHIDDeviceUsageKey, nil], + [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInteger:kHIDPage_GenericDesktop], @ kIOHIDDeviceUsagePageKey, + [NSNumber numberWithInteger:kHIDUsage_GD_GamePad], @ kIOHIDDeviceUsageKey, nil], + nil]; // Pass NULL to get all devices IOHIDManagerSetDeviceMatchingMultiple(HIDManager, (CFArrayRef)matchingDevices); @@ -112,6 +117,8 @@ void Init( std::vector& devices ) // Things should be configured now. Disable hotplugging and other scheduling IOHIDManagerRegisterDeviceMatchingCallback(HIDManager, NULL, NULL); IOHIDManagerUnscheduleFromRunLoop(HIDManager, CFRunLoopGetCurrent(), OurRunLoop); + + [pool release]; } void DeInit() @@ -154,7 +161,7 @@ void DeviceElementDebugPrint(const void *value, void *context) } c_type.append(" "); - NSLog(@"%s%s%spage: 0x%x usage: 0x%x name: %s lmin: %u lmax: %u", + NSLog(@"%s%s%spage: 0x%x usage: 0x%x name: %s lmin: %i lmax: %i pmin: %i pmax: %i", type.c_str(), type == "collection" ? ":" : "", type == "collection" ? c_type.c_str() : " ", @@ -162,7 +169,9 @@ void DeviceElementDebugPrint(const void *value, void *context) IOHIDElementGetUsage(e), IOHIDElementGetName(e), // TOO BAD IT"S FUCKING USELESS IOHIDElementGetLogicalMin(e), - IOHIDElementGetLogicalMax(e)); + IOHIDElementGetLogicalMax(e), + IOHIDElementGetPhysicalMin(e), + IOHIDElementGetPhysicalMax(e)); if (type == "collection") { diff --git a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.h b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.h new file mode 100644 index 0000000000..aabbcd14a9 --- /dev/null +++ b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.h @@ -0,0 +1,58 @@ +#pragma once + +#include "../ControllerInterface.h" +#include + +namespace ciface +{ +namespace OSX +{ + +class Keyboard : public ControllerInterface::Device +{ + friend class ControllerInterface; + friend class ControllerInterface::ControlReference; + +protected: + + class Input : public ControllerInterface::Device::Input + { + friend class Keyboard; + protected: + virtual ControlState GetState() = 0; + }; + + class Key : public Input + { + friend class Keyboard; + public: + std::string GetName() const; + protected: + Key( IOHIDElementRef element ); + ControlState GetState(); + private: + IOHIDDeviceRef m_device; + IOHIDElementRef m_element; + std::string m_name; + }; + + bool UpdateInput(); + bool UpdateOutput(); + + ControlState GetInputState( const ControllerInterface::Device::Input* const input ); + void SetOutputState( const ControllerInterface::Device::Output* const output, const ControlState state ); + +public: + Keyboard(IOHIDDeviceRef device); + + std::string GetName() const; + std::string GetSource() const; + int GetId() const; + +private: + IOHIDDeviceRef m_device; + std::string m_device_name; +}; + +} +} diff --git a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.mm b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.mm index febbf24fe9..46b74bf360 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.mm +++ b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXKeyboard.mm @@ -2,7 +2,7 @@ #ifdef CIFACE_USE_OSX -#include "OSX.h" +#include "OSXKeyboard.h" #include #include @@ -24,36 +24,39 @@ struct PrettyKeys extern void DeviceElementDebugPrint(const void*, void*); -Keyboard::Keyboard(IOHIDDeviceRef device, int index) +Keyboard::Keyboard(IOHIDDeviceRef device) : m_device(device) - , m_device_index(index) { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + m_device_name = [(NSString *)IOHIDDeviceGetProperty(m_device, CFSTR(kIOHIDProductKey)) UTF8String]; - // Go through all the elements of the device we've been given and try to make something out of them - CFArrayRef elements = IOHIDDeviceCopyMatchingElements(m_device, NULL, kIOHIDOptionsTypeNone); - CFIndex idx = 0; - for (IOHIDElementRef e = (IOHIDElementRef)CFArrayGetValueAtIndex(elements, idx); - e; - e = (IOHIDElementRef)CFArrayGetValueAtIndex(elements, ++idx)) + // This class should only recieve Keyboard or Keypad devices + // Now, filter on just the buttons we can handle sanely + NSDictionary *matchingElements = + [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInteger:kIOHIDElementTypeInput_Button], @ kIOHIDElementTypeKey, + [NSNumber numberWithInteger:0], @ kIOHIDElementMinKey, + [NSNumber numberWithInteger:1], @ kIOHIDElementMaxKey, + nil]; + + CFArrayRef elements = + IOHIDDeviceCopyMatchingElements(m_device, (CFDictionaryRef)matchingElements, kIOHIDOptionsTypeNone); + + if (elements) { - if ((IOHIDElementGetType(e) == kIOHIDElementTypeInput_Button) && - (IOHIDElementGetUsagePage(e) == kHIDPage_KeyboardOrKeypad) && - (IOHIDElementGetLogicalMin(e) == 0) && - (IOHIDElementGetLogicalMax(e) == 1)) - { - try { - inputs.push_back(new Key(e)); - } - catch (std::bad_alloc&) { - } - } - else + for (int i = 0; i < CFArrayGetCount(elements); i++) { + IOHIDElementRef e = (IOHIDElementRef)CFArrayGetValueAtIndex(elements, i); //DeviceElementDebugPrint(e, NULL); + + try { inputs.push_back(new Key(e)); } + catch (std::bad_alloc&) { /*Thrown if the key is reserved*/ } } + CFRelease(elements); } - CFRelease(elements); + + [pool release]; } ControlState Keyboard::GetInputState( const ControllerInterface::Device::Input* const input ) @@ -87,20 +90,22 @@ std::string Keyboard::GetSource() const int Keyboard::GetId() const { - return m_device_index; + return 0; } -Keyboard::Key::Key(IOHIDElementRef key_element) - : m_key_element(key_element) - , m_key_name("RESERVED") // for some reason HID Manager gives these to us. bad_alloc! +Keyboard::Key::Key(IOHIDElementRef element) + : m_element(element) + , m_name("RESERVED") // for some reason HID Manager gives these to us. bad_alloc! { - uint32_t keycode = IOHIDElementGetUsage(m_key_element); + m_device = IOHIDElementGetDevice(m_element); + + uint32_t keycode = IOHIDElementGetUsage(m_element); for (uint32_t i = 0; i < sizeof(named_keys)/sizeof(*named_keys); i++) { if (named_keys[i].code == keycode) { - m_key_name = named_keys[i].name; + m_name = named_keys[i].name; return; } } @@ -110,19 +115,15 @@ Keyboard::Key::Key(IOHIDElementRef key_element) ControlState Keyboard::Key::GetState() { IOHIDValueRef value; - if (IOHIDDeviceGetValue(IOHIDElementGetDevice(m_key_element), m_key_element, &value) == kIOReturnSuccess) - { - double scaled_value = IOHIDValueGetScaledValue(value, kIOHIDValueScaleTypePhysical); - //NSLog(@"element %x value %x scaled %f", IOHIDElementGetUsage(m_key_element), value, scaled_value); - return scaled_value > 0; - } + if (IOHIDDeviceGetValue(m_device, m_element, &value) == kIOReturnSuccess) + return IOHIDValueGetScaledValue(value, kIOHIDValueScaleTypePhysical) > 0; return false; } std::string Keyboard::Key::GetName() const { - return m_key_name; + return m_name; } diff --git a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXMouse.h b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXMouse.h new file mode 100644 index 0000000000..0049fd311e --- /dev/null +++ b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXMouse.h @@ -0,0 +1,77 @@ +#pragma once + +#include "../ControllerInterface.h" +#include + +namespace ciface +{ +namespace OSX +{ + +class Mouse : public ControllerInterface::Device +{ + friend class ControllerInterface; + friend class ControllerInterface::ControlReference; + +protected: + + class Input : public ControllerInterface::Device::Input + { + friend class Mouse; + protected: + virtual ControlState GetState() = 0; + }; + + class Button : public Input + { + friend class Mouse; + public: + std::string GetName() const; + protected: + Button( IOHIDElementRef element ); + ControlState GetState(); + private: + IOHIDDeviceRef m_device; + IOHIDElementRef m_element; + std::string m_name; + }; + + class Axis : public Input + { + friend class Mouse; + public: + enum direction { + positive = 0, + negative + }; + std::string GetName() const; + protected: + Axis( IOHIDElementRef element, direction dir ); + ControlState GetState(); + private: + IOHIDDeviceRef m_device; + IOHIDElementRef m_element; + std::string m_name; + direction m_direction; + }; + + bool UpdateInput(); + bool UpdateOutput(); + + ControlState GetInputState( const ControllerInterface::Device::Input* const input ); + void SetOutputState( const ControllerInterface::Device::Output* const output, const ControlState state ); + +public: + Mouse(IOHIDDeviceRef device); + + std::string GetName() const; + std::string GetSource() const; + int GetId() const; + +private: + IOHIDDeviceRef m_device; + std::string m_device_name; +}; + +} +} diff --git a/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXMouse.mm b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXMouse.mm new file mode 100644 index 0000000000..a91d91ada1 --- /dev/null +++ b/Source/Core/InputCommon/Src/ControllerInterface/OSX/OSXMouse.mm @@ -0,0 +1,184 @@ +#include "../ControllerInterface.h" + +#ifdef CIFACE_USE_OSX + +#include "OSXMouse.h" +#include +#include + +namespace ciface +{ +namespace OSX +{ + +extern void DeviceElementDebugPrint(const void*, void*); + + +Mouse::Mouse(IOHIDDeviceRef device) + : m_device(device) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + m_device_name = [(NSString *)IOHIDDeviceGetProperty(m_device, CFSTR(kIOHIDProductKey)) UTF8String]; + + // Buttons + NSDictionary *buttonDict = + [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInteger:kIOHIDElementTypeInput_Button], @ kIOHIDElementTypeKey, + [NSNumber numberWithInteger:kHIDPage_Button], @ kIOHIDElementUsagePageKey, + nil]; + + CFArrayRef buttons = + IOHIDDeviceCopyMatchingElements(m_device, (CFDictionaryRef)buttonDict, kIOHIDOptionsTypeNone); + + if (buttons) + { + for (int i = 0; i < CFArrayGetCount(buttons); i++) + { + IOHIDElementRef e = (IOHIDElementRef)CFArrayGetValueAtIndex(buttons, i); + //DeviceElementDebugPrint(e, NULL); + + inputs.push_back(new Button(e)); + } + CFRelease(buttons); + } + + // Axes + NSDictionary *axisDict = + [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithInteger:kIOHIDElementTypeInput_Misc], @ kIOHIDElementTypeKey, + nil]; + + CFArrayRef axes = + IOHIDDeviceCopyMatchingElements(m_device, (CFDictionaryRef)axisDict, kIOHIDOptionsTypeNone); + + if (axes) + { + for (int i = 0; i < CFArrayGetCount(axes); i++) + { + IOHIDElementRef e = (IOHIDElementRef)CFArrayGetValueAtIndex(axes, i); + //DeviceElementDebugPrint(e, NULL); + + inputs.push_back(new Axis(e, Axis::negative)); + inputs.push_back(new Axis(e, Axis::positive)); + } + CFRelease(axes); + } + + [pool release]; +} + +ControlState Mouse::GetInputState( const ControllerInterface::Device::Input* const input ) +{ + return ((Input*)input)->GetState(); +} + +void Mouse::SetOutputState( const ControllerInterface::Device::Output* const output, const ControlState state ) +{ +} + +bool Mouse::UpdateInput() +{ + return true; +} + +bool Mouse::UpdateOutput() +{ + return true; +} + +std::string Mouse::GetName() const +{ + return m_device_name; +} + +std::string Mouse::GetSource() const +{ + return "OSX"; +} + +int Mouse::GetId() const +{ + return 0; +} + + +Mouse::Button::Button(IOHIDElementRef element) + : m_element(element) +{ + m_device = IOHIDElementGetDevice(m_element); + + std::ostringstream s; + s << IOHIDElementGetUsage(m_element); + m_name = std::string("Button ") + s.str(); +} + +ControlState Mouse::Button::GetState() +{ + IOHIDValueRef value; + if (IOHIDDeviceGetValue(m_device, m_element, &value) == kIOReturnSuccess) + return IOHIDValueGetScaledValue(value, kIOHIDValueScaleTypePhysical) > 0; + + return false; +} + +std::string Mouse::Button::GetName() const +{ + return m_name; +} + + +Mouse::Axis::Axis(IOHIDElementRef element, direction dir) + : m_element(element) + , m_direction(dir) +{ + m_device = IOHIDElementGetDevice(m_element); + + // Need to parse the element a bit first + std::string description("unk"); + + switch (IOHIDElementGetUsage(m_element)) + { + default: + NSLog(@"Unknown axis type 0x%x, using anyways...", IOHIDElementGetUsage(m_element)); + break; + case kHIDUsage_GD_X: description = "X"; break; + case kHIDUsage_GD_Y: description = "Y"; break; + case kHIDUsage_GD_Wheel: description = "Wheel"; break; + case kHIDUsage_Csmr_ACPan: description = "Pan"; break; + } + + m_name = std::string("Axis ") + description; + m_name.append((m_direction == positive) ? std::string("+") : std::string("-")); +} + +ControlState Mouse::Axis::GetState() +{ + IOHIDValueRef value; + if (IOHIDDeviceGetValue(m_device, m_element, &value) == kIOReturnSuccess) + { + double scaled_value = IOHIDValueGetScaledValue(value, kIOHIDValueScaleTypePhysical); + double actual_value = 0; + + if ((scaled_value < 0) && (m_direction == negative)) + actual_value = fabs(scaled_value); + else if ((scaled_value > 0) && (m_direction == positive)) + actual_value = scaled_value; + + //NSLog(@"%s %f %f", m_name.c_str(), scaled_value, actual_value); + return actual_value; + } + + return false; +} + +std::string Mouse::Axis::GetName() const +{ + return m_name; +} + + +} +} + +#endif diff --git a/Source/Core/InputCommon/Src/SConscript b/Source/Core/InputCommon/Src/SConscript index 647307f750..8530d6a32a 100644 --- a/Source/Core/InputCommon/Src/SConscript +++ b/Source/Core/InputCommon/Src/SConscript @@ -29,7 +29,8 @@ if icenv['HAVE_SDL']: if sys.platform == 'darwin': files += [ 'ControllerInterface/OSX/OSX.mm', - 'ControllerInterface/OSX/OSXKeyboard.mm' + 'ControllerInterface/OSX/OSXKeyboard.mm', + 'ControllerInterface/OSX/OSXMouse.mm' ] icenv['FRAMEWORKS'] = ['IOKit'] diff --git a/Source/Dolphin.xcodeproj/project.pbxproj b/Source/Dolphin.xcodeproj/project.pbxproj index 7e07a8bc6b..a916e92de5 100644 --- a/Source/Dolphin.xcodeproj/project.pbxproj +++ b/Source/Dolphin.xcodeproj/project.pbxproj @@ -955,6 +955,9 @@ 292AC59211838FD700B8790B /* pluginspecs_pad.h in Headers */ = {isa = PBXBuildFile; fileRef = 292AC1DC11838FD700B8790B /* pluginspecs_pad.h */; }; 292AC59311838FD700B8790B /* pluginspecs_video.h in Headers */ = {isa = PBXBuildFile; fileRef = 292AC1DD11838FD700B8790B /* pluginspecs_video.h */; }; 292AC59411838FD700B8790B /* pluginspecs_wiimote.h in Headers */ = {isa = PBXBuildFile; fileRef = 292AC1DE11838FD700B8790B /* pluginspecs_wiimote.h */; }; + 298D72BB11867D970096937B /* OSXKeyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 298D72BA11867D970096937B /* OSXKeyboard.h */; }; + 298D731E118699AD0096937B /* OSXMouse.mm in Sources */ = {isa = PBXBuildFile; fileRef = 298D731C118699AD0096937B /* OSXMouse.mm */; }; + 298D731F118699AD0096937B /* OSXMouse.h in Headers */ = {isa = PBXBuildFile; fileRef = 298D731D118699AD0096937B /* OSXMouse.h */; }; 29D1528F118634B400CC2741 /* OSXKeyboard.mm in Sources */ = {isa = PBXBuildFile; fileRef = 29D1528E118634B400CC2741 /* OSXKeyboard.mm */; }; 29D152AC1186461800CC2741 /* NamedKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 29D152AB1186461800CC2741 /* NamedKeys.h */; }; 5232B1F10EEB634D0093A7B1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5232B1F00EEB634D0093A7B1 /* Cocoa.framework */; }; @@ -2316,6 +2319,9 @@ 292AC1DC11838FD700B8790B /* pluginspecs_pad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pluginspecs_pad.h; sourceTree = ""; }; 292AC1DD11838FD700B8790B /* pluginspecs_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pluginspecs_video.h; sourceTree = ""; }; 292AC1DE11838FD700B8790B /* pluginspecs_wiimote.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pluginspecs_wiimote.h; sourceTree = ""; }; + 298D72BA11867D970096937B /* OSXKeyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OSXKeyboard.h; sourceTree = ""; }; + 298D731C118699AD0096937B /* OSXMouse.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OSXMouse.mm; sourceTree = ""; }; + 298D731D118699AD0096937B /* OSXMouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OSXMouse.h; sourceTree = ""; }; 29D1528E118634B400CC2741 /* OSXKeyboard.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OSXKeyboard.mm; sourceTree = ""; }; 29D152AB1186461800CC2741 /* NamedKeys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NamedKeys.h; sourceTree = ""; }; 5048396D09E3307300765E4B /* DolphinProj.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; path = DolphinProj.xcconfig; sourceTree = ""; }; @@ -3581,9 +3587,12 @@ isa = PBXGroup; children = ( 29D152AB1186461800CC2741 /* NamedKeys.h */, - 29D1528E118634B400CC2741 /* OSXKeyboard.mm */, - 292AC00211838FD600B8790B /* OSX.mm */, 292AC00311838FD600B8790B /* OSX.h */, + 292AC00211838FD600B8790B /* OSX.mm */, + 298D72BA11867D970096937B /* OSXKeyboard.h */, + 29D1528E118634B400CC2741 /* OSXKeyboard.mm */, + 298D731D118699AD0096937B /* OSXMouse.h */, + 298D731C118699AD0096937B /* OSXMouse.mm */, ); path = OSX; sourceTree = ""; @@ -4850,6 +4859,8 @@ 292AC59311838FD700B8790B /* pluginspecs_video.h in Headers */, 292AC59411838FD700B8790B /* pluginspecs_wiimote.h in Headers */, 29D152AC1186461800CC2741 /* NamedKeys.h in Headers */, + 298D72BB11867D970096937B /* OSXKeyboard.h in Headers */, + 298D731F118699AD0096937B /* OSXMouse.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5903,6 +5914,7 @@ 292AC58A11838FD700B8790B /* WiimoteEmu.cpp in Sources */, 292AC58D11838FD700B8790B /* WiimoteNew.cpp in Sources */, 29D1528F118634B400CC2741 /* OSXKeyboard.mm in Sources */, + 298D731E118699AD0096937B /* OSXMouse.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };