From e12297283292827a85f17d954370a535fa42ff33 Mon Sep 17 00:00:00 2001 From: Marco Antognini Date: Mon, 27 Mar 2017 00:36:59 +0200 Subject: [PATCH 01/11] Add new API for scancodes --- include/SFML/Window/Event.hpp | 11 +- include/SFML/Window/Keyboard.hpp | 224 +++++++++++++++++++++++++- src/SFML/Window/Android/InputImpl.hpp | 32 +++- src/SFML/Window/Keyboard.cpp | 23 +++ src/SFML/Window/OSX/InputImpl.hpp | 32 +++- src/SFML/Window/Unix/InputImpl.hpp | 32 +++- src/SFML/Window/Win32/InputImpl.hpp | 32 +++- src/SFML/Window/iOS/InputImpl.hpp | 32 +++- 8 files changed, 375 insertions(+), 43 deletions(-) diff --git a/include/SFML/Window/Event.hpp b/include/SFML/Window/Event.hpp index 53b37d95..84d8df3b 100644 --- a/include/SFML/Window/Event.hpp +++ b/include/SFML/Window/Event.hpp @@ -61,11 +61,12 @@ public: //////////////////////////////////////////////////////////// struct KeyEvent { - Keyboard::Key code; //!< Code of the key that has been pressed - bool alt; //!< Is the Alt key pressed? - bool control; //!< Is the Control key pressed? - bool shift; //!< Is the Shift key pressed? - bool system; //!< Is the System key pressed? + Keyboard::Key code; //!< Code of the key that has been pressed + Keyboard::Scancode scancode; //!< Physical code of the key that has been pressed + bool alt; //!< Is the Alt key pressed? + bool control; //!< Is the Control key pressed? + bool shift; //!< Is the Shift key pressed? + bool system; //!< Is the System key pressed? }; //////////////////////////////////////////////////////////// diff --git a/include/SFML/Window/Keyboard.hpp b/include/SFML/Window/Keyboard.hpp index 92ea8df8..7ac3fb8e 100644 --- a/include/SFML/Window/Keyboard.hpp +++ b/include/SFML/Window/Keyboard.hpp @@ -29,6 +29,7 @@ // Headers //////////////////////////////////////////////////////////// #include +#include namespace sf @@ -44,6 +45,10 @@ public: //////////////////////////////////////////////////////////// /// \brief Key codes /// + /// The enumerators refer to the "localized" key; i.e. depending + /// on the layout set by the operating system, a key can be mapped + /// to `Y` or `Z`. + /// //////////////////////////////////////////////////////////// enum Key { @@ -161,6 +166,158 @@ public: Return = Enter //!< \deprecated Use Enter instead }; + //////////////////////////////////////////////////////////// + /// \brief Scancodes + /// + /// The enumerators are bound to a physical key and do *not* depend + /// on the keyboard layout used by the operating system. Usually, the AT-101 + /// keyboard can be used as reference for the physical position of the keys. + /// + /// The scancodes are based on a subset of Table 12: Keyboard/Keypad Page + /// of Universal Serial Bus (USB): HID Usage Tables, v1.12. + /// + /// \todo When porting this for SFML 3, remove the `s` prefix and use + /// enum class. + /// + //////////////////////////////////////////////////////////// + enum Scancode + { + sUnknown = -1, ///< Represents any scancode not present in this enum + sA = 0, ///< Keyboard a and A key + sB, ///< Keyboard b and B key + sC, ///< Keyboard c and C key + sD, ///< Keyboard d and D key + sE, ///< Keyboard e and E key + sF, ///< Keyboard f and F key + sG, ///< Keyboard g and G key + sH, ///< Keyboard h and H key + sI, ///< Keyboard i and I key + sJ, ///< Keyboard j and J key + sK, ///< Keyboard k and K key + sL, ///< Keyboard l and L key + sM, ///< Keyboard m and M key + sN, ///< Keyboard n and N key + sO, ///< Keyboard o and O key + sP, ///< Keyboard p and P key + sQ, ///< Keyboard q and Q key + sR, ///< Keyboard r and R key + sS, ///< Keyboard s and S key + sT, ///< Keyboard t and T key + sU, ///< Keyboard u and U key + sV, ///< Keyboard v and V key + sW, ///< Keyboard w and W key + sX, ///< Keyboard x and X key + sY, ///< Keyboard y and Y key + sZ, ///< Keyboard z and Z key + sNum1, ///< Keyboard 1 and ! key + sNum2, ///< Keyboard 2 and @ key + sNum3, ///< Keyboard 3 and # key + sNum4, ///< Keyboard 4 and $ key + sNum5, ///< Keyboard 5 and % key + sNum6, ///< Keyboard 6 and ^ key + sNum7, ///< Keyboard 7 and & key + sNum8, ///< Keyboard 8 and * key + sNum9, ///< Keyboard 9 and ) key + sNum0, ///< Keyboard 0 and ) key + sEnter, ///< Keyboard Return (ENTER) key + sEscape, ///< Keyboard Escape key + sBackspace, ///< Keyboard Backspace key + // TODO above it's BackSpace, but is it correct? What do we use here? + sTab, ///< Keyboard Tab key + sSpace, ///< Keyboard Space key + sHyphen, ///< Keyboard - and _ key + sEquals, ///< Keyboard = and + + sLBracket, ///< Keyboard [ and { key + sRBracket, ///< Keyboard ] and } key + sBackslash, ///< Keyboard \ and | key + // TODO capitalisation + sDash, ///< Keyboard Non-US # and ~ + sSemicolon, ///< Keyboard ; and : key + // TODO capitalisation + sQuote, ///< Keyboard ' and " key + sGraveAccent, ///< Keyboard ` and ~ key + sComma, ///< Keyboard , and < key + sPeriod, ///< Keyboard . and > key + sForwardSlash, ///< Keyboard / and ? key + sF1, ///< Keyboard F1 key + sF2, ///< Keyboard F2 key + sF3, ///< Keyboard F3 key + sF4, ///< Keyboard F4 key + sF5, ///< Keyboard F5 key + sF6, ///< Keyboard F6 key + sF7, ///< Keyboard F7 key + sF8, ///< Keyboard F8 key + sF9, ///< Keyboard F9 key + sF10, ///< Keyboard F10 key + sF11, ///< Keyboard F11 key + sF12, ///< Keyboard F12 key + sF13, ///< Keyboard F13 key + sF14, ///< Keyboard F14 key + sF15, ///< Keyboard F15 key + sCapsLock, ///< Keyboard Caps Lock key + sPrintScreen, ///< Keyboard Print Screen key + sScrollLock, ///< Keyboard Scroll Lock key + sPause, ///< Keyboard Pause key + sInsert, ///< Keyboard Insert key + sHome, ///< Keyboard Home key + sPageUp, ///< Keyboard Page Up key + sDelete, ///< Keyboard Delete Forward key + sEnd, ///< Keyboard End key + sPageDown, ///< Keyboard Page Down key + sRight, ///< Keyboard Right Arrow key + sLeft, ///< Keyboard Left Arrow key + sDown, ///< Keyboard Down Arrow key + sUp, ///< Keyboard Up Arrow key + sNumLock, ///< Keypad Num Lock and Clear key + sDivide, ///< Keypad / key + sMultiply, ///< Keypad * key + sMinus, ///< Keypad - key + sPlus, ///< Keypad + key + sPadEquals, ///< keypad = key, probably Mac only + sReturn, ///< Keypad Enter (return) key + sDecimal, ///< Keypad . and Delete key + sNumpad1, ///< Keypad 1 and End key + sNumpad2, ///< Keypad 2 and Down Arrow key + sNumpad3, ///< Keypad 3 and Page Down key + sNumpad4, ///< Keypad 4 and Left Arrow key + sNumpad5, ///< Keypad 5 key + sNumpad6, ///< Keypad 6 and Right Arrow key + sNumpad7, ///< Keypad 7 and Home key + sNumpad8, ///< Keypad 8 and Up Arrow key + sNumpad9, ///< Keypad 9 and Page Up key + sNumpad0, ///< Keypad 0 and Insert key + sReverseSolidus, ///< Keyboard Non-US \ and | key + // FIXME what is this one? Might need better name. The doc says: + // - Typically near the Left-Shift key in AT-102 implementations. + // - Typical language mappings: Belg:<\> FrCa:«°» Dan:<\> Dutch:]|[ Fren:<> Ger:<|> Ital:<> LatAm:<> Nor:<> Span:<> Swed:<|> Swiss:<\> UK:\| Brazil: \|. + // What is the difference with "regular" \ and | key? + sApplication, ///< Keyboard Application key + sExecute, ///< Keyboard Execute key + sHelp, ///< Keyboard Help key + sMenu, ///< Keyboard Menu key + sSelect, ///< Keyboard Select key + sStop, ///< Keyboard Stop key + sAgain, ///< Keyboard Again key + sUndo, ///< Keyboard Undo key + sCut, ///< Keyboard Cut key + sCopy, ///< Keyboard Copy key + sPaste, ///< Keyboard Paste key + sFind, ///< Keyboard Find key + sMute, ///< Keyboard Mute key + sVolumeUp, ///< Keyboard Volume Up key + sVolumeDown, ///< Keyboard Volume Down key + sLControl, ///< Keyboard Left Control key + sLShift, ///< Keyboard Left Shift key + sLAlt, ///< Keyboard Left Alt key + sLSystem, ///< Keyboard Left System key + sRControl, ///< Keyboard Right Control key + sRShift, ///< Keyboard Right Shift key + sRAlt, ///< Keyboard Right Alt key + sRSystem, ///< Keyboard Right System key + + sCodeCount ///< Keep last -- the total number of scancodes + }; + //////////////////////////////////////////////////////////// /// \brief Check if a key is pressed /// @@ -171,12 +328,73 @@ public: //////////////////////////////////////////////////////////// static bool isKeyPressed(Key key); + //////////////////////////////////////////////////////////// + /// \brief Check if a key is pressed + /// + /// \param code Scancode to check + /// + /// \return True if the physical key is pressed, false otherwise + /// + //////////////////////////////////////////////////////////// + static bool isKeyPressed(Scancode code); + + //////////////////////////////////////////////////////////// + /// \brief Localize a physical key to a logical one + /// + /// \param code Scancode to localize + /// + /// \return The key corresponding to the scancode under the current + /// keyboard layout used by the operating system, or + /// sf::Keyboard::Unknown when the scancode cannot be mapped + /// to a Key. + /// + /// \see unlocalize + /// + //////////////////////////////////////////////////////////// + static Key localize(Scancode code); + + //////////////////////////////////////////////////////////// + /// \brief Identify the physical key corresponding to a logical one + /// + /// \param key Key to "unlocalize" + /// + /// \return The scancode corresponding to the key under the current + /// keyboard layout used by the operating system, or + /// sf::Keyboard::sUnknown when the key cannot be mapped + /// to a Keyboard::Scancode. + /// + /// \see localize + /// + //////////////////////////////////////////////////////////// + static Scancode unlocalize(Key key); + + //////////////////////////////////////////////////////////// + /// \brief Provide a string representation for a given scancode + /// + /// From a high level point of view, this conversion corresponds + /// somewhat to the string available through sf::Event::TextEvent + /// when the given physical key is pressed by the user, when no + /// modifiers are involved. + /// + /// \warning The result is OS-dependent: for example, sf::Keyboard::sLSystem + /// is "Left Meta" on Linux, "Left Windows" on Windows and + /// "Left Command" on macOS. + /// + /// The current keyboard layout set by the operating system is used to + /// interpret the scancode: for example, sf::Keyboard::SemiColon is + /// mapped to ";" for layout and to "é" for others. + /// + /// \return The localized description of the code + /// + //////////////////////////////////////////////////////////// + static String localizedRepresentation(Scancode code); + //////////////////////////////////////////////////////////// /// \brief Show or hide the virtual keyboard /// - /// Warning: the virtual keyboard is not supported on all - /// systems. It will typically be implemented on mobile OSes - /// (Android, iOS) but not on desktop OSes (Windows, Linux, ...). + /// \warning The virtual keyboard is not supported on all + /// systems. It will typically be implemented on mobile OSes + /// (Android, iOS) but not on desktop OSes (Windows, Linux, ...). /// /// If the virtual keyboard is not available, this function does /// nothing. diff --git a/src/SFML/Window/Android/InputImpl.hpp b/src/SFML/Window/Android/InputImpl.hpp index d2783e15..ffbc6312 100644 --- a/src/SFML/Window/Android/InputImpl.hpp +++ b/src/SFML/Window/Android/InputImpl.hpp @@ -45,19 +45,37 @@ class InputImpl public: //////////////////////////////////////////////////////////// - /// \brief Check if a key is pressed - /// - /// \param key Key to check - /// - /// \return True if the key is pressed, false otherwise + /// \copydoc sf::Keyboard::isKeyPressed(Key) /// //////////////////////////////////////////////////////////// static bool isKeyPressed(Keyboard::Key key); //////////////////////////////////////////////////////////// - /// \brief Show or hide the virtual keyboard + /// \copydoc sf::Keyboard::isKeyPressed(Scancode) /// - /// \param visible True to show, false to hide + //////////////////////////////////////////////////////////// + static bool isKeyPressed(Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::localize + /// + //////////////////////////////////////////////////////////// + static Keyboard::Key localize(Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::unlocalize + /// + //////////////////////////////////////////////////////////// + static Keyboard::Scancode unlocalize(Keyboard::Key key); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::localizedRepresentation + /// + //////////////////////////////////////////////////////////// + static String localizedRepresentation(Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::setVirtualKeyboardVisible /// //////////////////////////////////////////////////////////// static void setVirtualKeyboardVisible(bool visible); diff --git a/src/SFML/Window/Keyboard.cpp b/src/SFML/Window/Keyboard.cpp index d37e3f87..b6b4e4a7 100644 --- a/src/SFML/Window/Keyboard.cpp +++ b/src/SFML/Window/Keyboard.cpp @@ -37,6 +37,29 @@ bool Keyboard::isKeyPressed(Key key) return priv::InputImpl::isKeyPressed(key); } +//////////////////////////////////////////////////////////// +bool Keyboard::isKeyPressed(Scancode code) +{ + return priv::InputImpl::isKeyPressed(code); +} + +//////////////////////////////////////////////////////////// +Keyboard::Key Keyboard::localize(Scancode code) +{ + return priv::InputImpl::localize(code); +} + +//////////////////////////////////////////////////////////// +Keyboard::Scancode Keyboard::unlocalize(Key key) +{ + return priv::InputImpl::unlocalize(key); +} + +//////////////////////////////////////////////////////////// +String Keyboard::localizedRepresentation(Scancode code) +{ + return priv::InputImpl::localizedRepresentation(code); +} //////////////////////////////////////////////////////////// void Keyboard::setVirtualKeyboardVisible(bool visible) diff --git a/src/SFML/Window/OSX/InputImpl.hpp b/src/SFML/Window/OSX/InputImpl.hpp index 30943407..dad01073 100644 --- a/src/SFML/Window/OSX/InputImpl.hpp +++ b/src/SFML/Window/OSX/InputImpl.hpp @@ -46,19 +46,37 @@ class InputImpl public: //////////////////////////////////////////////////////////// - /// \brief Check if a key is pressed - /// - /// \param key Key to check - /// - /// \return True if the key is pressed, false otherwise + /// \copydoc sf::Keyboard::isKeyPressed(Key) /// //////////////////////////////////////////////////////////// static bool isKeyPressed(Keyboard::Key key); //////////////////////////////////////////////////////////// - /// \brief Show or hide the virtual keyboard + /// \copydoc sf::Keyboard::isKeyPressed(Scancode) /// - /// \param visible True to show, false to hide + //////////////////////////////////////////////////////////// + static bool isKeyPressed(Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::localize + /// + //////////////////////////////////////////////////////////// + static Keyboard::Key localize(Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::unlocalize + /// + //////////////////////////////////////////////////////////// + static Keyboard::Scancode unlocalize(Keyboard::Key key); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::localizedRepresentation + /// + //////////////////////////////////////////////////////////// + static String localizedRepresentation(Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::setVirtualKeyboardVisible /// //////////////////////////////////////////////////////////// static void setVirtualKeyboardVisible(bool visible); diff --git a/src/SFML/Window/Unix/InputImpl.hpp b/src/SFML/Window/Unix/InputImpl.hpp index 741a92e5..e692d6ec 100644 --- a/src/SFML/Window/Unix/InputImpl.hpp +++ b/src/SFML/Window/Unix/InputImpl.hpp @@ -45,19 +45,37 @@ class InputImpl public: //////////////////////////////////////////////////////////// - /// \brief Check if a key is pressed - /// - /// \param key Key to check - /// - /// \return True if the key is pressed, false otherwise + /// \copydoc sf::Keyboard::isKeyPressed(Key) /// //////////////////////////////////////////////////////////// static bool isKeyPressed(Keyboard::Key key); //////////////////////////////////////////////////////////// - /// \brief Show or hide the virtual keyboard + /// \copydoc sf::Keyboard::isKeyPressed(Scancode) /// - /// \param visible True to show, false to hide + //////////////////////////////////////////////////////////// + static bool isKeyPressed(Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::localize + /// + //////////////////////////////////////////////////////////// + static Keyboard::Key localize(Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::unlocalize + /// + //////////////////////////////////////////////////////////// + static Keyboard::Scancode unlocalize(Keyboard::Key key); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::localizedRepresentation + /// + //////////////////////////////////////////////////////////// + static String localizedRepresentation(Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::setVirtualKeyboardVisible /// //////////////////////////////////////////////////////////// static void setVirtualKeyboardVisible(bool visible); diff --git a/src/SFML/Window/Win32/InputImpl.hpp b/src/SFML/Window/Win32/InputImpl.hpp index 87e21209..9df15889 100644 --- a/src/SFML/Window/Win32/InputImpl.hpp +++ b/src/SFML/Window/Win32/InputImpl.hpp @@ -45,19 +45,37 @@ class InputImpl public: //////////////////////////////////////////////////////////// - /// \brief Check if a key is pressed - /// - /// \param key Key to check - /// - /// \return True if the key is pressed, false otherwise + /// \copydoc sf::Keyboard::isKeyPressed(Key) /// //////////////////////////////////////////////////////////// static bool isKeyPressed(Keyboard::Key key); //////////////////////////////////////////////////////////// - /// \brief Show or hide the virtual keyboard + /// \copydoc sf::Keyboard::isKeyPressed(Scancode) /// - /// \param visible True to show, false to hide + //////////////////////////////////////////////////////////// + static bool isKeyPressed(Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::localize + /// + //////////////////////////////////////////////////////////// + static Keyboard::Key localize(Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::unlocalize + /// + //////////////////////////////////////////////////////////// + static Keyboard::Scancode unlocalize(Keyboard::Key key); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::localizedRepresentation + /// + //////////////////////////////////////////////////////////// + static String localizedRepresentation(Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::setVirtualKeyboardVisible /// //////////////////////////////////////////////////////////// static void setVirtualKeyboardVisible(bool visible); diff --git a/src/SFML/Window/iOS/InputImpl.hpp b/src/SFML/Window/iOS/InputImpl.hpp index 6bde166a..b1712fa2 100644 --- a/src/SFML/Window/iOS/InputImpl.hpp +++ b/src/SFML/Window/iOS/InputImpl.hpp @@ -45,19 +45,37 @@ class InputImpl public: //////////////////////////////////////////////////////////// - /// \brief Check if a key is pressed - /// - /// \param key Key to check - /// - /// \return True if the key is pressed, false otherwise + /// \copydoc sf::Keyboard::isKeyPressed(Key) /// //////////////////////////////////////////////////////////// static bool isKeyPressed(Keyboard::Key key); //////////////////////////////////////////////////////////// - /// \brief Show or hide the virtual keyboard + /// \copydoc sf::Keyboard::isKeyPressed(Scancode) /// - /// \param visible True to show, false to hide + //////////////////////////////////////////////////////////// + static bool isKeyPressed(Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::localize + /// + //////////////////////////////////////////////////////////// + static Keyboard::Key localize(Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::unlocalize + /// + //////////////////////////////////////////////////////////// + static Keyboard::Scancode unlocalize(Keyboard::Key key); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::localizedRepresentation + /// + //////////////////////////////////////////////////////////// + static String localizedRepresentation(Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::setVirtualKeyboardVisible /// //////////////////////////////////////////////////////////// static void setVirtualKeyboardVisible(bool visible); From 9dc7f3dc79e0e3a5c0791c2c4c6f0197ba2df82c Mon Sep 17 00:00:00 2001 From: Marco Antognini Date: Tue, 28 Mar 2017 23:37:06 +0200 Subject: [PATCH 02/11] Add support of scancodes for macOS --- src/SFML/Window/OSX/HIDInputManager.hpp | 140 +- src/SFML/Window/OSX/HIDInputManager.mm | 1574 +++++++++++------ src/SFML/Window/OSX/InputImpl.mm | 32 +- .../Window/OSX/SFKeyboardModifiersHelper.h | 3 +- .../Window/OSX/SFKeyboardModifiersHelper.mm | 27 +- src/SFML/Window/OSX/SFOpenGLView+keyboard.mm | 22 +- 6 files changed, 1167 insertions(+), 631 deletions(-) diff --git a/src/SFML/Window/OSX/HIDInputManager.hpp b/src/SFML/Window/OSX/HIDInputManager.hpp index 3e143c8a..9a82a7b9 100644 --- a/src/SFML/Window/OSX/HIDInputManager.hpp +++ b/src/SFML/Window/OSX/HIDInputManager.hpp @@ -65,16 +65,6 @@ public: //////////////////////////////////////////////////////////// static HIDInputManager& getInstance(); - //////////////////////////////////////////////////////////// - /// \brief Check if a key is pressed - /// - /// \param key Key to check - /// - /// \return True if the key is pressed, false otherwise - /// - //////////////////////////////////////////////////////////// - bool isKeyPressed(Keyboard::Key key); - public: //////////////////////////////////////////////////////////// @@ -103,21 +93,64 @@ public: /// /// Return sf::Keyboard::Unknown 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 - /// (e.g. the keys 'Y' and 'Z' are switched on QWERTZ keyboard and + /// By 'localized' we mean keys that depend on the keyboard layout + /// and might not be the same as the US keycode for some countries + /// (e.g. the keys 'Y' and 'Z' are swapped on QWERTZ keyboard and /// US keyboard layouts.) /// //////////////////////////////////////////////////////////// - static Keyboard::Key localizedKeys(UniChar ch); + static Keyboard::Key localizedKey(UniChar ch); //////////////////////////////////////////////////////////// - /// Try to convert a virtual keycode into a SFML key code. + /// Opposite transformation as localizedKeys /// - /// Return sf::Keyboard::Unknown if the keycode is unknown. + /// Return 0x00 (NULL) for non-convertible keys/numpad numbers. + /// For letters, uppercase codes are returned. + /// Some returned value are specific to macOS. /// //////////////////////////////////////////////////////////// - static Keyboard::Key nonLocalizedKeys(UniChar virtualKeycode); + static UniChar toUnicode(Keyboard::Key key); + + //////////////////////////////////////////////////////////// + /// Try to convert a virtual keycode (HID level) into a + /// SFML scancode. + /// + /// Return sf::Keyboard::sUnknown if the keycode is unknown. + /// + //////////////////////////////////////////////////////////// + static Keyboard::Scancode nonLocalizedKey(UniChar virtualKeycode); + +public: + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::isKeyPressed(Key) + /// + //////////////////////////////////////////////////////////// + bool isKeyPressed(Keyboard::Key key); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::isKeyPressed(Scancode) + /// + //////////////////////////////////////////////////////////// + bool isKeyPressed(Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::localize + /// + //////////////////////////////////////////////////////////// + Keyboard::Key localize(Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::unlocalize + /// + //////////////////////////////////////////////////////////// + Keyboard::Scancode unlocalize(Keyboard::Key key); + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::localizedRepresentation + /// + //////////////////////////////////////////////////////////// + String localizedRepresentation(Keyboard::Scancode code); private: @@ -136,7 +169,13 @@ private: //////////////////////////////////////////////////////////// /// \brief Initialize the keyboard part of this class /// - /// If something went wrong freeUp is called + /// If something went wrong freeUp is called. + /// + /// In a nutshell, this function does this: + /// + /// for each connected keyboard kb: + /// for each key k of kb: + /// memorise k -> scancode mapping /// //////////////////////////////////////////////////////////// void initializeKeyboard(); @@ -145,28 +184,39 @@ private: /// \brief Load the given keyboard into m_keys /// /// If the given keyboard has no key this function simply - /// returns. freeUp is _not_ called because this is not fatal. + /// returns without calling freeUp because this is not fatal. /// /// \param keyboard Keyboard to load /// + /// \see initializeKeyboard + /// //////////////////////////////////////////////////////////// void loadKeyboard(IOHIDDeviceRef keyboard); //////////////////////////////////////////////////////////// /// \brief Load the given key into m_keys /// - /// freeUp is _not_ called by this function. + /// On error, freeUp is _not_ called by this function. /// /// \param key Key to load /// + /// \see initializeKeyboard + /// //////////////////////////////////////////////////////////// void loadKey(IOHIDElementRef key); + //////////////////////////////////////////////////////////// + /// Regenerate the mappings from/to Key and Scancode + /// + //////////////////////////////////////////////////////////// + void buildMappings(); + //////////////////////////////////////////////////////////// /// \brief Release all resources /// - /// Close all connections to any devices, if required - /// Set m_isValid to false + /// Close all connections to any devices. + /// + /// \see initializeKeyboard /// //////////////////////////////////////////////////////////// void freeUp(); @@ -174,11 +224,11 @@ private: //////////////////////////////////////////////////////////// /// \brief Filter the devices and return them /// - /// freeUp is _not_ called by this function. + /// On error, freeUp is _not_ called by this function. /// /// \param page HID page like kHIDPage_GenericDesktop /// \param usage HID usage page like kHIDUsage_GD_Keyboard or kHIDUsage_GD_Mouse - /// \return a retained CFSetRef of IOHIDDeviceRef or NULL + /// \return a retained, non-emtpy CFSetRef of IOHIDDeviceRef or NULL /// //////////////////////////////////////////////////////////// CFSetRef copyDevices(UInt32 page, UInt32 usage); @@ -196,36 +246,48 @@ private: bool isPressed(IOHIDElements& elements); //////////////////////////////////////////////////////////// - /// \brief Convert a HID key usage to its corresponding virtual code - /// - /// See IOHIDUsageTables.h + /// \brief Convert a HID key usage to its corresponding scancode /// /// \param usage Any kHIDUsage_Keyboard* usage - /// \return the virtual code associate with the given HID key usage - /// or 0xff if it is associate with no virtual code + /// \return the scancode associate with the given HID key usage + /// or sUnknown if it is associate with no scancode. /// //////////////////////////////////////////////////////////// - static UInt8 usageToVirtualCode(UInt32 usage); + static Keyboard::Scancode usageToScancode(UInt32 usage); + + //////////////////////////////////////////////////////////// + /// Convert the scancode to the expected virtual code. + /// + //////////////////////////////////////////////////////////// + static UInt8 scanToVirtualCode(Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// Fallback convertion for key that aren't expected to be impacted + /// by the layout. Can return Unknown. + /// + //////////////////////////////////////////////////////////// + static Keyboard::Key localizedKeyFallback(Keyboard::Scancode code); private: //////////////////////////////////////////////////////////// // Member data //////////////////////////////////////////////////////////// - bool m_isValid; ///< If any error occurs this variable is false - CFDataRef m_layoutData; ///< CFData containing the layout - UCKeyboardLayout* m_layout; ///< Current Keyboard Layout - IOHIDManagerRef m_manager; ///< HID Manager - - IOHIDElements m_keys[Keyboard::KeyCount]; ///< All the keys on any connected keyboard + IOHIDManagerRef m_manager; ///< Underlying HID Manager + IOHIDElements m_keys[Keyboard::sCodeCount]; ///< All the keys on any connected keyboard + Keyboard::Scancode m_mapping[Keyboard::KeyCount]; ///< Mapping from Key to Scancode + Keyboard::Key m_gnippam[Keyboard::sCodeCount]; ///< Mapping from Scancode to Key //////////////////////////////////////////////////////////// - /// m_keys' index corresponds to sf::Keyboard::Key enum. - /// if no key is assigned with key XYZ then m_keys[XYZ].size() == 0. - /// if there are several keyboards connected and several HID keys associate + /// m_keys' index corresponds to sf::Keyboard::Scancode enum. + /// If no key is assigned with key XYZ then m_keys[XYZ].size() == 0. + /// If there are several keyboards connected and several HID keys associated /// with the same sf::Keyboard::Key then m_keys[XYZ] contains all these /// HID keys. /// + /// The mappings (both directions) get invalidated when the + /// keyboard layout changes. They both default to (s)Unknown. + /// //////////////////////////////////////////////////////////// }; diff --git a/src/SFML/Window/OSX/HIDInputManager.mm b/src/SFML/Window/OSX/HIDInputManager.mm index 7fd40ecb..549829ff 100644 --- a/src/SFML/Window/OSX/HIDInputManager.mm +++ b/src/SFML/Window/OSX/HIDInputManager.mm @@ -42,13 +42,6 @@ HIDInputManager& HIDInputManager::getInstance() } -//////////////////////////////////////////////////////////// -bool HIDInputManager::isKeyPressed(Keyboard::Key key) -{ - return isPressed(m_keys[key]); -} - - //////////////////////////////////////////////////////////// long HIDInputManager::getLocationID(IOHIDDeviceRef device) { @@ -91,36 +84,141 @@ CFDictionaryRef HIDInputManager::copyDevicesMask(UInt32 page, UInt32 usage) } +//////////////////////////////////////////////////////////// +bool HIDInputManager::isKeyPressed(Keyboard::Key key) +{ + return isKeyPressed(unlocalize(key)); +} + + +//////////////////////////////////////////////////////////// +bool HIDInputManager::isKeyPressed(Keyboard::Scancode code) +{ + return (code != Keyboard::sUnknown) && isPressed(m_keys[code]); +} + + +//////////////////////////////////////////////////////////// +Keyboard::Key HIDInputManager::localize(Keyboard::Scancode code) +{ + // TODO ensure mapping is still valid + return m_gnippam[code]; +} + + +//////////////////////////////////////////////////////////// +Keyboard::Scancode HIDInputManager::unlocalize(Keyboard::Key key) +{ + // TODO ensure mapping is still valid + return m_mapping[key]; +} + + +//////////////////////////////////////////////////////////// +String HIDInputManager::localizedRepresentation(Keyboard::Scancode code) +{ + UniChar unicode = toUnicode(localize(code)); + if (unicode != 0x00) + return sf::String(static_cast(unicode)); + + // Fallback to our best guess for the keys that are known to be independent of the layout. + switch (code) + { + case sf::Keyboard::sEnter: return "Enter"; + case sf::Keyboard::sEscape: return "Escape"; + case sf::Keyboard::sBackspace: return "Backspace"; + case sf::Keyboard::sTab: return "Tab"; + case sf::Keyboard::sSpace: return "Space"; + + case sf::Keyboard::sF1: return "F1"; + case sf::Keyboard::sF2: return "F2"; + case sf::Keyboard::sF3: return "F3"; + case sf::Keyboard::sF4: return "F4"; + case sf::Keyboard::sF5: return "F5"; + case sf::Keyboard::sF6: return "F6"; + case sf::Keyboard::sF7: return "F7"; + case sf::Keyboard::sF8: return "F8"; + case sf::Keyboard::sF9: return "F9"; + case sf::Keyboard::sF10: return "F10"; + case sf::Keyboard::sF11: return "F11"; + case sf::Keyboard::sF12: return "F12"; + case sf::Keyboard::sF13: return "F13"; + case sf::Keyboard::sF14: return "F14"; + case sf::Keyboard::sF15: return "F15"; + + case sf::Keyboard::sCapsLock: return "CapsLock"; + case sf::Keyboard::sPrintScreen: return "PrintScreen"; + case sf::Keyboard::sScrollLock: return "ScrollLock"; + + case sf::Keyboard::sPause: return "Pause"; + case sf::Keyboard::sInsert: return "Insert"; + case sf::Keyboard::sHome: return "Home"; + case sf::Keyboard::sPageUp: return "PageUp"; + case sf::Keyboard::sDelete: return "Delete"; + case sf::Keyboard::sEnd: return "End"; + case sf::Keyboard::sPageDown: return "PageDown"; + + case sf::Keyboard::sLeft: return "Left Arrow"; + case sf::Keyboard::sRight: return "Right Arrow"; + case sf::Keyboard::sDown: return "Down Arrow"; + case sf::Keyboard::sUp: return "Up Arrow"; + + case sf::Keyboard::sNumLock: return "NumLock"; + case sf::Keyboard::sDivide: return "Divide (Numpad)"; + case sf::Keyboard::sMultiply: return "Multiply (Numpad)"; + case sf::Keyboard::sMinus: return "Minux (Numpad)"; + case sf::Keyboard::sPlus: return "Plus (Numpad)"; + case sf::Keyboard::sPadEquals: return "Equals (Numpad)"; + case sf::Keyboard::sReturn: return "Return (Numpad)"; + case sf::Keyboard::sDecimal: return "Decimal (Numpad)"; + + case sf::Keyboard::sNumpad0: return "0 (Numpad)"; + case sf::Keyboard::sNumpad1: return "1 (Numpad)"; + case sf::Keyboard::sNumpad2: return "2 (Numpad)"; + case sf::Keyboard::sNumpad3: return "3 (Numpad)"; + case sf::Keyboard::sNumpad4: return "4 (Numpad)"; + case sf::Keyboard::sNumpad5: return "5 (Numpad)"; + case sf::Keyboard::sNumpad6: return "6 (Numpad)"; + case sf::Keyboard::sNumpad7: return "7 (Numpad)"; + case sf::Keyboard::sNumpad8: return "8 (Numpad)"; + case sf::Keyboard::sNumpad9: return "9 (Numpad)"; + + case sf::Keyboard::sApplication: return "Application"; + case sf::Keyboard::sExecute: return "Execute"; + case sf::Keyboard::sHelp: return "Help"; + case sf::Keyboard::sMenu: return "Menu"; + case sf::Keyboard::sSelect: return "Select"; + case sf::Keyboard::sStop: return "Stop"; + case sf::Keyboard::sAgain: return "Again"; + case sf::Keyboard::sUndo: return "Undo"; + case sf::Keyboard::sCut: return "Cut"; + case sf::Keyboard::sCopy: return "Copy"; + case sf::Keyboard::sPaste: return "Paste"; + case sf::Keyboard::sFind: return "Find"; + case sf::Keyboard::sMute: return "Mute"; + case sf::Keyboard::sVolumeUp: return "Volume Up"; + case sf::Keyboard::sVolumeDown: return "Volume Down"; + + case sf::Keyboard::sLControl: return "Control (Left)"; + case sf::Keyboard::sLShift: return "Shift (Left)"; + case sf::Keyboard::sLAlt: return "Alt (Left)"; + case sf::Keyboard::sLSystem: return "Command (Left)"; + case sf::Keyboard::sRControl: return "Control (Right)"; + case sf::Keyboard::sRShift: return "Shift (Right)"; + case sf::Keyboard::sRAlt: return "Alt (Right)"; + case sf::Keyboard::sRSystem: return "Command (Right)"; + + default: return "Unknown Scancode"; // no guess good enough possible. + } +} + + //////////////////////////////////////////////////////////// HIDInputManager::HIDInputManager() : -m_isValid(true), -m_layoutData(0), -m_layout(0), m_manager(0) { - // Get the current keyboard layout - TISInputSourceRef tis = TISCopyCurrentKeyboardLayoutInputSource(); - m_layoutData = (CFDataRef)TISGetInputSourceProperty(tis, - kTISPropertyUnicodeKeyLayoutData); - - if (m_layoutData == 0) - { - sf::err() << "Cannot get the keyboard layout" << std::endl; - freeUp(); - return; - } - - // Keep a reference for ourself - CFRetain(m_layoutData); - m_layout = (UCKeyboardLayout *)CFDataGetBytePtr(m_layoutData); - - // The TIS is no more needed - CFRelease(tis); - // Create an HID Manager reference m_manager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone); - - // Open the HID Manager reference IOReturn openStatus = IOHIDManagerOpen(m_manager, kIOHIDOptionsTypeNone); if (openStatus != kIOReturnSuccess) @@ -130,8 +228,8 @@ m_manager(0) return; } - // Initialize the keyboard initializeKeyboard(); + buildMappings(); } @@ -146,31 +244,23 @@ void HIDInputManager::initializeKeyboard() { //////////////////////////////////////////////////////////// // The purpose of this function is to initialize m_keys so we can get - // the associate IOHIDElementRef with a sf::Keyboard::Key in ~constant~ time. + // the associate IOHIDElementRef with a sf::Keyboard::Scancode + // in approximately constant time. // Get only keyboards - CFSetRef keyboards = copyDevices(kHIDPage_GenericDesktop, kHIDUsage_GD_Keyboard); - if (keyboards == NULL) + CFSetRef underlying = copyDevices(kHIDPage_GenericDesktop, kHIDUsage_GD_Keyboard); + if (underlying == NULL) { sf::err() << "No keyboard detected by the HID manager!" << std::endl; freeUp(); return; } - CFIndex keyboardCount = CFSetGetCount(keyboards); // >= 1 (asserted by copyDevices) + NSSet* keyboards = static_cast(underlying); // Toll-Free Bridge + for (id keyboard in keyboards) + loadKeyboard(static_cast(keyboard)); - // Get an iterable array - CFTypeRef devicesArray[keyboardCount]; - CFSetGetValues(keyboards, devicesArray); - - for (CFIndex i = 0; i < keyboardCount; ++i) - { - IOHIDDeviceRef keyboard = (IOHIDDeviceRef)devicesArray[i]; - loadKeyboard(keyboard); - } - - // Release unused stuff - CFRelease(keyboards); + CFRelease(underlying); //////////////////////////////////////////////////////////// // At this point m_keys is filled with as many IOHIDElementRef as possible @@ -180,142 +270,105 @@ void HIDInputManager::initializeKeyboard() //////////////////////////////////////////////////////////// void HIDInputManager::loadKeyboard(IOHIDDeviceRef keyboard) { - CFArrayRef keys = IOHIDDeviceCopyMatchingElements(keyboard, - NULL, - kIOHIDOptionsTypeNone); - if (keys == NULL) + CFArrayRef underlying = IOHIDDeviceCopyMatchingElements(keyboard, NULL, kIOHIDOptionsTypeNone); + if ((underlying == NULL) || (CFArrayGetCount(underlying) == 0)) { - sf::err() << "We got a keyboard without any keys (1)" << std::endl; + sf::err() << "We got a keyboard without any keys." << std::endl; return; } - // How many elements are there? - CFIndex keysCount = CFArrayGetCount(keys); - - if (keysCount == 0) + NSArray* keys = static_cast(underlying); // Toll-Free Bridge + for (id key in keys) { - sf::err() << "We got a keyboard without any keys (2)" << std::endl; - CFRelease(keys); - return; + IOHIDElementRef elem = static_cast(key); + if (IOHIDElementGetUsagePage(elem) == kHIDPage_KeyboardOrKeypad) + loadKey(elem); } - // Go through all connected elements. - for (CFIndex i = 0; i < keysCount; ++i) - { - IOHIDElementRef aKey = (IOHIDElementRef) CFArrayGetValueAtIndex(keys, i); - - // Skip non-matching keys elements - if (IOHIDElementGetUsagePage(aKey) != kHIDPage_KeyboardOrKeypad) - continue; - - loadKey(aKey); - } - - // Release unused stuff - CFRelease(keys); + CFRelease(underlying); } //////////////////////////////////////////////////////////// void HIDInputManager::loadKey(IOHIDElementRef key) { - // Get its virtual code - UInt32 usageCode = IOHIDElementGetUsage(key); - UInt8 virtualCode = usageToVirtualCode(usageCode); - - if (virtualCode == 0xff) - return; // no corresponding virtual code -> skip - - // Now translate the virtual code to Unicode according to - // the current keyboard layout - - UInt32 deadKeyState = 0; - // Unicode string length is usually less or equal to 4 - UniCharCount maxStringLength = 4; - UniCharCount actualStringLength = 0; - UniChar unicodeString[maxStringLength]; - - OSStatus error; - - error = UCKeyTranslate(m_layout, // current layout - virtualCode, // our key - kUCKeyActionDown, // or kUCKeyActionUp ? - 0x100, // no modifiers - LMGetKbdType(), // keyboard's type - kUCKeyTranslateNoDeadKeysBit,// some sort of option - &deadKeyState, // unused stuff - maxStringLength, // our memory limit - &actualStringLength, // length of what we get - unicodeString); // what we get - - if (error == noErr) + UInt32 usage = IOHIDElementGetUsage(key); + sf::Keyboard::Scancode code = usageToScancode(usage); + if (code != Keyboard::sUnknown) { - // Translation went fine + CFRetain(key); + m_keys[code].push_back(key); + } +} - // The corresponding SFML key code - Keyboard::Key code = Keyboard::Unknown; // KeyCound means 'none' - // First we look if the key down is from a list of characters - // that depend on keyboard localization - if (actualStringLength > 0) - code = localizedKeys(unicodeString[0]); +//////////////////////////////////////////////////////////// +void HIDInputManager::buildMappings() +{ + // Reset the mappings + for (int i = 0; i < Keyboard::KeyCount; ++i) + m_mapping[i] = Keyboard::sUnknown; + for (int i = 0; i < Keyboard::sCodeCount; ++i) + m_gnippam[i] = Keyboard::Unknown; - // The key is not a localized one so we try to find a - // corresponding code through virtual key code - if (code == Keyboard::Unknown) - code = nonLocalizedKeys(virtualCode); + // Get the current keyboard layout + TISInputSourceRef tis = TISCopyCurrentKeyboardLayoutInputSource(); + CFDataRef layoutData = (CFDataRef)TISGetInputSourceProperty(tis, kTISPropertyUnicodeKeyLayoutData); - // A code was found, wonderful! - if (code != Keyboard::Unknown) + if (layoutData == 0) + { + sf::err() << "Cannot get the keyboard layout\n"; + CFRelease(tis); + return; + } + + UCKeyboardLayout* layout = (UCKeyboardLayout*)CFDataGetBytePtr(layoutData); + + // For each scancode having a IOHIDElement, we translate the corresponding + // virtual code to a localized Key. + for (int i = 0; i < Keyboard::sCodeCount; ++i) + { + Keyboard::Scancode scan = static_cast(i); + UInt8 virtualCode = scanToVirtualCode(scan); + + if (virtualCode == 0xff) continue; + + // Unicode string length is usually less or equal to 4 + UniCharCount const MAX_LENGTH = 4; + UniChar string[MAX_LENGTH]; + UniCharCount length = 0; + UInt32 deadKeyState = 0; // unused value + UInt32 const modifiers = 0x100; // no modifiers + + // Use current layout for translation + OSStatus error = UCKeyTranslate( + layout, virtualCode, kUCKeyActionDown, modifiers, LMGetKbdType(), + kUCKeyTranslateNoDeadKeysBit, &deadKeyState, MAX_LENGTH, &length, string + ); + + if (error != noErr) { - // Ok, everything went fine. Now we have a unique - // corresponding sf::Keyboard::Key to one IOHIDElementRef - m_keys[code].push_back(key); - - // And don't forget to keep the reference alive for our usage - CFRetain(m_keys[code].back()); + sf::err() << "Cannot translate the virtual key code, error: " << error << "\n"; + continue; } - //////////////////////////////////////////////////////////// - // These are known to be unbound: - // Supposed Virtual | HID | Supposed Key - // =============================================== - // 0x1b | 0x2d | Hyphen - // 0x39 | 0x39 | CapsLock - // 0x47 | 0x53 | NumLock - // 0x6e | 0x65 | Application - // 0x4c | 0x77 | Select + Keyboard::Key code = (length > 0) ? localizedKey(string[0]) : Keyboard::Unknown; + if (code == Keyboard::Unknown) code = localizedKeyFallback(scan); - //if (code == Keyboard::Unknown) { // The key is unknown. - // sf::err() << "This is an unknown key. Virtual key code is 0x" - // << std::hex - // << (UInt32)virtualCode - // << " and HID usage code is 0x" - // << usageCode - // << std::dec - // << "." - // << std::endl; - //} + if (code == Keyboard::Unknown) continue; - } /* if (error == noErr) */ - else - { - sf::err() << "Cannot translate the virtual key code, error: " - << error - << std::endl; + // Register the bi-mapping + m_mapping[code] = scan; + m_gnippam[scan] = code; } + + CFRelease(tis); } //////////////////////////////////////////////////////////// void HIDInputManager::freeUp() { - m_isValid = false; - - if (m_layoutData != 0) - CFRelease(m_layoutData); - m_layoutData = 0; - // Do not release m_layout! It is owned by m_layoutData. if (m_manager != 0) CFRelease(m_manager); m_manager = 0; @@ -339,32 +392,28 @@ CFSetRef HIDInputManager::copyDevices(UInt32 page, UInt32 usage) IOHIDManagerSetDeviceMatching(m_manager, mask); CFRelease(mask); - mask = 0; + mask = NULL; CFSetRef devices = IOHIDManagerCopyDevices(m_manager); if (devices == NULL) return NULL; // Is there at least one device? - CFIndex deviceCount = CFSetGetCount(devices); - if (deviceCount < 1) + if (CFSetGetCount(devices) < 1) { CFRelease(devices); return NULL; } - + return devices; } + +//////////////////////////////////////////////////////////// bool HIDInputManager::isPressed(IOHIDElements& elements) { - if (!m_isValid) - return false; - - // state = true if at least one corresponding HID button is pressed - bool state = false; - - for (IOHIDElements::iterator it = elements.begin(); it != elements.end(); /* noop */) + bool pressed = false; + for (IOHIDElements::iterator it = elements.begin(); it != elements.end() && !pressed; /* noop */) { IOHIDValueRef value = 0; @@ -373,493 +422,886 @@ bool HIDInputManager::isPressed(IOHIDElements& elements) if (!value) { - // This means some kind of error / disconnection so we remove this - // element from our buttons + // This means some kind of error / disconnection so we remove this element from our database. CFRelease(*it); it = elements.erase(it); } - else if (IOHIDValueGetIntegerValue(value) == 1) - { - // This means the button is pressed - state = true; - break; // Stop here - } else { - // This means the button is released + pressed = (IOHIDValueGetIntegerValue(value) == 1); ++it; } + } - return state; + return pressed; } //////////////////////////////////////////////////////////// -UInt8 HIDInputManager::usageToVirtualCode(UInt32 usage) +sf::Keyboard::Scancode HIDInputManager::usageToScancode(UInt32 usage) { - // Some usage key doesn't have any corresponding virtual - // code or it was not found (return 0xff). switch (usage) { - case kHIDUsage_KeyboardErrorRollOver: return 0xff; - case kHIDUsage_KeyboardPOSTFail: return 0xff; - case kHIDUsage_KeyboardErrorUndefined: return 0xff; + case kHIDUsage_KeyboardErrorRollOver: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardPOSTFail: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardErrorUndefined: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardA: return 0x00; - case kHIDUsage_KeyboardB: return 0x0b; - case kHIDUsage_KeyboardC: return 0x08; - case kHIDUsage_KeyboardD: return 0x02; - case kHIDUsage_KeyboardE: return 0x0e; - case kHIDUsage_KeyboardF: return 0x03; - case kHIDUsage_KeyboardG: return 0x05; - case kHIDUsage_KeyboardH: return 0x04; - case kHIDUsage_KeyboardI: return 0x22; - case kHIDUsage_KeyboardJ: return 0x26; - case kHIDUsage_KeyboardK: return 0x28; - case kHIDUsage_KeyboardL: return 0x25; - case kHIDUsage_KeyboardM: return 0x2e; - case kHIDUsage_KeyboardN: return 0x2d; - case kHIDUsage_KeyboardO: return 0x1f; - case kHIDUsage_KeyboardP: return 0x23; - case kHIDUsage_KeyboardQ: return 0x0c; - case kHIDUsage_KeyboardR: return 0x0f; - case kHIDUsage_KeyboardS: return 0x01; - case kHIDUsage_KeyboardT: return 0x11; - case kHIDUsage_KeyboardU: return 0x20; - case kHIDUsage_KeyboardV: return 0x09; - case kHIDUsage_KeyboardW: return 0x0d; - case kHIDUsage_KeyboardX: return 0x07; - case kHIDUsage_KeyboardY: return 0x10; - case kHIDUsage_KeyboardZ: return 0x06; + case kHIDUsage_KeyboardA: return sf::Keyboard::sA; + case kHIDUsage_KeyboardB: return sf::Keyboard::sB; + case kHIDUsage_KeyboardC: return sf::Keyboard::sC; + case kHIDUsage_KeyboardD: return sf::Keyboard::sD; + case kHIDUsage_KeyboardE: return sf::Keyboard::sE; + case kHIDUsage_KeyboardF: return sf::Keyboard::sF; + case kHIDUsage_KeyboardG: return sf::Keyboard::sG; + case kHIDUsage_KeyboardH: return sf::Keyboard::sH; + case kHIDUsage_KeyboardI: return sf::Keyboard::sI; + case kHIDUsage_KeyboardJ: return sf::Keyboard::sJ; + case kHIDUsage_KeyboardK: return sf::Keyboard::sK; + case kHIDUsage_KeyboardL: return sf::Keyboard::sL; + case kHIDUsage_KeyboardM: return sf::Keyboard::sM; + case kHIDUsage_KeyboardN: return sf::Keyboard::sN; + case kHIDUsage_KeyboardO: return sf::Keyboard::sO; + case kHIDUsage_KeyboardP: return sf::Keyboard::sP; + case kHIDUsage_KeyboardQ: return sf::Keyboard::sQ; + case kHIDUsage_KeyboardR: return sf::Keyboard::sR; + case kHIDUsage_KeyboardS: return sf::Keyboard::sS; + case kHIDUsage_KeyboardT: return sf::Keyboard::sT; + case kHIDUsage_KeyboardU: return sf::Keyboard::sU; + case kHIDUsage_KeyboardV: return sf::Keyboard::sV; + case kHIDUsage_KeyboardW: return sf::Keyboard::sW; + case kHIDUsage_KeyboardX: return sf::Keyboard::sX; + case kHIDUsage_KeyboardY: return sf::Keyboard::sY; + case kHIDUsage_KeyboardZ: return sf::Keyboard::sZ; - case kHIDUsage_Keyboard1: return 0x12; - case kHIDUsage_Keyboard2: return 0x13; - case kHIDUsage_Keyboard3: return 0x14; - case kHIDUsage_Keyboard4: return 0x15; - case kHIDUsage_Keyboard5: return 0x17; - case kHIDUsage_Keyboard6: return 0x16; - case kHIDUsage_Keyboard7: return 0x1a; - case kHIDUsage_Keyboard8: return 0x1c; - case kHIDUsage_Keyboard9: return 0x19; - case kHIDUsage_Keyboard0: return 0x1d; + case kHIDUsage_Keyboard1: return sf::Keyboard::sNum1; + case kHIDUsage_Keyboard2: return sf::Keyboard::sNum2; + case kHIDUsage_Keyboard3: return sf::Keyboard::sNum3; + case kHIDUsage_Keyboard4: return sf::Keyboard::sNum4; + case kHIDUsage_Keyboard5: return sf::Keyboard::sNum5; + case kHIDUsage_Keyboard6: return sf::Keyboard::sNum6; + case kHIDUsage_Keyboard7: return sf::Keyboard::sNum7; + case kHIDUsage_Keyboard8: return sf::Keyboard::sNum8; + case kHIDUsage_Keyboard9: return sf::Keyboard::sNum9; + case kHIDUsage_Keyboard0: return sf::Keyboard::sNum0; - case kHIDUsage_KeyboardReturnOrEnter: return 0x24; - case kHIDUsage_KeyboardEscape: return 0x35; - case kHIDUsage_KeyboardDeleteOrBackspace: return 0x33; - case kHIDUsage_KeyboardTab: return 0x30; - case kHIDUsage_KeyboardSpacebar: return 0x31; - case kHIDUsage_KeyboardHyphen: return 0x1b; - case kHIDUsage_KeyboardEqualSign: return 0x18; - case kHIDUsage_KeyboardOpenBracket: return 0x21; - case kHIDUsage_KeyboardCloseBracket: return 0x1e; - case kHIDUsage_KeyboardBackslash: return 0x2a; - case kHIDUsage_KeyboardNonUSPound: return 0xff; - case kHIDUsage_KeyboardSemicolon: return 0x29; - case kHIDUsage_KeyboardQuote: return 0x27; - case kHIDUsage_KeyboardGraveAccentAndTilde: return 0x32; - case kHIDUsage_KeyboardComma: return 0x2b; - case kHIDUsage_KeyboardPeriod: return 0x2F; - case kHIDUsage_KeyboardSlash: return 0x2c; - case kHIDUsage_KeyboardCapsLock: return 0x39; + case kHIDUsage_KeyboardReturnOrEnter: return sf::Keyboard::sEnter; + case kHIDUsage_KeyboardEscape: return sf::Keyboard::sEscape; + case kHIDUsage_KeyboardDeleteOrBackspace: return sf::Keyboard::sBackspace; + case kHIDUsage_KeyboardTab: return sf::Keyboard::sTab; + case kHIDUsage_KeyboardSpacebar: return sf::Keyboard::sSpace; + case kHIDUsage_KeyboardHyphen: return sf::Keyboard::sHyphen; + case kHIDUsage_KeyboardEqualSign: return sf::Keyboard::sEquals; + case kHIDUsage_KeyboardOpenBracket: return sf::Keyboard::sLBracket; + case kHIDUsage_KeyboardCloseBracket: return sf::Keyboard::sRBracket; + case kHIDUsage_KeyboardBackslash: return sf::Keyboard::sBackslash; + case kHIDUsage_KeyboardNonUSPound: return sf::Keyboard::sDash; + case kHIDUsage_KeyboardSemicolon: return sf::Keyboard::sSemicolon; + case kHIDUsage_KeyboardQuote: return sf::Keyboard::sQuote; + case kHIDUsage_KeyboardGraveAccentAndTilde: return sf::Keyboard::sGraveAccent; + case kHIDUsage_KeyboardComma: return sf::Keyboard::sComma; + case kHIDUsage_KeyboardPeriod: return sf::Keyboard::sPeriod; + case kHIDUsage_KeyboardSlash: return sf::Keyboard::sForwardSlash; + case kHIDUsage_KeyboardCapsLock: return sf::Keyboard::sCapsLock; - case kHIDUsage_KeyboardF1: return 0x7a; - case kHIDUsage_KeyboardF2: return 0x78; - case kHIDUsage_KeyboardF3: return 0x63; - case kHIDUsage_KeyboardF4: return 0x76; - case kHIDUsage_KeyboardF5: return 0x60; - case kHIDUsage_KeyboardF6: return 0x61; - case kHIDUsage_KeyboardF7: return 0x62; - case kHIDUsage_KeyboardF8: return 0x64; - case kHIDUsage_KeyboardF9: return 0x65; - case kHIDUsage_KeyboardF10: return 0x6d; - case kHIDUsage_KeyboardF11: return 0x67; - case kHIDUsage_KeyboardF12: return 0x6f; + case kHIDUsage_KeyboardF1: return sf::Keyboard::sF1; + case kHIDUsage_KeyboardF2: return sf::Keyboard::sF2; + case kHIDUsage_KeyboardF3: return sf::Keyboard::sF3; + case kHIDUsage_KeyboardF4: return sf::Keyboard::sF4; + case kHIDUsage_KeyboardF5: return sf::Keyboard::sF5; + case kHIDUsage_KeyboardF6: return sf::Keyboard::sF6; + case kHIDUsage_KeyboardF7: return sf::Keyboard::sF7; + case kHIDUsage_KeyboardF8: return sf::Keyboard::sF8; + case kHIDUsage_KeyboardF9: return sf::Keyboard::sF9; + case kHIDUsage_KeyboardF10: return sf::Keyboard::sF10; + case kHIDUsage_KeyboardF11: return sf::Keyboard::sF11; + case kHIDUsage_KeyboardF12: return sf::Keyboard::sF12; - case kHIDUsage_KeyboardPrintScreen: return 0xff; - case kHIDUsage_KeyboardScrollLock: return 0xff; - case kHIDUsage_KeyboardPause: return 0xff; - case kHIDUsage_KeyboardInsert: return 0x72; - case kHIDUsage_KeyboardHome: return 0x73; - case kHIDUsage_KeyboardPageUp: return 0x74; - case kHIDUsage_KeyboardDeleteForward: return 0x75; - case kHIDUsage_KeyboardEnd: return 0x77; - case kHIDUsage_KeyboardPageDown: return 0x79; + case kHIDUsage_KeyboardPrintScreen: return sf::Keyboard::sPrintScreen; + case kHIDUsage_KeyboardScrollLock: return sf::Keyboard::sScrollLock; + case kHIDUsage_KeyboardPause: return sf::Keyboard::sPause; + case kHIDUsage_KeyboardInsert: return sf::Keyboard::sInsert; + case kHIDUsage_KeyboardHome: return sf::Keyboard::sHome; + case kHIDUsage_KeyboardPageUp: return sf::Keyboard::sPageUp; + case kHIDUsage_KeyboardDeleteForward: return sf::Keyboard::sDelete; + case kHIDUsage_KeyboardEnd: return sf::Keyboard::sEnd; + case kHIDUsage_KeyboardPageDown: return sf::Keyboard::sPageDown; - case kHIDUsage_KeyboardRightArrow: return 0x7c; - case kHIDUsage_KeyboardLeftArrow: return 0x7b; - case kHIDUsage_KeyboardDownArrow: return 0x7d; - case kHIDUsage_KeyboardUpArrow: return 0x7e; + case kHIDUsage_KeyboardRightArrow: return sf::Keyboard::sRight; + case kHIDUsage_KeyboardLeftArrow: return sf::Keyboard::sLeft; + case kHIDUsage_KeyboardDownArrow: return sf::Keyboard::sDown; + case kHIDUsage_KeyboardUpArrow: return sf::Keyboard::sUp; - case kHIDUsage_KeypadNumLock: return 0x47; - case kHIDUsage_KeypadSlash: return 0x4b; - case kHIDUsage_KeypadAsterisk: return 0x43; - case kHIDUsage_KeypadHyphen: return 0x4e; - case kHIDUsage_KeypadPlus: return 0x45; - case kHIDUsage_KeypadEnter: return 0x4c; + case kHIDUsage_KeypadNumLock: return sf::Keyboard::sNumLock; + case kHIDUsage_KeypadSlash: return sf::Keyboard::sDivide; + case kHIDUsage_KeypadAsterisk: return sf::Keyboard::sMultiply; + case kHIDUsage_KeypadHyphen: return sf::Keyboard::sMinus; + case kHIDUsage_KeypadPlus: return sf::Keyboard::sPlus; + case kHIDUsage_KeypadEnter: return sf::Keyboard::sReturn; - case kHIDUsage_Keypad1: return 0x53; - case kHIDUsage_Keypad2: return 0x54; - case kHIDUsage_Keypad3: return 0x55; - case kHIDUsage_Keypad4: return 0x56; - case kHIDUsage_Keypad5: return 0x57; - case kHIDUsage_Keypad6: return 0x58; - case kHIDUsage_Keypad7: return 0x59; - case kHIDUsage_Keypad8: return 0x5b; - case kHIDUsage_Keypad9: return 0x5c; - case kHIDUsage_Keypad0: return 0x52; + case kHIDUsage_Keypad1: return sf::Keyboard::sNumpad1; + case kHIDUsage_Keypad2: return sf::Keyboard::sNumpad2; + case kHIDUsage_Keypad3: return sf::Keyboard::sNumpad3; + case kHIDUsage_Keypad4: return sf::Keyboard::sNumpad4; + case kHIDUsage_Keypad5: return sf::Keyboard::sNumpad5; + case kHIDUsage_Keypad6: return sf::Keyboard::sNumpad6; + case kHIDUsage_Keypad7: return sf::Keyboard::sNumpad7; + case kHIDUsage_Keypad8: return sf::Keyboard::sNumpad8; + case kHIDUsage_Keypad9: return sf::Keyboard::sNumpad9; + case kHIDUsage_Keypad0: return sf::Keyboard::sNumpad0; - case kHIDUsage_KeypadPeriod: return 0x41; - case kHIDUsage_KeyboardNonUSBackslash: return 0xff; - case kHIDUsage_KeyboardApplication: return 0x6e; - case kHIDUsage_KeyboardPower: return 0xff; - case kHIDUsage_KeypadEqualSign: return 0x51; + case kHIDUsage_KeypadPeriod: return sf::Keyboard::sDecimal; + case kHIDUsage_KeyboardNonUSBackslash: return sf::Keyboard::sReverseSolidus; + case kHIDUsage_KeyboardApplication: return sf::Keyboard::sApplication; + case kHIDUsage_KeyboardPower: return sf::Keyboard::sUnknown; + case kHIDUsage_KeypadEqualSign: return sf::Keyboard::sPadEquals; - case kHIDUsage_KeyboardF13: return 0x69; - case kHIDUsage_KeyboardF14: return 0x6b; - case kHIDUsage_KeyboardF15: return 0x71; - case kHIDUsage_KeyboardF16: return 0xff; - case kHIDUsage_KeyboardF17: return 0xff; - case kHIDUsage_KeyboardF18: return 0xff; - case kHIDUsage_KeyboardF19: return 0xff; - case kHIDUsage_KeyboardF20: return 0xff; - case kHIDUsage_KeyboardF21: return 0xff; - case kHIDUsage_KeyboardF22: return 0xff; - case kHIDUsage_KeyboardF23: return 0xff; - case kHIDUsage_KeyboardF24: return 0xff; + case kHIDUsage_KeyboardF13: return sf::Keyboard::sF13; + case kHIDUsage_KeyboardF14: return sf::Keyboard::sF14; + case kHIDUsage_KeyboardF15: return sf::Keyboard::sF15; + case kHIDUsage_KeyboardF16: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardF17: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardF18: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardF19: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardF20: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardF21: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardF22: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardF23: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardF24: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardExecute: return 0xff; - case kHIDUsage_KeyboardHelp: return 0xff; - case kHIDUsage_KeyboardMenu: return 0x7F; - case kHIDUsage_KeyboardSelect: return 0x4c; - case kHIDUsage_KeyboardStop: return 0xff; - case kHIDUsage_KeyboardAgain: return 0xff; - case kHIDUsage_KeyboardUndo: return 0xff; - case kHIDUsage_KeyboardCut: return 0xff; - case kHIDUsage_KeyboardCopy: return 0xff; - case kHIDUsage_KeyboardPaste: return 0xff; - case kHIDUsage_KeyboardFind: return 0xff; + case kHIDUsage_KeyboardExecute: return sf::Keyboard::sExecute; + case kHIDUsage_KeyboardHelp: return sf::Keyboard::sHelp; + case kHIDUsage_KeyboardMenu: return sf::Keyboard::sMenu; + case kHIDUsage_KeyboardSelect: return sf::Keyboard::sSelect; + case kHIDUsage_KeyboardStop: return sf::Keyboard::sStop; + case kHIDUsage_KeyboardAgain: return sf::Keyboard::sAgain; + case kHIDUsage_KeyboardUndo: return sf::Keyboard::sUndo; + case kHIDUsage_KeyboardCut: return sf::Keyboard::sCut; + case kHIDUsage_KeyboardCopy: return sf::Keyboard::sCopy; + case kHIDUsage_KeyboardPaste: return sf::Keyboard::sPaste; + case kHIDUsage_KeyboardFind: return sf::Keyboard::sFind; - case kHIDUsage_KeyboardMute: return 0xff; - case kHIDUsage_KeyboardVolumeUp: return 0xff; - case kHIDUsage_KeyboardVolumeDown: return 0xff; + case kHIDUsage_KeyboardMute: return sf::Keyboard::sMute; + case kHIDUsage_KeyboardVolumeUp: return sf::Keyboard::sVolumeUp; + case kHIDUsage_KeyboardVolumeDown: return sf::Keyboard::sVolumeDown; - case kHIDUsage_KeyboardLockingCapsLock: return 0xff; - case kHIDUsage_KeyboardLockingNumLock: return 0xff; - case kHIDUsage_KeyboardLockingScrollLock: return 0xff; + case kHIDUsage_KeyboardLockingCapsLock: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardLockingNumLock: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardLockingScrollLock: return sf::Keyboard::sUnknown; - case kHIDUsage_KeypadComma: return 0xff; - case kHIDUsage_KeypadEqualSignAS400: return 0xff; - case kHIDUsage_KeyboardInternational1: return 0xff; - case kHIDUsage_KeyboardInternational2: return 0xff; - case kHIDUsage_KeyboardInternational3: return 0xff; - case kHIDUsage_KeyboardInternational4: return 0xff; - case kHIDUsage_KeyboardInternational5: return 0xff; - case kHIDUsage_KeyboardInternational6: return 0xff; - case kHIDUsage_KeyboardInternational7: return 0xff; - case kHIDUsage_KeyboardInternational8: return 0xff; - case kHIDUsage_KeyboardInternational9: return 0xff; + case kHIDUsage_KeypadComma: return sf::Keyboard::sUnknown; + case kHIDUsage_KeypadEqualSignAS400: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardInternational1: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardInternational2: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardInternational3: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardInternational4: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardInternational5: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardInternational6: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardInternational7: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardInternational8: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardInternational9: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardLANG1: return 0xff; - case kHIDUsage_KeyboardLANG2: return 0xff; - case kHIDUsage_KeyboardLANG3: return 0xff; - case kHIDUsage_KeyboardLANG4: return 0xff; - case kHIDUsage_KeyboardLANG5: return 0xff; - case kHIDUsage_KeyboardLANG6: return 0xff; - case kHIDUsage_KeyboardLANG7: return 0xff; - case kHIDUsage_KeyboardLANG8: return 0xff; - case kHIDUsage_KeyboardLANG9: return 0xff; + case kHIDUsage_KeyboardLANG1: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardLANG2: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardLANG3: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardLANG4: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardLANG5: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardLANG6: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardLANG7: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardLANG8: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardLANG9: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardAlternateErase: return 0xff; - case kHIDUsage_KeyboardSysReqOrAttention: return 0xff; - case kHIDUsage_KeyboardCancel: return 0xff; - case kHIDUsage_KeyboardClear: return 0xff; - case kHIDUsage_KeyboardPrior: return 0xff; - case kHIDUsage_KeyboardReturn: return 0xff; - case kHIDUsage_KeyboardSeparator: return 0xff; - case kHIDUsage_KeyboardOut: return 0xff; - case kHIDUsage_KeyboardOper: return 0xff; - case kHIDUsage_KeyboardClearOrAgain: return 0xff; - case kHIDUsage_KeyboardCrSelOrProps: return 0xff; - case kHIDUsage_KeyboardExSel: return 0xff; + case kHIDUsage_KeyboardAlternateErase: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardSysReqOrAttention: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardCancel: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardClear: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardPrior: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardReturn: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardSeparator: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardOut: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardOper: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardClearOrAgain: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardCrSelOrProps: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardExSel: return sf::Keyboard::sUnknown; /* 0xa5-0xdf Reserved */ - case kHIDUsage_KeyboardLeftControl: return 0x3b; - case kHIDUsage_KeyboardLeftShift: return 0x38; - case kHIDUsage_KeyboardLeftAlt: return 0x3a; - case kHIDUsage_KeyboardLeftGUI: return 0x37; - case kHIDUsage_KeyboardRightControl: return 0x3e; - case kHIDUsage_KeyboardRightShift: return 0x3c; - case kHIDUsage_KeyboardRightAlt: return 0x3d; - case kHIDUsage_KeyboardRightGUI: return 0x36; + case kHIDUsage_KeyboardLeftControl: return sf::Keyboard::sLControl; + case kHIDUsage_KeyboardLeftShift: return sf::Keyboard::sLShift; + case kHIDUsage_KeyboardLeftAlt: return sf::Keyboard::sLAlt; + case kHIDUsage_KeyboardLeftGUI: return sf::Keyboard::sLSystem; + case kHIDUsage_KeyboardRightControl: return sf::Keyboard::sRControl; + case kHIDUsage_KeyboardRightShift: return sf::Keyboard::sRShift; + case kHIDUsage_KeyboardRightAlt: return sf::Keyboard::sRAlt; + case kHIDUsage_KeyboardRightGUI: return sf::Keyboard::sRSystem; /* 0xe8-0xffff Reserved */ - case kHIDUsage_Keyboard_Reserved: return 0xff; - default: return 0xff; + case kHIDUsage_Keyboard_Reserved: return sf::Keyboard::sUnknown; + default: return sf::Keyboard::sUnknown; } } //////////////////////////////////////////////////////// -Keyboard::Key HIDInputManager::localizedKeys(UniChar ch) +Keyboard::Key HIDInputManager::localizedKey(UniChar ch) { + // Apple is using the private range 0xE000 - 0xF8FF for special keys. + // Otherwise one can refer to the usual Unicode table. switch (ch) { - case 'a': - case 'A': return sf::Keyboard::A; + case 0x41: return sf::Keyboard::A; // uppercase A + case 0x42: return sf::Keyboard::B; + case 0x43: return sf::Keyboard::C; + case 0x44: return sf::Keyboard::D; + case 0x45: return sf::Keyboard::E; + case 0x46: return sf::Keyboard::F; + case 0x47: return sf::Keyboard::G; + case 0x48: return sf::Keyboard::H; + case 0x49: return sf::Keyboard::I; + case 0x4a: return sf::Keyboard::J; + case 0x4b: return sf::Keyboard::K; + case 0x4c: return sf::Keyboard::L; + case 0x4d: return sf::Keyboard::M; + case 0x4e: return sf::Keyboard::N; + case 0x4f: return sf::Keyboard::O; + case 0x50: return sf::Keyboard::P; + case 0x51: return sf::Keyboard::Q; + case 0x52: return sf::Keyboard::R; + case 0x53: return sf::Keyboard::S; + case 0x54: return sf::Keyboard::T; + case 0x55: return sf::Keyboard::U; + case 0x56: return sf::Keyboard::V; + case 0x57: return sf::Keyboard::W; + case 0x58: return sf::Keyboard::X; + case 0x59: return sf::Keyboard::Y; - case 'b': - case 'B': return sf::Keyboard::B; + case 0x5a: return sf::Keyboard::Z; // lowercase A + case 0x61: return sf::Keyboard::A; + case 0x62: return sf::Keyboard::B; + case 0x63: return sf::Keyboard::C; + case 0x64: return sf::Keyboard::D; + case 0x65: return sf::Keyboard::E; + case 0x66: return sf::Keyboard::F; + case 0x67: return sf::Keyboard::G; + case 0x68: return sf::Keyboard::H; + case 0x69: return sf::Keyboard::I; + case 0x6a: return sf::Keyboard::J; + case 0x6b: return sf::Keyboard::K; + case 0x6c: return sf::Keyboard::L; + case 0x6d: return sf::Keyboard::M; + case 0x6e: return sf::Keyboard::N; + case 0x6f: return sf::Keyboard::O; + case 0x70: return sf::Keyboard::P; + case 0x71: return sf::Keyboard::Q; + case 0x72: return sf::Keyboard::R; + case 0x73: return sf::Keyboard::S; + case 0x74: return sf::Keyboard::T; + case 0x75: return sf::Keyboard::U; + case 0x76: return sf::Keyboard::V; + case 0x77: return sf::Keyboard::W; + case 0x78: return sf::Keyboard::X; + case 0x79: return sf::Keyboard::Y; + case 0x7a: return sf::Keyboard::Z; - case 'c': - case 'C': return sf::Keyboard::C; + case 0x30: return sf::Keyboard::Num0; + case 0x31: return sf::Keyboard::Num1; + case 0x32: return sf::Keyboard::Num2; + case 0x33: return sf::Keyboard::Num3; + case 0x34: return sf::Keyboard::Num4; + case 0x35: return sf::Keyboard::Num5; + case 0x36: return sf::Keyboard::Num6; + case 0x37: return sf::Keyboard::Num7; + case 0x38: return sf::Keyboard::Num8; + case 0x39: return sf::Keyboard::Num9; - case 'd': - case 'D': return sf::Keyboard::D; + case 0x1b: return sf::Keyboard::Escape; - case 'e': - case 'E': return sf::Keyboard::E; + /* Those are not represented using Unicode. + * case 0x: return sf::Keyboard::LControl; + * case 0x: return sf::Keyboard::LShift; + * case 0x: return sf::Keyboard::LAlt; + * case 0x: return sf::Keyboard::LSystem; + * case 0x: return sf::Keyboard::RControl; + * case 0x: return sf::Keyboard::RShift; + * case 0x: return sf::Keyboard::RAlt; + * case 0x: return sf::Keyboard::RSystem; + */ - case 'f': - case 'F': return sf::Keyboard::F; + case NSMenuFunctionKey: return sf::Keyboard::Menu; - case 'g': - case 'G': return sf::Keyboard::G; + case 0x5b: return sf::Keyboard::LBracket; + case 0x5d: return sf::Keyboard::RBracket; + case 0x3b: return sf::Keyboard::SemiColon; + case 0x2c: return sf::Keyboard::Comma; + case 0x2e: return sf::Keyboard::Period; + case 0x27: return sf::Keyboard::Quote; + case 0x2044: return sf::Keyboard::Slash; // 0x2f is Divide + case 0x5c: return sf::Keyboard::BackSlash; + case 0x7e: return sf::Keyboard::Tilde; + case 0x3d: return sf::Keyboard::Equal; + case 0x2013: return sf::Keyboard::Dash; // 0x2d is Subtract + case 0x20: return sf::Keyboard::Space; + case 0x0d: return sf::Keyboard::Return; + case 0x7f: return sf::Keyboard::BackSpace; // NOTE backspace & delete are swapped on Mac. + case 0x09: return sf::Keyboard::Tab; - case 'h': - case 'H': return sf::Keyboard::H; + 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::Keyboard::Insert; + case NSDeleteFunctionKey: return sf::Keyboard::Delete; - case 'i': - case 'I': return sf::Keyboard::I; + case 0x2b: return sf::Keyboard::Add; + case 0x2d: return sf::Keyboard::Subtract; + case 0x2a: return sf::Keyboard::Multiply; + case 0x2f: return sf::Keyboard::Divide; - case 'j': - case 'J': return sf::Keyboard::J; + 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 'k': - case 'K': return sf::Keyboard::K; + /* Those are not represented using Unicode. + * case 0x: return sf::Keyboard::Numpad0; + * case 0x: return sf::Keyboard::Numpad1; + * case 0x: return sf::Keyboard::Numpad2; + * case 0x: return sf::Keyboard::Numpad3; + * case 0x: return sf::Keyboard::Numpad4; + * case 0x: return sf::Keyboard::Numpad5; + * case 0x: return sf::Keyboard::Numpad6; + * case 0x: return sf::Keyboard::Numpad7; + * case 0x: return sf::Keyboard::Numpad8; + * case 0x: return sf::Keyboard::Numpad9; + */ - case 'l': - case 'L': return sf::Keyboard::L; + 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 'm': - case 'M': return sf::Keyboard::M; + case NSPauseFunctionKey: return sf::Keyboard::Pause; - case 'n': - case 'N': return sf::Keyboard::N; - - case 'o': - case 'O': return sf::Keyboard::O; - - case 'p': - case 'P': return sf::Keyboard::P; - - case 'q': - case 'Q': return sf::Keyboard::Q; - - case 'r': - case 'R': return sf::Keyboard::R; - - case 's': - case 'S': return sf::Keyboard::S; - - case 't': - case 'T': return sf::Keyboard::T; - - case 'u': - case 'U': return sf::Keyboard::U; - - case 'v': - case 'V': return sf::Keyboard::V; - - case 'w': - case 'W': return sf::Keyboard::W; - - case 'x': - case 'X': return sf::Keyboard::X; - - case 'y': - case 'Y': return sf::Keyboard::Y; - - case 'z': - case 'Z': return sf::Keyboard::Z; - - // The key is not 'localized'. - default: return sf::Keyboard::Unknown; + default: return sf::Keyboard::Unknown; } } //////////////////////////////////////////////////////// -Keyboard::Key HIDInputManager::nonLocalizedKeys(UniChar virtualKeycode) +UniChar HIDInputManager::toUnicode(Keyboard::Key key) { - // (Some) 0x code based on https://forums.macrumors.com/showthread.php?t=780577 - // Some sf::Keyboard::Key are present twice. + switch (key) + { + case sf::Keyboard::A: return 0x41; + case sf::Keyboard::B: return 0x42; + case sf::Keyboard::C: return 0x43; + case sf::Keyboard::D: return 0x44; + case sf::Keyboard::E: return 0x45; + case sf::Keyboard::F: return 0x46; + case sf::Keyboard::G: return 0x47; + case sf::Keyboard::H: return 0x48; + case sf::Keyboard::I: return 0x49; + case sf::Keyboard::J: return 0x4a; + case sf::Keyboard::K: return 0x4b; + case sf::Keyboard::L: return 0x4c; + case sf::Keyboard::M: return 0x4d; + case sf::Keyboard::N: return 0x4e; + case sf::Keyboard::O: return 0x4f; + case sf::Keyboard::P: return 0x50; + case sf::Keyboard::Q: return 0x51; + case sf::Keyboard::R: return 0x52; + case sf::Keyboard::S: return 0x53; + case sf::Keyboard::T: return 0x54; + case sf::Keyboard::U: return 0x55; + case sf::Keyboard::V: return 0x56; + case sf::Keyboard::W: return 0x57; + case sf::Keyboard::X: return 0x58; + case sf::Keyboard::Y: return 0x59; + case sf::Keyboard::Z: return 0x5a; + + case sf::Keyboard::Num0: return 0x30; + case sf::Keyboard::Num1: return 0x31; + case sf::Keyboard::Num2: return 0x32; + case sf::Keyboard::Num3: return 0x33; + case sf::Keyboard::Num4: return 0x34; + case sf::Keyboard::Num5: return 0x35; + case sf::Keyboard::Num6: return 0x36; + case sf::Keyboard::Num7: return 0x37; + case sf::Keyboard::Num8: return 0x38; + case sf::Keyboard::Num9: return 0x39; + + case sf::Keyboard::Escape: return 0x1b; + + /* Not representable as Unicode: + * case sf::Keyboard::LControl: return 0x; + * case sf::Keyboard::LShift: return 0x; + * case sf::Keyboard::LAlt: return 0x; + * case sf::Keyboard::LSystem: return 0x; + * case sf::Keyboard::RControl: return 0x; + * case sf::Keyboard::RShift: return 0x; + * case sf::Keyboard::RAlt: return 0x; + * case sf::Keyboard::RSystem: return 0x; + */ + + case sf::Keyboard::Menu: return NSMenuFunctionKey; + + case sf::Keyboard::LBracket: return 0x5b; + case sf::Keyboard::RBracket: return 0x5d; + case sf::Keyboard::SemiColon: return 0x3b; + case sf::Keyboard::Comma: return 0x2c; + case sf::Keyboard::Period: return 0x2e; + case sf::Keyboard::Quote: return 0x27; + case sf::Keyboard::Slash: return 0x2044; // 0x2f is Divide + case sf::Keyboard::BackSlash: return 0x5c; + case sf::Keyboard::Tilde: return 0x7e; + case sf::Keyboard::Equal: return 0x3d; + case sf::Keyboard::Dash: return 0x2013; // 0x2d is Subtract + case sf::Keyboard::Space: return 0x20; + case sf::Keyboard::Return: return 0x0d; + case sf::Keyboard::BackSpace: return 0x7f; // NOTE backspace & delete are swapped on Mac. + case sf::Keyboard::Tab: return 0x09; + + case sf::Keyboard::PageUp: return NSPageUpFunctionKey; + case sf::Keyboard::PageDown: return NSPageDownFunctionKey; + case sf::Keyboard::End: return NSEndFunctionKey; + case sf::Keyboard::Home: return NSHomeFunctionKey; + case sf::Keyboard::Insert: return NSInsertFunctionKey; + case sf::Keyboard::Delete: return NSDeleteFunctionKey; + + case sf::Keyboard::Add: return 0x2b; + case sf::Keyboard::Subtract: return 0x2d; + case sf::Keyboard::Multiply: return 0x2a; + case sf::Keyboard::Divide: return 0x2f; + + case sf::Keyboard::Left: return NSLeftArrowFunctionKey; + case sf::Keyboard::Right: return NSRightArrowFunctionKey; + case sf::Keyboard::Up: return NSUpArrowFunctionKey; + case sf::Keyboard::Down: return NSDownArrowFunctionKey; + + /* Those are not represented using Unicode. + * case sf::Keyboard::Numpad0: return 0x; + * case sf::Keyboard::Numpad1: return 0x; + * case sf::Keyboard::Numpad2: return 0x; + * case sf::Keyboard::Numpad3: return 0x; + * case sf::Keyboard::Numpad4: return 0x; + * case sf::Keyboard::Numpad5: return 0x; + * case sf::Keyboard::Numpad6: return 0x; + * case sf::Keyboard::Numpad7: return 0x; + * case sf::Keyboard::Numpad8: return 0x; + * case sf::Keyboard::Numpad9: return 0x; + */ + + case sf::Keyboard::F1: return NSF1FunctionKey; + case sf::Keyboard::F2: return NSF2FunctionKey; + case sf::Keyboard::F3: return NSF3FunctionKey; + case sf::Keyboard::F4: return NSF4FunctionKey; + case sf::Keyboard::F5: return NSF5FunctionKey; + case sf::Keyboard::F6: return NSF6FunctionKey; + case sf::Keyboard::F7: return NSF7FunctionKey; + case sf::Keyboard::F8: return NSF8FunctionKey; + case sf::Keyboard::F9: return NSF9FunctionKey; + case sf::Keyboard::F10: return NSF10FunctionKey; + case sf::Keyboard::F11: return NSF11FunctionKey; + case sf::Keyboard::F12: return NSF12FunctionKey; + case sf::Keyboard::F13: return NSF13FunctionKey; + case sf::Keyboard::F14: return NSF14FunctionKey; + case sf::Keyboard::F15: return NSF15FunctionKey; + + case sf::Keyboard::Pause: return NSPauseFunctionKey; + + default: return 0x00; + } +} + + +//////////////////////////////////////////////////////// +Keyboard::Scancode HIDInputManager::nonLocalizedKey(UniChar virtualKeycode) +{ + // See Chapter 2, esp. Figure 2-10 of + // https://developer.apple.com/legacy/library/documentation/mac/pdf/MacintoshToolboxEssentials.pdf + // Additional virtual codes come from + // /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Events.h switch (virtualKeycode) { - // These cases should not be used but anyway... - 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; + case 0x00: return sf::Keyboard::sA; + case 0x0b: return sf::Keyboard::sB; + case 0x08: return sf::Keyboard::sC; + case 0x02: return sf::Keyboard::sD; + case 0x0e: return sf::Keyboard::sE; + case 0x03: return sf::Keyboard::sF; + case 0x05: return sf::Keyboard::sG; + case 0x04: return sf::Keyboard::sH; + case 0x22: return sf::Keyboard::sI; + case 0x26: return sf::Keyboard::sJ; + case 0x28: return sf::Keyboard::sK; + case 0x25: return sf::Keyboard::sL; + case 0x2e: return sf::Keyboard::sM; + case 0x2d: return sf::Keyboard::sN; + case 0x1f: return sf::Keyboard::sO; + case 0x23: return sf::Keyboard::sP; + case 0x0c: return sf::Keyboard::sQ; + case 0x0f: return sf::Keyboard::sR; + case 0x01: return sf::Keyboard::sS; + case 0x11: return sf::Keyboard::sT; + case 0x20: return sf::Keyboard::sU; + case 0x09: return sf::Keyboard::sV; + case 0x0d: return sf::Keyboard::sW; + case 0x07: return sf::Keyboard::sX; + case 0x10: return sf::Keyboard::sY; + case 0x06: return sf::Keyboard::sZ; - // These cases should not be used but anyway... - 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 0x12: return sf::Keyboard::sNum1; + case 0x13: return sf::Keyboard::sNum2; + case 0x14: return sf::Keyboard::sNum3; + case 0x15: return sf::Keyboard::sNum4; + case 0x17: return sf::Keyboard::sNum5; + case 0x16: return sf::Keyboard::sNum6; + case 0x1a: return sf::Keyboard::sNum7; + case 0x1c: return sf::Keyboard::sNum8; + case 0x19: return sf::Keyboard::sNum9; + case 0x1d: return sf::Keyboard::sNum0; - case 0x35: return sf::Keyboard::Escape; + case 0x24: return sf::Keyboard::sEnter; + case 0x35: return sf::Keyboard::sEscape; + case 0x33: return sf::Keyboard::sBackspace; + case 0x30: return sf::Keyboard::sTab; + case 0x31: return sf::Keyboard::sSpace; + // case 0x27: return sf::Keyboard::sHyphen; // TODO 0x27 is for Quote + case 0x18: return sf::Keyboard::sEquals; + case 0x21: return sf::Keyboard::sLBracket; + case 0x1e: return sf::Keyboard::sRBracket; + case 0x2a: return sf::Keyboard::sBackslash; + case 0x1b: return sf::Keyboard::sDash; + case 0x29: return sf::Keyboard::sSemicolon; + case 0x27: return sf::Keyboard::sQuote; + case 0x32: return sf::Keyboard::sGraveAccent; + case 0x2b: return sf::Keyboard::sComma; + case 0x2f: return sf::Keyboard::sPeriod; + case 0x2c: return sf::Keyboard::sForwardSlash; - // Modifier keys : never happen with keyDown/keyUp methods (?) - 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 0x7a: return sf::Keyboard::sF1; + case 0x78: return sf::Keyboard::sF2; + case 0x63: return sf::Keyboard::sF3; + case 0x76: return sf::Keyboard::sF4; + case 0x60: return sf::Keyboard::sF5; + case 0x61: return sf::Keyboard::sF6; + case 0x62: return sf::Keyboard::sF7; + case 0x64: return sf::Keyboard::sF8; + case 0x65: return sf::Keyboard::sF9; + case 0x6d: return sf::Keyboard::sF10; + case 0x67: return sf::Keyboard::sF11; + case 0x6f: return sf::Keyboard::sF12; + case 0x69: return sf::Keyboard::sF13; + case 0x6b: return sf::Keyboard::sF14; + case 0x71: return sf::Keyboard::sF15; - case 0x7f: return sf::Keyboard::Menu; - case NSMenuFunctionKey: return sf::Keyboard::Menu; + case 0x39: return sf::Keyboard::sCapsLock; - 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 0x41: /* keypad */ return sf::Keyboard::Period; - case 0x2f: /* keyboard */ return sf::Keyboard::Period; - case 0x27: return sf::Keyboard::Quote; - case 0x2c: return sf::Keyboard::Slash; - case 0x2a: return sf::Keyboard::Backslash; + /* TODO Those are missing: + * case 0x: return sf::Keyboard::sPrintScreen; + * case 0x: return sf::Keyboard::sScrollLock; + * case 0x: return sf::Keyboard::sPause; + */ - // 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::Keyboard::Tilde; + case 0x72: return sf::Keyboard::sInsert; + case 0x73: return sf::Keyboard::sHome; + case 0x74: return sf::Keyboard::sPageUp; + case 0x75: return sf::Keyboard::sDelete; + case 0x77: return sf::Keyboard::sEnd; + case 0x79: return sf::Keyboard::sPageDown; - case 0x51: /* keypad */ return sf::Keyboard::Equal; - case 0x18: /* keyboard */ return sf::Keyboard::Equal; - case 0x32: return sf::Keyboard::Hyphen; - case 0x31: return sf::Keyboard::Space; - case 0x4c: /* keypad */ return sf::Keyboard::Enter; - case 0x24: /* keyboard */ return sf::Keyboard::Enter; - case 0x33: return sf::Keyboard::Backspace; - case 0x30: return sf::Keyboard::Tab; + case 0x7c: return sf::Keyboard::sRight; + case 0x7b: return sf::Keyboard::sLeft; + case 0x7d: return sf::Keyboard::sDown; + case 0x7e: return sf::Keyboard::sUp; - // Duplicates (see next section). - 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 0x47: return sf::Keyboard::sNumLock; + case 0x4b: return sf::Keyboard::sDivide; + case 0x43: return sf::Keyboard::sMultiply; + case 0x4e: return sf::Keyboard::sMinus; + case 0x45: return sf::Keyboard::sPlus; + case 0x51: return sf::Keyboard::sPadEquals; + case 0x4c: return sf::Keyboard::sReturn; + case 0x41: return sf::Keyboard::sDecimal; - 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 0x53: return sf::Keyboard::sNumpad1; + case 0x54: return sf::Keyboard::sNumpad2; + case 0x55: return sf::Keyboard::sNumpad3; + case 0x56: return sf::Keyboard::sNumpad4; + case 0x57: return sf::Keyboard::sNumpad5; + case 0x58: return sf::Keyboard::sNumpad6; + case 0x59: return sf::Keyboard::sNumpad7; + case 0x5b: return sf::Keyboard::sNumpad8; + case 0x5c: return sf::Keyboard::sNumpad9; + case 0x52: return sf::Keyboard::sNumpad0; - case 0x72: return sf::Keyboard::Insert; - case NSInsertFunctionKey: return sf::Keyboard::Insert; - case 0x75: return sf::Keyboard::Delete; - case NSDeleteFunctionKey: return sf::Keyboard::Delete; + /* TODO Those are missing: + * case 0x: return sf::Keyboard::sReverseSolidus; + * case 0x: return sf::Keyboard::sApplication; + * case 0x: return sf::Keyboard::sExecute; + * case 0x72: return sf::Keyboard::sHelp; // 0x72 is for Insert + * case 0x: return sf::Keyboard::sMenu; + * case 0x: return sf::Keyboard::sSelect; + * case 0x: return sf::Keyboard::sStop; + * case 0x: return sf::Keyboard::sAgain; + * case 0x: return sf::Keyboard::sUndo; + * case 0x: return sf::Keyboard::sCut; + * case 0x: return sf::Keyboard::sCopy; + * case 0x: return sf::Keyboard::sPaste; + * case 0x: return sf::Keyboard::sFind; + */ - case 0x45: return sf::Keyboard::Add; - case 0x4e: return sf::Keyboard::Subtract; - case 0x43: return sf::Keyboard::Multiply; - case 0x4b: return sf::Keyboard::Divide; + case 0x4a: return sf::Keyboard::sMute; + case 0x48: return sf::Keyboard::sVolumeUp; + case 0x49: return sf::Keyboard::sVolumeDown; - // Duplicates (see next section). - case 0x7b: return sf::Keyboard::Left; - case 0x7c: return sf::Keyboard::Right; - case 0x7e: return sf::Keyboard::Up; - case 0x7d: return sf::Keyboard::Down; + /* NOTE Those are symmetric so we leave them out. + * Thankfully handled through modifiers and not virtual codes. + * case 0x3b: return sf::Keyboard::sLControl; + * case 0x38: return sf::Keyboard::sLShift; + * case 0x3a: return sf::Keyboard::sLAlt; + * case 0x37: return sf::Keyboard::sLSystem; + * case 0x3b: return sf::Keyboard::sRControl; + * case 0x38: return sf::Keyboard::sRShift; + * case 0x3a: return sf::Keyboard::sRAlt; + * case 0x37: return sf::Keyboard::sRSystem; + */ - case NSLeftArrowFunctionKey: return sf::Keyboard::Left; - case NSRightArrowFunctionKey: return sf::Keyboard::Right; - case NSUpArrowFunctionKey: return sf::Keyboard::Up; - case NSDownArrowFunctionKey: return sf::Keyboard::Down; + default: return sf::Keyboard::sUnknown; + } +} - 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 section). - 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; +//////////////////////////////////////////////////////// +UInt8 HIDInputManager::scanToVirtualCode(Keyboard::Scancode code) +{ + switch (code) + { + case sf::Keyboard::sA: return 0x00; + case sf::Keyboard::sB: return 0x0b; + case sf::Keyboard::sC: return 0x08; + case sf::Keyboard::sD: return 0x02; + case sf::Keyboard::sE: return 0x0e; + case sf::Keyboard::sF: return 0x03; + case sf::Keyboard::sG: return 0x05; + case sf::Keyboard::sH: return 0x04; + case sf::Keyboard::sI: return 0x22; + case sf::Keyboard::sJ: return 0x26; + case sf::Keyboard::sK: return 0x28; + case sf::Keyboard::sL: return 0x25; + case sf::Keyboard::sM: return 0x2e; + case sf::Keyboard::sN: return 0x2d; + case sf::Keyboard::sO: return 0x1f; + case sf::Keyboard::sP: return 0x23; + case sf::Keyboard::sQ: return 0x0c; + case sf::Keyboard::sR: return 0x0f; + case sf::Keyboard::sS: return 0x01; + case sf::Keyboard::sT: return 0x11; + case sf::Keyboard::sU: return 0x20; + case sf::Keyboard::sV: return 0x09; + case sf::Keyboard::sW: return 0x0d; + case sf::Keyboard::sX: return 0x07; + case sf::Keyboard::sY: return 0x10; + case sf::Keyboard::sZ: return 0x06; - 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 sf::Keyboard::sNum1: return 0x12; + case sf::Keyboard::sNum2: return 0x13; + case sf::Keyboard::sNum3: return 0x14; + case sf::Keyboard::sNum4: return 0x15; + case sf::Keyboard::sNum5: return 0x17; + case sf::Keyboard::sNum6: return 0x16; + case sf::Keyboard::sNum7: return 0x1a; + case sf::Keyboard::sNum8: return 0x1c; + case sf::Keyboard::sNum9: return 0x19; + case sf::Keyboard::sNum0: return 0x1d; - case NSPauseFunctionKey: return sf::Keyboard::Pause; + case sf::Keyboard::sEnter: return 0x24; + case sf::Keyboard::sEscape: return 0x35; + case sf::Keyboard::sBackspace: return 0x33; + case sf::Keyboard::sTab: return 0x30; + case sf::Keyboard::sSpace: return 0x31; - // keycode 0x1b is not bound to any key. - // This key is ' on CH-FR, ) on FR and - on US layouts. + // case sf::Keyboard::sHyphen: return 0; // 0x27 is for Quote - // An unknown key. - default: return sf::Keyboard::Unknown; + case sf::Keyboard::sEquals: return 0x18; + case sf::Keyboard::sLBracket: return 0x21; + case sf::Keyboard::sRBracket: return 0x1e; + case sf::Keyboard::sBackslash: return 0x2a; + case sf::Keyboard::sDash: return 0x1b; + case sf::Keyboard::sSemicolon: return 0x29; + case sf::Keyboard::sQuote: return 0x27; + case sf::Keyboard::sGraveAccent: return 0x32; + case sf::Keyboard::sComma: return 0x2b; + case sf::Keyboard::sPeriod: return 0x2f; + case sf::Keyboard::sForwardSlash: return 0x2c; + + case sf::Keyboard::sF1: return 0x7a; + case sf::Keyboard::sF2: return 0x78; + case sf::Keyboard::sF3: return 0x63; + case sf::Keyboard::sF4: return 0x76; + case sf::Keyboard::sF5: return 0x60; + case sf::Keyboard::sF6: return 0x61; + case sf::Keyboard::sF7: return 0x62; + case sf::Keyboard::sF8: return 0x64; + case sf::Keyboard::sF9: return 0x65; + case sf::Keyboard::sF10: return 0x6d; + case sf::Keyboard::sF11: return 0x67; + case sf::Keyboard::sF12: return 0x6f; + case sf::Keyboard::sF13: return 0x69; + case sf::Keyboard::sF14: return 0x6b; + case sf::Keyboard::sF15: return 0x71; + + case sf::Keyboard::sCapsLock: return 0x39; + + /* TODO Those are missing: + * case sf::Keyboard::sPrintScreen: return 0; + * case sf::Keyboard::sScrollLock: return 0; + * case sf::Keyboard::sPause: return 0; + */ + case sf::Keyboard::sInsert: return 0x72; + case sf::Keyboard::sHome: return 0x73; + case sf::Keyboard::sPageUp: return 0x74; + case sf::Keyboard::sDelete: return 0x75; + case sf::Keyboard::sEnd: return 0x77; + case sf::Keyboard::sPageDown: return 0x79; + + case sf::Keyboard::sRight: return 0x7c; + case sf::Keyboard::sLeft: return 0x7b; + case sf::Keyboard::sDown: return 0x7d; + case sf::Keyboard::sUp: return 0x7e; + + case sf::Keyboard::sNumLock: return 0x47; + case sf::Keyboard::sDivide: return 0x4b; + case sf::Keyboard::sMultiply: return 0x43; + case sf::Keyboard::sMinus: return 0x4e; + case sf::Keyboard::sPlus: return 0x45; + case sf::Keyboard::sPadEquals: return 0x51; + case sf::Keyboard::sReturn: return 0x4c; + case sf::Keyboard::sDecimal: return 0x41; + + case sf::Keyboard::sNumpad1: return 0x53; + case sf::Keyboard::sNumpad2: return 0x54; + case sf::Keyboard::sNumpad3: return 0x55; + case sf::Keyboard::sNumpad4: return 0x56; + case sf::Keyboard::sNumpad5: return 0x57; + case sf::Keyboard::sNumpad6: return 0x58; + case sf::Keyboard::sNumpad7: return 0x59; + case sf::Keyboard::sNumpad8: return 0x5b; + case sf::Keyboard::sNumpad9: return 0x5c; + case sf::Keyboard::sNumpad0: return 0x52; + + /* TODO Those are missing: + * case sf::Keyboard::sReverseSolidus: return 0; + * case sf::Keyboard::sApplication: return 0; + * case sf::Keyboard::sExecute: return 0; + * case sf::Keyboard::sHelp: return 0; + * case sf::Keyboard::sMenu: return 0; + * case sf::Keyboard::sSelect: return 0; + * case sf::Keyboard::sStop: return 0; + * case sf::Keyboard::sAgain: return 0; + * case sf::Keyboard::sUndo: return 0; + * case sf::Keyboard::sCut: return 0; + * case sf::Keyboard::sCopy: return 0; + * case sf::Keyboard::sPaste: return 0; + * case sf::Keyboard::sFind: return 0; + */ + + case sf::Keyboard::sMute: return 0x4a; + case sf::Keyboard::sVolumeUp: return 0x48; + case sf::Keyboard::sVolumeDown: return 0x49; + + case sf::Keyboard::sLControl: return 0x3b; + case sf::Keyboard::sLShift: return 0x38; + case sf::Keyboard::sLAlt: return 0x3a; + case sf::Keyboard::sLSystem: return 0x37; + case sf::Keyboard::sRControl: return 0x3b; + case sf::Keyboard::sRShift: return 0x38; + case sf::Keyboard::sRAlt: return 0x3a; + case sf::Keyboard::sRSystem: return 0x37; + + default: return 0x00; + } +} + + +//////////////////////////////////////////////////////// +Keyboard::Key HIDInputManager::localizedKeyFallback(Keyboard::Scancode code) +{ + switch (code) + { + case sf::Keyboard::sEnter: return sf::Keyboard::Return; + case sf::Keyboard::sEscape: return sf::Keyboard::Escape; + case sf::Keyboard::sBackspace: return sf::Keyboard::BackSpace; + case sf::Keyboard::sTab: return sf::Keyboard::Tab; + case sf::Keyboard::sSpace: return sf::Keyboard::Space; + + case sf::Keyboard::sF1: return sf::Keyboard::F1; + case sf::Keyboard::sF2: return sf::Keyboard::F2; + case sf::Keyboard::sF3: return sf::Keyboard::F3; + case sf::Keyboard::sF4: return sf::Keyboard::F4; + case sf::Keyboard::sF5: return sf::Keyboard::F5; + case sf::Keyboard::sF6: return sf::Keyboard::F6; + case sf::Keyboard::sF7: return sf::Keyboard::F7; + case sf::Keyboard::sF8: return sf::Keyboard::F8; + case sf::Keyboard::sF9: return sf::Keyboard::F9; + case sf::Keyboard::sF10: return sf::Keyboard::F10; + case sf::Keyboard::sF11: return sf::Keyboard::F11; + case sf::Keyboard::sF12: return sf::Keyboard::F12; + case sf::Keyboard::sF13: return sf::Keyboard::F13; + case sf::Keyboard::sF14: return sf::Keyboard::F14; + case sf::Keyboard::sF15: return sf::Keyboard::F15; + + case sf::Keyboard::sPause: return sf::Keyboard::Pause; + case sf::Keyboard::sInsert: return sf::Keyboard::Insert; + case sf::Keyboard::sHome: return sf::Keyboard::Home; + case sf::Keyboard::sPageUp: return sf::Keyboard::PageUp; + case sf::Keyboard::sDelete: return sf::Keyboard::Delete; + case sf::Keyboard::sEnd: return sf::Keyboard::End; + case sf::Keyboard::sPageDown: return sf::Keyboard::PageDown; + + case sf::Keyboard::sRight: return sf::Keyboard::Right; + case sf::Keyboard::sLeft: return sf::Keyboard::Left; + case sf::Keyboard::sDown: return sf::Keyboard::Down; + case sf::Keyboard::sUp: return sf::Keyboard::Up; + + case sf::Keyboard::sDivide: return sf::Keyboard::Divide; + case sf::Keyboard::sMultiply: return sf::Keyboard::Multiply; + case sf::Keyboard::sMinus: return sf::Keyboard::Subtract; + case sf::Keyboard::sPlus: return sf::Keyboard::Add; + + case sf::Keyboard::sNumpad0: return sf::Keyboard::Numpad1; + case sf::Keyboard::sNumpad1: return sf::Keyboard::Numpad2; + case sf::Keyboard::sNumpad2: return sf::Keyboard::Numpad3; + case sf::Keyboard::sNumpad3: return sf::Keyboard::Numpad4; + case sf::Keyboard::sNumpad4: return sf::Keyboard::Numpad5; + case sf::Keyboard::sNumpad5: return sf::Keyboard::Numpad6; + case sf::Keyboard::sNumpad6: return sf::Keyboard::Numpad7; + case sf::Keyboard::sNumpad7: return sf::Keyboard::Numpad8; + case sf::Keyboard::sNumpad8: return sf::Keyboard::Numpad9; + case sf::Keyboard::sNumpad9: return sf::Keyboard::Numpad0; + + case sf::Keyboard::sLControl: return sf::Keyboard::LControl; + case sf::Keyboard::sLShift: return sf::Keyboard::LShift; + case sf::Keyboard::sLAlt: return sf::Keyboard::LAlt; + case sf::Keyboard::sLSystem: return sf::Keyboard::LSystem; + case sf::Keyboard::sRControl: return sf::Keyboard::RControl; + case sf::Keyboard::sRShift: return sf::Keyboard::RShift; + case sf::Keyboard::sRAlt: return sf::Keyboard::RAlt; + case sf::Keyboard::sRSystem: return sf::Keyboard::RSystem; + + default: return sf::Keyboard::Unknown; } } diff --git a/src/SFML/Window/OSX/InputImpl.mm b/src/SFML/Window/OSX/InputImpl.mm index 0397237a..84533803 100644 --- a/src/SFML/Window/OSX/InputImpl.mm +++ b/src/SFML/Window/OSX/InputImpl.mm @@ -39,9 +39,6 @@ /// In order to keep track of the keyboard's state and mouse buttons' state /// we use the HID manager. Mouse position is handled differently. /// -/// NB: we probably could use -/// NSEvent +addGlobalMonitorForEventsMatchingMask:handler: for mouse only. -/// //////////////////////////////////////////////////////////// namespace sf @@ -122,6 +119,7 @@ SFOpenGLView* getSFOpenGLViewFromSFMLWindow(const WindowBase& window) return view; } + //////////////////////////////////////////////////////////// bool InputImpl::isKeyPressed(Keyboard::Key key) { @@ -129,6 +127,34 @@ bool InputImpl::isKeyPressed(Keyboard::Key key) } +//////////////////////////////////////////////////////////// +bool InputImpl::isKeyPressed(Keyboard::Scancode code) +{ + return HIDInputManager::getInstance().isKeyPressed(code); +} + + +//////////////////////////////////////////////////////////// +Keyboard::Key InputImpl::localize(Keyboard::Scancode code) +{ + return HIDInputManager::getInstance().localize(code); +} + + +//////////////////////////////////////////////////////////// +Keyboard::Scancode InputImpl::unlocalize(Keyboard::Key key) +{ + return HIDInputManager::getInstance().unlocalize(key); +} + + +//////////////////////////////////////////////////////////// +String InputImpl::localizedRepresentation(Keyboard::Scancode code) +{ + return HIDInputManager::getInstance().localizedRepresentation(code); +} + + //////////////////////////////////////////////////////////// void InputImpl::setVirtualKeyboardVisible(bool /*visible*/) { diff --git a/src/SFML/Window/OSX/SFKeyboardModifiersHelper.h b/src/SFML/Window/OSX/SFKeyboardModifiersHelper.h index ea2d5a17..03d6c093 100644 --- a/src/SFML/Window/OSX/SFKeyboardModifiersHelper.h +++ b/src/SFML/Window/OSX/SFKeyboardModifiersHelper.h @@ -56,7 +56,8 @@ void initialiseKeyboardHelper(void); /// \brief Set up a SFML key event based on the given modifiers flags and key code /// //////////////////////////////////////////////////////////// -sf::Event::KeyEvent keyEventWithModifiers(NSUInteger modifiers, sf::Keyboard::Key key); +sf::Event::KeyEvent keyEventWithModifiers(NSUInteger modifiers, sf::Keyboard::Key key, + sf::Keyboard::Scancode code); //////////////////////////////////////////////////////////// diff --git a/src/SFML/Window/OSX/SFKeyboardModifiersHelper.mm b/src/SFML/Window/OSX/SFKeyboardModifiersHelper.mm index 105e9110..cf9a1940 100644 --- a/src/SFML/Window/OSX/SFKeyboardModifiersHelper.mm +++ b/src/SFML/Window/OSX/SFKeyboardModifiersHelper.mm @@ -92,6 +92,7 @@ BOOL isKeyMaskActive(NSUInteger modifiers, NSUInteger mask); //////////////////////////////////////////////////////////// void processOneModifier(NSUInteger modifiers, NSUInteger mask, BOOL& wasDown, sf::Keyboard::Key key, + sf::Keyboard::Scancode code, sf::priv::WindowImplCocoa& requester); @@ -105,6 +106,7 @@ void processLeftRightModifiers(NSUInteger modifiers, NSUInteger leftMask, NSUInteger rightMask, BOOL& leftWasDown, BOOL& rightWasDown, sf::Keyboard::Key leftKey, sf::Keyboard::Key rightKey, + sf::Keyboard::Scancode leftCode, sf::Keyboard::Scancode rightCode, sf::priv::WindowImplCocoa& requester); @@ -136,14 +138,15 @@ void initialiseKeyboardHelper(void) //////////////////////////////////////////////////////// -sf::Event::KeyEvent keyEventWithModifiers(NSUInteger modifiers, sf::Keyboard::Key key) +sf::Event::KeyEvent keyEventWithModifiers(NSUInteger modifiers, sf::Keyboard::Key key, sf::Keyboard::Scancode code) { sf::Event::KeyEvent event; - event.code = key; - event.alt = modifiers & NSAlternateKeyMask; - event.control = modifiers & NSControlKeyMask; - event.shift = modifiers & NSShiftKeyMask; - event.system = modifiers & NSCommandKeyMask; + event.code = key; + event.scancode = code; + event.alt = modifiers & NSAlternateKeyMask; + event.control = modifiers & NSControlKeyMask; + event.shift = modifiers & NSShiftKeyMask; + event.system = modifiers & NSCommandKeyMask; return event; } @@ -158,6 +161,7 @@ void handleModifiersChanged(NSUInteger modifiers, sf::priv::WindowImplCocoa& req NSLeftShiftKeyMask, NSRightShiftKeyMask, state.leftShiftWasDown, state.rightShiftWasDown, sf::Keyboard::LShift, sf::Keyboard::RShift, + sf::Keyboard::sLShift, sf::Keyboard::sRShift, requester ); @@ -167,6 +171,7 @@ void handleModifiersChanged(NSUInteger modifiers, sf::priv::WindowImplCocoa& req NSLeftCommandKeyMask, NSRightCommandKeyMask, state.leftCommandWasDown, state.rightCommandWasDown, sf::Keyboard::LSystem, sf::Keyboard::RSystem, + sf::Keyboard::sLSystem, sf::Keyboard::sRSystem, requester ); @@ -176,6 +181,7 @@ void handleModifiersChanged(NSUInteger modifiers, sf::priv::WindowImplCocoa& req NSLeftAlternateKeyMask, NSRightAlternateKeyMask, state.leftAlternateWasDown, state.rightAlternateWasDown, sf::Keyboard::LAlt, sf::Keyboard::RAlt, + sf::Keyboard::sLAlt, sf::Keyboard::sRAlt, requester ); @@ -185,6 +191,7 @@ void handleModifiersChanged(NSUInteger modifiers, sf::priv::WindowImplCocoa& req NSLeftControlKeyMask, NSRightControlKeyMask, state.leftControlWasDown, state.rightControlWasDown, sf::Keyboard::LControl, sf::Keyboard::RControl, + sf::Keyboard::sLControl, sf::Keyboard::sRControl, requester ); } @@ -203,10 +210,11 @@ BOOL isKeyMaskActive(NSUInteger modifiers, NSUInteger mask) //////////////////////////////////////////////////////// void processOneModifier(NSUInteger modifiers, NSUInteger mask, BOOL& wasDown, sf::Keyboard::Key key, + sf::Keyboard::Scancode code, sf::priv::WindowImplCocoa& requester) { // Setup a potential event key. - sf::Event::KeyEvent event = keyEventWithModifiers(modifiers, key); + sf::Event::KeyEvent event = keyEventWithModifiers(modifiers, key, code); // State BOOL isDown = isKeyMaskActive(modifiers, mask); @@ -231,10 +239,11 @@ void processLeftRightModifiers(NSUInteger modifiers, NSUInteger leftMask, NSUInteger rightMask, BOOL& leftWasDown, BOOL& rightWasDown, sf::Keyboard::Key leftKey, sf::Keyboard::Key rightKey, + sf::Keyboard::Scancode leftCode, sf::Keyboard::Scancode rightCode, sf::priv::WindowImplCocoa& requester) { - processOneModifier(modifiers, leftMask, leftWasDown, leftKey, requester); - processOneModifier(modifiers, rightMask, rightWasDown, rightKey, requester); + processOneModifier(modifiers, leftMask, leftWasDown, leftKey, leftCode, requester); + processOneModifier(modifiers, rightMask, rightWasDown, rightKey, rightCode, requester); } diff --git a/src/SFML/Window/OSX/SFOpenGLView+keyboard.mm b/src/SFML/Window/OSX/SFOpenGLView+keyboard.mm index eb3e1231..86b4f109 100644 --- a/src/SFML/Window/OSX/SFOpenGLView+keyboard.mm +++ b/src/SFML/Window/OSX/SFOpenGLView+keyboard.mm @@ -86,7 +86,7 @@ { sf::Event::KeyEvent key = [SFOpenGLView convertNSKeyEventToSFMLEvent:theEvent]; - if (key.code != sf::Keyboard::Unknown) // The key is recognized. + if ((key.code != sf::Keyboard::Unknown) || (key.scancode != sf::Keyboard::sUnknown)) m_requester->keyDown(key); } @@ -180,21 +180,17 @@ //////////////////////////////////////////////////////// +(sf::Event::KeyEvent)convertNSKeyEventToSFMLEvent:(NSEvent*)event { - // Key code - sf::Keyboard::Key key = sf::Keyboard::Unknown; - - // First we look if the key down is from a list of characters - // that depend on keyboard localization. + // We look for the key in a list of characters that depend on keyboard localization, + // if the key is not "dead". NSString* string = [event charactersIgnoringModifiers]; - if ([string length] > 0) - key = sf::priv::HIDInputManager::localizedKeys([string characterAtIndex:0]); + sf::Keyboard::Key key = ([string length] > 0) + ? sf::priv::HIDInputManager::localizedKey([string characterAtIndex:0]) + : sf::Keyboard::Unknown; - // If the key is not a localized one, we try to find a corresponding code - // through virtual key code. - if (key == sf::Keyboard::Unknown) - key = sf::priv::HIDInputManager::nonLocalizedKeys([event keyCode]); + // The scancode always depends on the hardware keyboard, not some OS setting. + sf::Keyboard::Scancode code = sf::priv::HIDInputManager::nonLocalizedKey([event keyCode]); - return keyEventWithModifiers([event modifierFlags], key); + return keyEventWithModifiers([event modifierFlags], key, code); } From 7a99260ead38f94c2c430369de3eed9f1e878721 Mon Sep 17 00:00:00 2001 From: Marco Antognini Date: Fri, 26 May 2017 11:03:21 +0200 Subject: [PATCH 03/11] Handle layout changes on macOS --- src/SFML/Window/OSX/HIDInputManager.hpp | 7 ++++++- src/SFML/Window/OSX/HIDInputManager.mm | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/SFML/Window/OSX/HIDInputManager.hpp b/src/SFML/Window/OSX/HIDInputManager.hpp index 9a82a7b9..bde3d5e4 100644 --- a/src/SFML/Window/OSX/HIDInputManager.hpp +++ b/src/SFML/Window/OSX/HIDInputManager.hpp @@ -206,10 +206,15 @@ private: void loadKey(IOHIDElementRef key); //////////////////////////////////////////////////////////// - /// Regenerate the mappings from/to Key and Scancode + /// Regenerate the mappings from/to Key and Scancode. + /// + /// It is public to allow regular callback to forward the + /// information to the manager. /// //////////////////////////////////////////////////////////// +public: void buildMappings(); +private: //////////////////////////////////////////////////////////// /// \brief Release all resources diff --git a/src/SFML/Window/OSX/HIDInputManager.mm b/src/SFML/Window/OSX/HIDInputManager.mm index 549829ff..233302b0 100644 --- a/src/SFML/Window/OSX/HIDInputManager.mm +++ b/src/SFML/Window/OSX/HIDInputManager.mm @@ -30,6 +30,15 @@ #include #include +namespace +{ + void keyboardChanged(CFNotificationCenterRef, void* observer, CFStringRef, const void*, CFDictionaryRef) + { + sf::priv::HIDInputManager* manager = static_cast(observer); + manager->buildMappings(); + } +} + namespace sf { namespace priv @@ -228,8 +237,19 @@ m_manager(0) return; } + // Build up our knownledge of the hardware initializeKeyboard(); buildMappings(); + + // Register for notification on keyboard layout changes + CFNotificationCenterAddObserver( + CFNotificationCenterGetDistributedCenter(), + this, + keyboardChanged, // callback + kTISNotifySelectedKeyboardInputSourceChanged, + NULL, // use callback + CFNotificationSuspensionBehaviorDeliverImmediately + ); } @@ -237,6 +257,8 @@ m_manager(0) HIDInputManager::~HIDInputManager() { freeUp(); + + CFNotificationCenterRemoveEveryObserver(CFNotificationCenterGetDistributedCenter(), this); } From cf3752ce774d763d333bcd801990140b3a119b55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20D=C3=BCrrenberger?= Date: Sat, 9 Sep 2017 01:21:29 +0200 Subject: [PATCH 04/11] Use Scan prefix instead of s and getDescription instead of localizedRepresentation. --- include/SFML/Window/Keyboard.hpp | 258 ++-- src/SFML/Window/Android/InputImpl.hpp | 2 +- src/SFML/Window/Keyboard.cpp | 4 +- src/SFML/Window/OSX/HIDInputManager.hpp | 10 +- src/SFML/Window/OSX/HIDInputManager.mm | 1112 ++++++++--------- src/SFML/Window/OSX/InputImpl.hpp | 2 +- src/SFML/Window/OSX/InputImpl.mm | 2 +- .../Window/OSX/SFKeyboardModifiersHelper.mm | 8 +- src/SFML/Window/OSX/SFOpenGLView+keyboard.mm | 2 +- src/SFML/Window/Unix/InputImpl.hpp | 2 +- src/SFML/Window/Win32/InputImpl.hpp | 2 +- src/SFML/Window/iOS/InputImpl.hpp | 2 +- 12 files changed, 703 insertions(+), 703 deletions(-) diff --git a/include/SFML/Window/Keyboard.hpp b/include/SFML/Window/Keyboard.hpp index 7ac3fb8e..c0f902b3 100644 --- a/include/SFML/Window/Keyboard.hpp +++ b/include/SFML/Window/Keyboard.hpp @@ -182,140 +182,140 @@ public: //////////////////////////////////////////////////////////// enum Scancode { - sUnknown = -1, ///< Represents any scancode not present in this enum - sA = 0, ///< Keyboard a and A key - sB, ///< Keyboard b and B key - sC, ///< Keyboard c and C key - sD, ///< Keyboard d and D key - sE, ///< Keyboard e and E key - sF, ///< Keyboard f and F key - sG, ///< Keyboard g and G key - sH, ///< Keyboard h and H key - sI, ///< Keyboard i and I key - sJ, ///< Keyboard j and J key - sK, ///< Keyboard k and K key - sL, ///< Keyboard l and L key - sM, ///< Keyboard m and M key - sN, ///< Keyboard n and N key - sO, ///< Keyboard o and O key - sP, ///< Keyboard p and P key - sQ, ///< Keyboard q and Q key - sR, ///< Keyboard r and R key - sS, ///< Keyboard s and S key - sT, ///< Keyboard t and T key - sU, ///< Keyboard u and U key - sV, ///< Keyboard v and V key - sW, ///< Keyboard w and W key - sX, ///< Keyboard x and X key - sY, ///< Keyboard y and Y key - sZ, ///< Keyboard z and Z key - sNum1, ///< Keyboard 1 and ! key - sNum2, ///< Keyboard 2 and @ key - sNum3, ///< Keyboard 3 and # key - sNum4, ///< Keyboard 4 and $ key - sNum5, ///< Keyboard 5 and % key - sNum6, ///< Keyboard 6 and ^ key - sNum7, ///< Keyboard 7 and & key - sNum8, ///< Keyboard 8 and * key - sNum9, ///< Keyboard 9 and ) key - sNum0, ///< Keyboard 0 and ) key - sEnter, ///< Keyboard Return (ENTER) key - sEscape, ///< Keyboard Escape key - sBackspace, ///< Keyboard Backspace key + ScanUnknown = -1, ///< Represents any scancode not present in this enum + ScanA = 0, ///< Keyboard a and A key + ScanB, ///< Keyboard b and B key + ScanC, ///< Keyboard c and C key + ScanD, ///< Keyboard d and D key + ScanE, ///< Keyboard e and E key + ScanF, ///< Keyboard f and F key + ScanG, ///< Keyboard g and G key + ScanH, ///< Keyboard h and H key + ScanI, ///< Keyboard i and I key + ScanJ, ///< Keyboard j and J key + ScanK, ///< Keyboard k and K key + ScanL, ///< Keyboard l and L key + ScanM, ///< Keyboard m and M key + ScanN, ///< Keyboard n and N key + ScanO, ///< Keyboard o and O key + ScanP, ///< Keyboard p and P key + ScanQ, ///< Keyboard q and Q key + ScanR, ///< Keyboard r and R key + ScanS, ///< Keyboard s and S key + ScanT, ///< Keyboard t and T key + ScanU, ///< Keyboard u and U key + ScanV, ///< Keyboard v and V key + ScanW, ///< Keyboard w and W key + ScanX, ///< Keyboard x and X key + ScanY, ///< Keyboard y and Y key + ScanZ, ///< Keyboard z and Z key + ScanNum1, ///< Keyboard 1 and ! key + ScanNum2, ///< Keyboard 2 and @ key + ScanNum3, ///< Keyboard 3 and # key + ScanNum4, ///< Keyboard 4 and $ key + ScanNum5, ///< Keyboard 5 and % key + ScanNum6, ///< Keyboard 6 and ^ key + ScanNum7, ///< Keyboard 7 and & key + ScanNum8, ///< Keyboard 8 and * key + ScanNum9, ///< Keyboard 9 and ) key + ScanNum0, ///< Keyboard 0 and ) key + ScanEnter, ///< Keyboard Return (ENTER) key + ScanEscape, ///< Keyboard Escape key + ScanBackspace, ///< Keyboard Backspace key // TODO above it's BackSpace, but is it correct? What do we use here? - sTab, ///< Keyboard Tab key - sSpace, ///< Keyboard Space key - sHyphen, ///< Keyboard - and _ key - sEquals, ///< Keyboard = and + - sLBracket, ///< Keyboard [ and { key - sRBracket, ///< Keyboard ] and } key - sBackslash, ///< Keyboard \ and | key + ScanTab, ///< Keyboard Tab key + ScanSpace, ///< Keyboard Space key + ScanHyphen, ///< Keyboard - and _ key + ScanEquals, ///< Keyboard = and + + ScanLBracket, ///< Keyboard [ and { key + ScanRBracket, ///< Keyboard ] and } key + ScanBackslash, ///< Keyboard \ and | key // TODO capitalisation - sDash, ///< Keyboard Non-US # and ~ - sSemicolon, ///< Keyboard ; and : key + ScanDash, ///< Keyboard Non-US # and ~ + ScanSemicolon, ///< Keyboard ; and : key // TODO capitalisation - sQuote, ///< Keyboard ' and " key - sGraveAccent, ///< Keyboard ` and ~ key - sComma, ///< Keyboard , and < key - sPeriod, ///< Keyboard . and > key - sForwardSlash, ///< Keyboard / and ? key - sF1, ///< Keyboard F1 key - sF2, ///< Keyboard F2 key - sF3, ///< Keyboard F3 key - sF4, ///< Keyboard F4 key - sF5, ///< Keyboard F5 key - sF6, ///< Keyboard F6 key - sF7, ///< Keyboard F7 key - sF8, ///< Keyboard F8 key - sF9, ///< Keyboard F9 key - sF10, ///< Keyboard F10 key - sF11, ///< Keyboard F11 key - sF12, ///< Keyboard F12 key - sF13, ///< Keyboard F13 key - sF14, ///< Keyboard F14 key - sF15, ///< Keyboard F15 key - sCapsLock, ///< Keyboard Caps Lock key - sPrintScreen, ///< Keyboard Print Screen key - sScrollLock, ///< Keyboard Scroll Lock key - sPause, ///< Keyboard Pause key - sInsert, ///< Keyboard Insert key - sHome, ///< Keyboard Home key - sPageUp, ///< Keyboard Page Up key - sDelete, ///< Keyboard Delete Forward key - sEnd, ///< Keyboard End key - sPageDown, ///< Keyboard Page Down key - sRight, ///< Keyboard Right Arrow key - sLeft, ///< Keyboard Left Arrow key - sDown, ///< Keyboard Down Arrow key - sUp, ///< Keyboard Up Arrow key - sNumLock, ///< Keypad Num Lock and Clear key - sDivide, ///< Keypad / key - sMultiply, ///< Keypad * key - sMinus, ///< Keypad - key - sPlus, ///< Keypad + key - sPadEquals, ///< keypad = key, probably Mac only - sReturn, ///< Keypad Enter (return) key - sDecimal, ///< Keypad . and Delete key - sNumpad1, ///< Keypad 1 and End key - sNumpad2, ///< Keypad 2 and Down Arrow key - sNumpad3, ///< Keypad 3 and Page Down key - sNumpad4, ///< Keypad 4 and Left Arrow key - sNumpad5, ///< Keypad 5 key - sNumpad6, ///< Keypad 6 and Right Arrow key - sNumpad7, ///< Keypad 7 and Home key - sNumpad8, ///< Keypad 8 and Up Arrow key - sNumpad9, ///< Keypad 9 and Page Up key - sNumpad0, ///< Keypad 0 and Insert key - sReverseSolidus, ///< Keyboard Non-US \ and | key + ScanQuote, ///< Keyboard ' and " key + ScanGraveAccent, ///< Keyboard ` and ~ key + ScanComma, ///< Keyboard , and < key + ScanPeriod, ///< Keyboard . and > key + ScanForwardSlash, ///< Keyboard / and ? key + ScanF1, ///< Keyboard F1 key + ScanF2, ///< Keyboard F2 key + ScanF3, ///< Keyboard F3 key + ScanF4, ///< Keyboard F4 key + ScanF5, ///< Keyboard F5 key + ScanF6, ///< Keyboard F6 key + ScanF7, ///< Keyboard F7 key + ScanF8, ///< Keyboard F8 key + ScanF9, ///< Keyboard F9 key + ScanF10, ///< Keyboard F10 key + ScanF11, ///< Keyboard F11 key + ScanF12, ///< Keyboard F12 key + ScanF13, ///< Keyboard F13 key + ScanF14, ///< Keyboard F14 key + ScanF15, ///< Keyboard F15 key + ScanCapsLock, ///< Keyboard Caps Lock key + ScanPrintScreen, ///< Keyboard Print Screen key + ScanScrollLock, ///< Keyboard Scroll Lock key + ScanPause, ///< Keyboard Pause key + ScanInsert, ///< Keyboard Insert key + ScanHome, ///< Keyboard Home key + ScanPageUp, ///< Keyboard Page Up key + ScanDelete, ///< Keyboard Delete Forward key + ScanEnd, ///< Keyboard End key + ScanPageDown, ///< Keyboard Page Down key + ScanRight, ///< Keyboard Right Arrow key + ScanLeft, ///< Keyboard Left Arrow key + ScanDown, ///< Keyboard Down Arrow key + ScanUp, ///< Keyboard Up Arrow key + ScanNumLock, ///< Keypad Num Lock and Clear key + ScanDivide, ///< Keypad / key + ScanMultiply, ///< Keypad * key + ScanMinus, ///< Keypad - key + ScanPlus, ///< Keypad + key + ScanPadEquals, ///< keypad = key, probably Mac only + ScanReturn, ///< Keypad Enter (return) key + ScanDecimal, ///< Keypad . and Delete key + ScanNumpad1, ///< Keypad 1 and End key + ScanNumpad2, ///< Keypad 2 and Down Arrow key + ScanNumpad3, ///< Keypad 3 and Page Down key + ScanNumpad4, ///< Keypad 4 and Left Arrow key + ScanNumpad5, ///< Keypad 5 key + ScanNumpad6, ///< Keypad 6 and Right Arrow key + ScanNumpad7, ///< Keypad 7 and Home key + ScanNumpad8, ///< Keypad 8 and Up Arrow key + ScanNumpad9, ///< Keypad 9 and Page Up key + ScanNumpad0, ///< Keypad 0 and Insert key + ScanReverseSolidus, ///< Keyboard Non-US \ and | key // FIXME what is this one? Might need better name. The doc says: // - Typically near the Left-Shift key in AT-102 implementations. // - Typical language mappings: Belg:<\> FrCa:«°» Dan:<\> Dutch:]|[ Fren:<> Ger:<|> Ital:<> LatAm:<> Nor:<> Span:<> Swed:<|> Swiss:<\> UK:\| Brazil: \|. // What is the difference with "regular" \ and | key? - sApplication, ///< Keyboard Application key - sExecute, ///< Keyboard Execute key - sHelp, ///< Keyboard Help key - sMenu, ///< Keyboard Menu key - sSelect, ///< Keyboard Select key - sStop, ///< Keyboard Stop key - sAgain, ///< Keyboard Again key - sUndo, ///< Keyboard Undo key - sCut, ///< Keyboard Cut key - sCopy, ///< Keyboard Copy key - sPaste, ///< Keyboard Paste key - sFind, ///< Keyboard Find key - sMute, ///< Keyboard Mute key - sVolumeUp, ///< Keyboard Volume Up key - sVolumeDown, ///< Keyboard Volume Down key - sLControl, ///< Keyboard Left Control key - sLShift, ///< Keyboard Left Shift key - sLAlt, ///< Keyboard Left Alt key - sLSystem, ///< Keyboard Left System key - sRControl, ///< Keyboard Right Control key - sRShift, ///< Keyboard Right Shift key - sRAlt, ///< Keyboard Right Alt key - sRSystem, ///< Keyboard Right System key + ScanApplication, ///< Keyboard Application key + ScanExecute, ///< Keyboard Execute key + ScanHelp, ///< Keyboard Help key + ScanMenu, ///< Keyboard Menu key + ScanSelect, ///< Keyboard Select key + ScanStop, ///< Keyboard Stop key + ScanAgain, ///< Keyboard Again key + ScanUndo, ///< Keyboard Undo key + ScanCut, ///< Keyboard Cut key + ScanCopy, ///< Keyboard Copy key + ScanPaste, ///< Keyboard Paste key + ScanFind, ///< Keyboard Find key + ScanMute, ///< Keyboard Mute key + ScanVolumeUp, ///< Keyboard Volume Up key + ScanVolumeDown, ///< Keyboard Volume Down key + ScanLControl, ///< Keyboard Left Control key + ScanLShift, ///< Keyboard Left Shift key + ScanLAlt, ///< Keyboard Left Alt key + ScanLSystem, ///< Keyboard Left System key + ScanRControl, ///< Keyboard Right Control key + ScanRShift, ///< Keyboard Right Shift key + ScanRAlt, ///< Keyboard Right Alt key + ScanRSystem, ///< Keyboard Right System key - sCodeCount ///< Keep last -- the total number of scancodes + ScanCodeCount ///< Keep last -- the total number of scancodes }; //////////////////////////////////////////////////////////// @@ -360,7 +360,7 @@ public: /// /// \return The scancode corresponding to the key under the current /// keyboard layout used by the operating system, or - /// sf::Keyboard::sUnknown when the key cannot be mapped + /// sf::Keyboard::ScanUnknown when the key cannot be mapped /// to a Keyboard::Scancode. /// /// \see localize @@ -376,7 +376,7 @@ public: /// when the given physical key is pressed by the user, when no /// modifiers are involved. /// - /// \warning The result is OS-dependent: for example, sf::Keyboard::sLSystem + /// \warning The result is OS-dependent: for example, sf::Keyboard::ScanLSystem /// is "Left Meta" on Linux, "Left Windows" on Windows and /// "Left Command" on macOS. /// @@ -387,7 +387,7 @@ public: /// \return The localized description of the code /// //////////////////////////////////////////////////////////// - static String localizedRepresentation(Scancode code); + static String getDescription(Scancode code); //////////////////////////////////////////////////////////// /// \brief Show or hide the virtual keyboard diff --git a/src/SFML/Window/Android/InputImpl.hpp b/src/SFML/Window/Android/InputImpl.hpp index ffbc6312..139a5bbd 100644 --- a/src/SFML/Window/Android/InputImpl.hpp +++ b/src/SFML/Window/Android/InputImpl.hpp @@ -72,7 +72,7 @@ public: /// \copydoc sf::Keyboard::localizedRepresentation /// //////////////////////////////////////////////////////////// - static String localizedRepresentation(Keyboard::Scancode code); + static String getDescription(Keyboard::Scancode code); //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::setVirtualKeyboardVisible diff --git a/src/SFML/Window/Keyboard.cpp b/src/SFML/Window/Keyboard.cpp index b6b4e4a7..2742c2ba 100644 --- a/src/SFML/Window/Keyboard.cpp +++ b/src/SFML/Window/Keyboard.cpp @@ -56,9 +56,9 @@ Keyboard::Scancode Keyboard::unlocalize(Key key) } //////////////////////////////////////////////////////////// -String Keyboard::localizedRepresentation(Scancode code) +String Keyboard::getDescription(Scancode code) { - return priv::InputImpl::localizedRepresentation(code); + return priv::InputImpl::getDescription(code); } //////////////////////////////////////////////////////////// diff --git a/src/SFML/Window/OSX/HIDInputManager.hpp b/src/SFML/Window/OSX/HIDInputManager.hpp index bde3d5e4..bd3de198 100644 --- a/src/SFML/Window/OSX/HIDInputManager.hpp +++ b/src/SFML/Window/OSX/HIDInputManager.hpp @@ -115,7 +115,7 @@ public: /// Try to convert a virtual keycode (HID level) into a /// SFML scancode. /// - /// Return sf::Keyboard::sUnknown if the keycode is unknown. + /// Return sf::Keyboard::ScanUnknown if the keycode is unknown. /// //////////////////////////////////////////////////////////// static Keyboard::Scancode nonLocalizedKey(UniChar virtualKeycode); @@ -278,10 +278,10 @@ private: //////////////////////////////////////////////////////////// // Member data //////////////////////////////////////////////////////////// - IOHIDManagerRef m_manager; ///< Underlying HID Manager - IOHIDElements m_keys[Keyboard::sCodeCount]; ///< All the keys on any connected keyboard - Keyboard::Scancode m_mapping[Keyboard::KeyCount]; ///< Mapping from Key to Scancode - Keyboard::Key m_gnippam[Keyboard::sCodeCount]; ///< Mapping from Scancode to Key + IOHIDManagerRef m_manager; ///< Underlying HID Manager + IOHIDElements m_keys[Keyboard::ScanCodeCount]; ///< All the keys on any connected keyboard + Keyboard::Scancode m_mapping[Keyboard::KeyCount]; ///< Mapping from Key to Scancode + Keyboard::Key m_gnippam[Keyboard::ScanCodeCount]; ///< Mapping from Scancode to Key //////////////////////////////////////////////////////////// /// m_keys' index corresponds to sf::Keyboard::Scancode enum. diff --git a/src/SFML/Window/OSX/HIDInputManager.mm b/src/SFML/Window/OSX/HIDInputManager.mm index 233302b0..430f117c 100644 --- a/src/SFML/Window/OSX/HIDInputManager.mm +++ b/src/SFML/Window/OSX/HIDInputManager.mm @@ -103,7 +103,7 @@ bool HIDInputManager::isKeyPressed(Keyboard::Key key) //////////////////////////////////////////////////////////// bool HIDInputManager::isKeyPressed(Keyboard::Scancode code) { - return (code != Keyboard::sUnknown) && isPressed(m_keys[code]); + return (code != Keyboard::ScanUnknown) && isPressed(m_keys[code]); } @@ -133,89 +133,89 @@ String HIDInputManager::localizedRepresentation(Keyboard::Scancode code) // Fallback to our best guess for the keys that are known to be independent of the layout. switch (code) { - case sf::Keyboard::sEnter: return "Enter"; - case sf::Keyboard::sEscape: return "Escape"; - case sf::Keyboard::sBackspace: return "Backspace"; - case sf::Keyboard::sTab: return "Tab"; - case sf::Keyboard::sSpace: return "Space"; + case sf::Keyboard::ScanEnter: return "Enter"; + case sf::Keyboard::ScanEscape: return "Escape"; + case sf::Keyboard::ScanBackspace: return "Backspace"; + case sf::Keyboard::ScanTab: return "Tab"; + case sf::Keyboard::ScanSpace: return "Space"; - case sf::Keyboard::sF1: return "F1"; - case sf::Keyboard::sF2: return "F2"; - case sf::Keyboard::sF3: return "F3"; - case sf::Keyboard::sF4: return "F4"; - case sf::Keyboard::sF5: return "F5"; - case sf::Keyboard::sF6: return "F6"; - case sf::Keyboard::sF7: return "F7"; - case sf::Keyboard::sF8: return "F8"; - case sf::Keyboard::sF9: return "F9"; - case sf::Keyboard::sF10: return "F10"; - case sf::Keyboard::sF11: return "F11"; - case sf::Keyboard::sF12: return "F12"; - case sf::Keyboard::sF13: return "F13"; - case sf::Keyboard::sF14: return "F14"; - case sf::Keyboard::sF15: return "F15"; + case sf::Keyboard::ScanF1: return "F1"; + case sf::Keyboard::ScanF2: return "F2"; + case sf::Keyboard::ScanF3: return "F3"; + case sf::Keyboard::ScanF4: return "F4"; + case sf::Keyboard::ScanF5: return "F5"; + case sf::Keyboard::ScanF6: return "F6"; + case sf::Keyboard::ScanF7: return "F7"; + case sf::Keyboard::ScanF8: return "F8"; + case sf::Keyboard::ScanF9: return "F9"; + case sf::Keyboard::ScanF10: return "F10"; + case sf::Keyboard::ScanF11: return "F11"; + case sf::Keyboard::ScanF12: return "F12"; + case sf::Keyboard::ScanF13: return "F13"; + case sf::Keyboard::ScanF14: return "F14"; + case sf::Keyboard::ScanF15: return "F15"; - case sf::Keyboard::sCapsLock: return "CapsLock"; - case sf::Keyboard::sPrintScreen: return "PrintScreen"; - case sf::Keyboard::sScrollLock: return "ScrollLock"; + case sf::Keyboard::ScanCapsLock: return "CapsLock"; + case sf::Keyboard::ScanPrintScreen: return "PrintScreen"; + case sf::Keyboard::ScanScrollLock: return "ScrollLock"; - case sf::Keyboard::sPause: return "Pause"; - case sf::Keyboard::sInsert: return "Insert"; - case sf::Keyboard::sHome: return "Home"; - case sf::Keyboard::sPageUp: return "PageUp"; - case sf::Keyboard::sDelete: return "Delete"; - case sf::Keyboard::sEnd: return "End"; - case sf::Keyboard::sPageDown: return "PageDown"; + case sf::Keyboard::ScanPause: return "Pause"; + case sf::Keyboard::ScanInsert: return "Insert"; + case sf::Keyboard::ScanHome: return "Home"; + case sf::Keyboard::ScanPageUp: return "PageUp"; + case sf::Keyboard::ScanDelete: return "Delete"; + case sf::Keyboard::ScanEnd: return "End"; + case sf::Keyboard::ScanPageDown: return "PageDown"; - case sf::Keyboard::sLeft: return "Left Arrow"; - case sf::Keyboard::sRight: return "Right Arrow"; - case sf::Keyboard::sDown: return "Down Arrow"; - case sf::Keyboard::sUp: return "Up Arrow"; + case sf::Keyboard::ScanLeft: return "Left Arrow"; + case sf::Keyboard::ScanRight: return "Right Arrow"; + case sf::Keyboard::ScanDown: return "Down Arrow"; + case sf::Keyboard::ScanUp: return "Up Arrow"; - case sf::Keyboard::sNumLock: return "NumLock"; - case sf::Keyboard::sDivide: return "Divide (Numpad)"; - case sf::Keyboard::sMultiply: return "Multiply (Numpad)"; - case sf::Keyboard::sMinus: return "Minux (Numpad)"; - case sf::Keyboard::sPlus: return "Plus (Numpad)"; - case sf::Keyboard::sPadEquals: return "Equals (Numpad)"; - case sf::Keyboard::sReturn: return "Return (Numpad)"; - case sf::Keyboard::sDecimal: return "Decimal (Numpad)"; + case sf::Keyboard::ScanNumLock: return "NumLock"; + case sf::Keyboard::ScanDivide: return "Divide (Numpad)"; + case sf::Keyboard::ScanMultiply: return "Multiply (Numpad)"; + case sf::Keyboard::ScanMinus: return "Minux (Numpad)"; + case sf::Keyboard::ScanPlus: return "Plus (Numpad)"; + case sf::Keyboard::ScanPadEquals: return "Equals (Numpad)"; + case sf::Keyboard::ScanReturn: return "Return (Numpad)"; + case sf::Keyboard::ScanDecimal: return "Decimal (Numpad)"; - case sf::Keyboard::sNumpad0: return "0 (Numpad)"; - case sf::Keyboard::sNumpad1: return "1 (Numpad)"; - case sf::Keyboard::sNumpad2: return "2 (Numpad)"; - case sf::Keyboard::sNumpad3: return "3 (Numpad)"; - case sf::Keyboard::sNumpad4: return "4 (Numpad)"; - case sf::Keyboard::sNumpad5: return "5 (Numpad)"; - case sf::Keyboard::sNumpad6: return "6 (Numpad)"; - case sf::Keyboard::sNumpad7: return "7 (Numpad)"; - case sf::Keyboard::sNumpad8: return "8 (Numpad)"; - case sf::Keyboard::sNumpad9: return "9 (Numpad)"; + case sf::Keyboard::ScanNumpad0: return "0 (Numpad)"; + case sf::Keyboard::ScanNumpad1: return "1 (Numpad)"; + case sf::Keyboard::ScanNumpad2: return "2 (Numpad)"; + case sf::Keyboard::ScanNumpad3: return "3 (Numpad)"; + case sf::Keyboard::ScanNumpad4: return "4 (Numpad)"; + case sf::Keyboard::ScanNumpad5: return "5 (Numpad)"; + case sf::Keyboard::ScanNumpad6: return "6 (Numpad)"; + case sf::Keyboard::ScanNumpad7: return "7 (Numpad)"; + case sf::Keyboard::ScanNumpad8: return "8 (Numpad)"; + case sf::Keyboard::ScanNumpad9: return "9 (Numpad)"; - case sf::Keyboard::sApplication: return "Application"; - case sf::Keyboard::sExecute: return "Execute"; - case sf::Keyboard::sHelp: return "Help"; - case sf::Keyboard::sMenu: return "Menu"; - case sf::Keyboard::sSelect: return "Select"; - case sf::Keyboard::sStop: return "Stop"; - case sf::Keyboard::sAgain: return "Again"; - case sf::Keyboard::sUndo: return "Undo"; - case sf::Keyboard::sCut: return "Cut"; - case sf::Keyboard::sCopy: return "Copy"; - case sf::Keyboard::sPaste: return "Paste"; - case sf::Keyboard::sFind: return "Find"; - case sf::Keyboard::sMute: return "Mute"; - case sf::Keyboard::sVolumeUp: return "Volume Up"; - case sf::Keyboard::sVolumeDown: return "Volume Down"; + case sf::Keyboard::ScanApplication: return "Application"; + case sf::Keyboard::ScanExecute: return "Execute"; + case sf::Keyboard::ScanHelp: return "Help"; + case sf::Keyboard::ScanMenu: return "Menu"; + case sf::Keyboard::ScanSelect: return "Select"; + case sf::Keyboard::ScanStop: return "Stop"; + case sf::Keyboard::ScanAgain: return "Again"; + case sf::Keyboard::ScanUndo: return "Undo"; + case sf::Keyboard::ScanCut: return "Cut"; + case sf::Keyboard::ScanCopy: return "Copy"; + case sf::Keyboard::ScanPaste: return "Paste"; + case sf::Keyboard::ScanFind: return "Find"; + case sf::Keyboard::ScanMute: return "Mute"; + case sf::Keyboard::ScanVolumeUp: return "Volume Up"; + case sf::Keyboard::ScanVolumeDown: return "Volume Down"; - case sf::Keyboard::sLControl: return "Control (Left)"; - case sf::Keyboard::sLShift: return "Shift (Left)"; - case sf::Keyboard::sLAlt: return "Alt (Left)"; - case sf::Keyboard::sLSystem: return "Command (Left)"; - case sf::Keyboard::sRControl: return "Control (Right)"; - case sf::Keyboard::sRShift: return "Shift (Right)"; - case sf::Keyboard::sRAlt: return "Alt (Right)"; - case sf::Keyboard::sRSystem: return "Command (Right)"; + case sf::Keyboard::ScanLControl: return "Control (Left)"; + case sf::Keyboard::ScanLShift: return "Shift (Left)"; + case sf::Keyboard::ScanLAlt: return "Alt (Left)"; + case sf::Keyboard::ScanLSystem: return "Command (Left)"; + case sf::Keyboard::ScanRControl: return "Control (Right)"; + case sf::Keyboard::ScanRShift: return "Shift (Right)"; + case sf::Keyboard::ScanRAlt: return "Alt (Right)"; + case sf::Keyboard::ScanRSystem: return "Command (Right)"; default: return "Unknown Scancode"; // no guess good enough possible. } @@ -316,7 +316,7 @@ void HIDInputManager::loadKey(IOHIDElementRef key) { UInt32 usage = IOHIDElementGetUsage(key); sf::Keyboard::Scancode code = usageToScancode(usage); - if (code != Keyboard::sUnknown) + if (code != Keyboard::ScanUnknown) { CFRetain(key); m_keys[code].push_back(key); @@ -329,8 +329,8 @@ void HIDInputManager::buildMappings() { // Reset the mappings for (int i = 0; i < Keyboard::KeyCount; ++i) - m_mapping[i] = Keyboard::sUnknown; - for (int i = 0; i < Keyboard::sCodeCount; ++i) + m_mapping[i] = Keyboard::ScanUnknown; + for (int i = 0; i < Keyboard::ScanCodeCount; ++i) m_gnippam[i] = Keyboard::Unknown; // Get the current keyboard layout @@ -348,7 +348,7 @@ void HIDInputManager::buildMappings() // For each scancode having a IOHIDElement, we translate the corresponding // virtual code to a localized Key. - for (int i = 0; i < Keyboard::sCodeCount; ++i) + for (int i = 0; i < Keyboard::ScanCodeCount; ++i) { Keyboard::Scancode scan = static_cast(i); UInt8 virtualCode = scanToVirtualCode(scan); @@ -465,202 +465,202 @@ sf::Keyboard::Scancode HIDInputManager::usageToScancode(UInt32 usage) { switch (usage) { - case kHIDUsage_KeyboardErrorRollOver: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardPOSTFail: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardErrorUndefined: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardErrorRollOver: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardPOSTFail: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardErrorUndefined: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardA: return sf::Keyboard::sA; - case kHIDUsage_KeyboardB: return sf::Keyboard::sB; - case kHIDUsage_KeyboardC: return sf::Keyboard::sC; - case kHIDUsage_KeyboardD: return sf::Keyboard::sD; - case kHIDUsage_KeyboardE: return sf::Keyboard::sE; - case kHIDUsage_KeyboardF: return sf::Keyboard::sF; - case kHIDUsage_KeyboardG: return sf::Keyboard::sG; - case kHIDUsage_KeyboardH: return sf::Keyboard::sH; - case kHIDUsage_KeyboardI: return sf::Keyboard::sI; - case kHIDUsage_KeyboardJ: return sf::Keyboard::sJ; - case kHIDUsage_KeyboardK: return sf::Keyboard::sK; - case kHIDUsage_KeyboardL: return sf::Keyboard::sL; - case kHIDUsage_KeyboardM: return sf::Keyboard::sM; - case kHIDUsage_KeyboardN: return sf::Keyboard::sN; - case kHIDUsage_KeyboardO: return sf::Keyboard::sO; - case kHIDUsage_KeyboardP: return sf::Keyboard::sP; - case kHIDUsage_KeyboardQ: return sf::Keyboard::sQ; - case kHIDUsage_KeyboardR: return sf::Keyboard::sR; - case kHIDUsage_KeyboardS: return sf::Keyboard::sS; - case kHIDUsage_KeyboardT: return sf::Keyboard::sT; - case kHIDUsage_KeyboardU: return sf::Keyboard::sU; - case kHIDUsage_KeyboardV: return sf::Keyboard::sV; - case kHIDUsage_KeyboardW: return sf::Keyboard::sW; - case kHIDUsage_KeyboardX: return sf::Keyboard::sX; - case kHIDUsage_KeyboardY: return sf::Keyboard::sY; - case kHIDUsage_KeyboardZ: return sf::Keyboard::sZ; + case kHIDUsage_KeyboardA: return sf::Keyboard::ScanA; + case kHIDUsage_KeyboardB: return sf::Keyboard::ScanB; + case kHIDUsage_KeyboardC: return sf::Keyboard::ScanC; + case kHIDUsage_KeyboardD: return sf::Keyboard::ScanD; + case kHIDUsage_KeyboardE: return sf::Keyboard::ScanE; + case kHIDUsage_KeyboardF: return sf::Keyboard::ScanF; + case kHIDUsage_KeyboardG: return sf::Keyboard::ScanG; + case kHIDUsage_KeyboardH: return sf::Keyboard::ScanH; + case kHIDUsage_KeyboardI: return sf::Keyboard::ScanI; + case kHIDUsage_KeyboardJ: return sf::Keyboard::ScanJ; + case kHIDUsage_KeyboardK: return sf::Keyboard::ScanK; + case kHIDUsage_KeyboardL: return sf::Keyboard::ScanL; + case kHIDUsage_KeyboardM: return sf::Keyboard::ScanM; + case kHIDUsage_KeyboardN: return sf::Keyboard::ScanN; + case kHIDUsage_KeyboardO: return sf::Keyboard::ScanO; + case kHIDUsage_KeyboardP: return sf::Keyboard::ScanP; + case kHIDUsage_KeyboardQ: return sf::Keyboard::ScanQ; + case kHIDUsage_KeyboardR: return sf::Keyboard::ScanR; + case kHIDUsage_KeyboardS: return sf::Keyboard::ScanS; + case kHIDUsage_KeyboardT: return sf::Keyboard::ScanT; + case kHIDUsage_KeyboardU: return sf::Keyboard::ScanU; + case kHIDUsage_KeyboardV: return sf::Keyboard::ScanV; + case kHIDUsage_KeyboardW: return sf::Keyboard::ScanW; + case kHIDUsage_KeyboardX: return sf::Keyboard::ScanX; + case kHIDUsage_KeyboardY: return sf::Keyboard::ScanY; + case kHIDUsage_KeyboardZ: return sf::Keyboard::ScanZ; - case kHIDUsage_Keyboard1: return sf::Keyboard::sNum1; - case kHIDUsage_Keyboard2: return sf::Keyboard::sNum2; - case kHIDUsage_Keyboard3: return sf::Keyboard::sNum3; - case kHIDUsage_Keyboard4: return sf::Keyboard::sNum4; - case kHIDUsage_Keyboard5: return sf::Keyboard::sNum5; - case kHIDUsage_Keyboard6: return sf::Keyboard::sNum6; - case kHIDUsage_Keyboard7: return sf::Keyboard::sNum7; - case kHIDUsage_Keyboard8: return sf::Keyboard::sNum8; - case kHIDUsage_Keyboard9: return sf::Keyboard::sNum9; - case kHIDUsage_Keyboard0: return sf::Keyboard::sNum0; + case kHIDUsage_Keyboard1: return sf::Keyboard::ScanNum1; + case kHIDUsage_Keyboard2: return sf::Keyboard::ScanNum2; + case kHIDUsage_Keyboard3: return sf::Keyboard::ScanNum3; + case kHIDUsage_Keyboard4: return sf::Keyboard::ScanNum4; + case kHIDUsage_Keyboard5: return sf::Keyboard::ScanNum5; + case kHIDUsage_Keyboard6: return sf::Keyboard::ScanNum6; + case kHIDUsage_Keyboard7: return sf::Keyboard::ScanNum7; + case kHIDUsage_Keyboard8: return sf::Keyboard::ScanNum8; + case kHIDUsage_Keyboard9: return sf::Keyboard::ScanNum9; + case kHIDUsage_Keyboard0: return sf::Keyboard::ScanNum0; - case kHIDUsage_KeyboardReturnOrEnter: return sf::Keyboard::sEnter; - case kHIDUsage_KeyboardEscape: return sf::Keyboard::sEscape; - case kHIDUsage_KeyboardDeleteOrBackspace: return sf::Keyboard::sBackspace; - case kHIDUsage_KeyboardTab: return sf::Keyboard::sTab; - case kHIDUsage_KeyboardSpacebar: return sf::Keyboard::sSpace; - case kHIDUsage_KeyboardHyphen: return sf::Keyboard::sHyphen; - case kHIDUsage_KeyboardEqualSign: return sf::Keyboard::sEquals; - case kHIDUsage_KeyboardOpenBracket: return sf::Keyboard::sLBracket; - case kHIDUsage_KeyboardCloseBracket: return sf::Keyboard::sRBracket; - case kHIDUsage_KeyboardBackslash: return sf::Keyboard::sBackslash; - case kHIDUsage_KeyboardNonUSPound: return sf::Keyboard::sDash; - case kHIDUsage_KeyboardSemicolon: return sf::Keyboard::sSemicolon; - case kHIDUsage_KeyboardQuote: return sf::Keyboard::sQuote; - case kHIDUsage_KeyboardGraveAccentAndTilde: return sf::Keyboard::sGraveAccent; - case kHIDUsage_KeyboardComma: return sf::Keyboard::sComma; - case kHIDUsage_KeyboardPeriod: return sf::Keyboard::sPeriod; - case kHIDUsage_KeyboardSlash: return sf::Keyboard::sForwardSlash; - case kHIDUsage_KeyboardCapsLock: return sf::Keyboard::sCapsLock; + case kHIDUsage_KeyboardReturnOrEnter: return sf::Keyboard::ScanEnter; + case kHIDUsage_KeyboardEscape: return sf::Keyboard::ScanEscape; + case kHIDUsage_KeyboardDeleteOrBackspace: return sf::Keyboard::ScanBackspace; + case kHIDUsage_KeyboardTab: return sf::Keyboard::ScanTab; + case kHIDUsage_KeyboardSpacebar: return sf::Keyboard::ScanSpace; + case kHIDUsage_KeyboardHyphen: return sf::Keyboard::ScanHyphen; + case kHIDUsage_KeyboardEqualSign: return sf::Keyboard::ScanEquals; + case kHIDUsage_KeyboardOpenBracket: return sf::Keyboard::ScanLBracket; + case kHIDUsage_KeyboardCloseBracket: return sf::Keyboard::ScanRBracket; + case kHIDUsage_KeyboardBackslash: return sf::Keyboard::ScanBackslash; + case kHIDUsage_KeyboardNonUSPound: return sf::Keyboard::ScanDash; + case kHIDUsage_KeyboardSemicolon: return sf::Keyboard::ScanSemicolon; + case kHIDUsage_KeyboardQuote: return sf::Keyboard::ScanQuote; + case kHIDUsage_KeyboardGraveAccentAndTilde: return sf::Keyboard::ScanGraveAccent; + case kHIDUsage_KeyboardComma: return sf::Keyboard::ScanComma; + case kHIDUsage_KeyboardPeriod: return sf::Keyboard::ScanPeriod; + case kHIDUsage_KeyboardSlash: return sf::Keyboard::ScanForwardSlash; + case kHIDUsage_KeyboardCapsLock: return sf::Keyboard::ScanCapsLock; - case kHIDUsage_KeyboardF1: return sf::Keyboard::sF1; - case kHIDUsage_KeyboardF2: return sf::Keyboard::sF2; - case kHIDUsage_KeyboardF3: return sf::Keyboard::sF3; - case kHIDUsage_KeyboardF4: return sf::Keyboard::sF4; - case kHIDUsage_KeyboardF5: return sf::Keyboard::sF5; - case kHIDUsage_KeyboardF6: return sf::Keyboard::sF6; - case kHIDUsage_KeyboardF7: return sf::Keyboard::sF7; - case kHIDUsage_KeyboardF8: return sf::Keyboard::sF8; - case kHIDUsage_KeyboardF9: return sf::Keyboard::sF9; - case kHIDUsage_KeyboardF10: return sf::Keyboard::sF10; - case kHIDUsage_KeyboardF11: return sf::Keyboard::sF11; - case kHIDUsage_KeyboardF12: return sf::Keyboard::sF12; + case kHIDUsage_KeyboardF1: return sf::Keyboard::ScanF1; + case kHIDUsage_KeyboardF2: return sf::Keyboard::ScanF2; + case kHIDUsage_KeyboardF3: return sf::Keyboard::ScanF3; + case kHIDUsage_KeyboardF4: return sf::Keyboard::ScanF4; + case kHIDUsage_KeyboardF5: return sf::Keyboard::ScanF5; + case kHIDUsage_KeyboardF6: return sf::Keyboard::ScanF6; + case kHIDUsage_KeyboardF7: return sf::Keyboard::ScanF7; + case kHIDUsage_KeyboardF8: return sf::Keyboard::ScanF8; + case kHIDUsage_KeyboardF9: return sf::Keyboard::ScanF9; + case kHIDUsage_KeyboardF10: return sf::Keyboard::ScanF10; + case kHIDUsage_KeyboardF11: return sf::Keyboard::ScanF11; + case kHIDUsage_KeyboardF12: return sf::Keyboard::ScanF12; - case kHIDUsage_KeyboardPrintScreen: return sf::Keyboard::sPrintScreen; - case kHIDUsage_KeyboardScrollLock: return sf::Keyboard::sScrollLock; - case kHIDUsage_KeyboardPause: return sf::Keyboard::sPause; - case kHIDUsage_KeyboardInsert: return sf::Keyboard::sInsert; - case kHIDUsage_KeyboardHome: return sf::Keyboard::sHome; - case kHIDUsage_KeyboardPageUp: return sf::Keyboard::sPageUp; - case kHIDUsage_KeyboardDeleteForward: return sf::Keyboard::sDelete; - case kHIDUsage_KeyboardEnd: return sf::Keyboard::sEnd; - case kHIDUsage_KeyboardPageDown: return sf::Keyboard::sPageDown; + case kHIDUsage_KeyboardPrintScreen: return sf::Keyboard::ScanPrintScreen; + case kHIDUsage_KeyboardScrollLock: return sf::Keyboard::ScanScrollLock; + case kHIDUsage_KeyboardPause: return sf::Keyboard::ScanPause; + case kHIDUsage_KeyboardInsert: return sf::Keyboard::ScanInsert; + case kHIDUsage_KeyboardHome: return sf::Keyboard::ScanHome; + case kHIDUsage_KeyboardPageUp: return sf::Keyboard::ScanPageUp; + case kHIDUsage_KeyboardDeleteForward: return sf::Keyboard::ScanDelete; + case kHIDUsage_KeyboardEnd: return sf::Keyboard::ScanEnd; + case kHIDUsage_KeyboardPageDown: return sf::Keyboard::ScanPageDown; - case kHIDUsage_KeyboardRightArrow: return sf::Keyboard::sRight; - case kHIDUsage_KeyboardLeftArrow: return sf::Keyboard::sLeft; - case kHIDUsage_KeyboardDownArrow: return sf::Keyboard::sDown; - case kHIDUsage_KeyboardUpArrow: return sf::Keyboard::sUp; + case kHIDUsage_KeyboardRightArrow: return sf::Keyboard::ScanRight; + case kHIDUsage_KeyboardLeftArrow: return sf::Keyboard::ScanLeft; + case kHIDUsage_KeyboardDownArrow: return sf::Keyboard::ScanDown; + case kHIDUsage_KeyboardUpArrow: return sf::Keyboard::ScanUp; - case kHIDUsage_KeypadNumLock: return sf::Keyboard::sNumLock; - case kHIDUsage_KeypadSlash: return sf::Keyboard::sDivide; - case kHIDUsage_KeypadAsterisk: return sf::Keyboard::sMultiply; - case kHIDUsage_KeypadHyphen: return sf::Keyboard::sMinus; - case kHIDUsage_KeypadPlus: return sf::Keyboard::sPlus; - case kHIDUsage_KeypadEnter: return sf::Keyboard::sReturn; + case kHIDUsage_KeypadNumLock: return sf::Keyboard::ScanNumLock; + case kHIDUsage_KeypadSlash: return sf::Keyboard::ScanDivide; + case kHIDUsage_KeypadAsterisk: return sf::Keyboard::ScanMultiply; + case kHIDUsage_KeypadHyphen: return sf::Keyboard::ScanMinus; + case kHIDUsage_KeypadPlus: return sf::Keyboard::ScanPlus; + case kHIDUsage_KeypadEnter: return sf::Keyboard::ScanReturn; - case kHIDUsage_Keypad1: return sf::Keyboard::sNumpad1; - case kHIDUsage_Keypad2: return sf::Keyboard::sNumpad2; - case kHIDUsage_Keypad3: return sf::Keyboard::sNumpad3; - case kHIDUsage_Keypad4: return sf::Keyboard::sNumpad4; - case kHIDUsage_Keypad5: return sf::Keyboard::sNumpad5; - case kHIDUsage_Keypad6: return sf::Keyboard::sNumpad6; - case kHIDUsage_Keypad7: return sf::Keyboard::sNumpad7; - case kHIDUsage_Keypad8: return sf::Keyboard::sNumpad8; - case kHIDUsage_Keypad9: return sf::Keyboard::sNumpad9; - case kHIDUsage_Keypad0: return sf::Keyboard::sNumpad0; + case kHIDUsage_Keypad1: return sf::Keyboard::ScanNumpad1; + case kHIDUsage_Keypad2: return sf::Keyboard::ScanNumpad2; + case kHIDUsage_Keypad3: return sf::Keyboard::ScanNumpad3; + case kHIDUsage_Keypad4: return sf::Keyboard::ScanNumpad4; + case kHIDUsage_Keypad5: return sf::Keyboard::ScanNumpad5; + case kHIDUsage_Keypad6: return sf::Keyboard::ScanNumpad6; + case kHIDUsage_Keypad7: return sf::Keyboard::ScanNumpad7; + case kHIDUsage_Keypad8: return sf::Keyboard::ScanNumpad8; + case kHIDUsage_Keypad9: return sf::Keyboard::ScanNumpad9; + case kHIDUsage_Keypad0: return sf::Keyboard::ScanNumpad0; - case kHIDUsage_KeypadPeriod: return sf::Keyboard::sDecimal; - case kHIDUsage_KeyboardNonUSBackslash: return sf::Keyboard::sReverseSolidus; - case kHIDUsage_KeyboardApplication: return sf::Keyboard::sApplication; - case kHIDUsage_KeyboardPower: return sf::Keyboard::sUnknown; - case kHIDUsage_KeypadEqualSign: return sf::Keyboard::sPadEquals; + case kHIDUsage_KeypadPeriod: return sf::Keyboard::ScanDecimal; + case kHIDUsage_KeyboardNonUSBackslash: return sf::Keyboard::ScanReverseSolidus; + case kHIDUsage_KeyboardApplication: return sf::Keyboard::ScanApplication; + case kHIDUsage_KeyboardPower: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeypadEqualSign: return sf::Keyboard::ScanPadEquals; - case kHIDUsage_KeyboardF13: return sf::Keyboard::sF13; - case kHIDUsage_KeyboardF14: return sf::Keyboard::sF14; - case kHIDUsage_KeyboardF15: return sf::Keyboard::sF15; - case kHIDUsage_KeyboardF16: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardF17: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardF18: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardF19: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardF20: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardF21: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardF22: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardF23: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardF24: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardF13: return sf::Keyboard::ScanF13; + case kHIDUsage_KeyboardF14: return sf::Keyboard::ScanF14; + case kHIDUsage_KeyboardF15: return sf::Keyboard::ScanF15; + case kHIDUsage_KeyboardF16: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardF17: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardF18: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardF19: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardF20: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardF21: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardF22: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardF23: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardF24: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardExecute: return sf::Keyboard::sExecute; - case kHIDUsage_KeyboardHelp: return sf::Keyboard::sHelp; - case kHIDUsage_KeyboardMenu: return sf::Keyboard::sMenu; - case kHIDUsage_KeyboardSelect: return sf::Keyboard::sSelect; - case kHIDUsage_KeyboardStop: return sf::Keyboard::sStop; - case kHIDUsage_KeyboardAgain: return sf::Keyboard::sAgain; - case kHIDUsage_KeyboardUndo: return sf::Keyboard::sUndo; - case kHIDUsage_KeyboardCut: return sf::Keyboard::sCut; - case kHIDUsage_KeyboardCopy: return sf::Keyboard::sCopy; - case kHIDUsage_KeyboardPaste: return sf::Keyboard::sPaste; - case kHIDUsage_KeyboardFind: return sf::Keyboard::sFind; + case kHIDUsage_KeyboardExecute: return sf::Keyboard::ScanExecute; + case kHIDUsage_KeyboardHelp: return sf::Keyboard::ScanHelp; + case kHIDUsage_KeyboardMenu: return sf::Keyboard::ScanMenu; + case kHIDUsage_KeyboardSelect: return sf::Keyboard::ScanSelect; + case kHIDUsage_KeyboardStop: return sf::Keyboard::ScanStop; + case kHIDUsage_KeyboardAgain: return sf::Keyboard::ScanAgain; + case kHIDUsage_KeyboardUndo: return sf::Keyboard::ScanUndo; + case kHIDUsage_KeyboardCut: return sf::Keyboard::ScanCut; + case kHIDUsage_KeyboardCopy: return sf::Keyboard::ScanCopy; + case kHIDUsage_KeyboardPaste: return sf::Keyboard::ScanPaste; + case kHIDUsage_KeyboardFind: return sf::Keyboard::ScanFind; - case kHIDUsage_KeyboardMute: return sf::Keyboard::sMute; - case kHIDUsage_KeyboardVolumeUp: return sf::Keyboard::sVolumeUp; - case kHIDUsage_KeyboardVolumeDown: return sf::Keyboard::sVolumeDown; + case kHIDUsage_KeyboardMute: return sf::Keyboard::ScanMute; + case kHIDUsage_KeyboardVolumeUp: return sf::Keyboard::ScanVolumeUp; + case kHIDUsage_KeyboardVolumeDown: return sf::Keyboard::ScanVolumeDown; - case kHIDUsage_KeyboardLockingCapsLock: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardLockingNumLock: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardLockingScrollLock: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardLockingCapsLock: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLockingNumLock: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLockingScrollLock: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeypadComma: return sf::Keyboard::sUnknown; - case kHIDUsage_KeypadEqualSignAS400: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardInternational1: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardInternational2: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardInternational3: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardInternational4: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardInternational5: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardInternational6: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardInternational7: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardInternational8: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardInternational9: return sf::Keyboard::sUnknown; + case kHIDUsage_KeypadComma: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeypadEqualSignAS400: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardInternational1: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardInternational2: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardInternational3: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardInternational4: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardInternational5: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardInternational6: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardInternational7: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardInternational8: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardInternational9: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardLANG1: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardLANG2: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardLANG3: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardLANG4: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardLANG5: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardLANG6: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardLANG7: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardLANG8: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardLANG9: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardLANG1: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLANG2: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLANG3: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLANG4: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLANG5: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLANG6: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLANG7: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLANG8: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLANG9: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardAlternateErase: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardSysReqOrAttention: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardCancel: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardClear: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardPrior: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardReturn: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardSeparator: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardOut: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardOper: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardClearOrAgain: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardCrSelOrProps: return sf::Keyboard::sUnknown; - case kHIDUsage_KeyboardExSel: return sf::Keyboard::sUnknown; + case kHIDUsage_KeyboardAlternateErase: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardSysReqOrAttention: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardCancel: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardClear: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardPrior: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardReturn: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardSeparator: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardOut: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardOper: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardClearOrAgain: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardCrSelOrProps: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardExSel: return sf::Keyboard::ScanUnknown; /* 0xa5-0xdf Reserved */ - case kHIDUsage_KeyboardLeftControl: return sf::Keyboard::sLControl; - case kHIDUsage_KeyboardLeftShift: return sf::Keyboard::sLShift; - case kHIDUsage_KeyboardLeftAlt: return sf::Keyboard::sLAlt; - case kHIDUsage_KeyboardLeftGUI: return sf::Keyboard::sLSystem; - case kHIDUsage_KeyboardRightControl: return sf::Keyboard::sRControl; - case kHIDUsage_KeyboardRightShift: return sf::Keyboard::sRShift; - case kHIDUsage_KeyboardRightAlt: return sf::Keyboard::sRAlt; - case kHIDUsage_KeyboardRightGUI: return sf::Keyboard::sRSystem; + case kHIDUsage_KeyboardLeftControl: return sf::Keyboard::ScanLControl; + case kHIDUsage_KeyboardLeftShift: return sf::Keyboard::ScanLShift; + case kHIDUsage_KeyboardLeftAlt: return sf::Keyboard::ScanLAlt; + case kHIDUsage_KeyboardLeftGUI: return sf::Keyboard::ScanLSystem; + case kHIDUsage_KeyboardRightControl: return sf::Keyboard::ScanRControl; + case kHIDUsage_KeyboardRightShift: return sf::Keyboard::ScanRShift; + case kHIDUsage_KeyboardRightAlt: return sf::Keyboard::ScanRAlt; + case kHIDUsage_KeyboardRightGUI: return sf::Keyboard::ScanRSystem; /* 0xe8-0xffff Reserved */ - case kHIDUsage_Keyboard_Reserved: return sf::Keyboard::sUnknown; - default: return sf::Keyboard::sUnknown; + case kHIDUsage_Keyboard_Reserved: return sf::Keyboard::ScanUnknown; + default: return sf::Keyboard::ScanUnknown; } } @@ -957,151 +957,151 @@ Keyboard::Scancode HIDInputManager::nonLocalizedKey(UniChar virtualKeycode) // /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Events.h switch (virtualKeycode) { - case 0x00: return sf::Keyboard::sA; - case 0x0b: return sf::Keyboard::sB; - case 0x08: return sf::Keyboard::sC; - case 0x02: return sf::Keyboard::sD; - case 0x0e: return sf::Keyboard::sE; - case 0x03: return sf::Keyboard::sF; - case 0x05: return sf::Keyboard::sG; - case 0x04: return sf::Keyboard::sH; - case 0x22: return sf::Keyboard::sI; - case 0x26: return sf::Keyboard::sJ; - case 0x28: return sf::Keyboard::sK; - case 0x25: return sf::Keyboard::sL; - case 0x2e: return sf::Keyboard::sM; - case 0x2d: return sf::Keyboard::sN; - case 0x1f: return sf::Keyboard::sO; - case 0x23: return sf::Keyboard::sP; - case 0x0c: return sf::Keyboard::sQ; - case 0x0f: return sf::Keyboard::sR; - case 0x01: return sf::Keyboard::sS; - case 0x11: return sf::Keyboard::sT; - case 0x20: return sf::Keyboard::sU; - case 0x09: return sf::Keyboard::sV; - case 0x0d: return sf::Keyboard::sW; - case 0x07: return sf::Keyboard::sX; - case 0x10: return sf::Keyboard::sY; - case 0x06: return sf::Keyboard::sZ; + case 0x00: return sf::Keyboard::ScanA; + case 0x0b: return sf::Keyboard::ScanB; + case 0x08: return sf::Keyboard::ScanC; + case 0x02: return sf::Keyboard::ScanD; + case 0x0e: return sf::Keyboard::ScanE; + case 0x03: return sf::Keyboard::ScanF; + case 0x05: return sf::Keyboard::ScanG; + case 0x04: return sf::Keyboard::ScanH; + case 0x22: return sf::Keyboard::ScanI; + case 0x26: return sf::Keyboard::ScanJ; + case 0x28: return sf::Keyboard::ScanK; + case 0x25: return sf::Keyboard::ScanL; + case 0x2e: return sf::Keyboard::ScanM; + case 0x2d: return sf::Keyboard::ScanN; + case 0x1f: return sf::Keyboard::ScanO; + case 0x23: return sf::Keyboard::ScanP; + case 0x0c: return sf::Keyboard::ScanQ; + case 0x0f: return sf::Keyboard::ScanR; + case 0x01: return sf::Keyboard::ScanS; + case 0x11: return sf::Keyboard::ScanT; + case 0x20: return sf::Keyboard::ScanU; + case 0x09: return sf::Keyboard::ScanV; + case 0x0d: return sf::Keyboard::ScanW; + case 0x07: return sf::Keyboard::ScanX; + case 0x10: return sf::Keyboard::ScanY; + case 0x06: return sf::Keyboard::ScanZ; - case 0x12: return sf::Keyboard::sNum1; - case 0x13: return sf::Keyboard::sNum2; - case 0x14: return sf::Keyboard::sNum3; - case 0x15: return sf::Keyboard::sNum4; - case 0x17: return sf::Keyboard::sNum5; - case 0x16: return sf::Keyboard::sNum6; - case 0x1a: return sf::Keyboard::sNum7; - case 0x1c: return sf::Keyboard::sNum8; - case 0x19: return sf::Keyboard::sNum9; - case 0x1d: return sf::Keyboard::sNum0; + case 0x12: return sf::Keyboard::ScanNum1; + case 0x13: return sf::Keyboard::ScanNum2; + case 0x14: return sf::Keyboard::ScanNum3; + case 0x15: return sf::Keyboard::ScanNum4; + case 0x17: return sf::Keyboard::ScanNum5; + case 0x16: return sf::Keyboard::ScanNum6; + case 0x1a: return sf::Keyboard::ScanNum7; + case 0x1c: return sf::Keyboard::ScanNum8; + case 0x19: return sf::Keyboard::ScanNum9; + case 0x1d: return sf::Keyboard::ScanNum0; - case 0x24: return sf::Keyboard::sEnter; - case 0x35: return sf::Keyboard::sEscape; - case 0x33: return sf::Keyboard::sBackspace; - case 0x30: return sf::Keyboard::sTab; - case 0x31: return sf::Keyboard::sSpace; - // case 0x27: return sf::Keyboard::sHyphen; // TODO 0x27 is for Quote - case 0x18: return sf::Keyboard::sEquals; - case 0x21: return sf::Keyboard::sLBracket; - case 0x1e: return sf::Keyboard::sRBracket; - case 0x2a: return sf::Keyboard::sBackslash; - case 0x1b: return sf::Keyboard::sDash; - case 0x29: return sf::Keyboard::sSemicolon; - case 0x27: return sf::Keyboard::sQuote; - case 0x32: return sf::Keyboard::sGraveAccent; - case 0x2b: return sf::Keyboard::sComma; - case 0x2f: return sf::Keyboard::sPeriod; - case 0x2c: return sf::Keyboard::sForwardSlash; + case 0x24: return sf::Keyboard::ScanEnter; + case 0x35: return sf::Keyboard::ScanEscape; + case 0x33: return sf::Keyboard::ScanBackspace; + case 0x30: return sf::Keyboard::ScanTab; + case 0x31: return sf::Keyboard::ScanSpace; + // case 0x27: return sf::Keyboard::ScanHyphen; // TODO 0x27 is for Quote + case 0x18: return sf::Keyboard::ScanEquals; + case 0x21: return sf::Keyboard::ScanLBracket; + case 0x1e: return sf::Keyboard::ScanRBracket; + case 0x2a: return sf::Keyboard::ScanBackslash; + case 0x1b: return sf::Keyboard::ScanDash; + case 0x29: return sf::Keyboard::ScanSemicolon; + case 0x27: return sf::Keyboard::ScanQuote; + case 0x32: return sf::Keyboard::ScanGraveAccent; + case 0x2b: return sf::Keyboard::ScanComma; + case 0x2f: return sf::Keyboard::ScanPeriod; + case 0x2c: return sf::Keyboard::ScanForwardSlash; - case 0x7a: return sf::Keyboard::sF1; - case 0x78: return sf::Keyboard::sF2; - case 0x63: return sf::Keyboard::sF3; - case 0x76: return sf::Keyboard::sF4; - case 0x60: return sf::Keyboard::sF5; - case 0x61: return sf::Keyboard::sF6; - case 0x62: return sf::Keyboard::sF7; - case 0x64: return sf::Keyboard::sF8; - case 0x65: return sf::Keyboard::sF9; - case 0x6d: return sf::Keyboard::sF10; - case 0x67: return sf::Keyboard::sF11; - case 0x6f: return sf::Keyboard::sF12; - case 0x69: return sf::Keyboard::sF13; - case 0x6b: return sf::Keyboard::sF14; - case 0x71: return sf::Keyboard::sF15; + case 0x7a: return sf::Keyboard::ScanF1; + case 0x78: return sf::Keyboard::ScanF2; + case 0x63: return sf::Keyboard::ScanF3; + case 0x76: return sf::Keyboard::ScanF4; + case 0x60: return sf::Keyboard::ScanF5; + case 0x61: return sf::Keyboard::ScanF6; + case 0x62: return sf::Keyboard::ScanF7; + case 0x64: return sf::Keyboard::ScanF8; + case 0x65: return sf::Keyboard::ScanF9; + case 0x6d: return sf::Keyboard::ScanF10; + case 0x67: return sf::Keyboard::ScanF11; + case 0x6f: return sf::Keyboard::ScanF12; + case 0x69: return sf::Keyboard::ScanF13; + case 0x6b: return sf::Keyboard::ScanF14; + case 0x71: return sf::Keyboard::ScanF15; - case 0x39: return sf::Keyboard::sCapsLock; + case 0x39: return sf::Keyboard::ScanCapsLock; /* TODO Those are missing: - * case 0x: return sf::Keyboard::sPrintScreen; - * case 0x: return sf::Keyboard::sScrollLock; - * case 0x: return sf::Keyboard::sPause; + * case 0x: return sf::Keyboard::ScanPrintScreen; + * case 0x: return sf::Keyboard::ScanScrollLock; + * case 0x: return sf::Keyboard::ScanPause; */ - case 0x72: return sf::Keyboard::sInsert; - case 0x73: return sf::Keyboard::sHome; - case 0x74: return sf::Keyboard::sPageUp; - case 0x75: return sf::Keyboard::sDelete; - case 0x77: return sf::Keyboard::sEnd; - case 0x79: return sf::Keyboard::sPageDown; + case 0x72: return sf::Keyboard::ScanInsert; + case 0x73: return sf::Keyboard::ScanHome; + case 0x74: return sf::Keyboard::ScanPageUp; + case 0x75: return sf::Keyboard::ScanDelete; + case 0x77: return sf::Keyboard::ScanEnd; + case 0x79: return sf::Keyboard::ScanPageDown; - case 0x7c: return sf::Keyboard::sRight; - case 0x7b: return sf::Keyboard::sLeft; - case 0x7d: return sf::Keyboard::sDown; - case 0x7e: return sf::Keyboard::sUp; + case 0x7c: return sf::Keyboard::ScanRight; + case 0x7b: return sf::Keyboard::ScanLeft; + case 0x7d: return sf::Keyboard::ScanDown; + case 0x7e: return sf::Keyboard::ScanUp; - case 0x47: return sf::Keyboard::sNumLock; - case 0x4b: return sf::Keyboard::sDivide; - case 0x43: return sf::Keyboard::sMultiply; - case 0x4e: return sf::Keyboard::sMinus; - case 0x45: return sf::Keyboard::sPlus; - case 0x51: return sf::Keyboard::sPadEquals; - case 0x4c: return sf::Keyboard::sReturn; - case 0x41: return sf::Keyboard::sDecimal; + case 0x47: return sf::Keyboard::ScanNumLock; + case 0x4b: return sf::Keyboard::ScanDivide; + case 0x43: return sf::Keyboard::ScanMultiply; + case 0x4e: return sf::Keyboard::ScanMinus; + case 0x45: return sf::Keyboard::ScanPlus; + case 0x51: return sf::Keyboard::ScanPadEquals; + case 0x4c: return sf::Keyboard::ScanReturn; + case 0x41: return sf::Keyboard::ScanDecimal; - case 0x53: return sf::Keyboard::sNumpad1; - case 0x54: return sf::Keyboard::sNumpad2; - case 0x55: return sf::Keyboard::sNumpad3; - case 0x56: return sf::Keyboard::sNumpad4; - case 0x57: return sf::Keyboard::sNumpad5; - case 0x58: return sf::Keyboard::sNumpad6; - case 0x59: return sf::Keyboard::sNumpad7; - case 0x5b: return sf::Keyboard::sNumpad8; - case 0x5c: return sf::Keyboard::sNumpad9; - case 0x52: return sf::Keyboard::sNumpad0; + case 0x53: return sf::Keyboard::ScanNumpad1; + case 0x54: return sf::Keyboard::ScanNumpad2; + case 0x55: return sf::Keyboard::ScanNumpad3; + case 0x56: return sf::Keyboard::ScanNumpad4; + case 0x57: return sf::Keyboard::ScanNumpad5; + case 0x58: return sf::Keyboard::ScanNumpad6; + case 0x59: return sf::Keyboard::ScanNumpad7; + case 0x5b: return sf::Keyboard::ScanNumpad8; + case 0x5c: return sf::Keyboard::ScanNumpad9; + case 0x52: return sf::Keyboard::ScanNumpad0; /* TODO Those are missing: - * case 0x: return sf::Keyboard::sReverseSolidus; - * case 0x: return sf::Keyboard::sApplication; - * case 0x: return sf::Keyboard::sExecute; - * case 0x72: return sf::Keyboard::sHelp; // 0x72 is for Insert - * case 0x: return sf::Keyboard::sMenu; - * case 0x: return sf::Keyboard::sSelect; - * case 0x: return sf::Keyboard::sStop; - * case 0x: return sf::Keyboard::sAgain; - * case 0x: return sf::Keyboard::sUndo; - * case 0x: return sf::Keyboard::sCut; - * case 0x: return sf::Keyboard::sCopy; - * case 0x: return sf::Keyboard::sPaste; - * case 0x: return sf::Keyboard::sFind; + * case 0x: return sf::Keyboard::ScanReverseSolidus; + * case 0x: return sf::Keyboard::ScanApplication; + * case 0x: return sf::Keyboard::ScanExecute; + * case 0x72: return sf::Keyboard::ScanHelp; // 0x72 is for Insert + * case 0x: return sf::Keyboard::ScanMenu; + * case 0x: return sf::Keyboard::ScanSelect; + * case 0x: return sf::Keyboard::ScanStop; + * case 0x: return sf::Keyboard::ScanAgain; + * case 0x: return sf::Keyboard::ScanUndo; + * case 0x: return sf::Keyboard::ScanCut; + * case 0x: return sf::Keyboard::ScanCopy; + * case 0x: return sf::Keyboard::ScanPaste; + * case 0x: return sf::Keyboard::ScanFind; */ - case 0x4a: return sf::Keyboard::sMute; - case 0x48: return sf::Keyboard::sVolumeUp; - case 0x49: return sf::Keyboard::sVolumeDown; + case 0x4a: return sf::Keyboard::ScanMute; + case 0x48: return sf::Keyboard::ScanVolumeUp; + case 0x49: return sf::Keyboard::ScanVolumeDown; /* NOTE Those are symmetric so we leave them out. * Thankfully handled through modifiers and not virtual codes. - * case 0x3b: return sf::Keyboard::sLControl; - * case 0x38: return sf::Keyboard::sLShift; - * case 0x3a: return sf::Keyboard::sLAlt; - * case 0x37: return sf::Keyboard::sLSystem; - * case 0x3b: return sf::Keyboard::sRControl; - * case 0x38: return sf::Keyboard::sRShift; - * case 0x3a: return sf::Keyboard::sRAlt; - * case 0x37: return sf::Keyboard::sRSystem; + * case 0x3b: return sf::Keyboard::ScanLControl; + * case 0x38: return sf::Keyboard::ScanLShift; + * case 0x3a: return sf::Keyboard::ScanLAlt; + * case 0x37: return sf::Keyboard::ScanLSystem; + * case 0x3b: return sf::Keyboard::ScanRControl; + * case 0x38: return sf::Keyboard::ScanRShift; + * case 0x3a: return sf::Keyboard::ScanRAlt; + * case 0x37: return sf::Keyboard::ScanRSystem; */ - default: return sf::Keyboard::sUnknown; + default: return sf::Keyboard::ScanUnknown; } } @@ -1111,147 +1111,147 @@ UInt8 HIDInputManager::scanToVirtualCode(Keyboard::Scancode code) { switch (code) { - case sf::Keyboard::sA: return 0x00; - case sf::Keyboard::sB: return 0x0b; - case sf::Keyboard::sC: return 0x08; - case sf::Keyboard::sD: return 0x02; - case sf::Keyboard::sE: return 0x0e; - case sf::Keyboard::sF: return 0x03; - case sf::Keyboard::sG: return 0x05; - case sf::Keyboard::sH: return 0x04; - case sf::Keyboard::sI: return 0x22; - case sf::Keyboard::sJ: return 0x26; - case sf::Keyboard::sK: return 0x28; - case sf::Keyboard::sL: return 0x25; - case sf::Keyboard::sM: return 0x2e; - case sf::Keyboard::sN: return 0x2d; - case sf::Keyboard::sO: return 0x1f; - case sf::Keyboard::sP: return 0x23; - case sf::Keyboard::sQ: return 0x0c; - case sf::Keyboard::sR: return 0x0f; - case sf::Keyboard::sS: return 0x01; - case sf::Keyboard::sT: return 0x11; - case sf::Keyboard::sU: return 0x20; - case sf::Keyboard::sV: return 0x09; - case sf::Keyboard::sW: return 0x0d; - case sf::Keyboard::sX: return 0x07; - case sf::Keyboard::sY: return 0x10; - case sf::Keyboard::sZ: return 0x06; + case sf::Keyboard::ScanA: return 0x00; + case sf::Keyboard::ScanB: return 0x0b; + case sf::Keyboard::ScanC: return 0x08; + case sf::Keyboard::ScanD: return 0x02; + case sf::Keyboard::ScanE: return 0x0e; + case sf::Keyboard::ScanF: return 0x03; + case sf::Keyboard::ScanG: return 0x05; + case sf::Keyboard::ScanH: return 0x04; + case sf::Keyboard::ScanI: return 0x22; + case sf::Keyboard::ScanJ: return 0x26; + case sf::Keyboard::ScanK: return 0x28; + case sf::Keyboard::ScanL: return 0x25; + case sf::Keyboard::ScanM: return 0x2e; + case sf::Keyboard::ScanN: return 0x2d; + case sf::Keyboard::ScanO: return 0x1f; + case sf::Keyboard::ScanP: return 0x23; + case sf::Keyboard::ScanQ: return 0x0c; + case sf::Keyboard::ScanR: return 0x0f; + case sf::Keyboard::ScanS: return 0x01; + case sf::Keyboard::ScanT: return 0x11; + case sf::Keyboard::ScanU: return 0x20; + case sf::Keyboard::ScanV: return 0x09; + case sf::Keyboard::ScanW: return 0x0d; + case sf::Keyboard::ScanX: return 0x07; + case sf::Keyboard::ScanY: return 0x10; + case sf::Keyboard::ScanZ: return 0x06; - case sf::Keyboard::sNum1: return 0x12; - case sf::Keyboard::sNum2: return 0x13; - case sf::Keyboard::sNum3: return 0x14; - case sf::Keyboard::sNum4: return 0x15; - case sf::Keyboard::sNum5: return 0x17; - case sf::Keyboard::sNum6: return 0x16; - case sf::Keyboard::sNum7: return 0x1a; - case sf::Keyboard::sNum8: return 0x1c; - case sf::Keyboard::sNum9: return 0x19; - case sf::Keyboard::sNum0: return 0x1d; + case sf::Keyboard::ScanNum1: return 0x12; + case sf::Keyboard::ScanNum2: return 0x13; + case sf::Keyboard::ScanNum3: return 0x14; + case sf::Keyboard::ScanNum4: return 0x15; + case sf::Keyboard::ScanNum5: return 0x17; + case sf::Keyboard::ScanNum6: return 0x16; + case sf::Keyboard::ScanNum7: return 0x1a; + case sf::Keyboard::ScanNum8: return 0x1c; + case sf::Keyboard::ScanNum9: return 0x19; + case sf::Keyboard::ScanNum0: return 0x1d; - case sf::Keyboard::sEnter: return 0x24; - case sf::Keyboard::sEscape: return 0x35; - case sf::Keyboard::sBackspace: return 0x33; - case sf::Keyboard::sTab: return 0x30; - case sf::Keyboard::sSpace: return 0x31; + case sf::Keyboard::ScanEnter: return 0x24; + case sf::Keyboard::ScanEscape: return 0x35; + case sf::Keyboard::ScanBackspace: return 0x33; + case sf::Keyboard::ScanTab: return 0x30; + case sf::Keyboard::ScanSpace: return 0x31; - // case sf::Keyboard::sHyphen: return 0; // 0x27 is for Quote + // case sf::Keyboard::ScanHyphen: return 0; // 0x27 is for Quote - case sf::Keyboard::sEquals: return 0x18; - case sf::Keyboard::sLBracket: return 0x21; - case sf::Keyboard::sRBracket: return 0x1e; - case sf::Keyboard::sBackslash: return 0x2a; - case sf::Keyboard::sDash: return 0x1b; - case sf::Keyboard::sSemicolon: return 0x29; - case sf::Keyboard::sQuote: return 0x27; - case sf::Keyboard::sGraveAccent: return 0x32; - case sf::Keyboard::sComma: return 0x2b; - case sf::Keyboard::sPeriod: return 0x2f; - case sf::Keyboard::sForwardSlash: return 0x2c; + case sf::Keyboard::ScanEquals: return 0x18; + case sf::Keyboard::ScanLBracket: return 0x21; + case sf::Keyboard::ScanRBracket: return 0x1e; + case sf::Keyboard::ScanBackslash: return 0x2a; + case sf::Keyboard::ScanDash: return 0x1b; + case sf::Keyboard::ScanSemicolon: return 0x29; + case sf::Keyboard::ScanQuote: return 0x27; + case sf::Keyboard::ScanGraveAccent: return 0x32; + case sf::Keyboard::ScanComma: return 0x2b; + case sf::Keyboard::ScanPeriod: return 0x2f; + case sf::Keyboard::ScanForwardSlash: return 0x2c; - case sf::Keyboard::sF1: return 0x7a; - case sf::Keyboard::sF2: return 0x78; - case sf::Keyboard::sF3: return 0x63; - case sf::Keyboard::sF4: return 0x76; - case sf::Keyboard::sF5: return 0x60; - case sf::Keyboard::sF6: return 0x61; - case sf::Keyboard::sF7: return 0x62; - case sf::Keyboard::sF8: return 0x64; - case sf::Keyboard::sF9: return 0x65; - case sf::Keyboard::sF10: return 0x6d; - case sf::Keyboard::sF11: return 0x67; - case sf::Keyboard::sF12: return 0x6f; - case sf::Keyboard::sF13: return 0x69; - case sf::Keyboard::sF14: return 0x6b; - case sf::Keyboard::sF15: return 0x71; + case sf::Keyboard::ScanF1: return 0x7a; + case sf::Keyboard::ScanF2: return 0x78; + case sf::Keyboard::ScanF3: return 0x63; + case sf::Keyboard::ScanF4: return 0x76; + case sf::Keyboard::ScanF5: return 0x60; + case sf::Keyboard::ScanF6: return 0x61; + case sf::Keyboard::ScanF7: return 0x62; + case sf::Keyboard::ScanF8: return 0x64; + case sf::Keyboard::ScanF9: return 0x65; + case sf::Keyboard::ScanF10: return 0x6d; + case sf::Keyboard::ScanF11: return 0x67; + case sf::Keyboard::ScanF12: return 0x6f; + case sf::Keyboard::ScanF13: return 0x69; + case sf::Keyboard::ScanF14: return 0x6b; + case sf::Keyboard::ScanF15: return 0x71; - case sf::Keyboard::sCapsLock: return 0x39; + case sf::Keyboard::ScanCapsLock: return 0x39; /* TODO Those are missing: - * case sf::Keyboard::sPrintScreen: return 0; - * case sf::Keyboard::sScrollLock: return 0; - * case sf::Keyboard::sPause: return 0; + * case sf::Keyboard::ScanPrintScreen: return 0; + * case sf::Keyboard::ScanScrollLock: return 0; + * case sf::Keyboard::ScanPause: return 0; */ - case sf::Keyboard::sInsert: return 0x72; - case sf::Keyboard::sHome: return 0x73; - case sf::Keyboard::sPageUp: return 0x74; - case sf::Keyboard::sDelete: return 0x75; - case sf::Keyboard::sEnd: return 0x77; - case sf::Keyboard::sPageDown: return 0x79; + case sf::Keyboard::ScanInsert: return 0x72; + case sf::Keyboard::ScanHome: return 0x73; + case sf::Keyboard::ScanPageUp: return 0x74; + case sf::Keyboard::ScanDelete: return 0x75; + case sf::Keyboard::ScanEnd: return 0x77; + case sf::Keyboard::ScanPageDown: return 0x79; - case sf::Keyboard::sRight: return 0x7c; - case sf::Keyboard::sLeft: return 0x7b; - case sf::Keyboard::sDown: return 0x7d; - case sf::Keyboard::sUp: return 0x7e; + case sf::Keyboard::ScanRight: return 0x7c; + case sf::Keyboard::ScanLeft: return 0x7b; + case sf::Keyboard::ScanDown: return 0x7d; + case sf::Keyboard::ScanUp: return 0x7e; - case sf::Keyboard::sNumLock: return 0x47; - case sf::Keyboard::sDivide: return 0x4b; - case sf::Keyboard::sMultiply: return 0x43; - case sf::Keyboard::sMinus: return 0x4e; - case sf::Keyboard::sPlus: return 0x45; - case sf::Keyboard::sPadEquals: return 0x51; - case sf::Keyboard::sReturn: return 0x4c; - case sf::Keyboard::sDecimal: return 0x41; + case sf::Keyboard::ScanNumLock: return 0x47; + case sf::Keyboard::ScanDivide: return 0x4b; + case sf::Keyboard::ScanMultiply: return 0x43; + case sf::Keyboard::ScanMinus: return 0x4e; + case sf::Keyboard::ScanPlus: return 0x45; + case sf::Keyboard::ScanPadEquals: return 0x51; + case sf::Keyboard::ScanReturn: return 0x4c; + case sf::Keyboard::ScanDecimal: return 0x41; - case sf::Keyboard::sNumpad1: return 0x53; - case sf::Keyboard::sNumpad2: return 0x54; - case sf::Keyboard::sNumpad3: return 0x55; - case sf::Keyboard::sNumpad4: return 0x56; - case sf::Keyboard::sNumpad5: return 0x57; - case sf::Keyboard::sNumpad6: return 0x58; - case sf::Keyboard::sNumpad7: return 0x59; - case sf::Keyboard::sNumpad8: return 0x5b; - case sf::Keyboard::sNumpad9: return 0x5c; - case sf::Keyboard::sNumpad0: return 0x52; + case sf::Keyboard::ScanNumpad1: return 0x53; + case sf::Keyboard::ScanNumpad2: return 0x54; + case sf::Keyboard::ScanNumpad3: return 0x55; + case sf::Keyboard::ScanNumpad4: return 0x56; + case sf::Keyboard::ScanNumpad5: return 0x57; + case sf::Keyboard::ScanNumpad6: return 0x58; + case sf::Keyboard::ScanNumpad7: return 0x59; + case sf::Keyboard::ScanNumpad8: return 0x5b; + case sf::Keyboard::ScanNumpad9: return 0x5c; + case sf::Keyboard::ScanNumpad0: return 0x52; /* TODO Those are missing: - * case sf::Keyboard::sReverseSolidus: return 0; - * case sf::Keyboard::sApplication: return 0; - * case sf::Keyboard::sExecute: return 0; - * case sf::Keyboard::sHelp: return 0; - * case sf::Keyboard::sMenu: return 0; - * case sf::Keyboard::sSelect: return 0; - * case sf::Keyboard::sStop: return 0; - * case sf::Keyboard::sAgain: return 0; - * case sf::Keyboard::sUndo: return 0; - * case sf::Keyboard::sCut: return 0; - * case sf::Keyboard::sCopy: return 0; - * case sf::Keyboard::sPaste: return 0; - * case sf::Keyboard::sFind: return 0; + * case sf::Keyboard::ScanReverseSolidus: return 0; + * case sf::Keyboard::ScanApplication: return 0; + * case sf::Keyboard::ScanExecute: return 0; + * case sf::Keyboard::ScanHelp: return 0; + * case sf::Keyboard::ScanMenu: return 0; + * case sf::Keyboard::ScanSelect: return 0; + * case sf::Keyboard::ScanStop: return 0; + * case sf::Keyboard::ScanAgain: return 0; + * case sf::Keyboard::ScanUndo: return 0; + * case sf::Keyboard::ScanCut: return 0; + * case sf::Keyboard::ScanCopy: return 0; + * case sf::Keyboard::ScanPaste: return 0; + * case sf::Keyboard::ScanFind: return 0; */ - case sf::Keyboard::sMute: return 0x4a; - case sf::Keyboard::sVolumeUp: return 0x48; - case sf::Keyboard::sVolumeDown: return 0x49; + case sf::Keyboard::ScanMute: return 0x4a; + case sf::Keyboard::ScanVolumeUp: return 0x48; + case sf::Keyboard::ScanVolumeDown: return 0x49; - case sf::Keyboard::sLControl: return 0x3b; - case sf::Keyboard::sLShift: return 0x38; - case sf::Keyboard::sLAlt: return 0x3a; - case sf::Keyboard::sLSystem: return 0x37; - case sf::Keyboard::sRControl: return 0x3b; - case sf::Keyboard::sRShift: return 0x38; - case sf::Keyboard::sRAlt: return 0x3a; - case sf::Keyboard::sRSystem: return 0x37; + case sf::Keyboard::ScanLControl: return 0x3b; + case sf::Keyboard::ScanLShift: return 0x38; + case sf::Keyboard::ScanLAlt: return 0x3a; + case sf::Keyboard::ScanLSystem: return 0x37; + case sf::Keyboard::ScanRControl: return 0x3b; + case sf::Keyboard::ScanRShift: return 0x38; + case sf::Keyboard::ScanRAlt: return 0x3a; + case sf::Keyboard::ScanRSystem: return 0x37; default: return 0x00; } @@ -1263,65 +1263,65 @@ Keyboard::Key HIDInputManager::localizedKeyFallback(Keyboard::Scancode code) { switch (code) { - case sf::Keyboard::sEnter: return sf::Keyboard::Return; - case sf::Keyboard::sEscape: return sf::Keyboard::Escape; - case sf::Keyboard::sBackspace: return sf::Keyboard::BackSpace; - case sf::Keyboard::sTab: return sf::Keyboard::Tab; - case sf::Keyboard::sSpace: return sf::Keyboard::Space; + case sf::Keyboard::ScanEnter: return sf::Keyboard::Return; + case sf::Keyboard::ScanEscape: return sf::Keyboard::Escape; + case sf::Keyboard::ScanBackspace: return sf::Keyboard::BackSpace; + case sf::Keyboard::ScanTab: return sf::Keyboard::Tab; + case sf::Keyboard::ScanSpace: return sf::Keyboard::Space; - case sf::Keyboard::sF1: return sf::Keyboard::F1; - case sf::Keyboard::sF2: return sf::Keyboard::F2; - case sf::Keyboard::sF3: return sf::Keyboard::F3; - case sf::Keyboard::sF4: return sf::Keyboard::F4; - case sf::Keyboard::sF5: return sf::Keyboard::F5; - case sf::Keyboard::sF6: return sf::Keyboard::F6; - case sf::Keyboard::sF7: return sf::Keyboard::F7; - case sf::Keyboard::sF8: return sf::Keyboard::F8; - case sf::Keyboard::sF9: return sf::Keyboard::F9; - case sf::Keyboard::sF10: return sf::Keyboard::F10; - case sf::Keyboard::sF11: return sf::Keyboard::F11; - case sf::Keyboard::sF12: return sf::Keyboard::F12; - case sf::Keyboard::sF13: return sf::Keyboard::F13; - case sf::Keyboard::sF14: return sf::Keyboard::F14; - case sf::Keyboard::sF15: return sf::Keyboard::F15; + case sf::Keyboard::ScanF1: return sf::Keyboard::F1; + case sf::Keyboard::ScanF2: return sf::Keyboard::F2; + case sf::Keyboard::ScanF3: return sf::Keyboard::F3; + case sf::Keyboard::ScanF4: return sf::Keyboard::F4; + case sf::Keyboard::ScanF5: return sf::Keyboard::F5; + case sf::Keyboard::ScanF6: return sf::Keyboard::F6; + case sf::Keyboard::ScanF7: return sf::Keyboard::F7; + case sf::Keyboard::ScanF8: return sf::Keyboard::F8; + case sf::Keyboard::ScanF9: return sf::Keyboard::F9; + case sf::Keyboard::ScanF10: return sf::Keyboard::F10; + case sf::Keyboard::ScanF11: return sf::Keyboard::F11; + case sf::Keyboard::ScanF12: return sf::Keyboard::F12; + case sf::Keyboard::ScanF13: return sf::Keyboard::F13; + case sf::Keyboard::ScanF14: return sf::Keyboard::F14; + case sf::Keyboard::ScanF15: return sf::Keyboard::F15; - case sf::Keyboard::sPause: return sf::Keyboard::Pause; - case sf::Keyboard::sInsert: return sf::Keyboard::Insert; - case sf::Keyboard::sHome: return sf::Keyboard::Home; - case sf::Keyboard::sPageUp: return sf::Keyboard::PageUp; - case sf::Keyboard::sDelete: return sf::Keyboard::Delete; - case sf::Keyboard::sEnd: return sf::Keyboard::End; - case sf::Keyboard::sPageDown: return sf::Keyboard::PageDown; + case sf::Keyboard::ScanPause: return sf::Keyboard::Pause; + case sf::Keyboard::ScanInsert: return sf::Keyboard::Insert; + case sf::Keyboard::ScanHome: return sf::Keyboard::Home; + case sf::Keyboard::ScanPageUp: return sf::Keyboard::PageUp; + case sf::Keyboard::ScanDelete: return sf::Keyboard::Delete; + case sf::Keyboard::ScanEnd: return sf::Keyboard::End; + case sf::Keyboard::ScanPageDown: return sf::Keyboard::PageDown; - case sf::Keyboard::sRight: return sf::Keyboard::Right; - case sf::Keyboard::sLeft: return sf::Keyboard::Left; - case sf::Keyboard::sDown: return sf::Keyboard::Down; - case sf::Keyboard::sUp: return sf::Keyboard::Up; + case sf::Keyboard::ScanRight: return sf::Keyboard::Right; + case sf::Keyboard::ScanLeft: return sf::Keyboard::Left; + case sf::Keyboard::ScanDown: return sf::Keyboard::Down; + case sf::Keyboard::ScanUp: return sf::Keyboard::Up; - case sf::Keyboard::sDivide: return sf::Keyboard::Divide; - case sf::Keyboard::sMultiply: return sf::Keyboard::Multiply; - case sf::Keyboard::sMinus: return sf::Keyboard::Subtract; - case sf::Keyboard::sPlus: return sf::Keyboard::Add; + case sf::Keyboard::ScanDivide: return sf::Keyboard::Divide; + case sf::Keyboard::ScanMultiply: return sf::Keyboard::Multiply; + case sf::Keyboard::ScanMinus: return sf::Keyboard::Subtract; + case sf::Keyboard::ScanPlus: return sf::Keyboard::Add; - case sf::Keyboard::sNumpad0: return sf::Keyboard::Numpad1; - case sf::Keyboard::sNumpad1: return sf::Keyboard::Numpad2; - case sf::Keyboard::sNumpad2: return sf::Keyboard::Numpad3; - case sf::Keyboard::sNumpad3: return sf::Keyboard::Numpad4; - case sf::Keyboard::sNumpad4: return sf::Keyboard::Numpad5; - case sf::Keyboard::sNumpad5: return sf::Keyboard::Numpad6; - case sf::Keyboard::sNumpad6: return sf::Keyboard::Numpad7; - case sf::Keyboard::sNumpad7: return sf::Keyboard::Numpad8; - case sf::Keyboard::sNumpad8: return sf::Keyboard::Numpad9; - case sf::Keyboard::sNumpad9: return sf::Keyboard::Numpad0; + case sf::Keyboard::ScanNumpad0: return sf::Keyboard::Numpad1; + case sf::Keyboard::ScanNumpad1: return sf::Keyboard::Numpad2; + case sf::Keyboard::ScanNumpad2: return sf::Keyboard::Numpad3; + case sf::Keyboard::ScanNumpad3: return sf::Keyboard::Numpad4; + case sf::Keyboard::ScanNumpad4: return sf::Keyboard::Numpad5; + case sf::Keyboard::ScanNumpad5: return sf::Keyboard::Numpad6; + case sf::Keyboard::ScanNumpad6: return sf::Keyboard::Numpad7; + case sf::Keyboard::ScanNumpad7: return sf::Keyboard::Numpad8; + case sf::Keyboard::ScanNumpad8: return sf::Keyboard::Numpad9; + case sf::Keyboard::ScanNumpad9: return sf::Keyboard::Numpad0; - case sf::Keyboard::sLControl: return sf::Keyboard::LControl; - case sf::Keyboard::sLShift: return sf::Keyboard::LShift; - case sf::Keyboard::sLAlt: return sf::Keyboard::LAlt; - case sf::Keyboard::sLSystem: return sf::Keyboard::LSystem; - case sf::Keyboard::sRControl: return sf::Keyboard::RControl; - case sf::Keyboard::sRShift: return sf::Keyboard::RShift; - case sf::Keyboard::sRAlt: return sf::Keyboard::RAlt; - case sf::Keyboard::sRSystem: return sf::Keyboard::RSystem; + case sf::Keyboard::ScanLControl: return sf::Keyboard::LControl; + case sf::Keyboard::ScanLShift: return sf::Keyboard::LShift; + case sf::Keyboard::ScanLAlt: return sf::Keyboard::LAlt; + case sf::Keyboard::ScanLSystem: return sf::Keyboard::LSystem; + case sf::Keyboard::ScanRControl: return sf::Keyboard::RControl; + case sf::Keyboard::ScanRShift: return sf::Keyboard::RShift; + case sf::Keyboard::ScanRAlt: return sf::Keyboard::RAlt; + case sf::Keyboard::ScanRSystem: return sf::Keyboard::RSystem; default: return sf::Keyboard::Unknown; } diff --git a/src/SFML/Window/OSX/InputImpl.hpp b/src/SFML/Window/OSX/InputImpl.hpp index dad01073..bcf73b3b 100644 --- a/src/SFML/Window/OSX/InputImpl.hpp +++ b/src/SFML/Window/OSX/InputImpl.hpp @@ -73,7 +73,7 @@ public: /// \copydoc sf::Keyboard::localizedRepresentation /// //////////////////////////////////////////////////////////// - static String localizedRepresentation(Keyboard::Scancode code); + static String getDescription(Keyboard::Scancode code); //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::setVirtualKeyboardVisible diff --git a/src/SFML/Window/OSX/InputImpl.mm b/src/SFML/Window/OSX/InputImpl.mm index 84533803..a1377c50 100644 --- a/src/SFML/Window/OSX/InputImpl.mm +++ b/src/SFML/Window/OSX/InputImpl.mm @@ -149,7 +149,7 @@ Keyboard::Scancode InputImpl::unlocalize(Keyboard::Key key) //////////////////////////////////////////////////////////// -String InputImpl::localizedRepresentation(Keyboard::Scancode code) +String InputImpl::getDescription(Keyboard::Scancode code) { return HIDInputManager::getInstance().localizedRepresentation(code); } diff --git a/src/SFML/Window/OSX/SFKeyboardModifiersHelper.mm b/src/SFML/Window/OSX/SFKeyboardModifiersHelper.mm index cf9a1940..1105ae08 100644 --- a/src/SFML/Window/OSX/SFKeyboardModifiersHelper.mm +++ b/src/SFML/Window/OSX/SFKeyboardModifiersHelper.mm @@ -161,7 +161,7 @@ void handleModifiersChanged(NSUInteger modifiers, sf::priv::WindowImplCocoa& req NSLeftShiftKeyMask, NSRightShiftKeyMask, state.leftShiftWasDown, state.rightShiftWasDown, sf::Keyboard::LShift, sf::Keyboard::RShift, - sf::Keyboard::sLShift, sf::Keyboard::sRShift, + sf::Keyboard::ScanLShift, sf::Keyboard::ScanRShift, requester ); @@ -171,7 +171,7 @@ void handleModifiersChanged(NSUInteger modifiers, sf::priv::WindowImplCocoa& req NSLeftCommandKeyMask, NSRightCommandKeyMask, state.leftCommandWasDown, state.rightCommandWasDown, sf::Keyboard::LSystem, sf::Keyboard::RSystem, - sf::Keyboard::sLSystem, sf::Keyboard::sRSystem, + sf::Keyboard::ScanLSystem, sf::Keyboard::ScanRSystem, requester ); @@ -181,7 +181,7 @@ void handleModifiersChanged(NSUInteger modifiers, sf::priv::WindowImplCocoa& req NSLeftAlternateKeyMask, NSRightAlternateKeyMask, state.leftAlternateWasDown, state.rightAlternateWasDown, sf::Keyboard::LAlt, sf::Keyboard::RAlt, - sf::Keyboard::sLAlt, sf::Keyboard::sRAlt, + sf::Keyboard::ScanLAlt, sf::Keyboard::ScanRAlt, requester ); @@ -191,7 +191,7 @@ void handleModifiersChanged(NSUInteger modifiers, sf::priv::WindowImplCocoa& req NSLeftControlKeyMask, NSRightControlKeyMask, state.leftControlWasDown, state.rightControlWasDown, sf::Keyboard::LControl, sf::Keyboard::RControl, - sf::Keyboard::sLControl, sf::Keyboard::sRControl, + sf::Keyboard::ScanLControl, sf::Keyboard::ScanRControl, requester ); } diff --git a/src/SFML/Window/OSX/SFOpenGLView+keyboard.mm b/src/SFML/Window/OSX/SFOpenGLView+keyboard.mm index 86b4f109..9162e58f 100644 --- a/src/SFML/Window/OSX/SFOpenGLView+keyboard.mm +++ b/src/SFML/Window/OSX/SFOpenGLView+keyboard.mm @@ -86,7 +86,7 @@ { sf::Event::KeyEvent key = [SFOpenGLView convertNSKeyEventToSFMLEvent:theEvent]; - if ((key.code != sf::Keyboard::Unknown) || (key.scancode != sf::Keyboard::sUnknown)) + if ((key.code != sf::Keyboard::Unknown) || (key.scancode != sf::Keyboard::ScanUnknown)) m_requester->keyDown(key); } diff --git a/src/SFML/Window/Unix/InputImpl.hpp b/src/SFML/Window/Unix/InputImpl.hpp index e692d6ec..bea33375 100644 --- a/src/SFML/Window/Unix/InputImpl.hpp +++ b/src/SFML/Window/Unix/InputImpl.hpp @@ -72,7 +72,7 @@ public: /// \copydoc sf::Keyboard::localizedRepresentation /// //////////////////////////////////////////////////////////// - static String localizedRepresentation(Keyboard::Scancode code); + static String getDescription(Keyboard::Scancode code); //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::setVirtualKeyboardVisible diff --git a/src/SFML/Window/Win32/InputImpl.hpp b/src/SFML/Window/Win32/InputImpl.hpp index 9df15889..b145f38f 100644 --- a/src/SFML/Window/Win32/InputImpl.hpp +++ b/src/SFML/Window/Win32/InputImpl.hpp @@ -72,7 +72,7 @@ public: /// \copydoc sf::Keyboard::localizedRepresentation /// //////////////////////////////////////////////////////////// - static String localizedRepresentation(Keyboard::Scancode code); + static String getDescription(Keyboard::Scancode code); //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::setVirtualKeyboardVisible diff --git a/src/SFML/Window/iOS/InputImpl.hpp b/src/SFML/Window/iOS/InputImpl.hpp index b1712fa2..a06c7dff 100644 --- a/src/SFML/Window/iOS/InputImpl.hpp +++ b/src/SFML/Window/iOS/InputImpl.hpp @@ -72,7 +72,7 @@ public: /// \copydoc sf::Keyboard::localizedRepresentation /// //////////////////////////////////////////////////////////// - static String localizedRepresentation(Keyboard::Scancode code); + static String getDescription(Keyboard::Scancode code); //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::setVirtualKeyboardVisible From 6c8544413f0c03310998c4b00f8894d6f7393d30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20D=C3=BCrrenberger?= Date: Tue, 21 Jan 2020 21:19:40 +0100 Subject: [PATCH 05/11] Add minor changes according to the review --- include/SFML/Window/Keyboard.hpp | 23 +- src/SFML/Window/Keyboard.cpp | 1 + src/SFML/Window/OSX/HIDInputManager.mm | 1324 ++++++++++++------------ 3 files changed, 674 insertions(+), 674 deletions(-) diff --git a/include/SFML/Window/Keyboard.hpp b/include/SFML/Window/Keyboard.hpp index c0f902b3..9c3fec7f 100644 --- a/include/SFML/Window/Keyboard.hpp +++ b/include/SFML/Window/Keyboard.hpp @@ -29,11 +29,12 @@ // Headers //////////////////////////////////////////////////////////// #include -#include namespace sf { +class String; + //////////////////////////////////////////////////////////// /// \brief Give access to the real-time state of the keyboard /// @@ -169,14 +170,14 @@ public: //////////////////////////////////////////////////////////// /// \brief Scancodes /// - /// The enumerators are bound to a physical key and do *not* depend - /// on the keyboard layout used by the operating system. Usually, the AT-101 + /// The enumerators are bound to a physical key and do not depend on + /// the keyboard layout used by the operating system. Usually, the AT-101 /// keyboard can be used as reference for the physical position of the keys. /// /// The scancodes are based on a subset of Table 12: Keyboard/Keypad Page /// of Universal Serial Bus (USB): HID Usage Tables, v1.12. /// - /// \todo When porting this for SFML 3, remove the `s` prefix and use + /// \todo When porting this for SFML 3, remove the `Scan` prefix and use /// enum class. /// //////////////////////////////////////////////////////////// @@ -219,10 +220,9 @@ public: ScanNum8, ///< Keyboard 8 and * key ScanNum9, ///< Keyboard 9 and ) key ScanNum0, ///< Keyboard 0 and ) key - ScanEnter, ///< Keyboard Return (ENTER) key + ScanEnter, ///< Keyboard Enter/Return key ScanEscape, ///< Keyboard Escape key ScanBackspace, ///< Keyboard Backspace key - // TODO above it's BackSpace, but is it correct? What do we use here? ScanTab, ///< Keyboard Tab key ScanSpace, ///< Keyboard Space key ScanHyphen, ///< Keyboard - and _ key @@ -230,15 +230,14 @@ public: ScanLBracket, ///< Keyboard [ and { key ScanRBracket, ///< Keyboard ] and } key ScanBackslash, ///< Keyboard \ and | key - // TODO capitalisation ScanDash, ///< Keyboard Non-US # and ~ + // TODO hyphen vs minus vs dash ScanSemicolon, ///< Keyboard ; and : key - // TODO capitalisation ScanQuote, ///< Keyboard ' and " key ScanGraveAccent, ///< Keyboard ` and ~ key ScanComma, ///< Keyboard , and < key ScanPeriod, ///< Keyboard . and > key - ScanForwardSlash, ///< Keyboard / and ? key + ScanSlash, ///< Keyboard / and ? key ScanF1, ///< Keyboard F1 key ScanF2, ///< Keyboard F2 key ScanF3, ///< Keyboard F3 key @@ -273,8 +272,8 @@ public: ScanMultiply, ///< Keypad * key ScanMinus, ///< Keypad - key ScanPlus, ///< Keypad + key - ScanPadEquals, ///< keypad = key, probably Mac only - ScanReturn, ///< Keypad Enter (return) key + ScanNumpadEquals, ///< keypad = key, probably Mac only + ScanNumpadEnter, ///< Keypad Enter/Return key ScanDecimal, ///< Keypad . and Delete key ScanNumpad1, ///< Keypad 1 and End key ScanNumpad2, ///< Keypad 2 and Down Arrow key @@ -381,7 +380,7 @@ public: /// "Left Command" on macOS. /// /// The current keyboard layout set by the operating system is used to - /// interpret the scancode: for example, sf::Keyboard::SemiColon is + /// interpret the scancode: for example, sf::Keyboard::Semicolon is /// mapped to ";" for layout and to "é" for others. /// /// \return The localized description of the code diff --git a/src/SFML/Window/Keyboard.cpp b/src/SFML/Window/Keyboard.cpp index 2742c2ba..0be3347d 100644 --- a/src/SFML/Window/Keyboard.cpp +++ b/src/SFML/Window/Keyboard.cpp @@ -27,6 +27,7 @@ //////////////////////////////////////////////////////////// #include #include +#include namespace sf diff --git a/src/SFML/Window/OSX/HIDInputManager.mm b/src/SFML/Window/OSX/HIDInputManager.mm index 430f117c..d5891a61 100644 --- a/src/SFML/Window/OSX/HIDInputManager.mm +++ b/src/SFML/Window/OSX/HIDInputManager.mm @@ -133,31 +133,31 @@ String HIDInputManager::localizedRepresentation(Keyboard::Scancode code) // Fallback to our best guess for the keys that are known to be independent of the layout. switch (code) { - case sf::Keyboard::ScanEnter: return "Enter"; - case sf::Keyboard::ScanEscape: return "Escape"; - case sf::Keyboard::ScanBackspace: return "Backspace"; - case sf::Keyboard::ScanTab: return "Tab"; - case sf::Keyboard::ScanSpace: return "Space"; + case sf::Keyboard::ScanEnter: return "Enter"; + case sf::Keyboard::ScanEscape: return "Escape"; + case sf::Keyboard::ScanBackspace: return "Backspace"; + case sf::Keyboard::ScanTab: return "Tab"; + case sf::Keyboard::ScanSpace: return "Space"; - case sf::Keyboard::ScanF1: return "F1"; - case sf::Keyboard::ScanF2: return "F2"; - case sf::Keyboard::ScanF3: return "F3"; - case sf::Keyboard::ScanF4: return "F4"; - case sf::Keyboard::ScanF5: return "F5"; - case sf::Keyboard::ScanF6: return "F6"; - case sf::Keyboard::ScanF7: return "F7"; - case sf::Keyboard::ScanF8: return "F8"; - case sf::Keyboard::ScanF9: return "F9"; - case sf::Keyboard::ScanF10: return "F10"; - case sf::Keyboard::ScanF11: return "F11"; - case sf::Keyboard::ScanF12: return "F12"; - case sf::Keyboard::ScanF13: return "F13"; - case sf::Keyboard::ScanF14: return "F14"; - case sf::Keyboard::ScanF15: return "F15"; + case sf::Keyboard::ScanF1: return "F1"; + case sf::Keyboard::ScanF2: return "F2"; + case sf::Keyboard::ScanF3: return "F3"; + case sf::Keyboard::ScanF4: return "F4"; + case sf::Keyboard::ScanF5: return "F5"; + case sf::Keyboard::ScanF6: return "F6"; + case sf::Keyboard::ScanF7: return "F7"; + case sf::Keyboard::ScanF8: return "F8"; + case sf::Keyboard::ScanF9: return "F9"; + case sf::Keyboard::ScanF10: return "F10"; + case sf::Keyboard::ScanF11: return "F11"; + case sf::Keyboard::ScanF12: return "F12"; + case sf::Keyboard::ScanF13: return "F13"; + case sf::Keyboard::ScanF14: return "F14"; + case sf::Keyboard::ScanF15: return "F15"; - case sf::Keyboard::ScanCapsLock: return "CapsLock"; - case sf::Keyboard::ScanPrintScreen: return "PrintScreen"; - case sf::Keyboard::ScanScrollLock: return "ScrollLock"; + case sf::Keyboard::ScanCapsLock: return "CapsLock"; + case sf::Keyboard::ScanPrintScreen: return "PrintScreen"; + case sf::Keyboard::ScanScrollLock: return "ScrollLock"; case sf::Keyboard::ScanPause: return "Pause"; case sf::Keyboard::ScanInsert: return "Insert"; @@ -167,55 +167,55 @@ String HIDInputManager::localizedRepresentation(Keyboard::Scancode code) case sf::Keyboard::ScanEnd: return "End"; case sf::Keyboard::ScanPageDown: return "PageDown"; - case sf::Keyboard::ScanLeft: return "Left Arrow"; - case sf::Keyboard::ScanRight: return "Right Arrow"; - case sf::Keyboard::ScanDown: return "Down Arrow"; - case sf::Keyboard::ScanUp: return "Up Arrow"; + case sf::Keyboard::ScanLeft: return "Left Arrow"; + case sf::Keyboard::ScanRight: return "Right Arrow"; + case sf::Keyboard::ScanDown: return "Down Arrow"; + case sf::Keyboard::ScanUp: return "Up Arrow"; - case sf::Keyboard::ScanNumLock: return "NumLock"; - case sf::Keyboard::ScanDivide: return "Divide (Numpad)"; - case sf::Keyboard::ScanMultiply: return "Multiply (Numpad)"; - case sf::Keyboard::ScanMinus: return "Minux (Numpad)"; - case sf::Keyboard::ScanPlus: return "Plus (Numpad)"; - case sf::Keyboard::ScanPadEquals: return "Equals (Numpad)"; - case sf::Keyboard::ScanReturn: return "Return (Numpad)"; - case sf::Keyboard::ScanDecimal: return "Decimal (Numpad)"; + case sf::Keyboard::ScanNumLock: return "NumLock"; + case sf::Keyboard::ScanDivide: return "Divide (Numpad)"; + case sf::Keyboard::ScanMultiply: return "Multiply (Numpad)"; + case sf::Keyboard::ScanMinus: return "Minux (Numpad)"; + case sf::Keyboard::ScanPlus: return "Plus (Numpad)"; + case sf::Keyboard::ScanNumpadEquals: return "Equals (Numpad)"; + case sf::Keyboard::ScanNumpadEnter: return "Enter (Numpad)"; + case sf::Keyboard::ScanDecimal: return "Decimal (Numpad)"; - case sf::Keyboard::ScanNumpad0: return "0 (Numpad)"; - case sf::Keyboard::ScanNumpad1: return "1 (Numpad)"; - case sf::Keyboard::ScanNumpad2: return "2 (Numpad)"; - case sf::Keyboard::ScanNumpad3: return "3 (Numpad)"; - case sf::Keyboard::ScanNumpad4: return "4 (Numpad)"; - case sf::Keyboard::ScanNumpad5: return "5 (Numpad)"; - case sf::Keyboard::ScanNumpad6: return "6 (Numpad)"; - case sf::Keyboard::ScanNumpad7: return "7 (Numpad)"; - case sf::Keyboard::ScanNumpad8: return "8 (Numpad)"; - case sf::Keyboard::ScanNumpad9: return "9 (Numpad)"; + case sf::Keyboard::ScanNumpad0: return "0 (Numpad)"; + case sf::Keyboard::ScanNumpad1: return "1 (Numpad)"; + case sf::Keyboard::ScanNumpad2: return "2 (Numpad)"; + case sf::Keyboard::ScanNumpad3: return "3 (Numpad)"; + case sf::Keyboard::ScanNumpad4: return "4 (Numpad)"; + case sf::Keyboard::ScanNumpad5: return "5 (Numpad)"; + case sf::Keyboard::ScanNumpad6: return "6 (Numpad)"; + case sf::Keyboard::ScanNumpad7: return "7 (Numpad)"; + case sf::Keyboard::ScanNumpad8: return "8 (Numpad)"; + case sf::Keyboard::ScanNumpad9: return "9 (Numpad)"; - case sf::Keyboard::ScanApplication: return "Application"; - case sf::Keyboard::ScanExecute: return "Execute"; - case sf::Keyboard::ScanHelp: return "Help"; - case sf::Keyboard::ScanMenu: return "Menu"; - case sf::Keyboard::ScanSelect: return "Select"; - case sf::Keyboard::ScanStop: return "Stop"; - case sf::Keyboard::ScanAgain: return "Again"; - case sf::Keyboard::ScanUndo: return "Undo"; - case sf::Keyboard::ScanCut: return "Cut"; - case sf::Keyboard::ScanCopy: return "Copy"; - case sf::Keyboard::ScanPaste: return "Paste"; - case sf::Keyboard::ScanFind: return "Find"; - case sf::Keyboard::ScanMute: return "Mute"; - case sf::Keyboard::ScanVolumeUp: return "Volume Up"; - case sf::Keyboard::ScanVolumeDown: return "Volume Down"; + case sf::Keyboard::ScanApplication: return "Application"; + case sf::Keyboard::ScanExecute: return "Execute"; + case sf::Keyboard::ScanHelp: return "Help"; + case sf::Keyboard::ScanMenu: return "Menu"; + case sf::Keyboard::ScanSelect: return "Select"; + case sf::Keyboard::ScanStop: return "Stop"; + case sf::Keyboard::ScanAgain: return "Again"; + case sf::Keyboard::ScanUndo: return "Undo"; + case sf::Keyboard::ScanCut: return "Cut"; + case sf::Keyboard::ScanCopy: return "Copy"; + case sf::Keyboard::ScanPaste: return "Paste"; + case sf::Keyboard::ScanFind: return "Find"; + case sf::Keyboard::ScanMute: return "Mute"; + case sf::Keyboard::ScanVolumeUp: return "Volume Up"; + case sf::Keyboard::ScanVolumeDown: return "Volume Down"; - case sf::Keyboard::ScanLControl: return "Control (Left)"; - case sf::Keyboard::ScanLShift: return "Shift (Left)"; - case sf::Keyboard::ScanLAlt: return "Alt (Left)"; - case sf::Keyboard::ScanLSystem: return "Command (Left)"; - case sf::Keyboard::ScanRControl: return "Control (Right)"; - case sf::Keyboard::ScanRShift: return "Shift (Right)"; - case sf::Keyboard::ScanRAlt: return "Alt (Right)"; - case sf::Keyboard::ScanRSystem: return "Command (Right)"; + case sf::Keyboard::ScanLControl: return "Control (Left)"; + case sf::Keyboard::ScanLShift: return "Shift (Left)"; + case sf::Keyboard::ScanLAlt: return "Alt (Left)"; + case sf::Keyboard::ScanLSystem: return "Command (Left)"; + case sf::Keyboard::ScanRControl: return "Control (Right)"; + case sf::Keyboard::ScanRShift: return "Shift (Right)"; + case sf::Keyboard::ScanRAlt: return "Alt (Right)"; + case sf::Keyboard::ScanRSystem: return "Command (Right)"; default: return "Unknown Scancode"; // no guess good enough possible. } @@ -465,47 +465,47 @@ sf::Keyboard::Scancode HIDInputManager::usageToScancode(UInt32 usage) { switch (usage) { - case kHIDUsage_KeyboardErrorRollOver: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardPOSTFail: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardErrorUndefined: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardErrorRollOver: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardPOSTFail: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardErrorUndefined: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardA: return sf::Keyboard::ScanA; - case kHIDUsage_KeyboardB: return sf::Keyboard::ScanB; - case kHIDUsage_KeyboardC: return sf::Keyboard::ScanC; - case kHIDUsage_KeyboardD: return sf::Keyboard::ScanD; - case kHIDUsage_KeyboardE: return sf::Keyboard::ScanE; - case kHIDUsage_KeyboardF: return sf::Keyboard::ScanF; - case kHIDUsage_KeyboardG: return sf::Keyboard::ScanG; - case kHIDUsage_KeyboardH: return sf::Keyboard::ScanH; - case kHIDUsage_KeyboardI: return sf::Keyboard::ScanI; - case kHIDUsage_KeyboardJ: return sf::Keyboard::ScanJ; - case kHIDUsage_KeyboardK: return sf::Keyboard::ScanK; - case kHIDUsage_KeyboardL: return sf::Keyboard::ScanL; - case kHIDUsage_KeyboardM: return sf::Keyboard::ScanM; - case kHIDUsage_KeyboardN: return sf::Keyboard::ScanN; - case kHIDUsage_KeyboardO: return sf::Keyboard::ScanO; - case kHIDUsage_KeyboardP: return sf::Keyboard::ScanP; - case kHIDUsage_KeyboardQ: return sf::Keyboard::ScanQ; - case kHIDUsage_KeyboardR: return sf::Keyboard::ScanR; - case kHIDUsage_KeyboardS: return sf::Keyboard::ScanS; - case kHIDUsage_KeyboardT: return sf::Keyboard::ScanT; - case kHIDUsage_KeyboardU: return sf::Keyboard::ScanU; - case kHIDUsage_KeyboardV: return sf::Keyboard::ScanV; - case kHIDUsage_KeyboardW: return sf::Keyboard::ScanW; - case kHIDUsage_KeyboardX: return sf::Keyboard::ScanX; - case kHIDUsage_KeyboardY: return sf::Keyboard::ScanY; - case kHIDUsage_KeyboardZ: return sf::Keyboard::ScanZ; + case kHIDUsage_KeyboardA: return sf::Keyboard::ScanA; + case kHIDUsage_KeyboardB: return sf::Keyboard::ScanB; + case kHIDUsage_KeyboardC: return sf::Keyboard::ScanC; + case kHIDUsage_KeyboardD: return sf::Keyboard::ScanD; + case kHIDUsage_KeyboardE: return sf::Keyboard::ScanE; + case kHIDUsage_KeyboardF: return sf::Keyboard::ScanF; + case kHIDUsage_KeyboardG: return sf::Keyboard::ScanG; + case kHIDUsage_KeyboardH: return sf::Keyboard::ScanH; + case kHIDUsage_KeyboardI: return sf::Keyboard::ScanI; + case kHIDUsage_KeyboardJ: return sf::Keyboard::ScanJ; + case kHIDUsage_KeyboardK: return sf::Keyboard::ScanK; + case kHIDUsage_KeyboardL: return sf::Keyboard::ScanL; + case kHIDUsage_KeyboardM: return sf::Keyboard::ScanM; + case kHIDUsage_KeyboardN: return sf::Keyboard::ScanN; + case kHIDUsage_KeyboardO: return sf::Keyboard::ScanO; + case kHIDUsage_KeyboardP: return sf::Keyboard::ScanP; + case kHIDUsage_KeyboardQ: return sf::Keyboard::ScanQ; + case kHIDUsage_KeyboardR: return sf::Keyboard::ScanR; + case kHIDUsage_KeyboardS: return sf::Keyboard::ScanS; + case kHIDUsage_KeyboardT: return sf::Keyboard::ScanT; + case kHIDUsage_KeyboardU: return sf::Keyboard::ScanU; + case kHIDUsage_KeyboardV: return sf::Keyboard::ScanV; + case kHIDUsage_KeyboardW: return sf::Keyboard::ScanW; + case kHIDUsage_KeyboardX: return sf::Keyboard::ScanX; + case kHIDUsage_KeyboardY: return sf::Keyboard::ScanY; + case kHIDUsage_KeyboardZ: return sf::Keyboard::ScanZ; - case kHIDUsage_Keyboard1: return sf::Keyboard::ScanNum1; - case kHIDUsage_Keyboard2: return sf::Keyboard::ScanNum2; - case kHIDUsage_Keyboard3: return sf::Keyboard::ScanNum3; - case kHIDUsage_Keyboard4: return sf::Keyboard::ScanNum4; - case kHIDUsage_Keyboard5: return sf::Keyboard::ScanNum5; - case kHIDUsage_Keyboard6: return sf::Keyboard::ScanNum6; - case kHIDUsage_Keyboard7: return sf::Keyboard::ScanNum7; - case kHIDUsage_Keyboard8: return sf::Keyboard::ScanNum8; - case kHIDUsage_Keyboard9: return sf::Keyboard::ScanNum9; - case kHIDUsage_Keyboard0: return sf::Keyboard::ScanNum0; + case kHIDUsage_Keyboard1: return sf::Keyboard::ScanNum1; + case kHIDUsage_Keyboard2: return sf::Keyboard::ScanNum2; + case kHIDUsage_Keyboard3: return sf::Keyboard::ScanNum3; + case kHIDUsage_Keyboard4: return sf::Keyboard::ScanNum4; + case kHIDUsage_Keyboard5: return sf::Keyboard::ScanNum5; + case kHIDUsage_Keyboard6: return sf::Keyboard::ScanNum6; + case kHIDUsage_Keyboard7: return sf::Keyboard::ScanNum7; + case kHIDUsage_Keyboard8: return sf::Keyboard::ScanNum8; + case kHIDUsage_Keyboard9: return sf::Keyboard::ScanNum9; + case kHIDUsage_Keyboard0: return sf::Keyboard::ScanNum0; case kHIDUsage_KeyboardReturnOrEnter: return sf::Keyboard::ScanEnter; case kHIDUsage_KeyboardEscape: return sf::Keyboard::ScanEscape; @@ -523,128 +523,128 @@ sf::Keyboard::Scancode HIDInputManager::usageToScancode(UInt32 usage) case kHIDUsage_KeyboardGraveAccentAndTilde: return sf::Keyboard::ScanGraveAccent; case kHIDUsage_KeyboardComma: return sf::Keyboard::ScanComma; case kHIDUsage_KeyboardPeriod: return sf::Keyboard::ScanPeriod; - case kHIDUsage_KeyboardSlash: return sf::Keyboard::ScanForwardSlash; + case kHIDUsage_KeyboardSlash: return sf::Keyboard::ScanSlash; case kHIDUsage_KeyboardCapsLock: return sf::Keyboard::ScanCapsLock; - case kHIDUsage_KeyboardF1: return sf::Keyboard::ScanF1; - case kHIDUsage_KeyboardF2: return sf::Keyboard::ScanF2; - case kHIDUsage_KeyboardF3: return sf::Keyboard::ScanF3; - case kHIDUsage_KeyboardF4: return sf::Keyboard::ScanF4; - case kHIDUsage_KeyboardF5: return sf::Keyboard::ScanF5; - case kHIDUsage_KeyboardF6: return sf::Keyboard::ScanF6; - case kHIDUsage_KeyboardF7: return sf::Keyboard::ScanF7; - case kHIDUsage_KeyboardF8: return sf::Keyboard::ScanF8; - case kHIDUsage_KeyboardF9: return sf::Keyboard::ScanF9; - case kHIDUsage_KeyboardF10: return sf::Keyboard::ScanF10; - case kHIDUsage_KeyboardF11: return sf::Keyboard::ScanF11; - case kHIDUsage_KeyboardF12: return sf::Keyboard::ScanF12; + case kHIDUsage_KeyboardF1: return sf::Keyboard::ScanF1; + case kHIDUsage_KeyboardF2: return sf::Keyboard::ScanF2; + case kHIDUsage_KeyboardF3: return sf::Keyboard::ScanF3; + case kHIDUsage_KeyboardF4: return sf::Keyboard::ScanF4; + case kHIDUsage_KeyboardF5: return sf::Keyboard::ScanF5; + case kHIDUsage_KeyboardF6: return sf::Keyboard::ScanF6; + case kHIDUsage_KeyboardF7: return sf::Keyboard::ScanF7; + case kHIDUsage_KeyboardF8: return sf::Keyboard::ScanF8; + case kHIDUsage_KeyboardF9: return sf::Keyboard::ScanF9; + case kHIDUsage_KeyboardF10: return sf::Keyboard::ScanF10; + case kHIDUsage_KeyboardF11: return sf::Keyboard::ScanF11; + case kHIDUsage_KeyboardF12: return sf::Keyboard::ScanF12; - case kHIDUsage_KeyboardPrintScreen: return sf::Keyboard::ScanPrintScreen; - case kHIDUsage_KeyboardScrollLock: return sf::Keyboard::ScanScrollLock; - case kHIDUsage_KeyboardPause: return sf::Keyboard::ScanPause; - case kHIDUsage_KeyboardInsert: return sf::Keyboard::ScanInsert; - case kHIDUsage_KeyboardHome: return sf::Keyboard::ScanHome; - case kHIDUsage_KeyboardPageUp: return sf::Keyboard::ScanPageUp; - case kHIDUsage_KeyboardDeleteForward: return sf::Keyboard::ScanDelete; - case kHIDUsage_KeyboardEnd: return sf::Keyboard::ScanEnd; - case kHIDUsage_KeyboardPageDown: return sf::Keyboard::ScanPageDown; + case kHIDUsage_KeyboardPrintScreen: return sf::Keyboard::ScanPrintScreen; + case kHIDUsage_KeyboardScrollLock: return sf::Keyboard::ScanScrollLock; + case kHIDUsage_KeyboardPause: return sf::Keyboard::ScanPause; + case kHIDUsage_KeyboardInsert: return sf::Keyboard::ScanInsert; + case kHIDUsage_KeyboardHome: return sf::Keyboard::ScanHome; + case kHIDUsage_KeyboardPageUp: return sf::Keyboard::ScanPageUp; + case kHIDUsage_KeyboardDeleteForward: return sf::Keyboard::ScanDelete; + case kHIDUsage_KeyboardEnd: return sf::Keyboard::ScanEnd; + case kHIDUsage_KeyboardPageDown: return sf::Keyboard::ScanPageDown; - case kHIDUsage_KeyboardRightArrow: return sf::Keyboard::ScanRight; - case kHIDUsage_KeyboardLeftArrow: return sf::Keyboard::ScanLeft; - case kHIDUsage_KeyboardDownArrow: return sf::Keyboard::ScanDown; - case kHIDUsage_KeyboardUpArrow: return sf::Keyboard::ScanUp; + case kHIDUsage_KeyboardRightArrow: return sf::Keyboard::ScanRight; + case kHIDUsage_KeyboardLeftArrow: return sf::Keyboard::ScanLeft; + case kHIDUsage_KeyboardDownArrow: return sf::Keyboard::ScanDown; + case kHIDUsage_KeyboardUpArrow: return sf::Keyboard::ScanUp; - case kHIDUsage_KeypadNumLock: return sf::Keyboard::ScanNumLock; - case kHIDUsage_KeypadSlash: return sf::Keyboard::ScanDivide; - case kHIDUsage_KeypadAsterisk: return sf::Keyboard::ScanMultiply; - case kHIDUsage_KeypadHyphen: return sf::Keyboard::ScanMinus; - case kHIDUsage_KeypadPlus: return sf::Keyboard::ScanPlus; - case kHIDUsage_KeypadEnter: return sf::Keyboard::ScanReturn; + case kHIDUsage_KeypadNumLock: return sf::Keyboard::ScanNumLock; + case kHIDUsage_KeypadSlash: return sf::Keyboard::ScanDivide; + case kHIDUsage_KeypadAsterisk: return sf::Keyboard::ScanMultiply; + case kHIDUsage_KeypadHyphen: return sf::Keyboard::ScanMinus; + case kHIDUsage_KeypadPlus: return sf::Keyboard::ScanPlus; + case kHIDUsage_KeypadEnter: return sf::Keyboard::ScanEnter; - case kHIDUsage_Keypad1: return sf::Keyboard::ScanNumpad1; - case kHIDUsage_Keypad2: return sf::Keyboard::ScanNumpad2; - case kHIDUsage_Keypad3: return sf::Keyboard::ScanNumpad3; - case kHIDUsage_Keypad4: return sf::Keyboard::ScanNumpad4; - case kHIDUsage_Keypad5: return sf::Keyboard::ScanNumpad5; - case kHIDUsage_Keypad6: return sf::Keyboard::ScanNumpad6; - case kHIDUsage_Keypad7: return sf::Keyboard::ScanNumpad7; - case kHIDUsage_Keypad8: return sf::Keyboard::ScanNumpad8; - case kHIDUsage_Keypad9: return sf::Keyboard::ScanNumpad9; - case kHIDUsage_Keypad0: return sf::Keyboard::ScanNumpad0; + case kHIDUsage_Keypad1: return sf::Keyboard::ScanNumpad1; + case kHIDUsage_Keypad2: return sf::Keyboard::ScanNumpad2; + case kHIDUsage_Keypad3: return sf::Keyboard::ScanNumpad3; + case kHIDUsage_Keypad4: return sf::Keyboard::ScanNumpad4; + case kHIDUsage_Keypad5: return sf::Keyboard::ScanNumpad5; + case kHIDUsage_Keypad6: return sf::Keyboard::ScanNumpad6; + case kHIDUsage_Keypad7: return sf::Keyboard::ScanNumpad7; + case kHIDUsage_Keypad8: return sf::Keyboard::ScanNumpad8; + case kHIDUsage_Keypad9: return sf::Keyboard::ScanNumpad9; + case kHIDUsage_Keypad0: return sf::Keyboard::ScanNumpad0; - case kHIDUsage_KeypadPeriod: return sf::Keyboard::ScanDecimal; - case kHIDUsage_KeyboardNonUSBackslash: return sf::Keyboard::ScanReverseSolidus; - case kHIDUsage_KeyboardApplication: return sf::Keyboard::ScanApplication; - case kHIDUsage_KeyboardPower: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeypadEqualSign: return sf::Keyboard::ScanPadEquals; + case kHIDUsage_KeypadPeriod: return sf::Keyboard::ScanDecimal; + case kHIDUsage_KeyboardNonUSBackslash: return sf::Keyboard::ScanReverseSolidus; + case kHIDUsage_KeyboardApplication: return sf::Keyboard::ScanApplication; + case kHIDUsage_KeyboardPower: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeypadEqualSign: return sf::Keyboard::ScanNumpadEquals; - case kHIDUsage_KeyboardF13: return sf::Keyboard::ScanF13; - case kHIDUsage_KeyboardF14: return sf::Keyboard::ScanF14; - case kHIDUsage_KeyboardF15: return sf::Keyboard::ScanF15; - case kHIDUsage_KeyboardF16: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardF17: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardF18: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardF19: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardF20: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardF21: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardF22: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardF23: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardF24: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardF13: return sf::Keyboard::ScanF13; + case kHIDUsage_KeyboardF14: return sf::Keyboard::ScanF14; + case kHIDUsage_KeyboardF15: return sf::Keyboard::ScanF15; + case kHIDUsage_KeyboardF16: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardF17: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardF18: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardF19: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardF20: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardF21: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardF22: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardF23: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardF24: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardExecute: return sf::Keyboard::ScanExecute; - case kHIDUsage_KeyboardHelp: return sf::Keyboard::ScanHelp; - case kHIDUsage_KeyboardMenu: return sf::Keyboard::ScanMenu; - case kHIDUsage_KeyboardSelect: return sf::Keyboard::ScanSelect; - case kHIDUsage_KeyboardStop: return sf::Keyboard::ScanStop; - case kHIDUsage_KeyboardAgain: return sf::Keyboard::ScanAgain; - case kHIDUsage_KeyboardUndo: return sf::Keyboard::ScanUndo; - case kHIDUsage_KeyboardCut: return sf::Keyboard::ScanCut; - case kHIDUsage_KeyboardCopy: return sf::Keyboard::ScanCopy; - case kHIDUsage_KeyboardPaste: return sf::Keyboard::ScanPaste; - case kHIDUsage_KeyboardFind: return sf::Keyboard::ScanFind; + case kHIDUsage_KeyboardExecute: return sf::Keyboard::ScanExecute; + case kHIDUsage_KeyboardHelp: return sf::Keyboard::ScanHelp; + case kHIDUsage_KeyboardMenu: return sf::Keyboard::ScanMenu; + case kHIDUsage_KeyboardSelect: return sf::Keyboard::ScanSelect; + case kHIDUsage_KeyboardStop: return sf::Keyboard::ScanStop; + case kHIDUsage_KeyboardAgain: return sf::Keyboard::ScanAgain; + case kHIDUsage_KeyboardUndo: return sf::Keyboard::ScanUndo; + case kHIDUsage_KeyboardCut: return sf::Keyboard::ScanCut; + case kHIDUsage_KeyboardCopy: return sf::Keyboard::ScanCopy; + case kHIDUsage_KeyboardPaste: return sf::Keyboard::ScanPaste; + case kHIDUsage_KeyboardFind: return sf::Keyboard::ScanFind; case kHIDUsage_KeyboardMute: return sf::Keyboard::ScanMute; case kHIDUsage_KeyboardVolumeUp: return sf::Keyboard::ScanVolumeUp; case kHIDUsage_KeyboardVolumeDown: return sf::Keyboard::ScanVolumeDown; - case kHIDUsage_KeyboardLockingCapsLock: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardLockingNumLock: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardLockingScrollLock: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLockingCapsLock: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLockingNumLock: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLockingScrollLock: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeypadComma: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeypadEqualSignAS400: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardInternational1: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardInternational2: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardInternational3: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardInternational4: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardInternational5: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardInternational6: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardInternational7: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardInternational8: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardInternational9: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeypadComma: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeypadEqualSignAS400: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardInternational1: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardInternational2: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardInternational3: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardInternational4: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardInternational5: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardInternational6: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardInternational7: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardInternational8: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardInternational9: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardLANG1: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardLANG2: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardLANG3: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardLANG4: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardLANG5: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardLANG6: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardLANG7: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardLANG8: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardLANG9: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLANG1: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLANG2: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLANG3: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLANG4: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLANG5: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLANG6: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLANG7: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLANG8: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardLANG9: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardAlternateErase: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardSysReqOrAttention: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardCancel: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardClear: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardPrior: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardReturn: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardSeparator: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardOut: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardOper: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardClearOrAgain: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardCrSelOrProps: return sf::Keyboard::ScanUnknown; - case kHIDUsage_KeyboardExSel: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardAlternateErase: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardSysReqOrAttention: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardCancel: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardClear: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardPrior: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardReturn: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardSeparator: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardOut: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardOper: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardClearOrAgain: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardCrSelOrProps: return sf::Keyboard::ScanUnknown; + case kHIDUsage_KeyboardExSel: return sf::Keyboard::ScanUnknown; /* 0xa5-0xdf Reserved */ @@ -659,8 +659,8 @@ sf::Keyboard::Scancode HIDInputManager::usageToScancode(UInt32 usage) /* 0xe8-0xffff Reserved */ - case kHIDUsage_Keyboard_Reserved: return sf::Keyboard::ScanUnknown; - default: return sf::Keyboard::ScanUnknown; + case kHIDUsage_Keyboard_Reserved: return sf::Keyboard::ScanUnknown; + default: return sf::Keyboard::ScanUnknown; } } @@ -672,147 +672,147 @@ Keyboard::Key HIDInputManager::localizedKey(UniChar ch) // Otherwise one can refer to the usual Unicode table. switch (ch) { - case 0x41: return sf::Keyboard::A; // uppercase A - case 0x42: return sf::Keyboard::B; - case 0x43: return sf::Keyboard::C; - case 0x44: return sf::Keyboard::D; - case 0x45: return sf::Keyboard::E; - case 0x46: return sf::Keyboard::F; - case 0x47: return sf::Keyboard::G; - case 0x48: return sf::Keyboard::H; - case 0x49: return sf::Keyboard::I; - case 0x4a: return sf::Keyboard::J; - case 0x4b: return sf::Keyboard::K; - case 0x4c: return sf::Keyboard::L; - case 0x4d: return sf::Keyboard::M; - case 0x4e: return sf::Keyboard::N; - case 0x4f: return sf::Keyboard::O; - case 0x50: return sf::Keyboard::P; - case 0x51: return sf::Keyboard::Q; - case 0x52: return sf::Keyboard::R; - case 0x53: return sf::Keyboard::S; - case 0x54: return sf::Keyboard::T; - case 0x55: return sf::Keyboard::U; - case 0x56: return sf::Keyboard::V; - case 0x57: return sf::Keyboard::W; - case 0x58: return sf::Keyboard::X; - case 0x59: return sf::Keyboard::Y; + case 0x41: return sf::Keyboard::A; // uppercase A + case 0x42: return sf::Keyboard::B; + case 0x43: return sf::Keyboard::C; + case 0x44: return sf::Keyboard::D; + case 0x45: return sf::Keyboard::E; + case 0x46: return sf::Keyboard::F; + case 0x47: return sf::Keyboard::G; + case 0x48: return sf::Keyboard::H; + case 0x49: return sf::Keyboard::I; + case 0x4a: return sf::Keyboard::J; + case 0x4b: return sf::Keyboard::K; + case 0x4c: return sf::Keyboard::L; + case 0x4d: return sf::Keyboard::M; + case 0x4e: return sf::Keyboard::N; + case 0x4f: return sf::Keyboard::O; + case 0x50: return sf::Keyboard::P; + case 0x51: return sf::Keyboard::Q; + case 0x52: return sf::Keyboard::R; + case 0x53: return sf::Keyboard::S; + case 0x54: return sf::Keyboard::T; + case 0x55: return sf::Keyboard::U; + case 0x56: return sf::Keyboard::V; + case 0x57: return sf::Keyboard::W; + case 0x58: return sf::Keyboard::X; + case 0x59: return sf::Keyboard::Y; - case 0x5a: return sf::Keyboard::Z; // lowercase A - case 0x61: return sf::Keyboard::A; - case 0x62: return sf::Keyboard::B; - case 0x63: return sf::Keyboard::C; - case 0x64: return sf::Keyboard::D; - case 0x65: return sf::Keyboard::E; - case 0x66: return sf::Keyboard::F; - case 0x67: return sf::Keyboard::G; - case 0x68: return sf::Keyboard::H; - case 0x69: return sf::Keyboard::I; - case 0x6a: return sf::Keyboard::J; - case 0x6b: return sf::Keyboard::K; - case 0x6c: return sf::Keyboard::L; - case 0x6d: return sf::Keyboard::M; - case 0x6e: return sf::Keyboard::N; - case 0x6f: return sf::Keyboard::O; - case 0x70: return sf::Keyboard::P; - case 0x71: return sf::Keyboard::Q; - case 0x72: return sf::Keyboard::R; - case 0x73: return sf::Keyboard::S; - case 0x74: return sf::Keyboard::T; - case 0x75: return sf::Keyboard::U; - case 0x76: return sf::Keyboard::V; - case 0x77: return sf::Keyboard::W; - case 0x78: return sf::Keyboard::X; - case 0x79: return sf::Keyboard::Y; - case 0x7a: return sf::Keyboard::Z; + case 0x5a: return sf::Keyboard::Z; // lowercase A + case 0x61: return sf::Keyboard::A; + case 0x62: return sf::Keyboard::B; + case 0x63: return sf::Keyboard::C; + case 0x64: return sf::Keyboard::D; + case 0x65: return sf::Keyboard::E; + case 0x66: return sf::Keyboard::F; + case 0x67: return sf::Keyboard::G; + case 0x68: return sf::Keyboard::H; + case 0x69: return sf::Keyboard::I; + case 0x6a: return sf::Keyboard::J; + case 0x6b: return sf::Keyboard::K; + case 0x6c: return sf::Keyboard::L; + case 0x6d: return sf::Keyboard::M; + case 0x6e: return sf::Keyboard::N; + case 0x6f: return sf::Keyboard::O; + case 0x70: return sf::Keyboard::P; + case 0x71: return sf::Keyboard::Q; + case 0x72: return sf::Keyboard::R; + case 0x73: return sf::Keyboard::S; + case 0x74: return sf::Keyboard::T; + case 0x75: return sf::Keyboard::U; + case 0x76: return sf::Keyboard::V; + case 0x77: return sf::Keyboard::W; + case 0x78: return sf::Keyboard::X; + case 0x79: return sf::Keyboard::Y; + case 0x7a: return sf::Keyboard::Z; - case 0x30: return sf::Keyboard::Num0; - case 0x31: return sf::Keyboard::Num1; - case 0x32: return sf::Keyboard::Num2; - case 0x33: return sf::Keyboard::Num3; - case 0x34: return sf::Keyboard::Num4; - case 0x35: return sf::Keyboard::Num5; - case 0x36: return sf::Keyboard::Num6; - case 0x37: return sf::Keyboard::Num7; - case 0x38: return sf::Keyboard::Num8; - case 0x39: return sf::Keyboard::Num9; + case 0x30: return sf::Keyboard::Num0; + case 0x31: return sf::Keyboard::Num1; + case 0x32: return sf::Keyboard::Num2; + case 0x33: return sf::Keyboard::Num3; + case 0x34: return sf::Keyboard::Num4; + case 0x35: return sf::Keyboard::Num5; + case 0x36: return sf::Keyboard::Num6; + case 0x37: return sf::Keyboard::Num7; + case 0x38: return sf::Keyboard::Num8; + case 0x39: return sf::Keyboard::Num9; - case 0x1b: return sf::Keyboard::Escape; + case 0x1b: return sf::Keyboard::Escape; /* Those are not represented using Unicode. - * case 0x: return sf::Keyboard::LControl; - * case 0x: return sf::Keyboard::LShift; - * case 0x: return sf::Keyboard::LAlt; - * case 0x: return sf::Keyboard::LSystem; - * case 0x: return sf::Keyboard::RControl; - * case 0x: return sf::Keyboard::RShift; - * case 0x: return sf::Keyboard::RAlt; - * case 0x: return sf::Keyboard::RSystem; + * case 0x: return sf::Keyboard::LControl; + * case 0x: return sf::Keyboard::LShift; + * case 0x: return sf::Keyboard::LAlt; + * case 0x: return sf::Keyboard::LSystem; + * case 0x: return sf::Keyboard::RControl; + * case 0x: return sf::Keyboard::RShift; + * case 0x: return sf::Keyboard::RAlt; + * case 0x: return sf::Keyboard::RSystem; */ - case NSMenuFunctionKey: return sf::Keyboard::Menu; + case NSMenuFunctionKey: return sf::Keyboard::Menu; - case 0x5b: return sf::Keyboard::LBracket; - case 0x5d: return sf::Keyboard::RBracket; - case 0x3b: return sf::Keyboard::SemiColon; - case 0x2c: return sf::Keyboard::Comma; - case 0x2e: return sf::Keyboard::Period; - case 0x27: return sf::Keyboard::Quote; - case 0x2044: return sf::Keyboard::Slash; // 0x2f is Divide - case 0x5c: return sf::Keyboard::BackSlash; - case 0x7e: return sf::Keyboard::Tilde; - case 0x3d: return sf::Keyboard::Equal; - case 0x2013: return sf::Keyboard::Dash; // 0x2d is Subtract - case 0x20: return sf::Keyboard::Space; - case 0x0d: return sf::Keyboard::Return; - case 0x7f: return sf::Keyboard::BackSpace; // NOTE backspace & delete are swapped on Mac. - case 0x09: return sf::Keyboard::Tab; + case 0x5b: return sf::Keyboard::LBracket; + case 0x5d: return sf::Keyboard::RBracket; + case 0x3b: return sf::Keyboard::SemiColon; + case 0x2c: return sf::Keyboard::Comma; + case 0x2e: return sf::Keyboard::Period; + case 0x27: return sf::Keyboard::Quote; + case 0x2044: return sf::Keyboard::Slash; // 0x2f is Divide + case 0x5c: return sf::Keyboard::BackSlash; + case 0x7e: return sf::Keyboard::Tilde; + case 0x3d: return sf::Keyboard::Equal; + case 0x2013: return sf::Keyboard::Dash; // 0x2d is Subtract + case 0x20: return sf::Keyboard::Space; + case 0x0d: return sf::Keyboard::Return; + case 0x7f: return sf::Keyboard::BackSpace; // NOTE backspace & delete are swapped on Mac. + case 0x09: return sf::Keyboard::Tab; - 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::Keyboard::Insert; - case NSDeleteFunctionKey: return sf::Keyboard::Delete; + 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::Keyboard::Insert; + case NSDeleteFunctionKey: return sf::Keyboard::Delete; - case 0x2b: return sf::Keyboard::Add; - case 0x2d: return sf::Keyboard::Subtract; - case 0x2a: return sf::Keyboard::Multiply; - case 0x2f: return sf::Keyboard::Divide; + case 0x2b: return sf::Keyboard::Add; + case 0x2d: return sf::Keyboard::Subtract; + case 0x2a: return sf::Keyboard::Multiply; + case 0x2f: return sf::Keyboard::Divide; - 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 NSLeftArrowFunctionKey: return sf::Keyboard::Left; + case NSRightArrowFunctionKey: return sf::Keyboard::Right; + case NSUpArrowFunctionKey: return sf::Keyboard::Up; + case NSDownArrowFunctionKey: return sf::Keyboard::Down; /* Those are not represented using Unicode. - * case 0x: return sf::Keyboard::Numpad0; - * case 0x: return sf::Keyboard::Numpad1; - * case 0x: return sf::Keyboard::Numpad2; - * case 0x: return sf::Keyboard::Numpad3; - * case 0x: return sf::Keyboard::Numpad4; - * case 0x: return sf::Keyboard::Numpad5; - * case 0x: return sf::Keyboard::Numpad6; - * case 0x: return sf::Keyboard::Numpad7; - * case 0x: return sf::Keyboard::Numpad8; - * case 0x: return sf::Keyboard::Numpad9; + * case 0x: return sf::Keyboard::Numpad0; + * case 0x: return sf::Keyboard::Numpad1; + * case 0x: return sf::Keyboard::Numpad2; + * case 0x: return sf::Keyboard::Numpad3; + * case 0x: return sf::Keyboard::Numpad4; + * case 0x: return sf::Keyboard::Numpad5; + * case 0x: return sf::Keyboard::Numpad6; + * case 0x: return sf::Keyboard::Numpad7; + * case 0x: return sf::Keyboard::Numpad8; + * case 0x: return sf::Keyboard::Numpad9; */ - 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 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::Keyboard::Pause; @@ -826,124 +826,124 @@ UniChar HIDInputManager::toUnicode(Keyboard::Key key) { switch (key) { - case sf::Keyboard::A: return 0x41; - case sf::Keyboard::B: return 0x42; - case sf::Keyboard::C: return 0x43; - case sf::Keyboard::D: return 0x44; - case sf::Keyboard::E: return 0x45; - case sf::Keyboard::F: return 0x46; - case sf::Keyboard::G: return 0x47; - case sf::Keyboard::H: return 0x48; - case sf::Keyboard::I: return 0x49; - case sf::Keyboard::J: return 0x4a; - case sf::Keyboard::K: return 0x4b; - case sf::Keyboard::L: return 0x4c; - case sf::Keyboard::M: return 0x4d; - case sf::Keyboard::N: return 0x4e; - case sf::Keyboard::O: return 0x4f; - case sf::Keyboard::P: return 0x50; - case sf::Keyboard::Q: return 0x51; - case sf::Keyboard::R: return 0x52; - case sf::Keyboard::S: return 0x53; - case sf::Keyboard::T: return 0x54; - case sf::Keyboard::U: return 0x55; - case sf::Keyboard::V: return 0x56; - case sf::Keyboard::W: return 0x57; - case sf::Keyboard::X: return 0x58; - case sf::Keyboard::Y: return 0x59; - case sf::Keyboard::Z: return 0x5a; + case sf::Keyboard::A: return 0x41; + case sf::Keyboard::B: return 0x42; + case sf::Keyboard::C: return 0x43; + case sf::Keyboard::D: return 0x44; + case sf::Keyboard::E: return 0x45; + case sf::Keyboard::F: return 0x46; + case sf::Keyboard::G: return 0x47; + case sf::Keyboard::H: return 0x48; + case sf::Keyboard::I: return 0x49; + case sf::Keyboard::J: return 0x4a; + case sf::Keyboard::K: return 0x4b; + case sf::Keyboard::L: return 0x4c; + case sf::Keyboard::M: return 0x4d; + case sf::Keyboard::N: return 0x4e; + case sf::Keyboard::O: return 0x4f; + case sf::Keyboard::P: return 0x50; + case sf::Keyboard::Q: return 0x51; + case sf::Keyboard::R: return 0x52; + case sf::Keyboard::S: return 0x53; + case sf::Keyboard::T: return 0x54; + case sf::Keyboard::U: return 0x55; + case sf::Keyboard::V: return 0x56; + case sf::Keyboard::W: return 0x57; + case sf::Keyboard::X: return 0x58; + case sf::Keyboard::Y: return 0x59; + case sf::Keyboard::Z: return 0x5a; - case sf::Keyboard::Num0: return 0x30; - case sf::Keyboard::Num1: return 0x31; - case sf::Keyboard::Num2: return 0x32; - case sf::Keyboard::Num3: return 0x33; - case sf::Keyboard::Num4: return 0x34; - case sf::Keyboard::Num5: return 0x35; - case sf::Keyboard::Num6: return 0x36; - case sf::Keyboard::Num7: return 0x37; - case sf::Keyboard::Num8: return 0x38; - case sf::Keyboard::Num9: return 0x39; + case sf::Keyboard::Num0: return 0x30; + case sf::Keyboard::Num1: return 0x31; + case sf::Keyboard::Num2: return 0x32; + case sf::Keyboard::Num3: return 0x33; + case sf::Keyboard::Num4: return 0x34; + case sf::Keyboard::Num5: return 0x35; + case sf::Keyboard::Num6: return 0x36; + case sf::Keyboard::Num7: return 0x37; + case sf::Keyboard::Num8: return 0x38; + case sf::Keyboard::Num9: return 0x39; case sf::Keyboard::Escape: return 0x1b; /* Not representable as Unicode: - * case sf::Keyboard::LControl: return 0x; - * case sf::Keyboard::LShift: return 0x; - * case sf::Keyboard::LAlt: return 0x; - * case sf::Keyboard::LSystem: return 0x; - * case sf::Keyboard::RControl: return 0x; - * case sf::Keyboard::RShift: return 0x; - * case sf::Keyboard::RAlt: return 0x; - * case sf::Keyboard::RSystem: return 0x; + * case sf::Keyboard::LControl: return 0x; + * case sf::Keyboard::LShift: return 0x; + * case sf::Keyboard::LAlt: return 0x; + * case sf::Keyboard::LSystem: return 0x; + * case sf::Keyboard::RControl: return 0x; + * case sf::Keyboard::RShift: return 0x; + * case sf::Keyboard::RAlt: return 0x; + * case sf::Keyboard::RSystem: return 0x; */ case sf::Keyboard::Menu: return NSMenuFunctionKey; - case sf::Keyboard::LBracket: return 0x5b; - case sf::Keyboard::RBracket: return 0x5d; - case sf::Keyboard::SemiColon: return 0x3b; - case sf::Keyboard::Comma: return 0x2c; - case sf::Keyboard::Period: return 0x2e; - case sf::Keyboard::Quote: return 0x27; - case sf::Keyboard::Slash: return 0x2044; // 0x2f is Divide - case sf::Keyboard::BackSlash: return 0x5c; - case sf::Keyboard::Tilde: return 0x7e; - case sf::Keyboard::Equal: return 0x3d; - case sf::Keyboard::Dash: return 0x2013; // 0x2d is Subtract - case sf::Keyboard::Space: return 0x20; - case sf::Keyboard::Return: return 0x0d; - case sf::Keyboard::BackSpace: return 0x7f; // NOTE backspace & delete are swapped on Mac. - case sf::Keyboard::Tab: return 0x09; + case sf::Keyboard::LBracket: return 0x5b; + case sf::Keyboard::RBracket: return 0x5d; + case sf::Keyboard::SemiColon: return 0x3b; + case sf::Keyboard::Comma: return 0x2c; + case sf::Keyboard::Period: return 0x2e; + case sf::Keyboard::Quote: return 0x27; + case sf::Keyboard::Slash: return 0x2044; // 0x2f is Divide + case sf::Keyboard::BackSlash: return 0x5c; + case sf::Keyboard::Tilde: return 0x7e; + case sf::Keyboard::Equal: return 0x3d; + case sf::Keyboard::Dash: return 0x2013; // 0x2d is Subtract + case sf::Keyboard::Space: return 0x20; + case sf::Keyboard::Return: return 0x0d; + case sf::Keyboard::BackSpace: return 0x7f; // NOTE backspace & delete are swapped on Mac. + case sf::Keyboard::Tab: return 0x09; - case sf::Keyboard::PageUp: return NSPageUpFunctionKey; - case sf::Keyboard::PageDown: return NSPageDownFunctionKey; - case sf::Keyboard::End: return NSEndFunctionKey; - case sf::Keyboard::Home: return NSHomeFunctionKey; - case sf::Keyboard::Insert: return NSInsertFunctionKey; - case sf::Keyboard::Delete: return NSDeleteFunctionKey; + case sf::Keyboard::PageUp: return NSPageUpFunctionKey; + case sf::Keyboard::PageDown: return NSPageDownFunctionKey; + case sf::Keyboard::End: return NSEndFunctionKey; + case sf::Keyboard::Home: return NSHomeFunctionKey; + case sf::Keyboard::Insert: return NSInsertFunctionKey; + case sf::Keyboard::Delete: return NSDeleteFunctionKey; - case sf::Keyboard::Add: return 0x2b; - case sf::Keyboard::Subtract: return 0x2d; - case sf::Keyboard::Multiply: return 0x2a; - case sf::Keyboard::Divide: return 0x2f; + case sf::Keyboard::Add: return 0x2b; + case sf::Keyboard::Subtract: return 0x2d; + case sf::Keyboard::Multiply: return 0x2a; + case sf::Keyboard::Divide: return 0x2f; - case sf::Keyboard::Left: return NSLeftArrowFunctionKey; - case sf::Keyboard::Right: return NSRightArrowFunctionKey; - case sf::Keyboard::Up: return NSUpArrowFunctionKey; - case sf::Keyboard::Down: return NSDownArrowFunctionKey; + case sf::Keyboard::Left: return NSLeftArrowFunctionKey; + case sf::Keyboard::Right: return NSRightArrowFunctionKey; + case sf::Keyboard::Up: return NSUpArrowFunctionKey; + case sf::Keyboard::Down: return NSDownArrowFunctionKey; /* Those are not represented using Unicode. - * case sf::Keyboard::Numpad0: return 0x; - * case sf::Keyboard::Numpad1: return 0x; - * case sf::Keyboard::Numpad2: return 0x; - * case sf::Keyboard::Numpad3: return 0x; - * case sf::Keyboard::Numpad4: return 0x; - * case sf::Keyboard::Numpad5: return 0x; - * case sf::Keyboard::Numpad6: return 0x; - * case sf::Keyboard::Numpad7: return 0x; - * case sf::Keyboard::Numpad8: return 0x; - * case sf::Keyboard::Numpad9: return 0x; + * case sf::Keyboard::Numpad0: return 0x; + * case sf::Keyboard::Numpad1: return 0x; + * case sf::Keyboard::Numpad2: return 0x; + * case sf::Keyboard::Numpad3: return 0x; + * case sf::Keyboard::Numpad4: return 0x; + * case sf::Keyboard::Numpad5: return 0x; + * case sf::Keyboard::Numpad6: return 0x; + * case sf::Keyboard::Numpad7: return 0x; + * case sf::Keyboard::Numpad8: return 0x; + * case sf::Keyboard::Numpad9: return 0x; */ - case sf::Keyboard::F1: return NSF1FunctionKey; - case sf::Keyboard::F2: return NSF2FunctionKey; - case sf::Keyboard::F3: return NSF3FunctionKey; - case sf::Keyboard::F4: return NSF4FunctionKey; - case sf::Keyboard::F5: return NSF5FunctionKey; - case sf::Keyboard::F6: return NSF6FunctionKey; - case sf::Keyboard::F7: return NSF7FunctionKey; - case sf::Keyboard::F8: return NSF8FunctionKey; - case sf::Keyboard::F9: return NSF9FunctionKey; - case sf::Keyboard::F10: return NSF10FunctionKey; - case sf::Keyboard::F11: return NSF11FunctionKey; - case sf::Keyboard::F12: return NSF12FunctionKey; - case sf::Keyboard::F13: return NSF13FunctionKey; - case sf::Keyboard::F14: return NSF14FunctionKey; - case sf::Keyboard::F15: return NSF15FunctionKey; + case sf::Keyboard::F1: return NSF1FunctionKey; + case sf::Keyboard::F2: return NSF2FunctionKey; + case sf::Keyboard::F3: return NSF3FunctionKey; + case sf::Keyboard::F4: return NSF4FunctionKey; + case sf::Keyboard::F5: return NSF5FunctionKey; + case sf::Keyboard::F6: return NSF6FunctionKey; + case sf::Keyboard::F7: return NSF7FunctionKey; + case sf::Keyboard::F8: return NSF8FunctionKey; + case sf::Keyboard::F9: return NSF9FunctionKey; + case sf::Keyboard::F10: return NSF10FunctionKey; + case sf::Keyboard::F11: return NSF11FunctionKey; + case sf::Keyboard::F12: return NSF12FunctionKey; + case sf::Keyboard::F13: return NSF13FunctionKey; + case sf::Keyboard::F14: return NSF14FunctionKey; + case sf::Keyboard::F15: return NSF15FunctionKey; - case sf::Keyboard::Pause: return NSPauseFunctionKey; + case sf::Keyboard::Pause: return NSPauseFunctionKey; - default: return 0x00; + default: return 0x00; } } @@ -957,132 +957,132 @@ Keyboard::Scancode HIDInputManager::nonLocalizedKey(UniChar virtualKeycode) // /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Events.h switch (virtualKeycode) { - case 0x00: return sf::Keyboard::ScanA; - case 0x0b: return sf::Keyboard::ScanB; - case 0x08: return sf::Keyboard::ScanC; - case 0x02: return sf::Keyboard::ScanD; - case 0x0e: return sf::Keyboard::ScanE; - case 0x03: return sf::Keyboard::ScanF; - case 0x05: return sf::Keyboard::ScanG; - case 0x04: return sf::Keyboard::ScanH; - case 0x22: return sf::Keyboard::ScanI; - case 0x26: return sf::Keyboard::ScanJ; - case 0x28: return sf::Keyboard::ScanK; - case 0x25: return sf::Keyboard::ScanL; - case 0x2e: return sf::Keyboard::ScanM; - case 0x2d: return sf::Keyboard::ScanN; - case 0x1f: return sf::Keyboard::ScanO; - case 0x23: return sf::Keyboard::ScanP; - case 0x0c: return sf::Keyboard::ScanQ; - case 0x0f: return sf::Keyboard::ScanR; - case 0x01: return sf::Keyboard::ScanS; - case 0x11: return sf::Keyboard::ScanT; - case 0x20: return sf::Keyboard::ScanU; - case 0x09: return sf::Keyboard::ScanV; - case 0x0d: return sf::Keyboard::ScanW; - case 0x07: return sf::Keyboard::ScanX; - case 0x10: return sf::Keyboard::ScanY; - case 0x06: return sf::Keyboard::ScanZ; + case 0x00: return sf::Keyboard::ScanA; + case 0x0b: return sf::Keyboard::ScanB; + case 0x08: return sf::Keyboard::ScanC; + case 0x02: return sf::Keyboard::ScanD; + case 0x0e: return sf::Keyboard::ScanE; + case 0x03: return sf::Keyboard::ScanF; + case 0x05: return sf::Keyboard::ScanG; + case 0x04: return sf::Keyboard::ScanH; + case 0x22: return sf::Keyboard::ScanI; + case 0x26: return sf::Keyboard::ScanJ; + case 0x28: return sf::Keyboard::ScanK; + case 0x25: return sf::Keyboard::ScanL; + case 0x2e: return sf::Keyboard::ScanM; + case 0x2d: return sf::Keyboard::ScanN; + case 0x1f: return sf::Keyboard::ScanO; + case 0x23: return sf::Keyboard::ScanP; + case 0x0c: return sf::Keyboard::ScanQ; + case 0x0f: return sf::Keyboard::ScanR; + case 0x01: return sf::Keyboard::ScanS; + case 0x11: return sf::Keyboard::ScanT; + case 0x20: return sf::Keyboard::ScanU; + case 0x09: return sf::Keyboard::ScanV; + case 0x0d: return sf::Keyboard::ScanW; + case 0x07: return sf::Keyboard::ScanX; + case 0x10: return sf::Keyboard::ScanY; + case 0x06: return sf::Keyboard::ScanZ; - case 0x12: return sf::Keyboard::ScanNum1; - case 0x13: return sf::Keyboard::ScanNum2; - case 0x14: return sf::Keyboard::ScanNum3; - case 0x15: return sf::Keyboard::ScanNum4; - case 0x17: return sf::Keyboard::ScanNum5; - case 0x16: return sf::Keyboard::ScanNum6; - case 0x1a: return sf::Keyboard::ScanNum7; - case 0x1c: return sf::Keyboard::ScanNum8; - case 0x19: return sf::Keyboard::ScanNum9; - case 0x1d: return sf::Keyboard::ScanNum0; + case 0x12: return sf::Keyboard::ScanNum1; + case 0x13: return sf::Keyboard::ScanNum2; + case 0x14: return sf::Keyboard::ScanNum3; + case 0x15: return sf::Keyboard::ScanNum4; + case 0x17: return sf::Keyboard::ScanNum5; + case 0x16: return sf::Keyboard::ScanNum6; + case 0x1a: return sf::Keyboard::ScanNum7; + case 0x1c: return sf::Keyboard::ScanNum8; + case 0x19: return sf::Keyboard::ScanNum9; + case 0x1d: return sf::Keyboard::ScanNum0; - case 0x24: return sf::Keyboard::ScanEnter; - case 0x35: return sf::Keyboard::ScanEscape; - case 0x33: return sf::Keyboard::ScanBackspace; - case 0x30: return sf::Keyboard::ScanTab; - case 0x31: return sf::Keyboard::ScanSpace; - // case 0x27: return sf::Keyboard::ScanHyphen; // TODO 0x27 is for Quote - case 0x18: return sf::Keyboard::ScanEquals; - case 0x21: return sf::Keyboard::ScanLBracket; - case 0x1e: return sf::Keyboard::ScanRBracket; - case 0x2a: return sf::Keyboard::ScanBackslash; - case 0x1b: return sf::Keyboard::ScanDash; - case 0x29: return sf::Keyboard::ScanSemicolon; - case 0x27: return sf::Keyboard::ScanQuote; - case 0x32: return sf::Keyboard::ScanGraveAccent; - case 0x2b: return sf::Keyboard::ScanComma; - case 0x2f: return sf::Keyboard::ScanPeriod; - case 0x2c: return sf::Keyboard::ScanForwardSlash; + case 0x24: return sf::Keyboard::ScanEnter; + case 0x35: return sf::Keyboard::ScanEscape; + case 0x33: return sf::Keyboard::ScanBackspace; + case 0x30: return sf::Keyboard::ScanTab; + case 0x31: return sf::Keyboard::ScanSpace; + // case 0x27: return sf::Keyboard::ScanHyphen; // TODO 0x27 is for Quote + case 0x18: return sf::Keyboard::ScanEquals; + case 0x21: return sf::Keyboard::ScanLBracket; + case 0x1e: return sf::Keyboard::ScanRBracket; + case 0x2a: return sf::Keyboard::ScanBackslash; + case 0x1b: return sf::Keyboard::ScanDash; + case 0x29: return sf::Keyboard::ScanSemicolon; + case 0x27: return sf::Keyboard::ScanQuote; + case 0x32: return sf::Keyboard::ScanGraveAccent; + case 0x2b: return sf::Keyboard::ScanComma; + case 0x2f: return sf::Keyboard::ScanPeriod; + case 0x2c: return sf::Keyboard::ScanSlash; - case 0x7a: return sf::Keyboard::ScanF1; - case 0x78: return sf::Keyboard::ScanF2; - case 0x63: return sf::Keyboard::ScanF3; - case 0x76: return sf::Keyboard::ScanF4; - case 0x60: return sf::Keyboard::ScanF5; - case 0x61: return sf::Keyboard::ScanF6; - case 0x62: return sf::Keyboard::ScanF7; - case 0x64: return sf::Keyboard::ScanF8; - case 0x65: return sf::Keyboard::ScanF9; - case 0x6d: return sf::Keyboard::ScanF10; - case 0x67: return sf::Keyboard::ScanF11; - case 0x6f: return sf::Keyboard::ScanF12; - case 0x69: return sf::Keyboard::ScanF13; - case 0x6b: return sf::Keyboard::ScanF14; - case 0x71: return sf::Keyboard::ScanF15; + case 0x7a: return sf::Keyboard::ScanF1; + case 0x78: return sf::Keyboard::ScanF2; + case 0x63: return sf::Keyboard::ScanF3; + case 0x76: return sf::Keyboard::ScanF4; + case 0x60: return sf::Keyboard::ScanF5; + case 0x61: return sf::Keyboard::ScanF6; + case 0x62: return sf::Keyboard::ScanF7; + case 0x64: return sf::Keyboard::ScanF8; + case 0x65: return sf::Keyboard::ScanF9; + case 0x6d: return sf::Keyboard::ScanF10; + case 0x67: return sf::Keyboard::ScanF11; + case 0x6f: return sf::Keyboard::ScanF12; + case 0x69: return sf::Keyboard::ScanF13; + case 0x6b: return sf::Keyboard::ScanF14; + case 0x71: return sf::Keyboard::ScanF15; - case 0x39: return sf::Keyboard::ScanCapsLock; + case 0x39: return sf::Keyboard::ScanCapsLock; /* TODO Those are missing: - * case 0x: return sf::Keyboard::ScanPrintScreen; - * case 0x: return sf::Keyboard::ScanScrollLock; - * case 0x: return sf::Keyboard::ScanPause; + * case 0x: return sf::Keyboard::ScanPrintScreen; + * case 0x: return sf::Keyboard::ScanScrollLock; + * case 0x: return sf::Keyboard::ScanPause; */ - case 0x72: return sf::Keyboard::ScanInsert; - case 0x73: return sf::Keyboard::ScanHome; - case 0x74: return sf::Keyboard::ScanPageUp; - case 0x75: return sf::Keyboard::ScanDelete; - case 0x77: return sf::Keyboard::ScanEnd; - case 0x79: return sf::Keyboard::ScanPageDown; + case 0x72: return sf::Keyboard::ScanInsert; + case 0x73: return sf::Keyboard::ScanHome; + case 0x74: return sf::Keyboard::ScanPageUp; + case 0x75: return sf::Keyboard::ScanDelete; + case 0x77: return sf::Keyboard::ScanEnd; + case 0x79: return sf::Keyboard::ScanPageDown; - case 0x7c: return sf::Keyboard::ScanRight; - case 0x7b: return sf::Keyboard::ScanLeft; - case 0x7d: return sf::Keyboard::ScanDown; - case 0x7e: return sf::Keyboard::ScanUp; + case 0x7c: return sf::Keyboard::ScanRight; + case 0x7b: return sf::Keyboard::ScanLeft; + case 0x7d: return sf::Keyboard::ScanDown; + case 0x7e: return sf::Keyboard::ScanUp; - case 0x47: return sf::Keyboard::ScanNumLock; - case 0x4b: return sf::Keyboard::ScanDivide; - case 0x43: return sf::Keyboard::ScanMultiply; - case 0x4e: return sf::Keyboard::ScanMinus; - case 0x45: return sf::Keyboard::ScanPlus; - case 0x51: return sf::Keyboard::ScanPadEquals; - case 0x4c: return sf::Keyboard::ScanReturn; - case 0x41: return sf::Keyboard::ScanDecimal; + case 0x47: return sf::Keyboard::ScanNumLock; + case 0x4b: return sf::Keyboard::ScanDivide; + case 0x43: return sf::Keyboard::ScanMultiply; + case 0x4e: return sf::Keyboard::ScanMinus; + case 0x45: return sf::Keyboard::ScanPlus; + case 0x51: return sf::Keyboard::ScanNumpadEquals; + case 0x4c: return sf::Keyboard::ScanNumpadEnter; + case 0x41: return sf::Keyboard::ScanDecimal; - case 0x53: return sf::Keyboard::ScanNumpad1; - case 0x54: return sf::Keyboard::ScanNumpad2; - case 0x55: return sf::Keyboard::ScanNumpad3; - case 0x56: return sf::Keyboard::ScanNumpad4; - case 0x57: return sf::Keyboard::ScanNumpad5; - case 0x58: return sf::Keyboard::ScanNumpad6; - case 0x59: return sf::Keyboard::ScanNumpad7; - case 0x5b: return sf::Keyboard::ScanNumpad8; - case 0x5c: return sf::Keyboard::ScanNumpad9; - case 0x52: return sf::Keyboard::ScanNumpad0; + case 0x53: return sf::Keyboard::ScanNumpad1; + case 0x54: return sf::Keyboard::ScanNumpad2; + case 0x55: return sf::Keyboard::ScanNumpad3; + case 0x56: return sf::Keyboard::ScanNumpad4; + case 0x57: return sf::Keyboard::ScanNumpad5; + case 0x58: return sf::Keyboard::ScanNumpad6; + case 0x59: return sf::Keyboard::ScanNumpad7; + case 0x5b: return sf::Keyboard::ScanNumpad8; + case 0x5c: return sf::Keyboard::ScanNumpad9; + case 0x52: return sf::Keyboard::ScanNumpad0; /* TODO Those are missing: - * case 0x: return sf::Keyboard::ScanReverseSolidus; - * case 0x: return sf::Keyboard::ScanApplication; - * case 0x: return sf::Keyboard::ScanExecute; - * case 0x72: return sf::Keyboard::ScanHelp; // 0x72 is for Insert - * case 0x: return sf::Keyboard::ScanMenu; - * case 0x: return sf::Keyboard::ScanSelect; - * case 0x: return sf::Keyboard::ScanStop; - * case 0x: return sf::Keyboard::ScanAgain; - * case 0x: return sf::Keyboard::ScanUndo; - * case 0x: return sf::Keyboard::ScanCut; - * case 0x: return sf::Keyboard::ScanCopy; - * case 0x: return sf::Keyboard::ScanPaste; - * case 0x: return sf::Keyboard::ScanFind; + * case 0x: return sf::Keyboard::ScanReverseSolidus; + * case 0x: return sf::Keyboard::ScanApplication; + * case 0x: return sf::Keyboard::ScanExecute; + * case 0x72: return sf::Keyboard::ScanHelp; // 0x72 is for Insert + * case 0x: return sf::Keyboard::ScanMenu; + * case 0x: return sf::Keyboard::ScanSelect; + * case 0x: return sf::Keyboard::ScanStop; + * case 0x: return sf::Keyboard::ScanAgain; + * case 0x: return sf::Keyboard::ScanUndo; + * case 0x: return sf::Keyboard::ScanCut; + * case 0x: return sf::Keyboard::ScanCopy; + * case 0x: return sf::Keyboard::ScanPaste; + * case 0x: return sf::Keyboard::ScanFind; */ case 0x4a: return sf::Keyboard::ScanMute; @@ -1091,14 +1091,14 @@ Keyboard::Scancode HIDInputManager::nonLocalizedKey(UniChar virtualKeycode) /* NOTE Those are symmetric so we leave them out. * Thankfully handled through modifiers and not virtual codes. - * case 0x3b: return sf::Keyboard::ScanLControl; - * case 0x38: return sf::Keyboard::ScanLShift; - * case 0x3a: return sf::Keyboard::ScanLAlt; - * case 0x37: return sf::Keyboard::ScanLSystem; - * case 0x3b: return sf::Keyboard::ScanRControl; - * case 0x38: return sf::Keyboard::ScanRShift; - * case 0x3a: return sf::Keyboard::ScanRAlt; - * case 0x37: return sf::Keyboard::ScanRSystem; + * case 0x3b: return sf::Keyboard::ScanLControl; + * case 0x38: return sf::Keyboard::ScanLShift; + * case 0x3a: return sf::Keyboard::ScanLAlt; + * case 0x37: return sf::Keyboard::ScanLSystem; + * case 0x3b: return sf::Keyboard::ScanRControl; + * case 0x38: return sf::Keyboard::ScanRShift; + * case 0x3a: return sf::Keyboard::ScanRAlt; + * case 0x37: return sf::Keyboard::ScanRSystem; */ default: return sf::Keyboard::ScanUnknown; @@ -1111,81 +1111,81 @@ UInt8 HIDInputManager::scanToVirtualCode(Keyboard::Scancode code) { switch (code) { - case sf::Keyboard::ScanA: return 0x00; - case sf::Keyboard::ScanB: return 0x0b; - case sf::Keyboard::ScanC: return 0x08; - case sf::Keyboard::ScanD: return 0x02; - case sf::Keyboard::ScanE: return 0x0e; - case sf::Keyboard::ScanF: return 0x03; - case sf::Keyboard::ScanG: return 0x05; - case sf::Keyboard::ScanH: return 0x04; - case sf::Keyboard::ScanI: return 0x22; - case sf::Keyboard::ScanJ: return 0x26; - case sf::Keyboard::ScanK: return 0x28; - case sf::Keyboard::ScanL: return 0x25; - case sf::Keyboard::ScanM: return 0x2e; - case sf::Keyboard::ScanN: return 0x2d; - case sf::Keyboard::ScanO: return 0x1f; - case sf::Keyboard::ScanP: return 0x23; - case sf::Keyboard::ScanQ: return 0x0c; - case sf::Keyboard::ScanR: return 0x0f; - case sf::Keyboard::ScanS: return 0x01; - case sf::Keyboard::ScanT: return 0x11; - case sf::Keyboard::ScanU: return 0x20; - case sf::Keyboard::ScanV: return 0x09; - case sf::Keyboard::ScanW: return 0x0d; - case sf::Keyboard::ScanX: return 0x07; - case sf::Keyboard::ScanY: return 0x10; - case sf::Keyboard::ScanZ: return 0x06; + case sf::Keyboard::ScanA: return 0x00; + case sf::Keyboard::ScanB: return 0x0b; + case sf::Keyboard::ScanC: return 0x08; + case sf::Keyboard::ScanD: return 0x02; + case sf::Keyboard::ScanE: return 0x0e; + case sf::Keyboard::ScanF: return 0x03; + case sf::Keyboard::ScanG: return 0x05; + case sf::Keyboard::ScanH: return 0x04; + case sf::Keyboard::ScanI: return 0x22; + case sf::Keyboard::ScanJ: return 0x26; + case sf::Keyboard::ScanK: return 0x28; + case sf::Keyboard::ScanL: return 0x25; + case sf::Keyboard::ScanM: return 0x2e; + case sf::Keyboard::ScanN: return 0x2d; + case sf::Keyboard::ScanO: return 0x1f; + case sf::Keyboard::ScanP: return 0x23; + case sf::Keyboard::ScanQ: return 0x0c; + case sf::Keyboard::ScanR: return 0x0f; + case sf::Keyboard::ScanS: return 0x01; + case sf::Keyboard::ScanT: return 0x11; + case sf::Keyboard::ScanU: return 0x20; + case sf::Keyboard::ScanV: return 0x09; + case sf::Keyboard::ScanW: return 0x0d; + case sf::Keyboard::ScanX: return 0x07; + case sf::Keyboard::ScanY: return 0x10; + case sf::Keyboard::ScanZ: return 0x06; - case sf::Keyboard::ScanNum1: return 0x12; - case sf::Keyboard::ScanNum2: return 0x13; - case sf::Keyboard::ScanNum3: return 0x14; - case sf::Keyboard::ScanNum4: return 0x15; - case sf::Keyboard::ScanNum5: return 0x17; - case sf::Keyboard::ScanNum6: return 0x16; - case sf::Keyboard::ScanNum7: return 0x1a; - case sf::Keyboard::ScanNum8: return 0x1c; - case sf::Keyboard::ScanNum9: return 0x19; - case sf::Keyboard::ScanNum0: return 0x1d; + case sf::Keyboard::ScanNum1: return 0x12; + case sf::Keyboard::ScanNum2: return 0x13; + case sf::Keyboard::ScanNum3: return 0x14; + case sf::Keyboard::ScanNum4: return 0x15; + case sf::Keyboard::ScanNum5: return 0x17; + case sf::Keyboard::ScanNum6: return 0x16; + case sf::Keyboard::ScanNum7: return 0x1a; + case sf::Keyboard::ScanNum8: return 0x1c; + case sf::Keyboard::ScanNum9: return 0x19; + case sf::Keyboard::ScanNum0: return 0x1d; - case sf::Keyboard::ScanEnter: return 0x24; - case sf::Keyboard::ScanEscape: return 0x35; - case sf::Keyboard::ScanBackspace: return 0x33; - case sf::Keyboard::ScanTab: return 0x30; - case sf::Keyboard::ScanSpace: return 0x31; + case sf::Keyboard::ScanEnter: return 0x24; + case sf::Keyboard::ScanEscape: return 0x35; + case sf::Keyboard::ScanBackspace: return 0x33; + case sf::Keyboard::ScanTab: return 0x30; + case sf::Keyboard::ScanSpace: return 0x31; // case sf::Keyboard::ScanHyphen: return 0; // 0x27 is for Quote - case sf::Keyboard::ScanEquals: return 0x18; - case sf::Keyboard::ScanLBracket: return 0x21; - case sf::Keyboard::ScanRBracket: return 0x1e; - case sf::Keyboard::ScanBackslash: return 0x2a; - case sf::Keyboard::ScanDash: return 0x1b; - case sf::Keyboard::ScanSemicolon: return 0x29; - case sf::Keyboard::ScanQuote: return 0x27; - case sf::Keyboard::ScanGraveAccent: return 0x32; - case sf::Keyboard::ScanComma: return 0x2b; - case sf::Keyboard::ScanPeriod: return 0x2f; - case sf::Keyboard::ScanForwardSlash: return 0x2c; + case sf::Keyboard::ScanEquals: return 0x18; + case sf::Keyboard::ScanLBracket: return 0x21; + case sf::Keyboard::ScanRBracket: return 0x1e; + case sf::Keyboard::ScanBackslash: return 0x2a; + case sf::Keyboard::ScanDash: return 0x1b; + case sf::Keyboard::ScanSemicolon: return 0x29; + case sf::Keyboard::ScanQuote: return 0x27; + case sf::Keyboard::ScanGraveAccent: return 0x32; + case sf::Keyboard::ScanComma: return 0x2b; + case sf::Keyboard::ScanPeriod: return 0x2f; + case sf::Keyboard::ScanSlash: return 0x2c; - case sf::Keyboard::ScanF1: return 0x7a; - case sf::Keyboard::ScanF2: return 0x78; - case sf::Keyboard::ScanF3: return 0x63; - case sf::Keyboard::ScanF4: return 0x76; - case sf::Keyboard::ScanF5: return 0x60; - case sf::Keyboard::ScanF6: return 0x61; - case sf::Keyboard::ScanF7: return 0x62; - case sf::Keyboard::ScanF8: return 0x64; - case sf::Keyboard::ScanF9: return 0x65; - case sf::Keyboard::ScanF10: return 0x6d; - case sf::Keyboard::ScanF11: return 0x67; - case sf::Keyboard::ScanF12: return 0x6f; - case sf::Keyboard::ScanF13: return 0x69; - case sf::Keyboard::ScanF14: return 0x6b; - case sf::Keyboard::ScanF15: return 0x71; + case sf::Keyboard::ScanF1: return 0x7a; + case sf::Keyboard::ScanF2: return 0x78; + case sf::Keyboard::ScanF3: return 0x63; + case sf::Keyboard::ScanF4: return 0x76; + case sf::Keyboard::ScanF5: return 0x60; + case sf::Keyboard::ScanF6: return 0x61; + case sf::Keyboard::ScanF7: return 0x62; + case sf::Keyboard::ScanF8: return 0x64; + case sf::Keyboard::ScanF9: return 0x65; + case sf::Keyboard::ScanF10: return 0x6d; + case sf::Keyboard::ScanF11: return 0x67; + case sf::Keyboard::ScanF12: return 0x6f; + case sf::Keyboard::ScanF13: return 0x69; + case sf::Keyboard::ScanF14: return 0x6b; + case sf::Keyboard::ScanF15: return 0x71; - case sf::Keyboard::ScanCapsLock: return 0x39; + case sf::Keyboard::ScanCapsLock: return 0x39; /* TODO Those are missing: * case sf::Keyboard::ScanPrintScreen: return 0; @@ -1199,30 +1199,30 @@ UInt8 HIDInputManager::scanToVirtualCode(Keyboard::Scancode code) case sf::Keyboard::ScanEnd: return 0x77; case sf::Keyboard::ScanPageDown: return 0x79; - case sf::Keyboard::ScanRight: return 0x7c; - case sf::Keyboard::ScanLeft: return 0x7b; - case sf::Keyboard::ScanDown: return 0x7d; - case sf::Keyboard::ScanUp: return 0x7e; + case sf::Keyboard::ScanRight: return 0x7c; + case sf::Keyboard::ScanLeft: return 0x7b; + case sf::Keyboard::ScanDown: return 0x7d; + case sf::Keyboard::ScanUp: return 0x7e; - case sf::Keyboard::ScanNumLock: return 0x47; - case sf::Keyboard::ScanDivide: return 0x4b; - case sf::Keyboard::ScanMultiply: return 0x43; - case sf::Keyboard::ScanMinus: return 0x4e; - case sf::Keyboard::ScanPlus: return 0x45; - case sf::Keyboard::ScanPadEquals: return 0x51; - case sf::Keyboard::ScanReturn: return 0x4c; - case sf::Keyboard::ScanDecimal: return 0x41; + case sf::Keyboard::ScanNumLock: return 0x47; + case sf::Keyboard::ScanDivide: return 0x4b; + case sf::Keyboard::ScanMultiply: return 0x43; + case sf::Keyboard::ScanMinus: return 0x4e; + case sf::Keyboard::ScanPlus: return 0x45; + case sf::Keyboard::ScanNumpadEquals: return 0x51; + case sf::Keyboard::ScanNumpadEnter: return 0x4c; + case sf::Keyboard::ScanDecimal: return 0x41; - case sf::Keyboard::ScanNumpad1: return 0x53; - case sf::Keyboard::ScanNumpad2: return 0x54; - case sf::Keyboard::ScanNumpad3: return 0x55; - case sf::Keyboard::ScanNumpad4: return 0x56; - case sf::Keyboard::ScanNumpad5: return 0x57; - case sf::Keyboard::ScanNumpad6: return 0x58; - case sf::Keyboard::ScanNumpad7: return 0x59; - case sf::Keyboard::ScanNumpad8: return 0x5b; - case sf::Keyboard::ScanNumpad9: return 0x5c; - case sf::Keyboard::ScanNumpad0: return 0x52; + case sf::Keyboard::ScanNumpad1: return 0x53; + case sf::Keyboard::ScanNumpad2: return 0x54; + case sf::Keyboard::ScanNumpad3: return 0x55; + case sf::Keyboard::ScanNumpad4: return 0x56; + case sf::Keyboard::ScanNumpad5: return 0x57; + case sf::Keyboard::ScanNumpad6: return 0x58; + case sf::Keyboard::ScanNumpad7: return 0x59; + case sf::Keyboard::ScanNumpad8: return 0x5b; + case sf::Keyboard::ScanNumpad9: return 0x5c; + case sf::Keyboard::ScanNumpad0: return 0x52; /* TODO Those are missing: * case sf::Keyboard::ScanReverseSolidus: return 0; @@ -1240,18 +1240,18 @@ UInt8 HIDInputManager::scanToVirtualCode(Keyboard::Scancode code) * case sf::Keyboard::ScanFind: return 0; */ - case sf::Keyboard::ScanMute: return 0x4a; - case sf::Keyboard::ScanVolumeUp: return 0x48; - case sf::Keyboard::ScanVolumeDown: return 0x49; + case sf::Keyboard::ScanMute: return 0x4a; + case sf::Keyboard::ScanVolumeUp: return 0x48; + case sf::Keyboard::ScanVolumeDown: return 0x49; - case sf::Keyboard::ScanLControl: return 0x3b; - case sf::Keyboard::ScanLShift: return 0x38; - case sf::Keyboard::ScanLAlt: return 0x3a; - case sf::Keyboard::ScanLSystem: return 0x37; - case sf::Keyboard::ScanRControl: return 0x3b; - case sf::Keyboard::ScanRShift: return 0x38; - case sf::Keyboard::ScanRAlt: return 0x3a; - case sf::Keyboard::ScanRSystem: return 0x37; + case sf::Keyboard::ScanLControl: return 0x3b; + case sf::Keyboard::ScanLShift: return 0x38; + case sf::Keyboard::ScanLAlt: return 0x3a; + case sf::Keyboard::ScanLSystem: return 0x37; + case sf::Keyboard::ScanRControl: return 0x3b; + case sf::Keyboard::ScanRShift: return 0x38; + case sf::Keyboard::ScanRAlt: return 0x3a; + case sf::Keyboard::ScanRSystem: return 0x37; default: return 0x00; } From e1380f182ae3efb6c43f9a1438b121597495996e Mon Sep 17 00:00:00 2001 From: Marco Antognini Date: Mon, 27 Mar 2017 00:36:59 +0200 Subject: [PATCH 06/11] Add new API for scancodes --- include/SFML/Window/Event.hpp | 12 +-- include/SFML/Window/Keyboard.hpp | 153 +++++++++++++++++++++++++++++++ 2 files changed, 159 insertions(+), 6 deletions(-) diff --git a/include/SFML/Window/Event.hpp b/include/SFML/Window/Event.hpp index 84d8df3b..dfeafb32 100644 --- a/include/SFML/Window/Event.hpp +++ b/include/SFML/Window/Event.hpp @@ -61,12 +61,12 @@ public: //////////////////////////////////////////////////////////// struct KeyEvent { - Keyboard::Key code; //!< Code of the key that has been pressed - Keyboard::Scancode scancode; //!< Physical code of the key that has been pressed - bool alt; //!< Is the Alt key pressed? - bool control; //!< Is the Control key pressed? - bool shift; //!< Is the Shift key pressed? - bool system; //!< Is the System key pressed? + Keyboard::Key code; ///< Code of the key that has been pressed, or Unknown + Keyboard::Scancode scancode; ///< Physical code of the key that has been pressed + bool alt; ///< Is the Alt key pressed? + bool control; ///< Is the Control key pressed? + bool shift; ///< Is the Shift key pressed? + bool system; ///< Is the System key pressed? }; //////////////////////////////////////////////////////////// diff --git a/include/SFML/Window/Keyboard.hpp b/include/SFML/Window/Keyboard.hpp index 9c3fec7f..9d3a0241 100644 --- a/include/SFML/Window/Keyboard.hpp +++ b/include/SFML/Window/Keyboard.hpp @@ -29,6 +29,7 @@ // Headers //////////////////////////////////////////////////////////// #include +#include namespace sf @@ -317,6 +318,158 @@ public: ScanCodeCount ///< Keep last -- the total number of scancodes }; + //////////////////////////////////////////////////////////// + /// \brief Scancodes + /// + /// The enumerators are bound to a physical key and do *not* depend + /// on the keyboard layout used by the operating system. Usually, the AT-101 + /// keyboard can be used as reference for the physical position of the keys. + /// + /// The scancodes are based on a subset of Table 12: Keyboard/Keypad Page + /// of Universal Serial Bus (USB): HID Usage Tables, v1.12. + /// + /// \todo When porting this for SFML 3, remove the `s` prefix and use + /// enum class. + /// + //////////////////////////////////////////////////////////// + enum Scancode + { + sUnknown = -1, ///< Represents any scancode not present in this enum + sA = 0, ///< Keyboard a and A key + sB, ///< Keyboard b and B key + sC, ///< Keyboard c and C key + sD, ///< Keyboard d and D key + sE, ///< Keyboard e and E key + sF, ///< Keyboard f and F key + sG, ///< Keyboard g and G key + sH, ///< Keyboard h and H key + sI, ///< Keyboard i and I key + sJ, ///< Keyboard j and J key + sK, ///< Keyboard k and K key + sL, ///< Keyboard l and L key + sM, ///< Keyboard m and M key + sN, ///< Keyboard n and N key + sO, ///< Keyboard o and O key + sP, ///< Keyboard p and P key + sQ, ///< Keyboard q and Q key + sR, ///< Keyboard r and R key + sS, ///< Keyboard s and S key + sT, ///< Keyboard t and T key + sU, ///< Keyboard u and U key + sV, ///< Keyboard v and V key + sW, ///< Keyboard w and W key + sX, ///< Keyboard x and X key + sY, ///< Keyboard y and Y key + sZ, ///< Keyboard z and Z key + sNum1, ///< Keyboard 1 and ! key + sNum2, ///< Keyboard 2 and @ key + sNum3, ///< Keyboard 3 and # key + sNum4, ///< Keyboard 4 and $ key + sNum5, ///< Keyboard 5 and % key + sNum6, ///< Keyboard 6 and ^ key + sNum7, ///< Keyboard 7 and & key + sNum8, ///< Keyboard 8 and * key + sNum9, ///< Keyboard 9 and ) key + sNum0, ///< Keyboard 0 and ) key + sEnter, ///< Keyboard Return (ENTER) key + sEscape, ///< Keyboard Escape key + sBackspace, ///< Keyboard Backspace key + // TODO above it's BackSpace, but is it correct? What do we use here? + sTab, ///< Keyboard Tab key + sSpace, ///< Keyboard Space key + sHyphen, ///< Keyboard - and _ key + sEquals, ///< Keyboard = and + + sLBracket, ///< Keyboard [ and { key + sRBracket, ///< Keyboard ] and } key + sBackslash, ///< Keyboard \ and | key + // TODO capitalisation + sDash, ///< Keyboard Non-US # and ~ + sSemicolon, ///< Keyboard ; and : key + // TODO capitalisation + sQuote, ///< Keyboard ' and " key + sGraveAccent, ///< Keyboard ` and ~ key + sComma, ///< Keyboard , and < key + sPeriod, ///< Keyboard . and > key + sForwardSlash, ///< Keyboard / and ? key + sF1, ///< Keyboard F1 key + sF2, ///< Keyboard F2 key + sF3, ///< Keyboard F3 key + sF4, ///< Keyboard F4 key + sF5, ///< Keyboard F5 key + sF6, ///< Keyboard F6 key + sF7, ///< Keyboard F7 key + sF8, ///< Keyboard F8 key + sF9, ///< Keyboard F9 key + sF10, ///< Keyboard F10 key + sF11, ///< Keyboard F11 key + sF12, ///< Keyboard F12 key + sF13, ///< Keyboard F13 key + sF14, ///< Keyboard F14 key + sF15, ///< Keyboard F15 key + sCapsLock, ///< Keyboard Caps Lock key + sPrintScreen, ///< Keyboard Print Screen key + sScrollLock, ///< Keyboard Scroll Lock key + sPause, ///< Keyboard Pause key + sInsert, ///< Keyboard Insert key + sHome, ///< Keyboard Home key + sPageUp, ///< Keyboard Page Up key + sDelete, ///< Keyboard Delete Forward key + sEnd, ///< Keyboard End key + sPageDown, ///< Keyboard Page Down key + sRight, ///< Keyboard Right Arrow key + sLeft, ///< Keyboard Left Arrow key + sDown, ///< Keyboard Down Arrow key + sUp, ///< Keyboard Up Arrow key + sNumLock, ///< Keypad Num Lock and Clear key + sDivide, ///< Keypad / key + sMultiply, ///< Keypad * key + sMinus, ///< Keypad - key + sPlus, ///< Keypad + key + sPadEquals, ///< keypad = key, probably Mac only + sReturn, ///< Keypad Enter (return) key + sDecimal, ///< Keypad . and Delete key + sNumpad1, ///< Keypad 1 and End key + sNumpad2, ///< Keypad 2 and Down Arrow key + sNumpad3, ///< Keypad 3 and Page Down key + sNumpad4, ///< Keypad 4 and Left Arrow key + sNumpad5, ///< Keypad 5 key + sNumpad6, ///< Keypad 6 and Right Arrow key + sNumpad7, ///< Keypad 7 and Home key + sNumpad8, ///< Keypad 8 and Up Arrow key + sNumpad9, ///< Keypad 9 and Page Up key + sNumpad0, ///< Keypad 0 and Insert key + sReverseSolidus, ///< Keyboard Non-US \ and | key + // FIXME what is this one? Might need better name. The doc says: + // - Typically near the Left-Shift key in AT-102 implementations. + // - Typical language mappings: Belg:<\> FrCa:«°» Dan:<\> Dutch:]|[ Fren:<> Ger:<|> Ital:<> LatAm:<> Nor:<> Span:<> Swed:<|> Swiss:<\> UK:\| Brazil: \|. + // What is the difference with "regular" \ and | key? + sApplication, ///< Keyboard Application key + sExecute, ///< Keyboard Execute key + sHelp, ///< Keyboard Help key + sMenu, ///< Keyboard Menu key + sSelect, ///< Keyboard Select key + sStop, ///< Keyboard Stop key + sAgain, ///< Keyboard Again key + sUndo, ///< Keyboard Undo key + sCut, ///< Keyboard Cut key + sCopy, ///< Keyboard Copy key + sPaste, ///< Keyboard Paste key + sFind, ///< Keyboard Find key + sMute, ///< Keyboard Mute key + sVolumeUp, ///< Keyboard Volume Up key + sVolumeDown, ///< Keyboard Volume Down key + sLControl, ///< Keyboard Left Control key + sLShift, ///< Keyboard Left Shift key + sLAlt, ///< Keyboard Left Alt key + sLSystem, ///< Keyboard Left System key + sRControl, ///< Keyboard Right Control key + sRShift, ///< Keyboard Right Shift key + sRAlt, ///< Keyboard Right Alt key + sRSystem, ///< Keyboard Right System key + + sCodeCount ///< Keep last -- the total number of scancodes + }; + //////////////////////////////////////////////////////////// /// \brief Check if a key is pressed /// From 188aaae7a114448cf30e00445320064c7b35a783 Mon Sep 17 00:00:00 2001 From: Marco Antognini Date: Tue, 28 Mar 2017 23:37:06 +0200 Subject: [PATCH 07/11] Add support of scancodes for macOS --- src/SFML/Window/OSX/HIDInputManager.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/SFML/Window/OSX/HIDInputManager.hpp b/src/SFML/Window/OSX/HIDInputManager.hpp index bd3de198..2bccff61 100644 --- a/src/SFML/Window/OSX/HIDInputManager.hpp +++ b/src/SFML/Window/OSX/HIDInputManager.hpp @@ -223,6 +223,8 @@ private: /// /// \see initializeKeyboard /// + /// \see initializeKeyboard + /// //////////////////////////////////////////////////////////// void freeUp(); From 7f9bca43c5e2ae81c18809ae60c0e09c08e30926 Mon Sep 17 00:00:00 2001 From: "jonathan.r.paton@googlemail.com" Date: Thu, 28 Sep 2017 20:28:42 +0100 Subject: [PATCH 08/11] Initial Windows implementation --- src/SFML/Window/Win32/InputImpl.cpp | 288 ++++++++++++++-------- src/SFML/Window/Win32/InputImpl.hpp | 7 +- src/SFML/Window/Win32/WindowImplWin32.cpp | 129 ++++++++-- src/SFML/Window/Win32/WindowImplWin32.hpp | 22 +- 4 files changed, 321 insertions(+), 125 deletions(-) mode change 100755 => 100644 src/SFML/Window/Win32/WindowImplWin32.cpp diff --git a/src/SFML/Window/Win32/InputImpl.cpp b/src/SFML/Window/Win32/InputImpl.cpp index 5f4e993c..07ccef37 100644 --- a/src/SFML/Window/Win32/InputImpl.cpp +++ b/src/SFML/Window/Win32/InputImpl.cpp @@ -45,116 +45,45 @@ namespace priv //////////////////////////////////////////////////////////// bool InputImpl::isKeyPressed(Keyboard::Key key) { - int vkey = 0; - switch (key) - { - default: vkey = 0; break; - case Keyboard::A: vkey = 'A'; break; - case Keyboard::B: vkey = 'B'; break; - case Keyboard::C: vkey = 'C'; break; - case Keyboard::D: vkey = 'D'; break; - case Keyboard::E: vkey = 'E'; break; - case Keyboard::F: vkey = 'F'; break; - case Keyboard::G: vkey = 'G'; break; - case Keyboard::H: vkey = 'H'; break; - case Keyboard::I: vkey = 'I'; break; - case Keyboard::J: vkey = 'J'; break; - case Keyboard::K: vkey = 'K'; break; - case Keyboard::L: vkey = 'L'; break; - case Keyboard::M: vkey = 'M'; break; - case Keyboard::N: vkey = 'N'; break; - case Keyboard::O: vkey = 'O'; break; - case Keyboard::P: vkey = 'P'; break; - case Keyboard::Q: vkey = 'Q'; break; - case Keyboard::R: vkey = 'R'; break; - case Keyboard::S: vkey = 'S'; break; - case Keyboard::T: vkey = 'T'; break; - case Keyboard::U: vkey = 'U'; break; - case Keyboard::V: vkey = 'V'; break; - case Keyboard::W: vkey = 'W'; break; - case Keyboard::X: vkey = 'X'; break; - case Keyboard::Y: vkey = 'Y'; break; - case Keyboard::Z: vkey = 'Z'; break; - case Keyboard::Num0: vkey = '0'; break; - case Keyboard::Num1: vkey = '1'; break; - case Keyboard::Num2: vkey = '2'; break; - case Keyboard::Num3: vkey = '3'; break; - case Keyboard::Num4: vkey = '4'; break; - case Keyboard::Num5: vkey = '5'; break; - case Keyboard::Num6: vkey = '6'; break; - case Keyboard::Num7: vkey = '7'; break; - case Keyboard::Num8: vkey = '8'; break; - case Keyboard::Num9: vkey = '9'; break; - case Keyboard::Escape: vkey = VK_ESCAPE; break; - case Keyboard::LControl: vkey = VK_LCONTROL; break; - case Keyboard::LShift: vkey = VK_LSHIFT; break; - case Keyboard::LAlt: vkey = VK_LMENU; break; - case Keyboard::LSystem: vkey = VK_LWIN; break; - case Keyboard::RControl: vkey = VK_RCONTROL; break; - case Keyboard::RShift: vkey = VK_RSHIFT; break; - case Keyboard::RAlt: vkey = VK_RMENU; break; - case Keyboard::RSystem: vkey = VK_RWIN; break; - case Keyboard::Menu: vkey = VK_APPS; break; - case Keyboard::LBracket: vkey = VK_OEM_4; break; - case Keyboard::RBracket: vkey = VK_OEM_6; break; - case Keyboard::Semicolon: vkey = VK_OEM_1; break; - case Keyboard::Comma: vkey = VK_OEM_COMMA; break; - case Keyboard::Period: vkey = VK_OEM_PERIOD; break; - case Keyboard::Quote: vkey = VK_OEM_7; break; - case Keyboard::Slash: vkey = VK_OEM_2; break; - case Keyboard::Backslash: vkey = VK_OEM_5; break; - case Keyboard::Tilde: vkey = VK_OEM_3; break; - case Keyboard::Equal: vkey = VK_OEM_PLUS; break; - case Keyboard::Hyphen: vkey = VK_OEM_MINUS; break; - case Keyboard::Space: vkey = VK_SPACE; break; - case Keyboard::Enter: vkey = VK_RETURN; break; - case Keyboard::Backspace: vkey = VK_BACK; break; - case Keyboard::Tab: vkey = VK_TAB; break; - case Keyboard::PageUp: vkey = VK_PRIOR; break; - case Keyboard::PageDown: vkey = VK_NEXT; break; - case Keyboard::End: vkey = VK_END; break; - case Keyboard::Home: vkey = VK_HOME; break; - case Keyboard::Insert: vkey = VK_INSERT; break; - case Keyboard::Delete: vkey = VK_DELETE; break; - case Keyboard::Add: vkey = VK_ADD; break; - case Keyboard::Subtract: vkey = VK_SUBTRACT; break; - case Keyboard::Multiply: vkey = VK_MULTIPLY; break; - case Keyboard::Divide: vkey = VK_DIVIDE; break; - case Keyboard::Left: vkey = VK_LEFT; break; - case Keyboard::Right: vkey = VK_RIGHT; break; - case Keyboard::Up: vkey = VK_UP; break; - case Keyboard::Down: vkey = VK_DOWN; break; - case Keyboard::Numpad0: vkey = VK_NUMPAD0; break; - case Keyboard::Numpad1: vkey = VK_NUMPAD1; break; - case Keyboard::Numpad2: vkey = VK_NUMPAD2; break; - case Keyboard::Numpad3: vkey = VK_NUMPAD3; break; - case Keyboard::Numpad4: vkey = VK_NUMPAD4; break; - case Keyboard::Numpad5: vkey = VK_NUMPAD5; break; - case Keyboard::Numpad6: vkey = VK_NUMPAD6; break; - case Keyboard::Numpad7: vkey = VK_NUMPAD7; break; - case Keyboard::Numpad8: vkey = VK_NUMPAD8; break; - case Keyboard::Numpad9: vkey = VK_NUMPAD9; break; - case Keyboard::F1: vkey = VK_F1; break; - case Keyboard::F2: vkey = VK_F2; break; - case Keyboard::F3: vkey = VK_F3; break; - case Keyboard::F4: vkey = VK_F4; break; - case Keyboard::F5: vkey = VK_F5; break; - case Keyboard::F6: vkey = VK_F6; break; - case Keyboard::F7: vkey = VK_F7; break; - case Keyboard::F8: vkey = VK_F8; break; - case Keyboard::F9: vkey = VK_F9; break; - case Keyboard::F10: vkey = VK_F10; break; - case Keyboard::F11: vkey = VK_F11; break; - case Keyboard::F12: vkey = VK_F12; break; - case Keyboard::F13: vkey = VK_F13; break; - case Keyboard::F14: vkey = VK_F14; break; - case Keyboard::F15: vkey = VK_F15; break; - case Keyboard::Pause: vkey = VK_PAUSE; break; - } - - return (GetAsyncKeyState(vkey) & 0x8000) != 0; + return isKeyPressed(unlocalize(key)); } +//////////////////////////////////////////////////////////// +bool InputImpl::isKeyPressed(Keyboard::Scancode code) +{ + auto winCode = sfScanToWin(code); + auto vkey = MapVirtualKey(winCode, MAPVK_VSC_TO_VK_EX); + auto state = GetAsyncKeyState(vkey); + return (state & 0x8000) != 0; +} + +//////////////////////////////////////////////////////////// +Keyboard::Key InputImpl::localize(Keyboard::Scancode code) +{ + // TODO + return sf::Keyboard::Unknown; +} + +//////////////////////////////////////////////////////////// +Keyboard::Scancode InputImpl::unlocalize(Keyboard::Key code) +{ + // TODO + return sf::Keyboard::ScanUnknown; +} + +//////////////////////////////////////////////////////////// +String InputImpl::getDescription(Keyboard::Scancode code) +{ + LONG lparam = sfScanToWin(code); + const int bufSize(1024); + WCHAR name[bufSize]; + int result = GetKeyNameText(lparam, name, bufSize); + if (result > 0) + { + return name; + } + return "Unknown"; +} //////////////////////////////////////////////////////////// void InputImpl::setVirtualKeyboardVisible(bool visible) @@ -251,6 +180,149 @@ Vector2i InputImpl::getTouchPosition(unsigned int /*finger*/, const WindowBase& return Vector2i(); } +//////////////////////////////////////////////////////////// +LONG InputImpl::sfScanToWin(Keyboard::Scancode code) +{ + // Windows scan codes + // Reference: https://msdn.microsoft.com/en-us/library/aa299374(v=vs.60).aspx + switch (code) + { + case Keyboard::ScanA: return 30; + case Keyboard::ScanB: return 48; + case Keyboard::ScanC: return 46; + case Keyboard::ScanD: return 32; + case Keyboard::ScanE: return 18; + case Keyboard::ScanF: return 33; + case Keyboard::ScanG: return 34; + case Keyboard::ScanH: return 35; + case Keyboard::ScanI: return 23; + case Keyboard::ScanJ: return 36; + case Keyboard::ScanK: return 37; + case Keyboard::ScanL: return 38; + case Keyboard::ScanM: return 50; + case Keyboard::ScanN: return 49; + case Keyboard::ScanO: return 24; + case Keyboard::ScanP: return 25; + case Keyboard::ScanQ: return 16; + case Keyboard::ScanR: return 19; + case Keyboard::ScanS: return 31; + case Keyboard::ScanT: return 20; + case Keyboard::ScanU: return 22; + case Keyboard::ScanV: return 47; + case Keyboard::ScanW: return 17; + case Keyboard::ScanX: return 45; + case Keyboard::ScanY: return 21; + case Keyboard::ScanZ: return 44; + + case Keyboard::ScanNum1: return 2; + case Keyboard::ScanNum2: return 3; + case Keyboard::ScanNum3: return 4; + case Keyboard::ScanNum4: return 5; + case Keyboard::ScanNum5: return 6; + case Keyboard::ScanNum6: return 7; + case Keyboard::ScanNum7: return 8; + case Keyboard::ScanNum8: return 9; + case Keyboard::ScanNum9: return 10; + case Keyboard::ScanNum0: return 11; + + case Keyboard::ScanEnter: return 28; + case Keyboard::ScanEscape: return 1; + case Keyboard::ScanBackspace: return 14; + case Keyboard::ScanTab: return 15; + case Keyboard::ScanSpace: return 57; + case Keyboard::ScanHyphen: return 12; + case Keyboard::ScanEquals: return 13; + case Keyboard::ScanLBracket: return 26; + case Keyboard::ScanRBracket: return 27; + case Keyboard::ScanBackslash: return 43; + case Keyboard::ScanDash: return 41; + case Keyboard::ScanSemicolon: return 39; + case Keyboard::ScanQuote: return 40; + //case Keyboard::ScanGraveAccent: return ? ? ? + case Keyboard::ScanComma: return 51; + case Keyboard::ScanPeriod: return 52; + case Keyboard::ScanSlash: return 53; + + case Keyboard::ScanF1: return 59; + case Keyboard::ScanF2: return 60; + case Keyboard::ScanF3: return 61; + case Keyboard::ScanF4: return 62; + case Keyboard::ScanF5: return 63; + case Keyboard::ScanF6: return 64; + case Keyboard::ScanF7: return 65; + case Keyboard::ScanF8: return 66; + case Keyboard::ScanF9: return 67; + case Keyboard::ScanF10: return 68; + case Keyboard::ScanF11: return MAKELONG(87, KF_EXTENDED); + case Keyboard::ScanF12: return MAKELONG(88, KF_EXTENDED); + //case Keyboard::ScanF13: return ??? + //case Keyboard::ScanF14: return ??? + //case Keyboard::ScanF15: return ??? + + case Keyboard::ScanCapsLock: return 58; + case Keyboard::ScanPrintScreen: return 55; + case Keyboard::ScanScrollLock: return 70; + //case Keyboard::ScanPause: return ???; + case Keyboard::ScanInsert: return 82; + case Keyboard::ScanHome: return 71; + case Keyboard::ScanPageUp: return 73; + case Keyboard::ScanDelete: return 83; + case Keyboard::ScanEnd: return 79; + case Keyboard::ScanPageDown: return 81; + case Keyboard::ScanRight: return 77; + case Keyboard::ScanLeft: return 75; + case Keyboard::ScanDown: return 80; + case Keyboard::ScanUp: return 72; + case Keyboard::ScanNumLock: return 69; + case Keyboard::ScanDivide: return 53; + //case Keyboard::ScanMultiply: return ??? ; + case Keyboard::ScanMinus: return 74; + case Keyboard::ScanPlus: return 78; + //case Keyboard::ScanPadEquals: return ???; + case Keyboard::ScanNumpadEnter: return MAKELONG(28, KF_EXTENDED); + case Keyboard::ScanDecimal: return MAKELONG(83, KF_EXTENDED); + + // Num pad keys except 5 have the extended bit (0x100) set + case Keyboard::ScanNumpad1: return MAKELONG(79, KF_EXTENDED); + case Keyboard::ScanNumpad2: return MAKELONG(80, KF_EXTENDED); + case Keyboard::ScanNumpad3: return MAKELONG(81, KF_EXTENDED); + case Keyboard::ScanNumpad4: return MAKELONG(75, KF_EXTENDED); + case Keyboard::ScanNumpad5: return 76; + case Keyboard::ScanNumpad6: return MAKELONG(77, KF_EXTENDED); + case Keyboard::ScanNumpad7: return MAKELONG(71, KF_EXTENDED); + case Keyboard::ScanNumpad8: return MAKELONG(72, KF_EXTENDED); + case Keyboard::ScanNumpad9: return MAKELONG(73, KF_EXTENDED); + case Keyboard::ScanNumpad0: return MAKELONG(82, KF_EXTENDED); + + //case Keyboard::ScanReverseSolidus: return ? ? ? ; + //case Keyboard::ScanApplication: return ? ? ? ; + //case Keyboard::ScanExecute: return ? ? ? ; + //case Keyboard::ScanHelp: return ? ? ? ; + //case Keyboard::ScanMenu: return ? ? ? ; + //case Keyboard::ScanSelect: return ? ? ? ; + //case Keyboard::ScanStop: return ? ? ? ; + //case Keyboard::ScanAgain: return ? ? ? ; + //case Keyboard::ScanUndo: return ? ? ? ; + //case Keyboard::ScanCut: return ? ? ? ; + //case Keyboard::ScanCopy: return ? ? ? ; + //case Keyboard::ScanPaste: return ? ? ? ; + //case Keyboard::ScanFind: return ? ? ? ; + //case Keyboard::ScanMute: return ? ? ? ; + //case Keyboard::ScanVolumeUp: return ? ? ? ; + //case Keyboard::ScanVolumeDown: return ? ? ? ; + case Keyboard::ScanLControl: return 29; + case Keyboard::ScanLShift: return 42; + case Keyboard::ScanLAlt: return 56; + //case Keyboard::ScanLSystem: return ? ? ? ; + case Keyboard::ScanRControl: return MAKELONG(29 ,KF_EXTENDED); + case Keyboard::ScanRShift: return 54; + case Keyboard::ScanRAlt: return 56; + //case Keyboard::ScanRSystem: return ? ? ? ; + + default: return 0; // Not sure what to return here? + } +} + } // namespace priv } // namespace sf diff --git a/src/SFML/Window/Win32/InputImpl.hpp b/src/SFML/Window/Win32/InputImpl.hpp index b145f38f..ba8f5b13 100644 --- a/src/SFML/Window/Win32/InputImpl.hpp +++ b/src/SFML/Window/Win32/InputImpl.hpp @@ -31,6 +31,7 @@ #include #include +#include namespace sf { @@ -69,7 +70,7 @@ public: static Keyboard::Scancode unlocalize(Keyboard::Key key); //////////////////////////////////////////////////////////// - /// \copydoc sf::Keyboard::localizedRepresentation + /// \copydoc sf::Keyboard::getDescription /// //////////////////////////////////////////////////////////// static String getDescription(Keyboard::Scancode code); @@ -176,6 +177,10 @@ public: /// //////////////////////////////////////////////////////////// static Vector2i getTouchPosition(unsigned int finger, const WindowBase& relativeTo); + + private: + + static LONG sfScanToWin(Keyboard::Scancode code); }; } // namespace priv diff --git a/src/SFML/Window/Win32/WindowImplWin32.cpp b/src/SFML/Window/Win32/WindowImplWin32.cpp old mode 100755 new mode 100644 index e9d1c18b..e6b63496 --- a/src/SFML/Window/Win32/WindowImplWin32.cpp +++ b/src/SFML/Window/Win32/WindowImplWin32.cpp @@ -557,6 +557,104 @@ void WindowImplWin32::grabCursor(bool grabbed) } } +//////////////////////////////////////////////////////////// +Keyboard::Scancode WindowImplWin32::toScancode(LPARAM flags) +{ + int code = ((flags & (0xFF << 16)) >> 16); + + // Windows scan codes + // Reference: https://msdn.microsoft.com/en-us/library/aa299374(v=vs.60).aspx + switch (code) + { + case 1: return Keyboard::ScanEscape; + case 2: return Keyboard::ScanNum1; + case 3: return Keyboard::ScanNum2; + case 4: return Keyboard::ScanNum3; + case 5: return Keyboard::ScanNum4; + case 6: return Keyboard::ScanNum5; + case 7: return Keyboard::ScanNum6; + case 8: return Keyboard::ScanNum7; + case 9: return Keyboard::ScanNum8; + case 10: return Keyboard::ScanNum9; + case 11: return Keyboard::ScanNum0; + case 12: return Keyboard::ScanHyphen; + case 13: return Keyboard::ScanEquals; + case 14: return Keyboard::ScanBackspace; + case 15: return Keyboard::ScanTab; + case 16: return Keyboard::ScanQ; + case 17: return Keyboard::ScanW; + case 18: return Keyboard::ScanE; + case 19: return Keyboard::ScanR; + case 20: return Keyboard::ScanT; + case 21: return Keyboard::ScanY; + case 22: return Keyboard::ScanU; + case 23: return Keyboard::ScanI; + case 24: return Keyboard::ScanO; + case 25: return Keyboard::ScanP; + case 26: return Keyboard::ScanLBracket; + case 27: return Keyboard::ScanRBracket; + case 28: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanEnter : Keyboard::ScanReturn; + case 29: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanRControl : Keyboard::ScanLControl; + case 30: return Keyboard::ScanA; + case 31: return Keyboard::ScanS; + case 32: return Keyboard::ScanD; + case 33: return Keyboard::ScanF; + case 34: return Keyboard::ScanG; + case 35: return Keyboard::ScanH; + case 36: return Keyboard::ScanJ; + case 37: return Keyboard::ScanK; + case 38: return Keyboard::ScanL; + case 39: return Keyboard::ScanSemicolon; + case 40: return Keyboard::ScanQuote; + case 41: return Keyboard::ScanBackslash; + case 42: return Keyboard::ScanLShift; + case 43: return Keyboard::ScanDash; + case 44: return Keyboard::ScanZ; + case 45: return Keyboard::ScanX; + case 46: return Keyboard::ScanC; + case 47: return Keyboard::ScanV; + case 48: return Keyboard::ScanB; + case 49: return Keyboard::ScanN; + case 50: return Keyboard::ScanM; + case 51: return Keyboard::ScanComma; + case 52: return Keyboard::ScanPeriod; + case 53: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanDivide : Keyboard::ScanForwardSlash; + case 54: return Keyboard::ScanRShift; + case 55: return Keyboard::ScanPrintScreen; + case 56: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanRAlt : Keyboard::ScanLAlt; + case 57: return Keyboard::ScanSpace; + case 58: return Keyboard::ScanCapsLock; + case 59: return Keyboard::ScanF1; + case 60: return Keyboard::ScanF2; + case 61: return Keyboard::ScanF3; + case 62: return Keyboard::ScanF4; + case 63: return Keyboard::ScanF5; + case 64: return Keyboard::ScanF6; + case 65: return Keyboard::ScanF7; + case 66: return Keyboard::ScanF8; + case 67: return Keyboard::ScanF9; + case 68: return Keyboard::ScanF10; + case 87: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanUnknown : Keyboard::ScanF11; + case 88: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanUnknown : Keyboard::ScanF12; + case 69: return Keyboard::ScanNumLock; + case 70: return Keyboard::ScanScrollLock; + case 71: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanHome : Keyboard::ScanNumpad7; + case 72: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanUp : Keyboard::ScanNumpad8; + case 73: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanPageUp : Keyboard::ScanNumpad9; + case 74: return Keyboard::ScanMinus; + case 75: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanLeft : Keyboard::ScanNumpad4; + case 76: return Keyboard::ScanNumpad5; + case 77: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanRight : Keyboard::ScanNumpad6; + case 78: return Keyboard::ScanPlus; + case 79: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanEnd : Keyboard::ScanNumpad1; + case 80: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanDown : Keyboard::ScanNumpad2; + case 81: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanPageDown : Keyboard::ScanNumpad3; + case 82: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanInsert : Keyboard::ScanNumpad0; + case 83: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanDecimal : Keyboard::ScanNumpad4; + + default: return Keyboard::ScanUnknown; + } +} //////////////////////////////////////////////////////////// void WindowImplWin32::processEvent(UINT message, WPARAM wParam, LPARAM lParam) @@ -726,12 +824,13 @@ void WindowImplWin32::processEvent(UINT message, WPARAM wParam, LPARAM lParam) if (m_keyRepeatEnabled || ((HIWORD(lParam) & KF_REPEAT) == 0)) { Event event; - event.type = Event::KeyPressed; - event.key.alt = HIWORD(GetKeyState(VK_MENU)) != 0; - event.key.control = HIWORD(GetKeyState(VK_CONTROL)) != 0; - event.key.shift = HIWORD(GetKeyState(VK_SHIFT)) != 0; - event.key.system = HIWORD(GetKeyState(VK_LWIN)) || HIWORD(GetKeyState(VK_RWIN)); - event.key.code = virtualKeyCodeToSF(wParam, lParam); + event.type = Event::KeyPressed; + event.key.alt = HIWORD(GetKeyState(VK_MENU)) != 0; + event.key.control = HIWORD(GetKeyState(VK_CONTROL)) != 0; + event.key.shift = HIWORD(GetKeyState(VK_SHIFT)) != 0; + event.key.system = HIWORD(GetKeyState(VK_LWIN)) || HIWORD(GetKeyState(VK_RWIN)); + event.key.scancode = toScancode(lParam); + event.key.code = virtualKeyCodeToSF(wParam, lParam, event.key.scancode); pushEvent(event); } break; @@ -742,12 +841,13 @@ void WindowImplWin32::processEvent(UINT message, WPARAM wParam, LPARAM lParam) case WM_SYSKEYUP: { Event event; - event.type = Event::KeyReleased; - event.key.alt = HIWORD(GetKeyState(VK_MENU)) != 0; - event.key.control = HIWORD(GetKeyState(VK_CONTROL)) != 0; - event.key.shift = HIWORD(GetKeyState(VK_SHIFT)) != 0; - event.key.system = HIWORD(GetKeyState(VK_LWIN)) || HIWORD(GetKeyState(VK_RWIN)); - event.key.code = virtualKeyCodeToSF(wParam, lParam); + event.type = Event::KeyReleased; + event.key.alt = HIWORD(GetKeyState(VK_MENU)) != 0; + event.key.control = HIWORD(GetKeyState(VK_CONTROL)) != 0; + event.key.shift = HIWORD(GetKeyState(VK_SHIFT)) != 0; + event.key.system = HIWORD(GetKeyState(VK_LWIN)) || HIWORD(GetKeyState(VK_RWIN)); + event.key.scancode = toScancode(lParam); + event.key.code = virtualKeyCodeToSF(wParam, lParam, event.key.scancode); pushEvent(event); break; } @@ -998,7 +1098,7 @@ void WindowImplWin32::processEvent(UINT message, WPARAM wParam, LPARAM lParam) //////////////////////////////////////////////////////////// -Keyboard::Key WindowImplWin32::virtualKeyCodeToSF(WPARAM key, LPARAM flags) +Keyboard::Key WindowImplWin32::virtualKeyCodeToSF(WPARAM key, LPARAM flags, Keyboard::Scancode code) { switch (key) { @@ -1006,8 +1106,7 @@ Keyboard::Key WindowImplWin32::virtualKeyCodeToSF(WPARAM key, LPARAM flags) case VK_SHIFT: { static UINT lShift = MapVirtualKeyW(VK_LSHIFT, MAPVK_VK_TO_VSC); - UINT scancode = static_cast((flags & (0xFF << 16)) >> 16); - return scancode == lShift ? Keyboard::LShift : Keyboard::RShift; + return code == lShift ? Keyboard::LShift : Keyboard::RShift; } // Check the "extended" flag to distinguish between left and right alt diff --git a/src/SFML/Window/Win32/WindowImplWin32.hpp b/src/SFML/Window/Win32/WindowImplWin32.hpp index ba2f662d..a43488b4 100755 --- a/src/SFML/Window/Win32/WindowImplWin32.hpp +++ b/src/SFML/Window/Win32/WindowImplWin32.hpp @@ -254,7 +254,17 @@ private: /// \return SFML key code corresponding to the key /// //////////////////////////////////////////////////////////// - static Keyboard::Key virtualKeyCodeToSF(WPARAM key, LPARAM flags); + static Keyboard::Key virtualKeyCodeToSF(WPARAM key, LPARAM flags, Keyboard::Scancode code); + + //////////////////////////////////////////////////////////// + /// \brief Convert win32 message flags to scancode + /// + /// \param lParam The message flags + /// + /// \return The scancode corresponding to the key + /// + //////////////////////////////////////////////////////////// + static Keyboard::Scancode convertToScancode(LPARAM flags); //////////////////////////////////////////////////////////// /// \brief Function called whenever one of our windows receives a message @@ -269,6 +279,16 @@ private: //////////////////////////////////////////////////////////// static LRESULT CALLBACK globalOnEvent(HWND handle, UINT message, WPARAM wParam, LPARAM lParam); + //////////////////////////////////////////////////////////// + /// \brief Convert a Win32 scancode to an sfml scancode + /// + /// \param flags input flags + /// + /// \return SFML scancode corresponding to the key + /// + //////////////////////////////////////////////////////////// + static Keyboard::Scancode toScancode(LPARAM flags); + //////////////////////////////////////////////////////////// // Member data //////////////////////////////////////////////////////////// From 950d10c49f55f485a84f656b15f078cb2aff62c8 Mon Sep 17 00:00:00 2001 From: "jonathan.r.paton@googlemail.com" Date: Wed, 4 Oct 2017 15:21:18 +0100 Subject: [PATCH 09/11] Added and fixed some scancodes --- src/SFML/Window/Win32/InputImpl.cpp | 288 +++++++++++++++------- src/SFML/Window/Win32/InputImpl.hpp | 2 +- src/SFML/Window/Win32/WindowImplWin32.cpp | 18 +- src/SFML/Window/Win32/WindowImplWin32.hpp | 2 +- 4 files changed, 210 insertions(+), 100 deletions(-) diff --git a/src/SFML/Window/Win32/InputImpl.cpp b/src/SFML/Window/Win32/InputImpl.cpp index 07ccef37..4d624afd 100644 --- a/src/SFML/Window/Win32/InputImpl.cpp +++ b/src/SFML/Window/Win32/InputImpl.cpp @@ -45,7 +45,114 @@ namespace priv //////////////////////////////////////////////////////////// bool InputImpl::isKeyPressed(Keyboard::Key key) { - return isKeyPressed(unlocalize(key)); + int vkey = 0; + switch (key) + { + default: vkey = 0; break; + case Keyboard::A: vkey = 'A'; break; + case Keyboard::B: vkey = 'B'; break; + case Keyboard::C: vkey = 'C'; break; + case Keyboard::D: vkey = 'D'; break; + case Keyboard::E: vkey = 'E'; break; + case Keyboard::F: vkey = 'F'; break; + case Keyboard::G: vkey = 'G'; break; + case Keyboard::H: vkey = 'H'; break; + case Keyboard::I: vkey = 'I'; break; + case Keyboard::J: vkey = 'J'; break; + case Keyboard::K: vkey = 'K'; break; + case Keyboard::L: vkey = 'L'; break; + case Keyboard::M: vkey = 'M'; break; + case Keyboard::N: vkey = 'N'; break; + case Keyboard::O: vkey = 'O'; break; + case Keyboard::P: vkey = 'P'; break; + case Keyboard::Q: vkey = 'Q'; break; + case Keyboard::R: vkey = 'R'; break; + case Keyboard::S: vkey = 'S'; break; + case Keyboard::T: vkey = 'T'; break; + case Keyboard::U: vkey = 'U'; break; + case Keyboard::V: vkey = 'V'; break; + case Keyboard::W: vkey = 'W'; break; + case Keyboard::X: vkey = 'X'; break; + case Keyboard::Y: vkey = 'Y'; break; + case Keyboard::Z: vkey = 'Z'; break; + case Keyboard::Num0: vkey = '0'; break; + case Keyboard::Num1: vkey = '1'; break; + case Keyboard::Num2: vkey = '2'; break; + case Keyboard::Num3: vkey = '3'; break; + case Keyboard::Num4: vkey = '4'; break; + case Keyboard::Num5: vkey = '5'; break; + case Keyboard::Num6: vkey = '6'; break; + case Keyboard::Num7: vkey = '7'; break; + case Keyboard::Num8: vkey = '8'; break; + case Keyboard::Num9: vkey = '9'; break; + case Keyboard::Escape: vkey = VK_ESCAPE; break; + case Keyboard::LControl: vkey = VK_LCONTROL; break; + case Keyboard::LShift: vkey = VK_LSHIFT; break; + case Keyboard::LAlt: vkey = VK_LMENU; break; + case Keyboard::LSystem: vkey = VK_LWIN; break; + case Keyboard::RControl: vkey = VK_RCONTROL; break; + case Keyboard::RShift: vkey = VK_RSHIFT; break; + case Keyboard::RAlt: vkey = VK_RMENU; break; + case Keyboard::RSystem: vkey = VK_RWIN; break; + case Keyboard::Menu: vkey = VK_APPS; break; + case Keyboard::LBracket: vkey = VK_OEM_4; break; + case Keyboard::RBracket: vkey = VK_OEM_6; break; + case Keyboard::SemiColon: vkey = VK_OEM_1; break; + case Keyboard::Comma: vkey = VK_OEM_COMMA; break; + case Keyboard::Period: vkey = VK_OEM_PERIOD; break; + case Keyboard::Quote: vkey = VK_OEM_7; break; + case Keyboard::Slash: vkey = VK_OEM_2; break; + case Keyboard::BackSlash: vkey = VK_OEM_5; break; + case Keyboard::Tilde: vkey = VK_OEM_3; break; + case Keyboard::Equal: vkey = VK_OEM_PLUS; break; + case Keyboard::Dash: vkey = VK_OEM_MINUS; break; + case Keyboard::Space: vkey = VK_SPACE; break; + case Keyboard::Return: vkey = VK_RETURN; break; + case Keyboard::BackSpace: vkey = VK_BACK; break; + case Keyboard::Tab: vkey = VK_TAB; break; + case Keyboard::PageUp: vkey = VK_PRIOR; break; + case Keyboard::PageDown: vkey = VK_NEXT; break; + case Keyboard::End: vkey = VK_END; break; + case Keyboard::Home: vkey = VK_HOME; break; + case Keyboard::Insert: vkey = VK_INSERT; break; + case Keyboard::Delete: vkey = VK_DELETE; break; + case Keyboard::Add: vkey = VK_ADD; break; + case Keyboard::Subtract: vkey = VK_SUBTRACT; break; + case Keyboard::Multiply: vkey = VK_MULTIPLY; break; + case Keyboard::Divide: vkey = VK_DIVIDE; break; + case Keyboard::Left: vkey = VK_LEFT; break; + case Keyboard::Right: vkey = VK_RIGHT; break; + case Keyboard::Up: vkey = VK_UP; break; + case Keyboard::Down: vkey = VK_DOWN; break; + case Keyboard::Numpad0: vkey = VK_NUMPAD0; break; + case Keyboard::Numpad1: vkey = VK_NUMPAD1; break; + case Keyboard::Numpad2: vkey = VK_NUMPAD2; break; + case Keyboard::Numpad3: vkey = VK_NUMPAD3; break; + case Keyboard::Numpad4: vkey = VK_NUMPAD4; break; + case Keyboard::Numpad5: vkey = VK_NUMPAD5; break; + case Keyboard::Numpad6: vkey = VK_NUMPAD6; break; + case Keyboard::Numpad7: vkey = VK_NUMPAD7; break; + case Keyboard::Numpad8: vkey = VK_NUMPAD8; break; + case Keyboard::Numpad9: vkey = VK_NUMPAD9; break; + case Keyboard::F1: vkey = VK_F1; break; + case Keyboard::F2: vkey = VK_F2; break; + case Keyboard::F3: vkey = VK_F3; break; + case Keyboard::F4: vkey = VK_F4; break; + case Keyboard::F5: vkey = VK_F5; break; + case Keyboard::F6: vkey = VK_F6; break; + case Keyboard::F7: vkey = VK_F7; break; + case Keyboard::F8: vkey = VK_F8; break; + case Keyboard::F9: vkey = VK_F9; break; + case Keyboard::F10: vkey = VK_F10; break; + case Keyboard::F11: vkey = VK_F11; break; + case Keyboard::F12: vkey = VK_F12; break; + case Keyboard::F13: vkey = VK_F13; break; + case Keyboard::F14: vkey = VK_F14; break; + case Keyboard::F15: vkey = VK_F15; break; + case Keyboard::Pause: vkey = VK_PAUSE; break; + } + + return (GetAsyncKeyState(vkey) & 0x8000) != 0; } //////////////////////////////////////////////////////////// @@ -74,10 +181,10 @@ Keyboard::Scancode InputImpl::unlocalize(Keyboard::Key code) //////////////////////////////////////////////////////////// String InputImpl::getDescription(Keyboard::Scancode code) { - LONG lparam = sfScanToWin(code); + WORD winCode = sfScanToWin(code); const int bufSize(1024); WCHAR name[bufSize]; - int result = GetKeyNameText(lparam, name, bufSize); + int result = GetKeyNameText(winCode << 16, name, bufSize); if (result > 0) { return name; @@ -181,7 +288,7 @@ Vector2i InputImpl::getTouchPosition(unsigned int /*finger*/, const WindowBase& } //////////////////////////////////////////////////////////// -LONG InputImpl::sfScanToWin(Keyboard::Scancode code) +WORD InputImpl::sfScanToWin(Keyboard::Scancode code) { // Windows scan codes // Reference: https://msdn.microsoft.com/en-us/library/aa299374(v=vs.60).aspx @@ -225,99 +332,98 @@ LONG InputImpl::sfScanToWin(Keyboard::Scancode code) case Keyboard::ScanNum9: return 10; case Keyboard::ScanNum0: return 11; - case Keyboard::ScanEnter: return 28; - case Keyboard::ScanEscape: return 1; - case Keyboard::ScanBackspace: return 14; - case Keyboard::ScanTab: return 15; - case Keyboard::ScanSpace: return 57; - case Keyboard::ScanHyphen: return 12; - case Keyboard::ScanEquals: return 13; - case Keyboard::ScanLBracket: return 26; - case Keyboard::ScanRBracket: return 27; - case Keyboard::ScanBackslash: return 43; - case Keyboard::ScanDash: return 41; - case Keyboard::ScanSemicolon: return 39; - case Keyboard::ScanQuote: return 40; - //case Keyboard::ScanGraveAccent: return ? ? ? - case Keyboard::ScanComma: return 51; - case Keyboard::ScanPeriod: return 52; - case Keyboard::ScanSlash: return 53; + case Keyboard::ScanEnter: return 28; + case Keyboard::ScanEscape: return 1; + case Keyboard::ScanBackspace: return 14; + case Keyboard::ScanTab: return 15; + case Keyboard::ScanSpace: return 57; + case Keyboard::ScanHyphen: return 12; + case Keyboard::ScanEquals: return 13; + case Keyboard::ScanLBracket: return 26; + case Keyboard::ScanRBracket: return 27; + case Keyboard::ScanBackslash: return 43; + case Keyboard::ScanDash: return 41; + case Keyboard::ScanSemicolon: return 39; + case Keyboard::ScanQuote: return 40; + //case Keyboard::ScanGraveAccent: return ? ? ? + case Keyboard::ScanComma: return 51; + case Keyboard::ScanPeriod: return 52; + case Keyboard::ScanSlash: return 53; - case Keyboard::ScanF1: return 59; - case Keyboard::ScanF2: return 60; - case Keyboard::ScanF3: return 61; - case Keyboard::ScanF4: return 62; - case Keyboard::ScanF5: return 63; - case Keyboard::ScanF6: return 64; - case Keyboard::ScanF7: return 65; - case Keyboard::ScanF8: return 66; - case Keyboard::ScanF9: return 67; - case Keyboard::ScanF10: return 68; - case Keyboard::ScanF11: return MAKELONG(87, KF_EXTENDED); - case Keyboard::ScanF12: return MAKELONG(88, KF_EXTENDED); - //case Keyboard::ScanF13: return ??? - //case Keyboard::ScanF14: return ??? - //case Keyboard::ScanF15: return ??? + case Keyboard::ScanF1: return 59; + case Keyboard::ScanF2: return 60; + case Keyboard::ScanF3: return 61; + case Keyboard::ScanF4: return 62; + case Keyboard::ScanF5: return 63; + case Keyboard::ScanF6: return 64; + case Keyboard::ScanF7: return 65; + case Keyboard::ScanF8: return 66; + case Keyboard::ScanF9: return 67; + case Keyboard::ScanF10: return 68; + case Keyboard::ScanF11: return KF_EXTENDED | 87; + case Keyboard::ScanF12: return KF_EXTENDED | 88; + //case Keyboard::ScanF13: return ??? + //case Keyboard::ScanF14: return ??? + //case Keyboard::ScanF15: return ??? - case Keyboard::ScanCapsLock: return 58; - case Keyboard::ScanPrintScreen: return 55; - case Keyboard::ScanScrollLock: return 70; - //case Keyboard::ScanPause: return ???; - case Keyboard::ScanInsert: return 82; - case Keyboard::ScanHome: return 71; - case Keyboard::ScanPageUp: return 73; - case Keyboard::ScanDelete: return 83; - case Keyboard::ScanEnd: return 79; - case Keyboard::ScanPageDown: return 81; - case Keyboard::ScanRight: return 77; - case Keyboard::ScanLeft: return 75; - case Keyboard::ScanDown: return 80; - case Keyboard::ScanUp: return 72; - case Keyboard::ScanNumLock: return 69; - case Keyboard::ScanDivide: return 53; - //case Keyboard::ScanMultiply: return ??? ; - case Keyboard::ScanMinus: return 74; - case Keyboard::ScanPlus: return 78; + case Keyboard::ScanCapsLock: return 58; + case Keyboard::ScanPrintScreen: return 55 | KF_EXTENDED; + case Keyboard::ScanScrollLock: return 70; + case Keyboard::ScanPause: return 69; + case Keyboard::ScanInsert: return 82 | KF_EXTENDED; + case Keyboard::ScanHome: return 71 | KF_EXTENDED; + case Keyboard::ScanPageUp: return 73 | KF_EXTENDED; + case Keyboard::ScanDelete: return 83 | KF_EXTENDED; + case Keyboard::ScanEnd: return 79 | KF_EXTENDED; + case Keyboard::ScanPageDown: return 81 | KF_EXTENDED; + case Keyboard::ScanRight: return 77 | KF_EXTENDED; + case Keyboard::ScanLeft: return 75 | KF_EXTENDED; + case Keyboard::ScanDown: return 80 | KF_EXTENDED; + case Keyboard::ScanUp: return 72 | KF_EXTENDED; + case Keyboard::ScanNumLock: return 69 | KF_EXTENDED; + case Keyboard::ScanDivide: return 53; + case Keyboard::ScanMultiply: return 55; + case Keyboard::ScanMinus: return 74; + case Keyboard::ScanPlus: return 78; //case Keyboard::ScanPadEquals: return ???; - case Keyboard::ScanNumpadEnter: return MAKELONG(28, KF_EXTENDED); - case Keyboard::ScanDecimal: return MAKELONG(83, KF_EXTENDED); + case Keyboard::ScanNumpadEnter: return KF_EXTENDED | 28; + case Keyboard::ScanDecimal: return 83; - // Num pad keys except 5 have the extended bit (0x100) set - case Keyboard::ScanNumpad1: return MAKELONG(79, KF_EXTENDED); - case Keyboard::ScanNumpad2: return MAKELONG(80, KF_EXTENDED); - case Keyboard::ScanNumpad3: return MAKELONG(81, KF_EXTENDED); - case Keyboard::ScanNumpad4: return MAKELONG(75, KF_EXTENDED); + case Keyboard::ScanNumpad1: return 79; + case Keyboard::ScanNumpad2: return 80; + case Keyboard::ScanNumpad3: return 81 ; + case Keyboard::ScanNumpad4: return 75 ; case Keyboard::ScanNumpad5: return 76; - case Keyboard::ScanNumpad6: return MAKELONG(77, KF_EXTENDED); - case Keyboard::ScanNumpad7: return MAKELONG(71, KF_EXTENDED); - case Keyboard::ScanNumpad8: return MAKELONG(72, KF_EXTENDED); - case Keyboard::ScanNumpad9: return MAKELONG(73, KF_EXTENDED); - case Keyboard::ScanNumpad0: return MAKELONG(82, KF_EXTENDED); + case Keyboard::ScanNumpad6: return 77 ; + case Keyboard::ScanNumpad7: return 71 ; + case Keyboard::ScanNumpad8: return 72 ; + case Keyboard::ScanNumpad9: return 73 ; + case Keyboard::ScanNumpad0: return 82 ; - //case Keyboard::ScanReverseSolidus: return ? ? ? ; - //case Keyboard::ScanApplication: return ? ? ? ; - //case Keyboard::ScanExecute: return ? ? ? ; - //case Keyboard::ScanHelp: return ? ? ? ; - //case Keyboard::ScanMenu: return ? ? ? ; - //case Keyboard::ScanSelect: return ? ? ? ; - //case Keyboard::ScanStop: return ? ? ? ; - //case Keyboard::ScanAgain: return ? ? ? ; - //case Keyboard::ScanUndo: return ? ? ? ; - //case Keyboard::ScanCut: return ? ? ? ; - //case Keyboard::ScanCopy: return ? ? ? ; - //case Keyboard::ScanPaste: return ? ? ? ; - //case Keyboard::ScanFind: return ? ? ? ; - //case Keyboard::ScanMute: return ? ? ? ; - //case Keyboard::ScanVolumeUp: return ? ? ? ; - //case Keyboard::ScanVolumeDown: return ? ? ? ; - case Keyboard::ScanLControl: return 29; - case Keyboard::ScanLShift: return 42; - case Keyboard::ScanLAlt: return 56; - //case Keyboard::ScanLSystem: return ? ? ? ; - case Keyboard::ScanRControl: return MAKELONG(29 ,KF_EXTENDED); - case Keyboard::ScanRShift: return 54; - case Keyboard::ScanRAlt: return 56; - //case Keyboard::ScanRSystem: return ? ? ? ; + //case Keyboard::ScanReverseSolidus: return ? ? ? ; + //case Keyboard::ScanApplication: return ? ? ? ; + //case Keyboard::ScanExecute: return ? ? ? ; + //case Keyboard::ScanHelp: return ? ? ? ; + case Keyboard::ScanMenu: return 93 | KF_EXTENDED; + //case Keyboard::ScanSelect: return ? ? ? ; + //case Keyboard::ScanStop: return ? ? ? ; + //case Keyboard::ScanAgain: return ? ? ? ; + //case Keyboard::ScanUndo: return ? ? ? ; + //case Keyboard::ScanCut: return ? ? ? ; + //case Keyboard::ScanCopy: return ? ? ? ; + //case Keyboard::ScanPaste: return ? ? ? ; + //case Keyboard::ScanFind: return ? ? ? ; + //case Keyboard::ScanMute: return ? ? ? ; + //case Keyboard::ScanVolumeUp: return ? ? ? ; + //case Keyboard::ScanVolumeDown: return ? ? ? ; + case Keyboard::ScanLControl: return 29; + case Keyboard::ScanLShift: return 42; + case Keyboard::ScanLAlt: return 56; + case Keyboard::ScanLSystem: return 91 | KF_EXTENDED ; + case Keyboard::ScanRControl: return KF_EXTENDED | 29; + case Keyboard::ScanRShift: return 54; + case Keyboard::ScanRAlt: return 56; + //case Keyboard::ScanRSystem: return ? ? ? ; default: return 0; // Not sure what to return here? } diff --git a/src/SFML/Window/Win32/InputImpl.hpp b/src/SFML/Window/Win32/InputImpl.hpp index ba8f5b13..3386fe7f 100644 --- a/src/SFML/Window/Win32/InputImpl.hpp +++ b/src/SFML/Window/Win32/InputImpl.hpp @@ -180,7 +180,7 @@ public: private: - static LONG sfScanToWin(Keyboard::Scancode code); + static WORD sfScanToWin(Keyboard::Scancode code); }; } // namespace priv diff --git a/src/SFML/Window/Win32/WindowImplWin32.cpp b/src/SFML/Window/Win32/WindowImplWin32.cpp index e6b63496..45136e09 100644 --- a/src/SFML/Window/Win32/WindowImplWin32.cpp +++ b/src/SFML/Window/Win32/WindowImplWin32.cpp @@ -620,7 +620,7 @@ Keyboard::Scancode WindowImplWin32::toScancode(LPARAM flags) case 52: return Keyboard::ScanPeriod; case 53: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanDivide : Keyboard::ScanForwardSlash; case 54: return Keyboard::ScanRShift; - case 55: return Keyboard::ScanPrintScreen; + case 55: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanPrintScreen : Keyboard::ScanMultiply; case 56: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanRAlt : Keyboard::ScanLAlt; case 57: return Keyboard::ScanSpace; case 58: return Keyboard::ScanCapsLock; @@ -636,7 +636,7 @@ Keyboard::Scancode WindowImplWin32::toScancode(LPARAM flags) case 68: return Keyboard::ScanF10; case 87: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanUnknown : Keyboard::ScanF11; case 88: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanUnknown : Keyboard::ScanF12; - case 69: return Keyboard::ScanNumLock; + case 69: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanNumLock : Keyboard::ScanPause; case 70: return Keyboard::ScanScrollLock; case 71: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanHome : Keyboard::ScanNumpad7; case 72: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanUp : Keyboard::ScanNumpad8; @@ -650,7 +650,10 @@ Keyboard::Scancode WindowImplWin32::toScancode(LPARAM flags) case 80: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanDown : Keyboard::ScanNumpad2; case 81: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanPageDown : Keyboard::ScanNumpad3; case 82: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanInsert : Keyboard::ScanNumpad0; - case 83: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanDecimal : Keyboard::ScanNumpad4; + case 83: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanDelete : Keyboard::ScanDecimal; + + case 91: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanLSystem : Keyboard::ScanUnknown; + case 93: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanMenu : Keyboard::ScanUnknown; default: return Keyboard::ScanUnknown; } @@ -830,7 +833,7 @@ void WindowImplWin32::processEvent(UINT message, WPARAM wParam, LPARAM lParam) event.key.shift = HIWORD(GetKeyState(VK_SHIFT)) != 0; event.key.system = HIWORD(GetKeyState(VK_LWIN)) || HIWORD(GetKeyState(VK_RWIN)); event.key.scancode = toScancode(lParam); - event.key.code = virtualKeyCodeToSF(wParam, lParam, event.key.scancode); + event.key.code = virtualKeyCodeToSF(wParam, lParam); pushEvent(event); } break; @@ -847,7 +850,7 @@ void WindowImplWin32::processEvent(UINT message, WPARAM wParam, LPARAM lParam) event.key.shift = HIWORD(GetKeyState(VK_SHIFT)) != 0; event.key.system = HIWORD(GetKeyState(VK_LWIN)) || HIWORD(GetKeyState(VK_RWIN)); event.key.scancode = toScancode(lParam); - event.key.code = virtualKeyCodeToSF(wParam, lParam, event.key.scancode); + event.key.code = virtualKeyCodeToSF(wParam, lParam); pushEvent(event); break; } @@ -1098,7 +1101,7 @@ void WindowImplWin32::processEvent(UINT message, WPARAM wParam, LPARAM lParam) //////////////////////////////////////////////////////////// -Keyboard::Key WindowImplWin32::virtualKeyCodeToSF(WPARAM key, LPARAM flags, Keyboard::Scancode code) +Keyboard::Key WindowImplWin32::virtualKeyCodeToSF(WPARAM key, LPARAM flags) { switch (key) { @@ -1106,7 +1109,8 @@ Keyboard::Key WindowImplWin32::virtualKeyCodeToSF(WPARAM key, LPARAM flags, Keyb case VK_SHIFT: { static UINT lShift = MapVirtualKeyW(VK_LSHIFT, MAPVK_VK_TO_VSC); - return code == lShift ? Keyboard::LShift : Keyboard::RShift; + UINT scancode = static_cast((flags & (0xFF << 16)) >> 16); + return scancode == lShift ? Keyboard::LShift : Keyboard::RShift; } // Check the "extended" flag to distinguish between left and right alt diff --git a/src/SFML/Window/Win32/WindowImplWin32.hpp b/src/SFML/Window/Win32/WindowImplWin32.hpp index a43488b4..6742f953 100755 --- a/src/SFML/Window/Win32/WindowImplWin32.hpp +++ b/src/SFML/Window/Win32/WindowImplWin32.hpp @@ -254,7 +254,7 @@ private: /// \return SFML key code corresponding to the key /// //////////////////////////////////////////////////////////// - static Keyboard::Key virtualKeyCodeToSF(WPARAM key, LPARAM flags, Keyboard::Scancode code); + static Keyboard::Key virtualKeyCodeToSF(WPARAM key, LPARAM flags); //////////////////////////////////////////////////////////// /// \brief Convert win32 message flags to scancode From fdeb89a19163765d2234ff67cea35999fb663195 Mon Sep 17 00:00:00 2001 From: "jonathan.r.paton@googlemail.com" Date: Wed, 4 Oct 2017 15:26:52 +0100 Subject: [PATCH 10/11] Removed rogue declaration --- src/SFML/Window/Win32/WindowImplWin32.hpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/SFML/Window/Win32/WindowImplWin32.hpp b/src/SFML/Window/Win32/WindowImplWin32.hpp index 6742f953..a5ae5e08 100755 --- a/src/SFML/Window/Win32/WindowImplWin32.hpp +++ b/src/SFML/Window/Win32/WindowImplWin32.hpp @@ -256,16 +256,6 @@ private: //////////////////////////////////////////////////////////// static Keyboard::Key virtualKeyCodeToSF(WPARAM key, LPARAM flags); - //////////////////////////////////////////////////////////// - /// \brief Convert win32 message flags to scancode - /// - /// \param lParam The message flags - /// - /// \return The scancode corresponding to the key - /// - //////////////////////////////////////////////////////////// - static Keyboard::Scancode convertToScancode(LPARAM flags); - //////////////////////////////////////////////////////////// /// \brief Function called whenever one of our windows receives a message /// From f0066f2affb154b85b7dc19ff82da85570cdeab2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20D=C3=BCrrenberger?= Date: Wed, 22 Jan 2020 16:02:12 +0100 Subject: [PATCH 11/11] Resolve additional merge conflicts --- include/SFML/Window/Keyboard.hpp | 152 ---------------------- src/SFML/Window/Win32/WindowImplWin32.cpp | 4 +- 2 files changed, 2 insertions(+), 154 deletions(-) diff --git a/include/SFML/Window/Keyboard.hpp b/include/SFML/Window/Keyboard.hpp index 9d3a0241..6e6f8105 100644 --- a/include/SFML/Window/Keyboard.hpp +++ b/include/SFML/Window/Keyboard.hpp @@ -318,158 +318,6 @@ public: ScanCodeCount ///< Keep last -- the total number of scancodes }; - //////////////////////////////////////////////////////////// - /// \brief Scancodes - /// - /// The enumerators are bound to a physical key and do *not* depend - /// on the keyboard layout used by the operating system. Usually, the AT-101 - /// keyboard can be used as reference for the physical position of the keys. - /// - /// The scancodes are based on a subset of Table 12: Keyboard/Keypad Page - /// of Universal Serial Bus (USB): HID Usage Tables, v1.12. - /// - /// \todo When porting this for SFML 3, remove the `s` prefix and use - /// enum class. - /// - //////////////////////////////////////////////////////////// - enum Scancode - { - sUnknown = -1, ///< Represents any scancode not present in this enum - sA = 0, ///< Keyboard a and A key - sB, ///< Keyboard b and B key - sC, ///< Keyboard c and C key - sD, ///< Keyboard d and D key - sE, ///< Keyboard e and E key - sF, ///< Keyboard f and F key - sG, ///< Keyboard g and G key - sH, ///< Keyboard h and H key - sI, ///< Keyboard i and I key - sJ, ///< Keyboard j and J key - sK, ///< Keyboard k and K key - sL, ///< Keyboard l and L key - sM, ///< Keyboard m and M key - sN, ///< Keyboard n and N key - sO, ///< Keyboard o and O key - sP, ///< Keyboard p and P key - sQ, ///< Keyboard q and Q key - sR, ///< Keyboard r and R key - sS, ///< Keyboard s and S key - sT, ///< Keyboard t and T key - sU, ///< Keyboard u and U key - sV, ///< Keyboard v and V key - sW, ///< Keyboard w and W key - sX, ///< Keyboard x and X key - sY, ///< Keyboard y and Y key - sZ, ///< Keyboard z and Z key - sNum1, ///< Keyboard 1 and ! key - sNum2, ///< Keyboard 2 and @ key - sNum3, ///< Keyboard 3 and # key - sNum4, ///< Keyboard 4 and $ key - sNum5, ///< Keyboard 5 and % key - sNum6, ///< Keyboard 6 and ^ key - sNum7, ///< Keyboard 7 and & key - sNum8, ///< Keyboard 8 and * key - sNum9, ///< Keyboard 9 and ) key - sNum0, ///< Keyboard 0 and ) key - sEnter, ///< Keyboard Return (ENTER) key - sEscape, ///< Keyboard Escape key - sBackspace, ///< Keyboard Backspace key - // TODO above it's BackSpace, but is it correct? What do we use here? - sTab, ///< Keyboard Tab key - sSpace, ///< Keyboard Space key - sHyphen, ///< Keyboard - and _ key - sEquals, ///< Keyboard = and + - sLBracket, ///< Keyboard [ and { key - sRBracket, ///< Keyboard ] and } key - sBackslash, ///< Keyboard \ and | key - // TODO capitalisation - sDash, ///< Keyboard Non-US # and ~ - sSemicolon, ///< Keyboard ; and : key - // TODO capitalisation - sQuote, ///< Keyboard ' and " key - sGraveAccent, ///< Keyboard ` and ~ key - sComma, ///< Keyboard , and < key - sPeriod, ///< Keyboard . and > key - sForwardSlash, ///< Keyboard / and ? key - sF1, ///< Keyboard F1 key - sF2, ///< Keyboard F2 key - sF3, ///< Keyboard F3 key - sF4, ///< Keyboard F4 key - sF5, ///< Keyboard F5 key - sF6, ///< Keyboard F6 key - sF7, ///< Keyboard F7 key - sF8, ///< Keyboard F8 key - sF9, ///< Keyboard F9 key - sF10, ///< Keyboard F10 key - sF11, ///< Keyboard F11 key - sF12, ///< Keyboard F12 key - sF13, ///< Keyboard F13 key - sF14, ///< Keyboard F14 key - sF15, ///< Keyboard F15 key - sCapsLock, ///< Keyboard Caps Lock key - sPrintScreen, ///< Keyboard Print Screen key - sScrollLock, ///< Keyboard Scroll Lock key - sPause, ///< Keyboard Pause key - sInsert, ///< Keyboard Insert key - sHome, ///< Keyboard Home key - sPageUp, ///< Keyboard Page Up key - sDelete, ///< Keyboard Delete Forward key - sEnd, ///< Keyboard End key - sPageDown, ///< Keyboard Page Down key - sRight, ///< Keyboard Right Arrow key - sLeft, ///< Keyboard Left Arrow key - sDown, ///< Keyboard Down Arrow key - sUp, ///< Keyboard Up Arrow key - sNumLock, ///< Keypad Num Lock and Clear key - sDivide, ///< Keypad / key - sMultiply, ///< Keypad * key - sMinus, ///< Keypad - key - sPlus, ///< Keypad + key - sPadEquals, ///< keypad = key, probably Mac only - sReturn, ///< Keypad Enter (return) key - sDecimal, ///< Keypad . and Delete key - sNumpad1, ///< Keypad 1 and End key - sNumpad2, ///< Keypad 2 and Down Arrow key - sNumpad3, ///< Keypad 3 and Page Down key - sNumpad4, ///< Keypad 4 and Left Arrow key - sNumpad5, ///< Keypad 5 key - sNumpad6, ///< Keypad 6 and Right Arrow key - sNumpad7, ///< Keypad 7 and Home key - sNumpad8, ///< Keypad 8 and Up Arrow key - sNumpad9, ///< Keypad 9 and Page Up key - sNumpad0, ///< Keypad 0 and Insert key - sReverseSolidus, ///< Keyboard Non-US \ and | key - // FIXME what is this one? Might need better name. The doc says: - // - Typically near the Left-Shift key in AT-102 implementations. - // - Typical language mappings: Belg:<\> FrCa:«°» Dan:<\> Dutch:]|[ Fren:<> Ger:<|> Ital:<> LatAm:<> Nor:<> Span:<> Swed:<|> Swiss:<\> UK:\| Brazil: \|. - // What is the difference with "regular" \ and | key? - sApplication, ///< Keyboard Application key - sExecute, ///< Keyboard Execute key - sHelp, ///< Keyboard Help key - sMenu, ///< Keyboard Menu key - sSelect, ///< Keyboard Select key - sStop, ///< Keyboard Stop key - sAgain, ///< Keyboard Again key - sUndo, ///< Keyboard Undo key - sCut, ///< Keyboard Cut key - sCopy, ///< Keyboard Copy key - sPaste, ///< Keyboard Paste key - sFind, ///< Keyboard Find key - sMute, ///< Keyboard Mute key - sVolumeUp, ///< Keyboard Volume Up key - sVolumeDown, ///< Keyboard Volume Down key - sLControl, ///< Keyboard Left Control key - sLShift, ///< Keyboard Left Shift key - sLAlt, ///< Keyboard Left Alt key - sLSystem, ///< Keyboard Left System key - sRControl, ///< Keyboard Right Control key - sRShift, ///< Keyboard Right Shift key - sRAlt, ///< Keyboard Right Alt key - sRSystem, ///< Keyboard Right System key - - sCodeCount ///< Keep last -- the total number of scancodes - }; - //////////////////////////////////////////////////////////// /// \brief Check if a key is pressed /// diff --git a/src/SFML/Window/Win32/WindowImplWin32.cpp b/src/SFML/Window/Win32/WindowImplWin32.cpp index 45136e09..5214d77b 100644 --- a/src/SFML/Window/Win32/WindowImplWin32.cpp +++ b/src/SFML/Window/Win32/WindowImplWin32.cpp @@ -593,7 +593,7 @@ Keyboard::Scancode WindowImplWin32::toScancode(LPARAM flags) case 25: return Keyboard::ScanP; case 26: return Keyboard::ScanLBracket; case 27: return Keyboard::ScanRBracket; - case 28: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanEnter : Keyboard::ScanReturn; + case 28: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanEnter : Keyboard::ScanNumpadEnter; case 29: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanRControl : Keyboard::ScanLControl; case 30: return Keyboard::ScanA; case 31: return Keyboard::ScanS; @@ -618,7 +618,7 @@ Keyboard::Scancode WindowImplWin32::toScancode(LPARAM flags) case 50: return Keyboard::ScanM; case 51: return Keyboard::ScanComma; case 52: return Keyboard::ScanPeriod; - case 53: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanDivide : Keyboard::ScanForwardSlash; + case 53: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanDivide : Keyboard::ScanSlash; case 54: return Keyboard::ScanRShift; case 55: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanPrintScreen : Keyboard::ScanMultiply; case 56: return (HIWORD(flags) & KF_EXTENDED) ? Keyboard::ScanRAlt : Keyboard::ScanLAlt;