From 99341c31db6b8c061fa2f516550614e13ac9a22d Mon Sep 17 00:00:00 2001 From: Marco Antognini Date: Wed, 6 Jul 2011 02:39:07 +0200 Subject: [PATCH] Vital fix, now it compiles but some implementation is missing --- src/SFML/Window/CMakeLists.txt | 2 - src/SFML/Window/OSX/Joystick.cpp | 371 ----------------- src/SFML/Window/OSX/Joystick.hpp | 176 -------- src/SFML/Window/OSX/SFApplication.h | 2 +- src/SFML/Window/OSX/SFOpenGLView.mm | 388 +++++++++--------- src/SFML/Window/OSX/SFViewController.mm | 2 +- .../Window/OSX/WindowImplDelegateProtocol.h | 2 +- src/SFML/Window/WindowImpl.cpp | 5 +- 8 files changed, 200 insertions(+), 748 deletions(-) delete mode 100644 src/SFML/Window/OSX/Joystick.cpp delete mode 100644 src/SFML/Window/OSX/Joystick.hpp diff --git a/src/SFML/Window/CMakeLists.txt b/src/SFML/Window/CMakeLists.txt index 698682e2..30cc2ec7 100644 --- a/src/SFML/Window/CMakeLists.txt +++ b/src/SFML/Window/CMakeLists.txt @@ -67,8 +67,6 @@ else() # MACOSX ${SRCROOT}/OSX/cpp_objc_conversion.mm ${SRCROOT}/OSX/cg_sf_conversion.hpp ${SRCROOT}/OSX/cg_sf_conversion.cpp - ${SRCROOT}/OSX/Joystick.cpp - ${SRCROOT}/OSX/Joystick.hpp ${SRCROOT}/OSX/InputImpl.cpp ${SRCROOT}/OSX/InputImpl.hpp ${SRCROOT}/OSX/JoystickImpl.cpp diff --git a/src/SFML/Window/OSX/Joystick.cpp b/src/SFML/Window/OSX/Joystick.cpp deleted file mode 100644 index 6cec8a92..00000000 --- a/src/SFML/Window/OSX/Joystick.cpp +++ /dev/null @@ -1,371 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2011 Marco Antognini (antognini.marco@gmail.com), -// Laurent Gomila (laurent.gom@gmail.com), -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// -#include -#include -#include - - -namespace sf -{ -namespace priv -{ - -//////////////////////////////////////////////////////////// -Joystick::Joystick() -: myManager(0) -, myElements(0) -{ - /* Nothing else */ -} - - -//////////////////////////////////////////////////////////// -Joystick::~Joystick() -{ - FreeUp(); -} - - -//////////////////////////////////////////////////////////// -void Joystick::Initialize(unsigned int Index) -{ - // Try to create a joystick manager. - if (!CreateManager()) return; - - // Get the joysticks. - CFSetRef devices = CopyJoysticksOnly(); - - // If none exit the function. - if (devices == NULL) { - FreeUp(); - return; - } - - // Is there enough joystick ? - CFIndex joysticksCount = CFSetGetCount(devices); - if (joysticksCount <= CFIndex(Index)) { - FreeUp(); - return; - } - - // Get a usable copy of the joysticks devices. - CFTypeRef devicesArray[joysticksCount]; - CFSetGetValues(devices, devicesArray); - - // Release unused stuff. - CFRelease(devices); // Maybe we should have a field for that and not release it here... - - // Get the Index-th joystick. - IOHIDDeviceRef device = (IOHIDDeviceRef) devicesArray[Index]; - - // Retrive all connected elements to this joystick. - if (!RetriveElements(device)) { - FreeUp(); - return; - } - - // Happy end! -} - - -//////////////////////////////////////////////////////////// -JoystickState Joystick::UpdateState() -{ - // If we don't have any joystick we exit. - if (myElements == 0) return JoystickState(); - - // Fill a JoystickState instance with the current joystick state. - JoystickState s; - - // Update the buttons. - for (ButtonsVector::size_type i = 0; i < myButtons.size(); ++i) { - IOHIDValueRef value = 0; - IOHIDDeviceGetValue(IOHIDElementGetDevice(myButtons[i]), myButtons[i], &value); - - // Check for plug out. - if (!value) { - // No value ? Hum... Seems like the joystick is gone. - - FreeUp(); - return JoystickState(); - } - - s.Buttons[i] = IOHIDValueGetIntegerValue(value) == 1; // 1 means pressed, others mean released. - } - - for (AxisMap::iterator it = myAxis.begin(); it != myAxis.end(); ++it) { - IOHIDValueRef value = 0; - IOHIDDeviceGetValue(IOHIDElementGetDevice(it->second), it->second, &value); - - // Check for plug out. - if (!value) { - // No value ? Hum... Seems like the joystick is gone. - - FreeUp(); - return JoystickState(); - } - - // We want to bind [physicalMin,physicalMax] to [-100=min,100=max]. - // - // General formula to bind [a,b] to [c,d] with a linear progression : - // - // f : [a, b] -> [c, d] - // x |-> (x-a)(d-c)/(b-a)+c - // - // This method might not be very accurate (the "0 position" can be - // slightly shift with some device) but we don't care because most - // of devices are so sensitive that this is not relevant. - double physicalMax = IOHIDElementGetPhysicalMax(it->second); - double physicalMin = IOHIDElementGetPhysicalMin(it->second); - double scaledMin = -100; - double scaledMax = 100; - double physicalValue = IOHIDValueGetScaledValue(value, kIOHIDValueScaleTypePhysical); - float scaledValue = ((physicalValue - physicalMin) * (scaledMax - scaledMin) / (physicalMax - physicalMin)) + scaledMin; - s.Axis[it->first] = scaledValue; - } - - return s; -} - - -//////////////////////////////////////////////////////////// -bool Joystick::HasAxis(Joy::Axis Axis) const -{ - return myAxis.find(Axis) != myAxis.end(); -} - - -//////////////////////////////////////////////////////////// -unsigned int Joystick::GetButtonsCount() const -{ - // Return number of supported buttons. - return myButtons.size(); -} - - -//////////////////////////////////////////////////////////// -CFDictionaryRef Joystick::DevicesMaskForManager(UInt32 page, UInt32 usage) -{ - // Create the dictionary. - CFMutableDictionaryRef dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 2, - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks); - - // Add the page value. - CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &page); - CFDictionarySetValue(dict, CFSTR(kIOHIDDeviceUsagePageKey), value); - CFRelease(value); - - // Add the usage value (which is only valid if page value exists). - value = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &usage); - CFDictionarySetValue(dict, CFSTR(kIOHIDDeviceUsageKey), value); - CFRelease(value); - - return dict; -} - - -//////////////////////////////////////////////////////////// -bool Joystick::CreateManager() -{ - // Create HID Manager reference. - myManager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone); - - // Open a HID Manager reference. - IOReturn openStatus = IOHIDManagerOpen(myManager, kIOHIDOptionsTypeNone); - - if (openStatus != kIOReturnSuccess) { - sf::Err() << "Error when opening the joystick manager : " - << std::hex << openStatus << std::endl; - - CFRelease(myManager); - myManager = 0; - - return false; - } - - // Everything went fine. - return true; -} - - -//////////////////////////////////////////////////////////// -CFSetRef Joystick::CopyJoysticksOnly() -{ - // Create a mask to get only joystick devices. - CFDictionaryRef joysticksMask = DevicesMaskForManager(kHIDPage_GenericDesktop, kHIDUsage_GD_Joystick); - - // Sets single matching criteria (dictionary) for device enumeration. - IOHIDManagerSetDeviceMatching(myManager, joysticksMask); - - // No more needed -> free up. - CFRelease(joysticksMask); - - // Retrieve devices. - CFSetRef devices = IOHIDManagerCopyDevices(myManager); - return devices; // The caller is responsible for releasing it. -} - - -//////////////////////////////////////////////////////////// -bool Joystick::RetriveElements(IOHIDDeviceRef device) -{ - // Get a list of all elements attached to the device. - myElements = IOHIDDeviceCopyMatchingElements(device, NULL, kIOHIDOptionsTypeNone); - - if (myElements == NULL) { - // What is a joystick with no element ? Let the user know that. - sf::Err() << "No array of element for this device" << std::endl; - - return false; - } - - // How many elements are there ? - CFIndex elements_count = CFArrayGetCount(myElements); - - if (elements_count == 0) { - // What is a joystick with no element ? Let the user know that. - sf::Err() << "No element attached to this device" << std::endl; - - CFRelease(myElements); - myElements = 0; - - return false; - } - - // Go through all connected elements. - for (int i = 0; i < elements_count; ++i) { - IOHIDElementRef element = (IOHIDElementRef) CFArrayGetValueAtIndex(myElements, i); - - switch (IOHIDElementGetType(element)) { - - case kIOHIDElementTypeInput_Misc: - switch (IOHIDElementGetUsage(element)) { - - case kHIDUsage_GD_X: - myAxis[Joy::AxisX] = element; - break; - - case kHIDUsage_GD_Y: - myAxis[Joy::AxisY] = element; - break; - - case kHIDUsage_GD_Z: - myAxis[Joy::AxisZ] = element; - break; - - case kHIDUsage_GD_Rx: - myAxis[Joy::AxisU] = element; // use same binding as on Linux. - break; - - case kHIDUsage_GD_Ry: - myAxis[Joy::AxisV] = element; // use same binding as on Linux. - break; - - case kHIDUsage_GD_Rz: - myAxis[Joy::AxisR] = element; // use same binding as on Linux. - break; - - // kHIDUsage_GD_Vx, kHIDUsage_GD_Vy, kHIDUsage_GD_Vz are ignored. - } - break; - - case kIOHIDElementTypeInput_Button: - if (myButtons.size() < Joy::ButtonCount) { // If we can managed this button through events... - myButtons.push_back(element); // ...we add this element to the list. - } else { - // Too many buttons. We ignore this one. - } - break; - - default: // Make compiler happy. - break; - } - } - - // Note : Joy::AxisPOV not yet supported. - // Maybe kIOHIDElementTypeInput_Axis is the type but I can't test. - - return true; -} - - -//////////////////////////////////////////////////////////// -void Joystick::FreeUp() -{ - ReleaseElements(); - - ReleaseManager(); -} - - -//////////////////////////////////////////////////////////// -void Joystick::ReleaseManager() -{ - if (myManager != 0) { - // Closes the IOHIDManager - IOReturn closeStatus = IOHIDManagerClose(myManager, kIOHIDOptionsTypeNone); - - if (closeStatus != kIOReturnSuccess) { - // Closing the manager failed. We don't care that much about this. - // It often happens when the connection with the device is closed after - // the device is deconected from the computer. - - /* - sf::Err() << "Error when closing the manager : " - << std::hex << closeStatus << std::endl; - //*/ - } - - // Release the manager. - CFRelease(myManager); - myManager = 0; - } -} - - -//////////////////////////////////////////////////////////// -void Joystick::ReleaseElements() -{ - if (myElements != 0) { - // Release all elements. - CFRelease(myElements); - myElements = 0; - - // Both myAxis and myButton contains only reference from myElements. - // Thus no special cleanup is required on these two. - myButtons.clear(); - myAxis.clear(); - } -} - - -} // namespace priv - -} // namespace sf diff --git a/src/SFML/Window/OSX/Joystick.hpp b/src/SFML/Window/OSX/Joystick.hpp deleted file mode 100644 index 389319bd..00000000 --- a/src/SFML/Window/OSX/Joystick.hpp +++ /dev/null @@ -1,176 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2011 Marco Antognini (antognini.marco@gmail.com), -// Laurent Gomila (laurent.gom@gmail.com), -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef SFML_JOYSTICKOSX_HPP -#define SFML_JOYSTICKOSX_HPP - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// -#include -#include -#include -#include - -namespace sf -{ -namespace priv -{ -//////////////////////////////////////////////////////////// -/// \brief OSX implementation of Joystick -/// -//////////////////////////////////////////////////////////// -class Joystick -{ -public : - - //////////////////////////////////////////////////////////// - /// \brief Default constructor - /// - /// This constructors initializes all members to 0. - /// That is, it does nothing. - /// - //////////////////////////////////////////////////////////// - Joystick(); - - //////////////////////////////////////////////////////////// - /// \brief Destructor - /// - /// Close all connections to any devices if required. - /// - //////////////////////////////////////////////////////////// - ~Joystick(); - - //////////////////////////////////////////////////////////// - /// \brief Initialize the instance and bind it to a physical joystick - /// - /// \param index Index of the physical joystick to bind to - /// - //////////////////////////////////////////////////////////// - void Initialize(unsigned int index); - - //////////////////////////////////////////////////////////// - /// \brief Update the current joystick and return its new state - /// - /// \return Current state of the joystick - /// - //////////////////////////////////////////////////////////// - JoystickState UpdateState(); - - //////////////////////////////////////////////////////////// - /// \brief Check if the joystick supports the given axis - /// - /// \param axis Axis to check - /// - /// \return True of the axis is supported, false otherwise - /// - //////////////////////////////////////////////////////////// - bool HasAxis(Joy::Axis Axis) const; - - //////////////////////////////////////////////////////////// - /// \brief Get the number of buttons supported by the joystick - /// - /// \return Number of buttons - /// - //////////////////////////////////////////////////////////// - unsigned int GetButtonsCount() const; - -private : - - //////////////////////////////////////////////////////////// - /// \brief Create a mask (dictionary) for an IOHIDManager - /// - /// \param page - /// \param usage - /// - //////////////////////////////////////////////////////////// - static CFDictionaryRef DevicesMaskForManager(UInt32 page, UInt32 usage); - - //////////////////////////////////////////////////////////// - /// \brief Create and open the manager - /// - /// \return Return false if someting went wrong - /// - //////////////////////////////////////////////////////////// - bool CreateManager(); - - //////////////////////////////////////////////////////////// - /// \brief Copy all connected joysticks to the manager - /// - /// \return NULL or a valid (possibly empty) set of devices - /// - //////////////////////////////////////////////////////////// - CFSetRef CopyJoysticksOnly(); - - //////////////////////////////////////////////////////////// - /// \brief Load all connected elements to the given device - /// - /// \param device The desired joystick - /// \return False if something went wrong - /// - //////////////////////////////////////////////////////////// - bool RetriveElements(IOHIDDeviceRef device); - - //////////////////////////////////////////////////////////// - /// \brief Release all resources - /// - /// Close all connections to any devices, if required - /// - //////////////////////////////////////////////////////////// - void FreeUp(); - - //////////////////////////////////////////////////////////// - /// \brief Close and release the manager - /// - //////////////////////////////////////////////////////////// - void ReleaseManager(); - - //////////////////////////////////////////////////////////// - /// \brief Release all elements - /// - //////////////////////////////////////////////////////////// - void ReleaseElements(); - - //////////////////////////////////////////////////////////// - // Member data - //////////////////////////////////////////////////////////// - typedef std::map AxisMap; - typedef std::vector ButtonsVector; - - AxisMap myAxis; ///< Axis (IOHIDElementRef) connected to the joystick. - ButtonsVector myButtons; ///< Buttons (IOHIDElementRef) connected to the joystick. - // Note : Both myAxis and myButton contains only reference from myElements. - // Thus no special cleanup is required on these two. - - IOHIDManagerRef myManager; ///< HID Manager. - CFArrayRef myElements; ///< IOHIDElementRef connected to the joytick. -}; - -} // namespace priv - -} // namespace sf - - -#endif // SFML_JOYSTICKOSX_HPP diff --git a/src/SFML/Window/OSX/SFApplication.h b/src/SFML/Window/OSX/SFApplication.h index d3615eb6..5079dbaf 100644 --- a/src/SFML/Window/OSX/SFApplication.h +++ b/src/SFML/Window/OSX/SFApplication.h @@ -39,6 +39,6 @@ /// \brief Event processing /// //////////////////////////////////////////////////////////// -+(void)processEvent ++(void)processEvent; @end diff --git a/src/SFML/Window/OSX/SFOpenGLView.mm b/src/SFML/Window/OSX/SFOpenGLView.mm index 87fd8df1..6a01204f 100644 --- a/src/SFML/Window/OSX/SFOpenGLView.mm +++ b/src/SFML/Window/OSX/SFOpenGLView.mm @@ -62,7 +62,7 @@ NSUInteger KeepOnlyMaskFromData(NSUInteger data, NSUInteger mask); //////////////////////////////////////////////////////////// /// Try to convert a character into a SFML key code. -/// Return sf::Key::Count if it doesn't match any 'localized' keys. +/// Return sf::Keyboard::KeyCount if it doesn't match any 'localized' keys. /// /// By 'localized' I mean keys that depend on the keyboard layout /// and might not be the same as the US keycode in some country @@ -70,14 +70,14 @@ NSUInteger KeepOnlyMaskFromData(NSUInteger data, NSUInteger mask); /// US keyboard layouts.) /// //////////////////////////////////////////////////////////// -sf::Key::Code LocalizedKeys(unichar ch); +sf::Keyboard::Key LocalizedKeys(unichar ch); //////////////////////////////////////////////////////////// /// Try to convert a keycode into a SFML key code. -/// Return sf::Key::Count if the keycode is unknown. +/// Return sf::Keyboard::KeyCount if the keycode is unknown. /// //////////////////////////////////////////////////////////// -sf::Key::Code NonLocalizedKeys(unsigned short keycode); +sf::Keyboard::Key NonLocalizedKeys(unsigned short keycode); //////////////////////////////////////////////////////////// /// SFOpenGLView class : Privates Methods Declaration @@ -119,7 +119,7 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); /// Convert a key down/up NSEvent into an SFML key event. /// Based on LocalizedKeys and NonLocalizedKeys function. /// -/// Return sf::Key::Count as Code if the key is unknown. +/// Return sf::Keyboard::KeyCount as Code if the key is unknown. /// //////////////////////////////////////////////////////////// +(sf::Event::KeyEvent)convertNSKeyEventToSFMLEvent:(NSEvent *)anEvent; @@ -443,7 +443,7 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); if (myUseKeyRepeat || ![theEvent isARepeat]) { sf::Event::KeyEvent key = [SFOpenGLView convertNSKeyEventToSFMLEvent:theEvent]; - if (key.Code != sf::Key::Count) { // The key is recognized. + if (key.Code != sf::Keyboard::KeyCount) { // The key is recognized. myRequester->KeyDown(key); } } @@ -478,7 +478,7 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); sf::Event::KeyEvent key = [SFOpenGLView convertNSKeyEventToSFMLEvent:theEvent]; - if (key.Code != sf::Key::Count) { // The key is recognized. + if (key.Code != sf::Keyboard::KeyCount) { // The key is recognized. myRequester->KeyUp(key); } } @@ -493,7 +493,7 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); // Setup a potential event key. sf::Event::KeyEvent key; - key.Code = sf::Key::Count; + key.Code = sf::Keyboard::KeyCount; key.Alt = modifiers & NSAlternateKeyMask; key.Control = modifiers & NSControlKeyMask; key.Shift = modifiers & NSShiftKeyMask; @@ -522,14 +522,14 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); // left shift released leftShiftIsDown = NO; - key.Code = sf::Key::LShift; + key.Code = sf::Keyboard::LShift; myRequester->KeyUp(key); } if (!myRightShiftWasDown) { // right shift pressed - key.Code = sf::Key::RShift; + key.Code = sf::Keyboard::RShift; myRequester->KeyDown(key); } } @@ -543,14 +543,14 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); // right shift released rightShiftIsDown = NO; - key.Code = sf::Key::RShift; + key.Code = sf::Keyboard::RShift; myRequester->KeyUp(key); } if (!myLeftShiftWasDown) { // left shift pressed - key.Code = sf::Key::LShift; + key.Code = sf::Keyboard::LShift; myRequester->KeyDown(key); } } @@ -564,14 +564,14 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); if (!myRightShiftWasDown) { // right shift pressed - key.Code = sf::Key::RShift; + key.Code = sf::Keyboard::RShift; myRequester->KeyDown(key); } if (!myLeftShiftWasDown) { // left shift pressed - key.Code = sf::Key::LShift; + key.Code = sf::Keyboard::LShift; myRequester->KeyDown(key); } } @@ -583,14 +583,14 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); if (myRightShiftWasDown) { // right shift released - key.Code = sf::Key::RShift; + key.Code = sf::Keyboard::RShift; myRequester->KeyUp(key); } if (myLeftShiftWasDown) { // left shift released - key.Code = sf::Key::LShift; + key.Code = sf::Keyboard::LShift; myRequester->KeyUp(key); } } @@ -609,14 +609,14 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); // left command released leftCommandIsDown = NO; - key.Code = sf::Key::LSystem; + key.Code = sf::Keyboard::LSystem; myRequester->KeyUp(key); } if (!myRightCommandWasDown) { // right command pressed - key.Code = sf::Key::RSystem; + key.Code = sf::Keyboard::RSystem; myRequester->KeyDown(key); } } @@ -630,14 +630,14 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); // right command released rightCommandIsDown = NO; - key.Code = sf::Key::RSystem; + key.Code = sf::Keyboard::RSystem; myRequester->KeyUp(key); } if (!myLeftCommandWasDown) { // left command pressed - key.Code = sf::Key::LSystem; + key.Code = sf::Keyboard::LSystem; myRequester->KeyDown(key); } } @@ -651,14 +651,14 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); if (!myRightCommandWasDown) { // right command pressed - key.Code = sf::Key::RSystem; + key.Code = sf::Keyboard::RSystem; myRequester->KeyDown(key); } if (!myLeftCommandWasDown) { // left command pressed - key.Code = sf::Key::LSystem; + key.Code = sf::Keyboard::LSystem; myRequester->KeyDown(key); } } @@ -670,14 +670,14 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); if (myRightCommandWasDown) { // right command released - key.Code = sf::Key::RSystem; + key.Code = sf::Keyboard::RSystem; myRequester->KeyUp(key); } if (myLeftCommandWasDown) { // left command released - key.Code = sf::Key::LSystem; + key.Code = sf::Keyboard::LSystem; myRequester->KeyUp(key); } } @@ -696,14 +696,14 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); // left alt released leftAlternateIsDown = NO; - key.Code = sf::Key::LAlt; + key.Code = sf::Keyboard::LAlt; myRequester->KeyUp(key); } if (!myRightAlternateWasDown) { // right alt pressed - key.Code = sf::Key::RAlt; + key.Code = sf::Keyboard::RAlt; myRequester->KeyDown(key); } } @@ -717,14 +717,14 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); // right alt released rightAlternateIsDown = NO; - key.Code = sf::Key::RAlt; + key.Code = sf::Keyboard::RAlt; myRequester->KeyUp(key); } if (!myLeftAlternateWasDown) { // left alt pressed - key.Code = sf::Key::LAlt; + key.Code = sf::Keyboard::LAlt; myRequester->KeyDown(key); } } @@ -738,14 +738,14 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); if (!myRightAlternateWasDown) { // right alt pressed - key.Code = sf::Key::RAlt; + key.Code = sf::Keyboard::RAlt; myRequester->KeyDown(key); } if (!myLeftAlternateWasDown) { // left alt pressed - key.Code = sf::Key::LAlt; + key.Code = sf::Keyboard::LAlt; myRequester->KeyDown(key); } } @@ -757,14 +757,14 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); if (myRightAlternateWasDown) { // right alt released - key.Code = sf::Key::RAlt; + key.Code = sf::Keyboard::RAlt; myRequester->KeyUp(key); } if (myLeftAlternateWasDown) { // left alt released - key.Code = sf::Key::LAlt; + key.Code = sf::Keyboard::LAlt; myRequester->KeyUp(key); } } @@ -778,7 +778,7 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); if (!myControlWasDown) { // ctrl pressed - key.Code = sf::Key::LControl; + key.Code = sf::Keyboard::LControl; myRequester->KeyDown(key); } } else { // No control key down. @@ -787,7 +787,7 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); if (myControlWasDown) { // ctrl released - key.Code = sf::Key::LControl; + key.Code = sf::Keyboard::LControl; myRequester->KeyUp(key); } } @@ -949,7 +949,7 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); key.System = modifierFlags & NSCommandKeyMask; // Key code. - key.Code = sf::Key::Count; + key.Code = sf::Keyboard::KeyCount; // First we look if the key down is from a list of caracter that depend on keyboard localization. NSString* string = [anEvent charactersIgnoringModifiers]; if ([string length] > 0) { @@ -957,12 +957,12 @@ sf::Key::Code NonLocalizedKeys(unsigned short keycode); } // The key is not a localized one, the other keys. - if (key.Code == sf::Key::Count) { + if (key.Code == sf::Keyboard::KeyCount) { key.Code = NonLocalizedKeys([anEvent keyCode]); } -#ifdef SFML_DEBUG // We don't want to bother the final customer with anoying messages. - if (key.Code == sf::Key::Count) { // The key is unknown. +#ifdef SFML_DEBUG // We don't want to bother the final customer with annoying messages. + if (key.Code == sf::Keyboard::KeyCount) { // The key is unknown. sf::Err() << "This is an unknow key. Should not happen (?). Keycode is 0x" << std::hex @@ -997,255 +997,255 @@ NSUInteger KeepOnlyMaskFromData(NSUInteger data, NSUInteger mask) //////////////////////////////////////////////////////// -sf::Key::Code LocalizedKeys(unichar ch) +sf::Keyboard::Key LocalizedKeys(unichar ch) { switch (ch) { case 'a': - case 'A': return sf::Key::A; + case 'A': return sf::Keyboard::A; case 'b': - case 'B': return sf::Key::B; + case 'B': return sf::Keyboard::B; case 'c': - case 'C': return sf::Key::C; + case 'C': return sf::Keyboard::C; case 'd': - case 'D': return sf::Key::D; + case 'D': return sf::Keyboard::D; case 'e': - case 'E': return sf::Key::E; + case 'E': return sf::Keyboard::E; case 'f': - case 'F': return sf::Key::F; + case 'F': return sf::Keyboard::F; case 'g': - case 'G': return sf::Key::G; + case 'G': return sf::Keyboard::G; case 'h': - case 'H': return sf::Key::H; + case 'H': return sf::Keyboard::H; case 'i': - case 'I': return sf::Key::I; + case 'I': return sf::Keyboard::I; case 'j': - case 'J': return sf::Key::J; + case 'J': return sf::Keyboard::J; case 'k': - case 'K': return sf::Key::K; + case 'K': return sf::Keyboard::K; case 'l': - case 'L': return sf::Key::L; + case 'L': return sf::Keyboard::L; case 'm': - case 'M': return sf::Key::M; + case 'M': return sf::Keyboard::M; case 'n': - case 'N': return sf::Key::N; + case 'N': return sf::Keyboard::N; case 'o': - case 'O': return sf::Key::O; + case 'O': return sf::Keyboard::O; case 'p': - case 'P': return sf::Key::P; + case 'P': return sf::Keyboard::P; case 'q': - case 'Q': return sf::Key::Q; + case 'Q': return sf::Keyboard::Q; case 'r': - case 'R': return sf::Key::R; + case 'R': return sf::Keyboard::R; case 's': - case 'S': return sf::Key::S; + case 'S': return sf::Keyboard::S; case 't': - case 'T': return sf::Key::T; + case 'T': return sf::Keyboard::T; case 'u': - case 'U': return sf::Key::U; + case 'U': return sf::Keyboard::U; case 'v': - case 'V': return sf::Key::V; + case 'V': return sf::Keyboard::V; case 'w': - case 'W': return sf::Key::W; + case 'W': return sf::Keyboard::W; case 'x': - case 'X': return sf::Key::X; + case 'X': return sf::Keyboard::X; case 'y': - case 'Y': return sf::Key::Y; + case 'Y': return sf::Keyboard::Y; case 'z': - case 'Z': return sf::Key::Z; + case 'Z': return sf::Keyboard::Z; // The kew is not 'localized'. - default: return sf::Key::Count; + default: return sf::Keyboard::KeyCount; } } //////////////////////////////////////////////////////// -sf::Key::Code NonLocalizedKeys(unsigned short keycode) +sf::Keyboard::Key NonLocalizedKeys(unsigned short keycode) { // (Some) 0x code based on http://forums.macrumors.com/showthread.php?t=780577 - // Some sf::Key are present twice. + // Some sf::Keyboard::Key are present twice. switch (keycode) { // These cases should not be used but anyway... - case 0x00: return sf::Key::A; - case 0x0b: return sf::Key::B; - case 0x08: return sf::Key::C; - case 0x02: return sf::Key::D; - case 0x0e: return sf::Key::E; - case 0x03: return sf::Key::F; - case 0x05: return sf::Key::G; - case 0x04: return sf::Key::H; - case 0x22: return sf::Key::I; - case 0x26: return sf::Key::J; - case 0x28: return sf::Key::K; - case 0x25: return sf::Key::L; - case 0x2e: return sf::Key::M; - case 0x2d: return sf::Key::N; - case 0x1f: return sf::Key::O; - case 0x23: return sf::Key::P; - case 0x0c: return sf::Key::Q; - case 0x0f: return sf::Key::R; - case 0x01: return sf::Key::S; - case 0x11: return sf::Key::T; - case 0x20: return sf::Key::U; - case 0x09: return sf::Key::V; - case 0x0d: return sf::Key::W; - case 0x07: return sf::Key::X; - case 0x10: return sf::Key::Y; - case 0x06: return sf::Key::Z; + case 0x00: return sf::Keyboard::A; + case 0x0b: return sf::Keyboard::B; + case 0x08: return sf::Keyboard::C; + case 0x02: return sf::Keyboard::D; + case 0x0e: return sf::Keyboard::E; + case 0x03: return sf::Keyboard::F; + case 0x05: return sf::Keyboard::G; + case 0x04: return sf::Keyboard::H; + case 0x22: return sf::Keyboard::I; + case 0x26: return sf::Keyboard::J; + case 0x28: return sf::Keyboard::K; + case 0x25: return sf::Keyboard::L; + case 0x2e: return sf::Keyboard::M; + case 0x2d: return sf::Keyboard::N; + case 0x1f: return sf::Keyboard::O; + case 0x23: return sf::Keyboard::P; + case 0x0c: return sf::Keyboard::Q; + case 0x0f: return sf::Keyboard::R; + case 0x01: return sf::Keyboard::S; + case 0x11: return sf::Keyboard::T; + case 0x20: return sf::Keyboard::U; + case 0x09: return sf::Keyboard::V; + case 0x0d: return sf::Keyboard::W; + case 0x07: return sf::Keyboard::X; + case 0x10: return sf::Keyboard::Y; + case 0x06: return sf::Keyboard::Z; // These cases should not be used but anyway... - case 0x1d: return sf::Key::Num0; - case 0x12: return sf::Key::Num1; - case 0x13: return sf::Key::Num2; - case 0x14: return sf::Key::Num3; - case 0x15: return sf::Key::Num4; - case 0x17: return sf::Key::Num5; - case 0x16: return sf::Key::Num6; - case 0x1a: return sf::Key::Num7; - case 0x1c: return sf::Key::Num8; - case 0x19: return sf::Key::Num9; + case 0x1d: return sf::Keyboard::Num0; + case 0x12: return sf::Keyboard::Num1; + case 0x13: return sf::Keyboard::Num2; + case 0x14: return sf::Keyboard::Num3; + case 0x15: return sf::Keyboard::Num4; + case 0x17: return sf::Keyboard::Num5; + case 0x16: return sf::Keyboard::Num6; + case 0x1a: return sf::Keyboard::Num7; + case 0x1c: return sf::Keyboard::Num8; + case 0x19: return sf::Keyboard::Num9; - case 0x35: return sf::Key::Escape; + case 0x35: return sf::Keyboard::Escape; // Modifier keys : never happen with keyDown/keyUp methods (?) - case 0x3b: return sf::Key::LControl; - case 0x38: return sf::Key::LShift; - case 0x3a: return sf::Key::LAlt; - case 0x37: return sf::Key::LSystem; - case 0x3e: return sf::Key::RControl; - case 0x3c: return sf::Key::RShift; - case 0x3d: return sf::Key::RAlt; - case 0x36: return sf::Key::RSystem; + case 0x3b: return sf::Keyboard::LControl; + case 0x38: return sf::Keyboard::LShift; + case 0x3a: return sf::Keyboard::LAlt; + case 0x37: return sf::Keyboard::LSystem; + case 0x3e: return sf::Keyboard::RControl; + case 0x3c: return sf::Keyboard::RShift; + case 0x3d: return sf::Keyboard::RAlt; + case 0x36: return sf::Keyboard::RSystem; - case NSMenuFunctionKey: return sf::Key::Menu; + case NSMenuFunctionKey: return sf::Keyboard::Menu; - case 0x21: return sf::Key::LBracket; - case 0x1e: return sf::Key::RBracket; - case 0x29: return sf::Key::SemiColon; - case 0x2b: return sf::Key::Comma; - case 0x2f: return sf::Key::Period; - case 0x27: return sf::Key::Quote; - case 0x2c: return sf::Key::Slash; - case 0x2a: return sf::Key::BackSlash; + case 0x21: return sf::Keyboard::LBracket; + case 0x1e: return sf::Keyboard::RBracket; + case 0x29: return sf::Keyboard::SemiColon; + case 0x2b: return sf::Keyboard::Comma; + case 0x2f: return sf::Keyboard::Period; + case 0x27: return sf::Keyboard::Quote; + case 0x2c: return sf::Keyboard::Slash; + case 0x2a: return sf::Keyboard::BackSlash; -#warning sf::Key::Tilde might be in conflict with some other key. +#warning sf::Keyboard::Tilde might be in conflict with some other key. // 0x0a is for "Non-US Backslash" according to HID Calibrator, // a sample provided by Apple. - case 0x0a: return sf::Key::Tilde; + case 0x0a: return sf::Keyboard::Tilde; - case 0x18: return sf::Key::Equal; - case 0x32: return sf::Key::Dash; - case 0x31: return sf::Key::Space; - case 0x24: return sf::Key::Return; - case 0x33: return sf::Key::Back; - case 0x30: return sf::Key::Tab; + case 0x18: return sf::Keyboard::Equal; + case 0x32: return sf::Keyboard::Dash; + case 0x31: return sf::Keyboard::Space; + case 0x24: return sf::Keyboard::Return; + case 0x33: return sf::Keyboard::Back; + case 0x30: return sf::Keyboard::Tab; // Duplicates (see next §). - case 0x74: return sf::Key::PageUp; - case 0x79: return sf::Key::PageDown; - case 0x77: return sf::Key::End; - case 0x73: return sf::Key::Home; + case 0x74: return sf::Keyboard::PageUp; + case 0x79: return sf::Keyboard::PageDown; + case 0x77: return sf::Keyboard::End; + case 0x73: return sf::Keyboard::Home; - case NSPageUpFunctionKey: return sf::Key::PageUp; - case NSPageDownFunctionKey: return sf::Key::PageDown; - case NSEndFunctionKey: return sf::Key::End; - case NSHomeFunctionKey: return sf::Key::Home; + case NSPageUpFunctionKey: return sf::Keyboard::PageUp; + case NSPageDownFunctionKey: return sf::Keyboard::PageDown; + case NSEndFunctionKey: return sf::Keyboard::End; + case NSHomeFunctionKey: return sf::Keyboard::Home; - case NSInsertFunctionKey: return sf::Key::Insert; - case NSDeleteFunctionKey: return sf::Key::Delete; + case NSInsertFunctionKey: return sf::Keyboard::Insert; + case NSDeleteFunctionKey: return sf::Keyboard::Delete; - case 0x45: return sf::Key::Add; - case 0x4e: return sf::Key::Subtract; - case 0x43: return sf::Key::Multiply; - case 0x4b: return sf::Key::Divide; + case 0x45: return sf::Keyboard::Add; + case 0x4e: return sf::Keyboard::Subtract; + case 0x43: return sf::Keyboard::Multiply; + case 0x4b: return sf::Keyboard::Divide; // Duplicates (see next §). - case 0x7b: return sf::Key::Left; - case 0x7c: return sf::Key::Right; - case 0x7e: return sf::Key::Up; - case 0x7d: return sf::Key::Down; + case 0x7b: return sf::Keyboard::Left; + case 0x7c: return sf::Keyboard::Right; + case 0x7e: return sf::Keyboard::Up; + case 0x7d: return sf::Keyboard::Down; - case NSLeftArrowFunctionKey: return sf::Key::Left; - case NSRightArrowFunctionKey: return sf::Key::Right; - case NSUpArrowFunctionKey: return sf::Key::Up; - case NSDownArrowFunctionKey: return sf::Key::Down; + case NSLeftArrowFunctionKey: return sf::Keyboard::Left; + case NSRightArrowFunctionKey: return sf::Keyboard::Right; + case NSUpArrowFunctionKey: return sf::Keyboard::Up; + case NSDownArrowFunctionKey: return sf::Keyboard::Down; - case 0x52: return sf::Key::Numpad0; - case 0x53: return sf::Key::Numpad1; - case 0x54: return sf::Key::Numpad2; - case 0x55: return sf::Key::Numpad3; - case 0x56: return sf::Key::Numpad4; - case 0x57: return sf::Key::Numpad5; - case 0x58: return sf::Key::Numpad6; - case 0x59: return sf::Key::Numpad7; - case 0x5b: return sf::Key::Numpad8; - case 0x5c: return sf::Key::Numpad9; + case 0x52: return sf::Keyboard::Numpad0; + case 0x53: return sf::Keyboard::Numpad1; + case 0x54: return sf::Keyboard::Numpad2; + case 0x55: return sf::Keyboard::Numpad3; + case 0x56: return sf::Keyboard::Numpad4; + case 0x57: return sf::Keyboard::Numpad5; + case 0x58: return sf::Keyboard::Numpad6; + case 0x59: return sf::Keyboard::Numpad7; + case 0x5b: return sf::Keyboard::Numpad8; + case 0x5c: return sf::Keyboard::Numpad9; // Duplicates (see next §). - case 0x7a: return sf::Key::F1; - case 0x78: return sf::Key::F2; - case 0x63: return sf::Key::F3; - case 0x76: return sf::Key::F4; - case 0x60: return sf::Key::F5; - case 0x61: return sf::Key::F6; - case 0x62: return sf::Key::F7; - case 0x64: return sf::Key::F8; - case 0x65: return sf::Key::F9; - case 0x6d: return sf::Key::F10; - case 0x67: return sf::Key::F11; - case 0x6f: return sf::Key::F12; - case 0x69: return sf::Key::F13; - case 0x6b: return sf::Key::F14; - case 0x71: return sf::Key::F15; + case 0x7a: return sf::Keyboard::F1; + case 0x78: return sf::Keyboard::F2; + case 0x63: return sf::Keyboard::F3; + case 0x76: return sf::Keyboard::F4; + case 0x60: return sf::Keyboard::F5; + case 0x61: return sf::Keyboard::F6; + case 0x62: return sf::Keyboard::F7; + case 0x64: return sf::Keyboard::F8; + case 0x65: return sf::Keyboard::F9; + case 0x6d: return sf::Keyboard::F10; + case 0x67: return sf::Keyboard::F11; + case 0x6f: return sf::Keyboard::F12; + case 0x69: return sf::Keyboard::F13; + case 0x6b: return sf::Keyboard::F14; + case 0x71: return sf::Keyboard::F15; - case NSF1FunctionKey: return sf::Key::F1; - case NSF2FunctionKey: return sf::Key::F2; - case NSF3FunctionKey: return sf::Key::F3; - case NSF4FunctionKey: return sf::Key::F4; - case NSF5FunctionKey: return sf::Key::F5; - case NSF6FunctionKey: return sf::Key::F6; - case NSF7FunctionKey: return sf::Key::F7; - case NSF8FunctionKey: return sf::Key::F8; - case NSF9FunctionKey: return sf::Key::F9; - case NSF10FunctionKey: return sf::Key::F10; - case NSF11FunctionKey: return sf::Key::F11; - case NSF12FunctionKey: return sf::Key::F12; - case NSF13FunctionKey: return sf::Key::F13; - case NSF14FunctionKey: return sf::Key::F14; - case NSF15FunctionKey: return sf::Key::F15; + case NSF1FunctionKey: return sf::Keyboard::F1; + case NSF2FunctionKey: return sf::Keyboard::F2; + case NSF3FunctionKey: return sf::Keyboard::F3; + case NSF4FunctionKey: return sf::Keyboard::F4; + case NSF5FunctionKey: return sf::Keyboard::F5; + case NSF6FunctionKey: return sf::Keyboard::F6; + case NSF7FunctionKey: return sf::Keyboard::F7; + case NSF8FunctionKey: return sf::Keyboard::F8; + case NSF9FunctionKey: return sf::Keyboard::F9; + case NSF10FunctionKey: return sf::Keyboard::F10; + case NSF11FunctionKey: return sf::Keyboard::F11; + case NSF12FunctionKey: return sf::Keyboard::F12; + case NSF13FunctionKey: return sf::Keyboard::F13; + case NSF14FunctionKey: return sf::Keyboard::F14; + case NSF15FunctionKey: return sf::Keyboard::F15; - case NSPauseFunctionKey: return sf::Key::Pause; + case NSPauseFunctionKey: return sf::Keyboard::Pause; #warning keycode 0x1b is not bound to any key. // This key is ' on CH-FR, ) on FR and - on US layouts. // An unknown key. - default: return sf::Key::Count; + default: return sf::Keyboard::KeyCount; } } diff --git a/src/SFML/Window/OSX/SFViewController.mm b/src/SFML/Window/OSX/SFViewController.mm index 6047fa46..00cd5174 100644 --- a/src/SFML/Window/OSX/SFViewController.mm +++ b/src/SFML/Window/OSX/SFViewController.mm @@ -224,7 +224,7 @@ //////////////////////////////////////////////////////// --(void)processEventWithBlockingMode:(BOOL)block +-(void)processEvent { sf::Err() << "Cannot process event from the view." << std::endl; } diff --git a/src/SFML/Window/OSX/WindowImplDelegateProtocol.h b/src/SFML/Window/OSX/WindowImplDelegateProtocol.h index 0986c3d8..e644eb1f 100644 --- a/src/SFML/Window/OSX/WindowImplDelegateProtocol.h +++ b/src/SFML/Window/OSX/WindowImplDelegateProtocol.h @@ -137,7 +137,7 @@ namespace sf { /// Fetch new event /// //////////////////////////////////////////////////////////// --(void)processEventWithBlockingMode:(BOOL)block; +-(void)processEvent; //////////////////////////////////////////////////////////// /// Apply a given context to an OpenGL view. diff --git a/src/SFML/Window/WindowImpl.cpp b/src/SFML/Window/WindowImpl.cpp index 51f73b33..518ea5d8 100644 --- a/src/SFML/Window/WindowImpl.cpp +++ b/src/SFML/Window/WindowImpl.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -43,8 +44,8 @@ #elif defined(SFML_SYSTEM_MACOS) - #include - typedef sf::priv::WindowImplCocoa WindowImplType; + #include + typedef sf::priv::WindowImplCocoa WindowImplType; #endif