From e35732366d6d57424d37d4ebb8d0015fd8640c81 Mon Sep 17 00:00:00 2001 From: Marco Antognini Date: Mon, 27 Mar 2017 00:36:59 +0200 Subject: [PATCH 01/59] 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 dfdb29eecb6728ecfe7719044a5f0584c05c9062 Mon Sep 17 00:00:00 2001 From: Marco Antognini Date: Tue, 28 Mar 2017 23:37:06 +0200 Subject: [PATCH 02/59] 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 92594f2632bd70b6b7bdb14f1fc9e4f192f1400c Mon Sep 17 00:00:00 2001 From: Marco Antognini Date: Fri, 26 May 2017 11:03:21 +0200 Subject: [PATCH 03/59] 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 8b23ac1c4807171dfa4e73bec5969f0999dd1b17 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/59] 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 4ac3033d1ae5d0a0fcfaf014824112d5f199fc46 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/59] Add minor changes according to the review --- include/SFML/Window/Keyboard.hpp | 23 +- src/SFML/Window/Keyboard.cpp | 1 + src/SFML/Window/OSX/HIDInputManager.hpp | 8 +- src/SFML/Window/OSX/HIDInputManager.mm | 1336 +++++++++++------------ 4 files changed, 684 insertions(+), 684 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.hpp b/src/SFML/Window/OSX/HIDInputManager.hpp index bd3de198..e6c538dc 100644 --- a/src/SFML/Window/OSX/HIDInputManager.hpp +++ b/src/SFML/Window/OSX/HIDInputManager.hpp @@ -278,10 +278,10 @@ private: //////////////////////////////////////////////////////////// // Member data //////////////////////////////////////////////////////////// - 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 + IOHIDManagerRef m_manager; ///< Underlying HID Manager + IOHIDElements m_keys[Keyboard::ScanCodeCount]; ///< All the keys on any connected keyboard + Keyboard::Scancode m_keyToScancodeMapping[Keyboard::KeyCount]; ///< Mapping from Key to Scancode + Keyboard::Key m_scancodeToKeyMapping[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 430f117c..19d4ec27 100644 --- a/src/SFML/Window/OSX/HIDInputManager.mm +++ b/src/SFML/Window/OSX/HIDInputManager.mm @@ -111,7 +111,7 @@ bool HIDInputManager::isKeyPressed(Keyboard::Scancode code) Keyboard::Key HIDInputManager::localize(Keyboard::Scancode code) { // TODO ensure mapping is still valid - return m_gnippam[code]; + return m_scancodeToKeyMapping[code]; } @@ -119,7 +119,7 @@ Keyboard::Key HIDInputManager::localize(Keyboard::Scancode code) Keyboard::Scancode HIDInputManager::unlocalize(Keyboard::Key key) { // TODO ensure mapping is still valid - return m_mapping[key]; + return m_keyToScancodeMapping[key]; } @@ -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. } @@ -329,9 +329,9 @@ void HIDInputManager::buildMappings() { // Reset the mappings for (int i = 0; i < Keyboard::KeyCount; ++i) - m_mapping[i] = Keyboard::ScanUnknown; + m_keyToScancodeMapping[i] = Keyboard::ScanUnknown; for (int i = 0; i < Keyboard::ScanCodeCount; ++i) - m_gnippam[i] = Keyboard::Unknown; + m_scancodeToKeyMapping[i] = Keyboard::Unknown; // Get the current keyboard layout TISInputSourceRef tis = TISCopyCurrentKeyboardLayoutInputSource(); @@ -380,8 +380,8 @@ void HIDInputManager::buildMappings() if (code == Keyboard::Unknown) continue; // Register the bi-mapping - m_mapping[code] = scan; - m_gnippam[scan] = code; + m_keyToScancodeMapping[code] = scan; + m_scancodeToKeyMapping[scan] = code; } CFRelease(tis); @@ -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 ec1a10e66ddb745a05d0e12ae44b342299669277 Mon Sep 17 00:00:00 2001 From: Marco Antognini Date: Mon, 27 Mar 2017 00:36:59 +0200 Subject: [PATCH 06/59] Add new API for scancodes --- include/SFML/Window/Keyboard.hpp | 153 +++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) 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 4bb268c80690b59a3947b5faa0e7caa58f8a9854 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 07/59] Use Scan prefix instead of s and getDescription instead of localizedRepresentation. --- include/SFML/Window/Keyboard.hpp | 252 +++++++++++++++---------------- 1 file changed, 126 insertions(+), 126 deletions(-) diff --git a/include/SFML/Window/Keyboard.hpp b/include/SFML/Window/Keyboard.hpp index 9d3a0241..f0ded977 100644 --- a/include/SFML/Window/Keyboard.hpp +++ b/include/SFML/Window/Keyboard.hpp @@ -334,140 +334,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 }; //////////////////////////////////////////////////////////// From fd771a510e55a609677d9903f4f59855768edcc9 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/59] Initial Windows implementation --- include/SFML/Window/Keyboard.hpp | 153 ---------- src/SFML/Window/Win32/InputImpl.cpp | 324 +++++++++++++++++++++- src/SFML/Window/Win32/InputImpl.hpp | 22 +- src/SFML/Window/Win32/WindowImplWin32.cpp | 101 +++++++ src/SFML/Window/Win32/WindowImplWin32.hpp | 10 + 5 files changed, 454 insertions(+), 156 deletions(-) diff --git a/include/SFML/Window/Keyboard.hpp b/include/SFML/Window/Keyboard.hpp index f0ded977..9c3fec7f 100644 --- a/include/SFML/Window/Keyboard.hpp +++ b/include/SFML/Window/Keyboard.hpp @@ -29,7 +29,6 @@ // Headers //////////////////////////////////////////////////////////// #include -#include namespace sf @@ -318,158 +317,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 - { - 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? - 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 - ScanDash, ///< Keyboard Non-US # and ~ - 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 - 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? - 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 - - ScanCodeCount ///< Keep last -- the total number of scancodes - }; - //////////////////////////////////////////////////////////// /// \brief Check if a key is pressed /// diff --git a/src/SFML/Window/Win32/InputImpl.cpp b/src/SFML/Window/Win32/InputImpl.cpp index 5f4e993c..f119b2d5 100644 --- a/src/SFML/Window/Win32/InputImpl.cpp +++ b/src/SFML/Window/Win32/InputImpl.cpp @@ -43,7 +43,122 @@ namespace sf namespace priv { //////////////////////////////////////////////////////////// -bool InputImpl::isKeyPressed(Keyboard::Key key) +Keyboard::Scancode InputImpl::m_keyToScancodeMapping[Keyboard::KeyCount]; ///< Mapping from Key to Scancode +Keyboard::Key InputImpl::m_scancodeToKeyMapping[Keyboard::ScanCodeCount]; ///< Mapping from Scancode to Key + +//////////////////////////////////////////////////////////// +Keyboard::Key winKeyToSfKey(int vkey) +{ + Keyboard::Key key; + switch (vkey) + { + default: key = Keyboard::Unknown; break; + case 'A': key = Keyboard::A; break; + case 'B': key = Keyboard::B; break; + case 'C': key = Keyboard::C; break; + case 'D': key = Keyboard::D; break; + case 'E': key = Keyboard::E; break; + case 'F': key = Keyboard::F; break; + case 'G': key = Keyboard::G; break; + case 'H': key = Keyboard::H; break; + case 'I': key = Keyboard::I; break; + case 'J': key = Keyboard::J; break; + case 'K': key = Keyboard::K; break; + case 'L': key = Keyboard::L; break; + case 'M': key = Keyboard::M; break; + case 'N': key = Keyboard::N; break; + case 'O': key = Keyboard::O; break; + case 'P': key = Keyboard::P; break; + case 'Q': key = Keyboard::Q; break; + case 'R': key = Keyboard::R; break; + case 'S': key = Keyboard::S; break; + case 'T': key = Keyboard::T; break; + case 'U': key = Keyboard::U; break; + case 'V': key = Keyboard::V; break; + case 'W': key = Keyboard::W; break; + case 'X': key = Keyboard::X; break; + case 'Y': key = Keyboard::Y; break; + case 'Z': key = Keyboard::Z; break; + case '0': key = Keyboard::Num0; break; + case '1': key = Keyboard::Num1; break; + case '2': key = Keyboard::Num2; break; + case '3': key = Keyboard::Num3; break; + case '4': key = Keyboard::Num4; break; + case '5': key = Keyboard::Num5; break; + case '6': key = Keyboard::Num6; break; + case '7': key = Keyboard::Num7; break; + case '8': key = Keyboard::Num8; break; + case '9': key = Keyboard::Num9; break; + case VK_ESCAPE: key = Keyboard::Escape; break; + case VK_LCONTROL: key = Keyboard::LControl; break; + case VK_LSHIFT: key = Keyboard::LShift; break; + case VK_LMENU: key = Keyboard::LAlt; break; + case VK_LWIN: key = Keyboard::LSystem; break; + case VK_RCONTROL: key = Keyboard::RControl; break; + case VK_RSHIFT: key = Keyboard::RShift; break; + case VK_RMENU: key = Keyboard::RAlt; break; + case VK_RWIN: key = Keyboard::RSystem; break; + case VK_APPS: key = Keyboard::Menu; break; + case VK_OEM_4: key = Keyboard::LBracket; break; + case VK_OEM_6: key = Keyboard::RBracket; break; + case VK_OEM_1: key = Keyboard::Semicolon; break; + case VK_OEM_COMMA: key = Keyboard::Comma; break; + case VK_OEM_PERIOD: key = Keyboard::Period; ; + case VK_OEM_7: key = Keyboard::Quote; break; + case VK_OEM_2: key = Keyboard::Slash; break; + case VK_OEM_5: key = Keyboard::Backslash; break; + case VK_OEM_3: key = Keyboard::Tilde; break; + case VK_OEM_PLUS: key = Keyboard::Equal; break; + case VK_OEM_MINUS: key = Keyboard::Hyphen; break; + case VK_SPACE: key = Keyboard::Space; break; + case VK_RETURN: key = Keyboard::Enter; break; + case VK_BACK: key = Keyboard::Backspace; break; + case VK_TAB: key = Keyboard::Tab; break; + case VK_PRIOR: key = Keyboard::PageUp; break; + case VK_NEXT: key = Keyboard::PageDown; break; + case VK_END: key = Keyboard::End; break; + case VK_HOME: key = Keyboard::Home; break; + case VK_INSERT: key = Keyboard::Insert; break; + case VK_DELETE: key = Keyboard::Delete; break; + case VK_ADD: key = Keyboard::Add; break; + case VK_SUBTRACT: key = Keyboard::Subtract; break; + case VK_MULTIPLY: key = Keyboard::Multiply; break; + case VK_DIVIDE: key = Keyboard::Divide; break; + case VK_LEFT: key = Keyboard::Left; break; + case VK_RIGHT: key = Keyboard::Right; break; + case VK_UP: key = Keyboard::Up; break; + case VK_DOWN: key = Keyboard::Down; break; + case VK_NUMPAD0: key = Keyboard::Numpad0; break; + case VK_NUMPAD1: key = Keyboard::Numpad1; break; + case VK_NUMPAD2: key = Keyboard::Numpad2; break; + case VK_NUMPAD3: key = Keyboard::Numpad3; break; + case VK_NUMPAD4: key = Keyboard::Numpad4; break; + case VK_NUMPAD5: key = Keyboard::Numpad5; break; + case VK_NUMPAD6: key = Keyboard::Numpad6; break; + case VK_NUMPAD7: key = Keyboard::Numpad7; break; + case VK_NUMPAD8: key = Keyboard::Numpad8; break; + case VK_NUMPAD9: key = Keyboard::Numpad9; break; + case VK_F1: key = Keyboard::F1; break; + case VK_F2: key = Keyboard::F2; break; + case VK_F3: key = Keyboard::F3; break; + case VK_F4: key = Keyboard::F4; break; + case VK_F5: key = Keyboard::F5; break; + case VK_F6: key = Keyboard::F6; break; + case VK_F7: key = Keyboard::F7; break; + case VK_F8: key = Keyboard::F8; break; + case VK_F9: key = Keyboard::F9; break; + case VK_F10: key = Keyboard::F10; break; + case VK_F11: key = Keyboard::F11; break; + case VK_F12: key = Keyboard::F12; break; + case VK_F13: key = Keyboard::F13; break; + case VK_F14: key = Keyboard::F14; break; + case VK_F15: key = Keyboard::F15; break; + case VK_PAUSE: key = Keyboard::Pause; break; + } + return key; +} +//////////////////////////////////////////////////////////// +int sfKeyToWin(Keyboard::Key key) { int vkey = 0; switch (key) @@ -151,10 +266,217 @@ bool InputImpl::isKeyPressed(Keyboard::Key key) case Keyboard::F15: vkey = VK_F15; break; case Keyboard::Pause: vkey = VK_PAUSE; break; } + return vkey; +} +//////////////////////////////////////////////////////////// +WORD sfScanToWin(Keyboard::Scancode code) +{ + // Convert an SFML scancode to a windows scancode + // 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 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 | 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 KF_EXTENDED | 28; + case Keyboard::ScanDecimal: return 83; + + 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 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 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? + } +} + +//////////////////////////////////////////////////////////// +InputImpl::InputImpl() +{ + buildMappings(); +} + +//////////////////////////////////////////////////////////// +void InputImpl::buildMappings() +{ + // Reset the mappings + for (int i = 0; i < Keyboard::KeyCount; ++i) + m_keyToScancodeMapping[i] = Keyboard::ScanUnknown; + for (int i = 0; i < Keyboard::ScanCodeCount; ++i) + m_scancodeToKeyMapping[i] = Keyboard::Unknown; + + for (int i = 0; i < Keyboard::ScanCodeCount; ++i) + { + Keyboard::Scancode scan = static_cast(i); + WORD winScanCode = sfScanToWin(scan); + UINT vkey = MapVirtualKey(winScanCode, MAPVK_VSC_TO_VK_EX); + Keyboard::Key key = winKeyToSfKey(vkey); + m_keyToScancodeMapping[key] = scan; + m_scancodeToKeyMapping[scan] = key; + } +} + +//////////////////////////////////////////////////////////// +bool InputImpl::isKeyPressed(Keyboard::Key key) +{ + int vkey = sfKeyToWin(key); return (GetAsyncKeyState(vkey) & 0x8000) != 0; } +//////////////////////////////////////////////////////////// +bool InputImpl::isKeyPressed(Keyboard::Scancode code) +{ + WORD winScanCode = sfScanToWin(code); + UINT vkey = MapVirtualKey(winScanCode, MAPVK_VSC_TO_VK_EX); + return (GetAsyncKeyState(vkey) & 0x8000) != 0; +} + +//////////////////////////////////////////////////////////// +Keyboard::Key InputImpl::localize(Keyboard::Scancode code) +{ + return m_scancodeToKeyMapping[code]; +} + +//////////////////////////////////////////////////////////// +Keyboard::Scancode InputImpl::unlocalize(Keyboard::Key key) +{ + return m_keyToScancodeMapping[key]; +} + +//////////////////////////////////////////////////////////// +String InputImpl::getDescription(Keyboard::Scancode code) +{ + WORD winCode = sfScanToWin(code); + const int bufSize(1024); + WCHAR name[bufSize]; + int result = GetKeyNameText(winCode << 16, name, bufSize); + if (result > 0) + { + return name; + } + return "Unknown"; +} //////////////////////////////////////////////////////////// void InputImpl::setVirtualKeyboardVisible(bool visible) diff --git a/src/SFML/Window/Win32/InputImpl.hpp b/src/SFML/Window/Win32/InputImpl.hpp index b145f38f..bd357284 100644 --- a/src/SFML/Window/Win32/InputImpl.hpp +++ b/src/SFML/Window/Win32/InputImpl.hpp @@ -31,7 +31,6 @@ #include #include - namespace sf { namespace priv @@ -43,6 +42,11 @@ namespace priv class InputImpl { public: + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// + InputImpl(); //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::isKeyPressed(Key) @@ -69,7 +73,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 +180,20 @@ public: /// //////////////////////////////////////////////////////////// static Vector2i getTouchPosition(unsigned int finger, const WindowBase& relativeTo); + +private: + + //////////////////////////////////////////////////////////// + /// Regenerate the mappings from/to Key and Scancode. + /// + //////////////////////////////////////////////////////////// + void buildMappings(); + + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + static Keyboard::Scancode m_keyToScancodeMapping[Keyboard::KeyCount]; ///< Mapping from Key to Scancode + static Keyboard::Key m_scancodeToKeyMapping[Keyboard::ScanCodeCount]; ///< Mapping from Scancode to Key }; } // namespace priv diff --git a/src/SFML/Window/Win32/WindowImplWin32.cpp b/src/SFML/Window/Win32/WindowImplWin32.cpp index e9d1c18b..38ca3b57 100755 --- a/src/SFML/Window/Win32/WindowImplWin32.cpp +++ b/src/SFML/Window/Win32/WindowImplWin32.cpp @@ -557,6 +557,107 @@ 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::ScanNumpadEnter; + 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::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; + 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 (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; + 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::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; + } +} //////////////////////////////////////////////////////////// void WindowImplWin32::processEvent(UINT message, WPARAM wParam, LPARAM lParam) diff --git a/src/SFML/Window/Win32/WindowImplWin32.hpp b/src/SFML/Window/Win32/WindowImplWin32.hpp index ba2f662d..a5ae5e08 100755 --- a/src/SFML/Window/Win32/WindowImplWin32.hpp +++ b/src/SFML/Window/Win32/WindowImplWin32.hpp @@ -269,6 +269,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 79a37aa84549ae69eeab66b9e3a0be369b19acaa Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Thu, 29 Mar 2018 21:11:37 +0300 Subject: [PATCH 09/59] Store pointer to Display in X11InputManager --- src/SFML/Window/Unix/WindowImplX11.cpp | 3 + src/SFML/Window/Unix/X11InputManager.cpp | 610 +++++++++++++++++++++++ src/SFML/Window/Unix/X11InputManager.hpp | 47 ++ 3 files changed, 660 insertions(+) create mode 100644 src/SFML/Window/Unix/X11InputManager.cpp create mode 100644 src/SFML/Window/Unix/X11InputManager.hpp diff --git a/src/SFML/Window/Unix/WindowImplX11.cpp b/src/SFML/Window/Unix/WindowImplX11.cpp index fa0cfc43..0cee34f7 100644 --- a/src/SFML/Window/Unix/WindowImplX11.cpp +++ b/src/SFML/Window/Unix/WindowImplX11.cpp @@ -1606,6 +1606,9 @@ void WindowImplX11::initialize() // Create the hidden cursor createHiddenCursor(); + // init X11 keycode <-> SFML scancode mapping + X11InputManager::getInstance().initialize(m_display); + // Flush the commands queue XFlush(m_display); diff --git a/src/SFML/Window/Unix/X11InputManager.cpp b/src/SFML/Window/Unix/X11InputManager.cpp new file mode 100644 index 00000000..f615a755 --- /dev/null +++ b/src/SFML/Window/Unix/X11InputManager.cpp @@ -0,0 +1,610 @@ +#include "X11InputManager.hpp" + +#include +#include +#include +#include + +namespace sf { +namespace priv { + +namespace { + +sf::Keyboard::Key keysymToSF(KeySym symbol) +{ + switch (symbol) + { + case XK_Shift_L: return sf::Keyboard::LShift; + case XK_Shift_R: return sf::Keyboard::RShift; + case XK_Control_L: return sf::Keyboard::LControl; + case XK_Control_R: return sf::Keyboard::RControl; + case XK_Alt_L: return sf::Keyboard::LAlt; + case XK_Alt_R: return sf::Keyboard::RAlt; + case XK_Super_L: return sf::Keyboard::LSystem; + case XK_Super_R: return sf::Keyboard::RSystem; + case XK_Menu: return sf::Keyboard::Menu; + case XK_Escape: return sf::Keyboard::Escape; + case XK_semicolon: return sf::Keyboard::SemiColon; + case XK_slash: return sf::Keyboard::Slash; + case XK_equal: return sf::Keyboard::Equal; + case XK_minus: return sf::Keyboard::Dash; + case XK_bracketleft: return sf::Keyboard::LBracket; + case XK_bracketright: return sf::Keyboard::RBracket; + case XK_comma: return sf::Keyboard::Comma; + case XK_period: return sf::Keyboard::Period; + case XK_apostrophe: return sf::Keyboard::Quote; + case XK_backslash: return sf::Keyboard::BackSlash; + case XK_grave: return sf::Keyboard::Tilde; + case XK_space: return sf::Keyboard::Space; + case XK_Return: return sf::Keyboard::Return; + case XK_KP_Enter: return sf::Keyboard::Return; + case XK_BackSpace: return sf::Keyboard::BackSpace; + case XK_Tab: return sf::Keyboard::Tab; + case XK_Prior: return sf::Keyboard::PageUp; + case XK_Next: return sf::Keyboard::PageDown; + case XK_End: return sf::Keyboard::End; + case XK_Home: return sf::Keyboard::Home; + case XK_Insert: return sf::Keyboard::Insert; + case XK_Delete: return sf::Keyboard::Delete; + case XK_KP_Add: return sf::Keyboard::Add; + case XK_KP_Subtract: return sf::Keyboard::Subtract; + case XK_KP_Multiply: return sf::Keyboard::Multiply; + case XK_KP_Divide: return sf::Keyboard::Divide; + case XK_Pause: return sf::Keyboard::Pause; + case XK_F1: return sf::Keyboard::F1; + case XK_F2: return sf::Keyboard::F2; + case XK_F3: return sf::Keyboard::F3; + case XK_F4: return sf::Keyboard::F4; + case XK_F5: return sf::Keyboard::F5; + case XK_F6: return sf::Keyboard::F6; + case XK_F7: return sf::Keyboard::F7; + case XK_F8: return sf::Keyboard::F8; + case XK_F9: return sf::Keyboard::F9; + case XK_F10: return sf::Keyboard::F10; + case XK_F11: return sf::Keyboard::F11; + case XK_F12: return sf::Keyboard::F12; + case XK_F13: return sf::Keyboard::F13; + case XK_F14: return sf::Keyboard::F14; + case XK_F15: return sf::Keyboard::F15; + case XK_Left: return sf::Keyboard::Left; + case XK_Right: return sf::Keyboard::Right; + case XK_Up: return sf::Keyboard::Up; + case XK_Down: return sf::Keyboard::Down; + case XK_KP_Insert: return sf::Keyboard::Numpad0; + case XK_KP_End: return sf::Keyboard::Numpad1; + case XK_KP_Down: return sf::Keyboard::Numpad2; + case XK_KP_Page_Down: return sf::Keyboard::Numpad3; + case XK_KP_Left: return sf::Keyboard::Numpad4; + case XK_KP_Begin: return sf::Keyboard::Numpad5; + case XK_KP_Right: return sf::Keyboard::Numpad6; + case XK_KP_Home: return sf::Keyboard::Numpad7; + case XK_KP_Up: return sf::Keyboard::Numpad8; + case XK_KP_Page_Up: return sf::Keyboard::Numpad9; + case XK_a: return sf::Keyboard::A; + case XK_b: return sf::Keyboard::B; + case XK_c: return sf::Keyboard::C; + case XK_d: return sf::Keyboard::D; + case XK_e: return sf::Keyboard::E; + case XK_f: return sf::Keyboard::F; + case XK_g: return sf::Keyboard::G; + case XK_h: return sf::Keyboard::H; + case XK_i: return sf::Keyboard::I; + case XK_j: return sf::Keyboard::J; + case XK_k: return sf::Keyboard::K; + case XK_l: return sf::Keyboard::L; + case XK_m: return sf::Keyboard::M; + case XK_n: return sf::Keyboard::N; + case XK_o: return sf::Keyboard::O; + case XK_p: return sf::Keyboard::P; + case XK_q: return sf::Keyboard::Q; + case XK_r: return sf::Keyboard::R; + case XK_s: return sf::Keyboard::S; + case XK_t: return sf::Keyboard::T; + case XK_u: return sf::Keyboard::U; + case XK_v: return sf::Keyboard::V; + case XK_w: return sf::Keyboard::W; + case XK_x: return sf::Keyboard::X; + case XK_y: return sf::Keyboard::Y; + case XK_z: return sf::Keyboard::Z; + case XK_0: return sf::Keyboard::Num0; + case XK_1: return sf::Keyboard::Num1; + case XK_2: return sf::Keyboard::Num2; + case XK_3: return sf::Keyboard::Num3; + case XK_4: return sf::Keyboard::Num4; + case XK_5: return sf::Keyboard::Num5; + case XK_6: return sf::Keyboard::Num6; + case XK_7: return sf::Keyboard::Num7; + case XK_8: return sf::Keyboard::Num8; + case XK_9: return sf::Keyboard::Num9; + } + + return sf::Keyboard::Unknown; +} + +KeySym SFtoKeysym(sf::Keyboard::Key key) +{ + // Get the corresponding X11 keysym + KeySym keysym = 0; + switch (key) + { + case sf::Keyboard::LShift: keysym = XK_Shift_L; break; + case sf::Keyboard::RShift: keysym = XK_Shift_R; break; + case sf::Keyboard::LControl: keysym = XK_Control_L; break; + case sf::Keyboard::RControl: keysym = XK_Control_R; break; + case sf::Keyboard::LAlt: keysym = XK_Alt_L; break; + case sf::Keyboard::RAlt: keysym = XK_Alt_R; break; + case sf::Keyboard::LSystem: keysym = XK_Super_L; break; + case sf::Keyboard::RSystem: keysym = XK_Super_R; break; + case sf::Keyboard::Menu: keysym = XK_Menu; break; + case sf::Keyboard::Escape: keysym = XK_Escape; break; + case sf::Keyboard::SemiColon: keysym = XK_semicolon; break; + case sf::Keyboard::Slash: keysym = XK_slash; break; + case sf::Keyboard::Equal: keysym = XK_equal; break; + case sf::Keyboard::Dash: keysym = XK_minus; break; + case sf::Keyboard::LBracket: keysym = XK_bracketleft; break; + case sf::Keyboard::RBracket: keysym = XK_bracketright; break; + case sf::Keyboard::Comma: keysym = XK_comma; break; + case sf::Keyboard::Period: keysym = XK_period; break; + case sf::Keyboard::Quote: keysym = XK_apostrophe; break; + case sf::Keyboard::BackSlash: keysym = XK_backslash; break; + case sf::Keyboard::Tilde: keysym = XK_grave; break; + case sf::Keyboard::Space: keysym = XK_space; break; + case sf::Keyboard::Return: keysym = XK_Return; break; + case sf::Keyboard::BackSpace: keysym = XK_BackSpace; break; + case sf::Keyboard::Tab: keysym = XK_Tab; break; + case sf::Keyboard::PageUp: keysym = XK_Prior; break; + case sf::Keyboard::PageDown: keysym = XK_Next; break; + case sf::Keyboard::End: keysym = XK_End; break; + case sf::Keyboard::Home: keysym = XK_Home; break; + case sf::Keyboard::Insert: keysym = XK_Insert; break; + case sf::Keyboard::Delete: keysym = XK_Delete; break; + case sf::Keyboard::Add: keysym = XK_KP_Add; break; + case sf::Keyboard::Subtract: keysym = XK_KP_Subtract; break; + case sf::Keyboard::Multiply: keysym = XK_KP_Multiply; break; + case sf::Keyboard::Divide: keysym = XK_KP_Divide; break; + case sf::Keyboard::Pause: keysym = XK_Pause; break; + case sf::Keyboard::F1: keysym = XK_F1; break; + case sf::Keyboard::F2: keysym = XK_F2; break; + case sf::Keyboard::F3: keysym = XK_F3; break; + case sf::Keyboard::F4: keysym = XK_F4; break; + case sf::Keyboard::F5: keysym = XK_F5; break; + case sf::Keyboard::F6: keysym = XK_F6; break; + case sf::Keyboard::F7: keysym = XK_F7; break; + case sf::Keyboard::F8: keysym = XK_F8; break; + case sf::Keyboard::F9: keysym = XK_F9; break; + case sf::Keyboard::F10: keysym = XK_F10; break; + case sf::Keyboard::F11: keysym = XK_F11; break; + case sf::Keyboard::F12: keysym = XK_F12; break; + case sf::Keyboard::F13: keysym = XK_F13; break; + case sf::Keyboard::F14: keysym = XK_F14; break; + case sf::Keyboard::F15: keysym = XK_F15; break; + case sf::Keyboard::Left: keysym = XK_Left; break; + case sf::Keyboard::Right: keysym = XK_Right; break; + case sf::Keyboard::Up: keysym = XK_Up; break; + case sf::Keyboard::Down: keysym = XK_Down; break; + case sf::Keyboard::Numpad0: keysym = XK_KP_Insert; break; + case sf::Keyboard::Numpad1: keysym = XK_KP_End; break; + case sf::Keyboard::Numpad2: keysym = XK_KP_Down; break; + case sf::Keyboard::Numpad3: keysym = XK_KP_Page_Down; break; + case sf::Keyboard::Numpad4: keysym = XK_KP_Left; break; + case sf::Keyboard::Numpad5: keysym = XK_KP_Begin; break; + case sf::Keyboard::Numpad6: keysym = XK_KP_Right; break; + case sf::Keyboard::Numpad7: keysym = XK_KP_Home; break; + case sf::Keyboard::Numpad8: keysym = XK_KP_Up; break; + case sf::Keyboard::Numpad9: keysym = XK_KP_Page_Up; break; + case sf::Keyboard::A: keysym = XK_a; break; + case sf::Keyboard::B: keysym = XK_b; break; + case sf::Keyboard::C: keysym = XK_c; break; + case sf::Keyboard::D: keysym = XK_d; break; + case sf::Keyboard::E: keysym = XK_e; break; + case sf::Keyboard::F: keysym = XK_f; break; + case sf::Keyboard::G: keysym = XK_g; break; + case sf::Keyboard::H: keysym = XK_h; break; + case sf::Keyboard::I: keysym = XK_i; break; + case sf::Keyboard::J: keysym = XK_j; break; + case sf::Keyboard::K: keysym = XK_k; break; + case sf::Keyboard::L: keysym = XK_l; break; + case sf::Keyboard::M: keysym = XK_m; break; + case sf::Keyboard::N: keysym = XK_n; break; + case sf::Keyboard::O: keysym = XK_o; break; + case sf::Keyboard::P: keysym = XK_p; break; + case sf::Keyboard::Q: keysym = XK_q; break; + case sf::Keyboard::R: keysym = XK_r; break; + case sf::Keyboard::S: keysym = XK_s; break; + case sf::Keyboard::T: keysym = XK_t; break; + case sf::Keyboard::U: keysym = XK_u; break; + case sf::Keyboard::V: keysym = XK_v; break; + case sf::Keyboard::W: keysym = XK_w; break; + case sf::Keyboard::X: keysym = XK_x; break; + case sf::Keyboard::Y: keysym = XK_y; break; + case sf::Keyboard::Z: keysym = XK_z; break; + case sf::Keyboard::Num0: keysym = XK_0; break; + case sf::Keyboard::Num1: keysym = XK_1; break; + case sf::Keyboard::Num2: keysym = XK_2; break; + case sf::Keyboard::Num3: keysym = XK_3; break; + case sf::Keyboard::Num4: keysym = XK_4; break; + case sf::Keyboard::Num5: keysym = XK_5; break; + case sf::Keyboard::Num6: keysym = XK_6; break; + case sf::Keyboard::Num7: keysym = XK_7; break; + case sf::Keyboard::Num8: keysym = XK_8; break; + case sf::Keyboard::Num9: keysym = XK_9; break; + default: keysym = 0; break; + } + return keysym; +} + +sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) +{ + KeySym keySym; + + // Valid key code range is [8,255], according to the Xlib manual + if (keycode < 8 || keycode > 255) + return sf::Keyboard::ScanUnknown; + + // Try secondary keysym, for numeric keypad keys + // Note: This way we always force "NumLock = ON", which is intentional + // since the returned key code should correspond to a physical + // location. + keySym = XkbKeycodeToKeysym(display, keycode, 0, 1); + switch (keySym) + { + case XK_KP_0: return sf::Keyboard::ScanNumpad0; + case XK_KP_1: return sf::Keyboard::ScanNumpad1; + case XK_KP_2: return sf::Keyboard::ScanNumpad2; + case XK_KP_3: return sf::Keyboard::ScanNumpad3; + case XK_KP_4: return sf::Keyboard::ScanNumpad4; + case XK_KP_5: return sf::Keyboard::ScanNumpad5; + case XK_KP_6: return sf::Keyboard::ScanNumpad6; + case XK_KP_7: return sf::Keyboard::ScanNumpad7; + case XK_KP_8: return sf::Keyboard::ScanNumpad8; + case XK_KP_9: return sf::Keyboard::ScanNumpad9; + case XK_KP_Separator: + case XK_KP_Decimal: return sf::Keyboard::ScanDecimal; + case XK_KP_Equal: return sf::Keyboard::ScanPadEquals; + case XK_KP_Enter: return sf::Keyboard::ScanReturn; + default: break; + } + + // Now try primary keysym for function keys (non-printable keys) + // These should not depend on the current keyboard layout + keySym = XkbKeycodeToKeysym(display, keycode, 0, 0); + + switch (keySym) + { + case XK_Escape: return sf::Keyboard::ScanEscape; + case XK_Tab: return sf::Keyboard::ScanTab; + case XK_Shift_L: return sf::Keyboard::ScanLShift; + case XK_Shift_R: return sf::Keyboard::ScanRShift; + case XK_Control_L: return sf::Keyboard::ScanLControl; + case XK_Control_R: return sf::Keyboard::ScanRControl; + case XK_Meta_L: + case XK_Alt_L: return sf::Keyboard::ScanLAlt; + case XK_Mode_switch: // Mapped to Alt_R on many keyboards + case XK_ISO_Level3_Shift: // AltGr on at least some machines + case XK_Meta_R: + case XK_Alt_R: return sf::Keyboard::ScanRAlt; + case XK_Super_L: return sf::Keyboard::ScanLSystem; + case XK_Super_R: return sf::Keyboard::ScanRSystem; + case XK_Menu: return sf::Keyboard::ScanMenu; + case XK_Num_Lock: return sf::Keyboard::ScanNumLock; + case XK_Caps_Lock: return sf::Keyboard::ScanCapsLock; + case XK_Print: return sf::Keyboard::ScanPrintScreen; + case XK_Scroll_Lock: return sf::Keyboard::ScanScrollLock; + case XK_Pause: return sf::Keyboard::ScanPause; + case XK_Delete: return sf::Keyboard::ScanDelete; + case XK_BackSpace: return sf::Keyboard::ScanBackspace; + case XK_Return: return sf::Keyboard::ScanEnter; + case XK_Home: return sf::Keyboard::ScanHome; + case XK_End: return sf::Keyboard::ScanEnd; + case XK_Page_Up: return sf::Keyboard::ScanPageUp; + case XK_Page_Down: return sf::Keyboard::ScanPageDown; + case XK_Insert: return sf::Keyboard::ScanInsert; + case XK_Left: return sf::Keyboard::ScanLeft; + case XK_Right: return sf::Keyboard::ScanRight; + case XK_Down: return sf::Keyboard::ScanDown; + case XK_Up: return sf::Keyboard::ScanUp; + case XK_F1: return sf::Keyboard::ScanF1; + case XK_F2: return sf::Keyboard::ScanF2; + case XK_F3: return sf::Keyboard::ScanF3; + case XK_F4: return sf::Keyboard::ScanF4; + case XK_F5: return sf::Keyboard::ScanF5; + case XK_F6: return sf::Keyboard::ScanF6; + case XK_F7: return sf::Keyboard::ScanF7; + case XK_F8: return sf::Keyboard::ScanF8; + case XK_F9: return sf::Keyboard::ScanF9; + case XK_F10: return sf::Keyboard::ScanF10; + case XK_F11: return sf::Keyboard::ScanF11; + case XK_F12: return sf::Keyboard::ScanF12; + case XK_F13: return sf::Keyboard::ScanF13; + case XK_F14: return sf::Keyboard::ScanF14; + case XK_F15: return sf::Keyboard::ScanF15; + /* case XK_F16: return sf::Keyboard::ScanF16; + case XK_F17: return sf::Keyboard::ScanF17; + case XK_F18: return sf::Keyboard::ScanF18; + case XK_F19: return sf::Keyboard::ScanF19; + case XK_F20: return sf::Keyboard::ScanF20; + case XK_F21: return sf::Keyboard::ScanF21; + case XK_F22: return sf::Keyboard::ScanF22; + case XK_F23: return sf::Keyboard::ScanF23; + case XK_F24: return sf::Keyboard::ScanF24; + case XK_F25: return sf::Keyboard::ScanF25; */ + + // Numeric keypad + case XK_KP_Divide: return sf::Keyboard::ScanDivide; + case XK_KP_Multiply: return sf::Keyboard::ScanMultiply; + case XK_KP_Subtract: return sf::Keyboard::ScanMinus; + case XK_KP_Add: return sf::Keyboard::ScanPlus; + + // These should have been detected in secondary keysym test above! + case XK_KP_Insert: return sf::Keyboard::ScanNumpad0; + case XK_KP_End: return sf::Keyboard::ScanNumpad1; + case XK_KP_Down: return sf::Keyboard::ScanNumpad2; + case XK_KP_Page_Down: return sf::Keyboard::ScanNumpad3; + case XK_KP_Left: return sf::Keyboard::ScanNumpad4; + case XK_KP_Right: return sf::Keyboard::ScanNumpad6; + case XK_KP_Home: return sf::Keyboard::ScanNumpad7; + case XK_KP_Up: return sf::Keyboard::ScanNumpad8; + case XK_KP_Page_Up: return sf::Keyboard::ScanNumpad9; + case XK_KP_Delete: return sf::Keyboard::ScanDecimal; + case XK_KP_Equal: return sf::Keyboard::ScanPadEquals; + case XK_KP_Enter: return sf::Keyboard::ScanReturn; + + // Last resort: Check for printable keys (should not happen if the XKB + // extension is available). This will give a layout dependent mapping + // (which is wrong, and we may miss some keys, especially on non-US + // keyboards), but it's better than nothing... + case XK_a: return sf::Keyboard::ScanA; + case XK_b: return sf::Keyboard::ScanB; + case XK_c: return sf::Keyboard::ScanC; + case XK_d: return sf::Keyboard::ScanD; + case XK_e: return sf::Keyboard::ScanE; + case XK_f: return sf::Keyboard::ScanF; + case XK_g: return sf::Keyboard::ScanG; + case XK_h: return sf::Keyboard::ScanH; + case XK_i: return sf::Keyboard::ScanI; + case XK_j: return sf::Keyboard::ScanJ; + case XK_k: return sf::Keyboard::ScanK; + case XK_l: return sf::Keyboard::ScanL; + case XK_m: return sf::Keyboard::ScanM; + case XK_n: return sf::Keyboard::ScanN; + case XK_o: return sf::Keyboard::ScanO; + case XK_p: return sf::Keyboard::ScanP; + case XK_q: return sf::Keyboard::ScanQ; + case XK_r: return sf::Keyboard::ScanR; + case XK_s: return sf::Keyboard::ScanS; + case XK_t: return sf::Keyboard::ScanT; + case XK_u: return sf::Keyboard::ScanU; + case XK_v: return sf::Keyboard::ScanV; + case XK_w: return sf::Keyboard::ScanW; + case XK_x: return sf::Keyboard::ScanX; + case XK_y: return sf::Keyboard::ScanY; + case XK_z: return sf::Keyboard::ScanZ; + case XK_1: return sf::Keyboard::ScanNum1; + case XK_2: return sf::Keyboard::ScanNum2; + case XK_3: return sf::Keyboard::ScanNum3; + case XK_4: return sf::Keyboard::ScanNum4; + case XK_5: return sf::Keyboard::ScanNum5; + case XK_6: return sf::Keyboard::ScanNum6; + case XK_7: return sf::Keyboard::ScanNum7; + case XK_8: return sf::Keyboard::ScanNum8; + case XK_9: return sf::Keyboard::ScanNum9; + case XK_0: return sf::Keyboard::ScanNum0; + case XK_space: return sf::Keyboard::ScanSpace; + case XK_minus: return sf::Keyboard::ScanHyphen; + case XK_equal: return sf::Keyboard::ScanEquals; + case XK_bracketleft: return sf::Keyboard::ScanLBracket; + case XK_bracketright: return sf::Keyboard::ScanRBracket; + case XK_backslash: return sf::Keyboard::ScanBackslash; + case XK_semicolon: return sf::Keyboard::ScanSemicolon; + case XK_apostrophe: return sf::Keyboard::ScanQuote; + case XK_grave: return sf::Keyboard::ScanGraveAccent; + case XK_comma: return sf::Keyboard::ScanComma; + case XK_period: return sf::Keyboard::ScanPeriod; + case XK_slash: return sf::Keyboard::ScanForwardSlash; + // case XK_less: return sf::Keyboard::ScanWorld1; // At least in some layouts... + default: break; + } + + // No matching translation was found + return sf::Keyboard::ScanUnknown; +} + + +} // end of anonymous namespace + +X11InputManager::X11InputManager() : + m_display(NULL) +{ + for (int i = 0; i < sf::Keyboard::ScanCodeCount; ++i) { + m_scancodeToKeycode[i] = 0; + } + + for (int i = 0; i < 256; ++i) { + m_keycodeToScancode[i] = sf::Keyboard::ScanUnknown; + } +} + +void X11InputManager::initialize(Display* display) +{ + m_display = display; + buildMapping(); +} + +X11InputManager& X11InputManager::getInstance() +{ + static X11InputManager instance; + return instance; +} + +void X11InputManager::buildMapping() +{ + // Find the X11 key code -> SFML key code mapping + // This code was inspired by GLFW implementation + + char name[XkbKeyNameLength + 1]; + XkbDescPtr desc = XkbGetMap(m_display, 0, XkbUseCoreKbd); + XkbGetNames(m_display, XkbKeyNamesMask, desc); + + sf::Keyboard::Scancode sc; + for (int keycode = desc->min_key_code; keycode <= desc->max_key_code; ++keycode) + { + std::memcpy(name, desc->names->keys[keycode].name, XkbKeyNameLength); + name[XkbKeyNameLength] = '\0'; + + if (strcmp(name, "TLDE") == 0) sc = sf::Keyboard::ScanGraveAccent; + else if (strcmp(name, "AE01") == 0) sc = sf::Keyboard::ScanNum1; + else if (strcmp(name, "AE02") == 0) sc = sf::Keyboard::ScanNum2; + else if (strcmp(name, "AE03") == 0) sc = sf::Keyboard::ScanNum3; + else if (strcmp(name, "AE04") == 0) sc = sf::Keyboard::ScanNum4; + else if (strcmp(name, "AE05") == 0) sc = sf::Keyboard::ScanNum5; + else if (strcmp(name, "AE06") == 0) sc = sf::Keyboard::ScanNum6; + else if (strcmp(name, "AE07") == 0) sc = sf::Keyboard::ScanNum7; + else if (strcmp(name, "AE08") == 0) sc = sf::Keyboard::ScanNum8; + else if (strcmp(name, "AE09") == 0) sc = sf::Keyboard::ScanNum9; + else if (strcmp(name, "AE10") == 0) sc = sf::Keyboard::ScanNum0; + else if (strcmp(name, "AE11") == 0) sc = sf::Keyboard::ScanDash; + else if (strcmp(name, "AE12") == 0) sc = sf::Keyboard::ScanEquals; + else if (strcmp(name, "TAB") == 0) sc = sf::Keyboard::ScanTab; + else if (strcmp(name, "AD01") == 0) sc = sf::Keyboard::ScanQ; + else if (strcmp(name, "AD02") == 0) sc = sf::Keyboard::ScanW; + else if (strcmp(name, "AD03") == 0) sc = sf::Keyboard::ScanE; + else if (strcmp(name, "AD04") == 0) sc = sf::Keyboard::ScanR; + else if (strcmp(name, "AD05") == 0) sc = sf::Keyboard::ScanT; + else if (strcmp(name, "AD06") == 0) sc = sf::Keyboard::ScanY; + else if (strcmp(name, "AD07") == 0) sc = sf::Keyboard::ScanU; + else if (strcmp(name, "AD08") == 0) sc = sf::Keyboard::ScanI; + else if (strcmp(name, "AD09") == 0) sc = sf::Keyboard::ScanO; + else if (strcmp(name, "AD10") == 0) sc = sf::Keyboard::ScanP; + else if (strcmp(name, "AD11") == 0) sc = sf::Keyboard::ScanLBracket; + else if (strcmp(name, "AD12") == 0) sc = sf::Keyboard::ScanRBracket; + else if (strcmp(name, "BKSL") == 0) sc = sf::Keyboard::ScanBackslash; + else if (strcmp(name, "AC01") == 0) sc = sf::Keyboard::ScanA; + else if (strcmp(name, "AC02") == 0) sc = sf::Keyboard::ScanS; + else if (strcmp(name, "AC03") == 0) sc = sf::Keyboard::ScanD; + else if (strcmp(name, "AC04") == 0) sc = sf::Keyboard::ScanF; + else if (strcmp(name, "AC05") == 0) sc = sf::Keyboard::ScanG; + else if (strcmp(name, "AC06") == 0) sc = sf::Keyboard::ScanH; + else if (strcmp(name, "AC07") == 0) sc = sf::Keyboard::ScanJ; + else if (strcmp(name, "AC08") == 0) sc = sf::Keyboard::ScanK; + else if (strcmp(name, "AC09") == 0) sc = sf::Keyboard::ScanL; + else if (strcmp(name, "AC10") == 0) sc = sf::Keyboard::ScanSemicolon; + else if (strcmp(name, "AC11") == 0) sc = sf::Keyboard::ScanQuote; + else if (strcmp(name, "AB01") == 0) sc = sf::Keyboard::ScanZ; + else if (strcmp(name, "AB02") == 0) sc = sf::Keyboard::ScanX; + else if (strcmp(name, "AB03") == 0) sc = sf::Keyboard::ScanC; + else if (strcmp(name, "AB04") == 0) sc = sf::Keyboard::ScanV; + else if (strcmp(name, "AB05") == 0) sc = sf::Keyboard::ScanB; + else if (strcmp(name, "AB06") == 0) sc = sf::Keyboard::ScanN; + else if (strcmp(name, "AB07") == 0) sc = sf::Keyboard::ScanM; + else if (strcmp(name, "AB08") == 0) sc = sf::Keyboard::ScanComma; + else if (strcmp(name, "AB09") == 0) sc = sf::Keyboard::ScanPeriod; + else if (strcmp(name, "AB10") == 0) sc = sf::Keyboard::ScanForwardSlash; + else sc = sf::Keyboard::ScanUnknown; + + if ((keycode >= 0) && (keycode < 256)) { + m_scancodeToKeycode[sc] = keycode; + m_keycodeToScancode[keycode] = sc; + } + } + + XkbFreeNames(desc, XkbKeyNamesMask, True); + XkbFreeKeyboard(desc, 0, True); + + // Translate un-translated keycodes using traditional X11 KeySym lookups + for (int keycode = 0; keycode < 256; ++keycode) { + if (m_keycodeToScancode[keycode] == sf::Keyboard::ScanUnknown) { + sf::Keyboard::Scancode sc = translateKeyCode(m_display, keycode); + m_scancodeToKeycode[sc] = keycode; + m_keycodeToScancode[keycode] = sc; + } + } +} + +sf::Keyboard::Scancode X11InputManager::unlocalize(sf::Keyboard::Key key) const +{ + KeyCode keycode = SFtoKeyCode(key); + return keyCodeToSF(keycode); +} + +sf::Keyboard::Key X11InputManager::localize(sf::Keyboard::Scancode code) const +{ + KeyCode keycode = SFtoKeyCode(code); + KeySym keysym = XkbKeycodeToKeysym(m_display, keycode, 0, 0); + return keysymToSF(keysym); +} + +namespace { + +bool isKeyPressedImpl(Display* display, KeyCode keycode) +{ + if (keycode != 0) + { + // Get the whole keyboard state + char keys[32]; + XQueryKeymap(display, keys); + + // Check our keycode + return (keys[keycode / 8] & (1 << (keycode % 8))) != 0; + } + return false; +} + +} + +bool X11InputManager::isKeyPressed(sf::Keyboard::Key key) const +{ + KeyCode keycode = SFtoKeyCode(key); + return isKeyPressedImpl(m_display, keycode); +} + +bool X11InputManager::isKeyPressed(sf::Keyboard::Scancode code) const +{ + KeyCode keycode = SFtoKeyCode(code); + return isKeyPressedImpl(m_display, keycode); +} + +sf::Keyboard::Key X11InputManager::getKeyFromEvent(XKeyEvent& event) const +{ + Keyboard::Key key = Keyboard::Unknown; + + // Try each KeySym index (modifier group) until we get a match + for (int i = 0; i < 4; ++i) + { + // Get the SFML keyboard code from the keysym of the key that has been pressed + KeySym keysym = XLookupKeysym(&event, i); + key = keysymToSF(keysym); + + if (key != Keyboard::Unknown) + break; + } + return key; +} + +sf::Keyboard::Scancode X11InputManager::getScancodeFromEvent(XKeyEvent& event) const +{ + return keyCodeToSF(event.keycode); +} + +String X11InputManager::getDescription(Keyboard::Scancode code) const +{ + return ""; // TODO +} + +KeyCode X11InputManager::SFtoKeyCode(sf::Keyboard::Key key) const +{ + KeySym keysym = SFtoKeysym(key); + return XKeysymToKeycode(m_display, keysym); +} + +KeyCode X11InputManager::SFtoKeyCode(sf::Keyboard::Scancode code) const +{ + return m_scancodeToKeycode[code]; +} + +sf::Keyboard::Scancode X11InputManager::keyCodeToSF(KeyCode code) const +{ + return m_keycodeToScancode[code]; +} + +} // end of namespace priv +} // end of namespace sf diff --git a/src/SFML/Window/Unix/X11InputManager.hpp b/src/SFML/Window/Unix/X11InputManager.hpp new file mode 100644 index 00000000..0b1909fc --- /dev/null +++ b/src/SFML/Window/Unix/X11InputManager.hpp @@ -0,0 +1,47 @@ +#ifndef SFML_X11INPUTMANAGER_HPP +#define SFML_X11INPUTMANAGER_HPP + +#include +#include + +#include // Keycode +#include + +namespace sf { +namespace priv { + +class X11InputManager +{ +public: + static X11InputManager& getInstance(); +private: + X11InputManager(); +public: + void initialize(Display* display); + + sf::Keyboard::Scancode unlocalize(sf::Keyboard::Key key) const; + sf::Keyboard::Key localize(sf::Keyboard::Scancode code) const; + + bool isKeyPressed(sf::Keyboard::Key key) const; + bool isKeyPressed(sf::Keyboard::Scancode code) const; + + sf::Keyboard::Key getKeyFromEvent(XKeyEvent& event) const; + sf::Keyboard::Scancode getScancodeFromEvent(XKeyEvent& event) const; + + String getDescription(Keyboard::Scancode code) const; +private: + void buildMapping(); + KeyCode SFtoKeyCode(sf::Keyboard::Key key) const; + KeyCode SFtoKeyCode(sf::Keyboard::Scancode code) const; + sf::Keyboard::Scancode keyCodeToSF(KeyCode code) const; + + KeyCode m_scancodeToKeycode[sf::Keyboard::ScanCodeCount]; + sf::Keyboard::Scancode m_keycodeToScancode[256]; + + Display* m_display; +}; + +} // end of namespace priv +} // end of namespace sf + +#endif From 84a19239a4ee16a2eec35b005b339a13e2ea1cbb Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Thu, 29 Mar 2018 21:50:42 +0300 Subject: [PATCH 10/59] Add comments for functions and follow SFML's coding standard more closely --- src/SFML/Window/Unix/WindowImplX11.cpp | 1 - src/SFML/Window/Unix/X11InputManager.cpp | 137 +++++++++++++++------ src/SFML/Window/Unix/X11InputManager.hpp | 149 +++++++++++++++++++++-- 3 files changed, 236 insertions(+), 51 deletions(-) diff --git a/src/SFML/Window/Unix/WindowImplX11.cpp b/src/SFML/Window/Unix/WindowImplX11.cpp index 0cee34f7..5f29dfb0 100644 --- a/src/SFML/Window/Unix/WindowImplX11.cpp +++ b/src/SFML/Window/Unix/WindowImplX11.cpp @@ -2196,5 +2196,4 @@ Vector2i WindowImplX11::getPrimaryMonitorPosition() } } // namespace priv - } // namespace sf diff --git a/src/SFML/Window/Unix/X11InputManager.cpp b/src/SFML/Window/Unix/X11InputManager.cpp index f615a755..8e5517f0 100644 --- a/src/SFML/Window/Unix/X11InputManager.cpp +++ b/src/SFML/Window/Unix/X11InputManager.cpp @@ -1,15 +1,43 @@ -#include "X11InputManager.hpp" +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2018 Laurent Gomila (laurent@sfml-dev.org) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include #include #include -#include #include -namespace sf { -namespace priv { +namespace sf +{ +namespace priv +{ namespace { - +//////////////////////////////////////////////////////////// sf::Keyboard::Key keysymToSF(KeySym symbol) { switch (symbol) @@ -121,6 +149,8 @@ sf::Keyboard::Key keysymToSF(KeySym symbol) return sf::Keyboard::Unknown; } + +//////////////////////////////////////////////////////////// KeySym SFtoKeysym(sf::Keyboard::Key key) { // Get the corresponding X11 keysym @@ -233,11 +263,13 @@ KeySym SFtoKeysym(sf::Keyboard::Key key) return keysym; } + +//////////////////////////////////////////////////////////// sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) { KeySym keySym; - // Valid key code range is [8,255], according to the Xlib manual + // Valid key code range is [8,255], according to the Xlib manual if (keycode < 8 || keycode > 255) return sf::Keyboard::ScanUnknown; @@ -318,6 +350,7 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) case XK_F13: return sf::Keyboard::ScanF13; case XK_F14: return sf::Keyboard::ScanF14; case XK_F15: return sf::Keyboard::ScanF15; + // SFML doesn't currently have these scancodes /* case XK_F16: return sf::Keyboard::ScanF16; case XK_F17: return sf::Keyboard::ScanF17; case XK_F18: return sf::Keyboard::ScanF18; @@ -410,34 +443,38 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) } -} // end of anonymous namespace +} // anonymous namespace + +//////////////////////////////////////////////////////////// X11InputManager::X11InputManager() : m_display(NULL) { - for (int i = 0; i < sf::Keyboard::ScanCodeCount; ++i) { + for (int i = 0; i < sf::Keyboard::ScanCodeCount; ++i) + { m_scancodeToKeycode[i] = 0; } - for (int i = 0; i < 256; ++i) { + for (int i = 0; i < 256; ++i) + { m_keycodeToScancode[i] = sf::Keyboard::ScanUnknown; } } -void X11InputManager::initialize(Display* display) -{ - m_display = display; - buildMapping(); -} +//////////////////////////////////////////////////////////// X11InputManager& X11InputManager::getInstance() { static X11InputManager instance; return instance; } -void X11InputManager::buildMapping() + +//////////////////////////////////////////////////////////// +void X11InputManager::initialize(Display* display) { + m_display = display; + // Find the X11 key code -> SFML key code mapping // This code was inspired by GLFW implementation @@ -501,7 +538,8 @@ void X11InputManager::buildMapping() else if (strcmp(name, "AB10") == 0) sc = sf::Keyboard::ScanForwardSlash; else sc = sf::Keyboard::ScanUnknown; - if ((keycode >= 0) && (keycode < 256)) { + if ((keycode >= 0) && (keycode < 256)) + { m_scancodeToKeycode[sc] = keycode; m_keycodeToScancode[keycode] = sc; } @@ -511,8 +549,10 @@ void X11InputManager::buildMapping() XkbFreeKeyboard(desc, 0, True); // Translate un-translated keycodes using traditional X11 KeySym lookups - for (int keycode = 0; keycode < 256; ++keycode) { - if (m_keycodeToScancode[keycode] == sf::Keyboard::ScanUnknown) { + for (int keycode = 0; keycode < 256; ++keycode) + { + if (m_keycodeToScancode[keycode] == sf::Keyboard::ScanUnknown) + { sf::Keyboard::Scancode sc = translateKeyCode(m_display, keycode); m_scancodeToKeycode[sc] = keycode; m_keycodeToScancode[keycode] = sc; @@ -520,21 +560,10 @@ void X11InputManager::buildMapping() } } -sf::Keyboard::Scancode X11InputManager::unlocalize(sf::Keyboard::Key key) const -{ - KeyCode keycode = SFtoKeyCode(key); - return keyCodeToSF(keycode); -} -sf::Keyboard::Key X11InputManager::localize(sf::Keyboard::Scancode code) const -{ - KeyCode keycode = SFtoKeyCode(code); - KeySym keysym = XkbKeycodeToKeysym(m_display, keycode, 0, 0); - return keysymToSF(keysym); -} namespace { - +//////////////////////////////////////////////////////////// bool isKeyPressedImpl(Display* display, KeyCode keycode) { if (keycode != 0) @@ -549,23 +578,52 @@ bool isKeyPressedImpl(Display* display, KeyCode keycode) return false; } -} +} // anonymous namespace +//////////////////////////////////////////////////////////// bool X11InputManager::isKeyPressed(sf::Keyboard::Key key) const { KeyCode keycode = SFtoKeyCode(key); return isKeyPressedImpl(m_display, keycode); } + +//////////////////////////////////////////////////////////// bool X11InputManager::isKeyPressed(sf::Keyboard::Scancode code) const { KeyCode keycode = SFtoKeyCode(code); return isKeyPressedImpl(m_display, keycode); } + +//////////////////////////////////////////////////////////// +sf::Keyboard::Scancode X11InputManager::unlocalize(sf::Keyboard::Key key) const +{ + KeyCode keycode = SFtoKeyCode(key); + return keyCodeToSF(keycode); +} + + +//////////////////////////////////////////////////////////// +sf::Keyboard::Key X11InputManager::localize(sf::Keyboard::Scancode code) const +{ + KeyCode keycode = SFtoKeyCode(code); + KeySym keysym = XkbKeycodeToKeysym(m_display, keycode, 0, 0); + return keysymToSF(keysym); +} + + +//////////////////////////////////////////////////////////// +sf::String X11InputManager::getDescription(Keyboard::Scancode code) const +{ + return ""; // TODO +} + + +//////////////////////////////////////////////////////////// sf::Keyboard::Key X11InputManager::getKeyFromEvent(XKeyEvent& event) const { - Keyboard::Key key = Keyboard::Unknown; + sf::Keyboard::Key key = Keyboard::Unknown; // Try each KeySym index (modifier group) until we get a match for (int i = 0; i < 4; ++i) @@ -580,31 +638,34 @@ sf::Keyboard::Key X11InputManager::getKeyFromEvent(XKeyEvent& event) const return key; } + +//////////////////////////////////////////////////////////// sf::Keyboard::Scancode X11InputManager::getScancodeFromEvent(XKeyEvent& event) const { return keyCodeToSF(event.keycode); } -String X11InputManager::getDescription(Keyboard::Scancode code) const -{ - return ""; // TODO -} +//////////////////////////////////////////////////////////// KeyCode X11InputManager::SFtoKeyCode(sf::Keyboard::Key key) const { KeySym keysym = SFtoKeysym(key); return XKeysymToKeycode(m_display, keysym); } + +//////////////////////////////////////////////////////////// KeyCode X11InputManager::SFtoKeyCode(sf::Keyboard::Scancode code) const { return m_scancodeToKeycode[code]; } + +//////////////////////////////////////////////////////////// sf::Keyboard::Scancode X11InputManager::keyCodeToSF(KeyCode code) const { return m_keycodeToScancode[code]; } -} // end of namespace priv -} // end of namespace sf +} // namespace priv +} // namespace sf diff --git a/src/SFML/Window/Unix/X11InputManager.hpp b/src/SFML/Window/Unix/X11InputManager.hpp index 0b1909fc..12948cfe 100644 --- a/src/SFML/Window/Unix/X11InputManager.hpp +++ b/src/SFML/Window/Unix/X11InputManager.hpp @@ -1,6 +1,33 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2018 Laurent Gomila (laurent@sfml-dev.org) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + #ifndef SFML_X11INPUTMANAGER_HPP #define SFML_X11INPUTMANAGER_HPP +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// #include #include @@ -10,38 +37,136 @@ namespace sf { namespace priv { +//////////////////////////////////////////////////////////// +/// \brief sf::priv::InputImpl helper +/// +/// This class manage as a singleton instance the keyboard state. +/// Its purpose is to help sf::priv::InputImpl class. +/// +//////////////////////////////////////////////////////////// class X11InputManager { public: + + //////////////////////////////////////////////////////////// + /// \brief Get the unique instance of the class + /// + /// \note Private use only + /// + /// \return Reference to the X11InputManager instance + /// + //////////////////////////////////////////////////////////// static X11InputManager& getInstance(); + private: + + //////////////////////////////////////////////////////////// + /// \brief Default constructor + /// + //////////////////////////////////////////////////////////// X11InputManager(); public: + + //////////////////////////////////////////////////////////// + /// \brief Initialize the keyboard + /// + /// Builds a mapping between sf::Keyboard::Scancode and + /// X11 keycodes + /// + //////////////////////////////////////////////////////////// void initialize(Display* display); - sf::Keyboard::Scancode unlocalize(sf::Keyboard::Key key) const; - sf::Keyboard::Key localize(sf::Keyboard::Scancode code) const; - + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::isKeyPressed(Key) + /// + //////////////////////////////////////////////////////////// bool isKeyPressed(sf::Keyboard::Key key) const; + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::isKeyPressed(Scancode) + /// + //////////////////////////////////////////////////////////// bool isKeyPressed(sf::Keyboard::Scancode code) const; + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::localize + /// + //////////////////////////////////////////////////////////// + sf::Keyboard::Scancode unlocalize(sf::Keyboard::Key key) const; + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::unlocalize + /// + //////////////////////////////////////////////////////////// + sf::Keyboard::Key localize(sf::Keyboard::Scancode code) const; + + //////////////////////////////////////////////////////////// + /// \copydoc sf::Keyboard::getDescription + /// + //////////////////////////////////////////////////////////// + sf::String getDescription(Keyboard::Scancode code) const; + + //////////////////////////////////////////////////////////// + /// \brief Get the sf::Keyboard::Key from XKeyEvent + /// + /// \param event Event from which key is gotten + /// + /// \return A key being pressed or released + /// + //////////////////////////////////////////////////////////// sf::Keyboard::Key getKeyFromEvent(XKeyEvent& event) const; + + //////////////////////////////////////////////////////////// + /// \brief Get the sf::Keyboard::Scancode from XKeyEvent + /// + /// \param event Event from which scancode is gotten + /// + /// \return A scancode of a key being pressed or released + /// + //////////////////////////////////////////////////////////// sf::Keyboard::Scancode getScancodeFromEvent(XKeyEvent& event) const; - String getDescription(Keyboard::Scancode code) const; private: - void buildMapping(); + + //////////////////////////////////////////////////////////// + /// \brief Converts sf::Keyboard::Key to X11 keycode + /// + /// \param key A key to be converted + /// + /// \return A corresponding X11 Keycode + /// + //////////////////////////////////////////////////////////// KeyCode SFtoKeyCode(sf::Keyboard::Key key) const; + + //////////////////////////////////////////////////////////// + /// \brief Converts sf::Keyboard::Scancode to X11 keycode + /// + /// \param code A scancode to be converted + /// + /// \return A corresponding X11 Keycode + /// + //////////////////////////////////////////////////////////// KeyCode SFtoKeyCode(sf::Keyboard::Scancode code) const; + + //////////////////////////////////////////////////////////// + /// \brief Convert X11 Keycode to sf::Keyboard::Scancode + /// + /// \param code X11 keycode + /// + /// \return The corresponding sf::Keyboard::Scancode + /// + //////////////////////////////////////////////////////////// sf::Keyboard::Scancode keyCodeToSF(KeyCode code) const; - KeyCode m_scancodeToKeycode[sf::Keyboard::ScanCodeCount]; - sf::Keyboard::Scancode m_keycodeToScancode[256]; - - Display* m_display; + //////////////////////////////////////////////////////////// + // Member data + //////////////////////////////////////////////////////////// + KeyCode m_scancodeToKeycode[sf::Keyboard::ScanCodeCount]; ///< Mapping of SFML scancode to X11 KeyCode + sf::Keyboard::Scancode m_keycodeToScancode[256]; ///< Mapping of X11 KeyCode to SFML scancode + Display* m_display; ///< Pointer to the display }; -} // end of namespace priv -} // end of namespace sf +} // namespace priv +} // namespace sf -#endif +#endif // SFML_X11INPUTMANAGER_HPP From 37a49302af568560584c9c5aa2660685a5e472e8 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Thu, 29 Mar 2018 23:33:14 +0300 Subject: [PATCH 11/59] getDescription implementation for X11 --- src/SFML/Window/Unix/InputImpl.cpp | 3 +- src/SFML/Window/Unix/WindowImplX11.cpp | 2 +- src/SFML/Window/Unix/X11InputManager.cpp | 155 ++++++++++++++++++++++- src/SFML/Window/Unix/X11InputManager.hpp | 4 +- 4 files changed, 155 insertions(+), 9 deletions(-) diff --git a/src/SFML/Window/Unix/InputImpl.cpp b/src/SFML/Window/Unix/InputImpl.cpp index 3818805e..04339fbe 100644 --- a/src/SFML/Window/Unix/InputImpl.cpp +++ b/src/SFML/Window/Unix/InputImpl.cpp @@ -26,8 +26,9 @@ // Headers //////////////////////////////////////////////////////////// #include // important to be included first (conflict with None) -#include #include +#include +#include #include #include #include diff --git a/src/SFML/Window/Unix/WindowImplX11.cpp b/src/SFML/Window/Unix/WindowImplX11.cpp index 5f29dfb0..48f2ab2e 100644 --- a/src/SFML/Window/Unix/WindowImplX11.cpp +++ b/src/SFML/Window/Unix/WindowImplX11.cpp @@ -1607,7 +1607,7 @@ void WindowImplX11::initialize() createHiddenCursor(); // init X11 keycode <-> SFML scancode mapping - X11InputManager::getInstance().initialize(m_display); + X11InputManager::getInstance().initialize(m_display, m_inputContext); // Flush the commands queue XFlush(m_display); diff --git a/src/SFML/Window/Unix/X11InputManager.cpp b/src/SFML/Window/Unix/X11InputManager.cpp index 8e5517f0..7d69e600 100644 --- a/src/SFML/Window/Unix/X11InputManager.cpp +++ b/src/SFML/Window/Unix/X11InputManager.cpp @@ -25,10 +25,12 @@ //////////////////////////////////////////////////////////// // Headers //////////////////////////////////////////////////////////// +#include #include #include -#include #include +#include +#include #include namespace sf @@ -448,7 +450,8 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) //////////////////////////////////////////////////////////// X11InputManager::X11InputManager() : - m_display(NULL) + m_display(NULL), + m_inputContext(NULL) { for (int i = 0; i < sf::Keyboard::ScanCodeCount; ++i) { @@ -471,9 +474,10 @@ X11InputManager& X11InputManager::getInstance() //////////////////////////////////////////////////////////// -void X11InputManager::initialize(Display* display) +void X11InputManager::initialize(Display* display, XIC inputContext) { m_display = display; + m_inputContext = inputContext; // Find the X11 key code -> SFML key code mapping // This code was inspired by GLFW implementation @@ -612,11 +616,152 @@ sf::Keyboard::Key X11InputManager::localize(sf::Keyboard::Scancode code) const return keysymToSF(keysym); } - //////////////////////////////////////////////////////////// sf::String X11InputManager::getDescription(Keyboard::Scancode code) const { - return ""; // TODO + bool checkInput = true; + + // these scancodes actually correspond to keys with input + // but we want to return their description, not their behaviour + if (code == sf::Keyboard::ScanEnter || + code == sf::Keyboard::ScanReturn || + code == sf::Keyboard::ScanTab || + code == sf::Keyboard::ScanDelete || + code == sf::Keyboard::ScanBackspace || + code == sf::Keyboard::ScanSpace) { + checkInput = false; + } + + if (checkInput) + { + // fake keypress event + XKeyPressedEvent ev; + ev.keycode = SFtoKeyCode(code); + ev.display = m_display; + ev.type = KeyPress; + + #ifdef X_HAVE_UTF8_STRING + if (m_inputContext) + { + Status status; + Uint8 keyBuffer[16]; + + int length = Xutf8LookupString( + m_inputContext, + &ev, + reinterpret_cast(keyBuffer), + sizeof(keyBuffer), + NULL, + &status + ); + + if (length > 0) + { + Uint32 unicode = 0; + Utf8::decode(keyBuffer, keyBuffer + length, unicode, 0); + if (unicode != 0) + return sf::String(unicode); + } + } + else + #endif + { + static XComposeStatus status; + char keyBuffer[16]; + if (XLookupString(&ev, keyBuffer, sizeof(keyBuffer), NULL, &status)) + return sf::String(static_cast(keyBuffer[0])); + } + } + + // 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::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::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::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::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::ScanLControl: return "Control (Left)"; + case sf::Keyboard::ScanLShift: return "Shift (Left)"; + case sf::Keyboard::ScanLAlt: return "Alt (Left)"; + case sf::Keyboard::ScanLSystem: return "Meta (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 "Meta (Right)"; + } + + return sf::String("Unknown Scancode"); // no guess good enough possible. } diff --git a/src/SFML/Window/Unix/X11InputManager.hpp b/src/SFML/Window/Unix/X11InputManager.hpp index 12948cfe..67d4e67c 100644 --- a/src/SFML/Window/Unix/X11InputManager.hpp +++ b/src/SFML/Window/Unix/X11InputManager.hpp @@ -74,7 +74,7 @@ public: /// X11 keycodes /// //////////////////////////////////////////////////////////// - void initialize(Display* display); + void initialize(Display* display, XIC inputContext); //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::isKeyPressed(Key) @@ -164,7 +164,7 @@ private: KeyCode m_scancodeToKeycode[sf::Keyboard::ScanCodeCount]; ///< Mapping of SFML scancode to X11 KeyCode sf::Keyboard::Scancode m_keycodeToScancode[256]; ///< Mapping of X11 KeyCode to SFML scancode Display* m_display; ///< Pointer to the display -}; + XIC m_inputContext; ///< Input context used to get unicode input in our window (used for getDescription) } // namespace priv } // namespace sf From 7a862c917aabe2d7e4e77e0fa4191e67b149eeba Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Fri, 30 Mar 2018 23:44:36 +0300 Subject: [PATCH 12/59] Fixed broken code --- src/SFML/Window/Unix/X11InputManager.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/SFML/Window/Unix/X11InputManager.hpp b/src/SFML/Window/Unix/X11InputManager.hpp index 67d4e67c..44db0b88 100644 --- a/src/SFML/Window/Unix/X11InputManager.hpp +++ b/src/SFML/Window/Unix/X11InputManager.hpp @@ -165,6 +165,7 @@ private: sf::Keyboard::Scancode m_keycodeToScancode[256]; ///< Mapping of X11 KeyCode to SFML scancode Display* m_display; ///< Pointer to the display XIC m_inputContext; ///< Input context used to get unicode input in our window (used for getDescription) +}; } // namespace priv } // namespace sf From ba513484fc9e3cbd074eafdb8b06abcbda80a260 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Sat, 31 Mar 2018 01:47:06 +0300 Subject: [PATCH 13/59] Generate KeySym -> Unicode mapping, so we don't need to make fake events in getDescription now --- .../Window/Unix/KeySymToUnicodeMapping.hpp | 1414 +++++++++++++++++ src/SFML/Window/Unix/WindowImplX11.cpp | 2 +- src/SFML/Window/Unix/X11InputManager.cpp | 52 +- src/SFML/Window/Unix/X11InputManager.hpp | 4 +- 4 files changed, 1427 insertions(+), 45 deletions(-) create mode 100644 src/SFML/Window/Unix/KeySymToUnicodeMapping.hpp diff --git a/src/SFML/Window/Unix/KeySymToUnicodeMapping.hpp b/src/SFML/Window/Unix/KeySymToUnicodeMapping.hpp new file mode 100644 index 00000000..2ee95d8f --- /dev/null +++ b/src/SFML/Window/Unix/KeySymToUnicodeMapping.hpp @@ -0,0 +1,1414 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2017 Laurent Gomila (laurent@sfml-dev.org) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_KEYSYMTOUNICODEMAPPING_HPP +#define SFML_KEYSYMTOUNICODEMAPPING_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include // sf::Uint32 +#include // KeySym + +namespace sf +{ +namespace priv +{ + +//////////////////////////////////////////////////////////// +/// \brief Converts a KeySym to UTF-32 +/// +/// This code was autogenerated from the following table: +/// https://www.cl.cam.ac.uk/~mgk25/ucs/keysyms.txt +/// +/// \param keysym keysym to be converted +/// \return corresponding UTF-32 +//////////////////////////////////////////////////////////// +inline Uint32 keysymToUnicode(KeySym keysym) +{ + switch (keysym) + { + case 0xff08: return 0x0008; // BackSpace + case 0xff89: return 0x0009; // KP_Tab + case 0xff09: return 0x0009; // Tab + case 0xff0a: return 0x000a; // Linefeed + case 0xff0b: return 0x000b; // Clear + case 0xff8d: return 0x000d; // KP_Enter + case 0xff0d: return 0x000d; // Return + case 0xff13: return 0x0013; // Pause + case 0xff14: return 0x0014; // Scroll_Lock + case 0xff15: return 0x0015; // Sys_Req + case 0xff1b: return 0x001b; // Escape + case 0xff80: return 0x0020; // KP_Space + case 0x0020: return 0x0020; // space + case 0x0021: return 0x0021; // exclam + case 0x0022: return 0x0022; // quotedbl + case 0x0023: return 0x0023; // numbersign + case 0x0024: return 0x0024; // dollar + case 0x0025: return 0x0025; // percent + case 0x0026: return 0x0026; // ampersand + case 0x0027: return 0x0027; // quoteright + case 0x14a5: return 0x0028; // Armenian_parenleft + case 0x0028: return 0x0028; // parenleft + case 0x14a4: return 0x0029; // Armenian_parenright + case 0x0029: return 0x0029; // parenright + case 0xffaa: return 0x002a; // KP_Multiply + case 0x002a: return 0x002a; // asterisk + case 0xffab: return 0x002b; // KP_Add + case 0x002b: return 0x002b; // plus + case 0x14ab: return 0x002c; // Armenian_comma + case 0xffac: return 0x002c; // KP_Separator + case 0x002c: return 0x002c; // comma + case 0xffad: return 0x002d; // KP_Subtract + case 0x002d: return 0x002d; // minus + case 0x14a9: return 0x002e; // Armenian_mijaket + case 0xffae: return 0x002e; // KP_Decimal + case 0x0abd: return 0x002e; // decimalpoint + case 0x002e: return 0x002e; // period + case 0xffaf: return 0x002f; // KP_Divide + case 0x002f: return 0x002f; // slash + case 0x0030: return 0x0030; // 0 + case 0xffb0: return 0x0030; // KP_0 + case 0x0031: return 0x0031; // 1 + case 0xffb1: return 0x0031; // KP_1 + case 0x0032: return 0x0032; // 2 + case 0xffb2: return 0x0032; // KP_2 + case 0x0033: return 0x0033; // 3 + case 0xffb3: return 0x0033; // KP_3 + case 0x0034: return 0x0034; // 4 + case 0xffb4: return 0x0034; // KP_4 + case 0x0035: return 0x0035; // 5 + case 0xffb5: return 0x0035; // KP_5 + case 0x0036: return 0x0036; // 6 + case 0xffb6: return 0x0036; // KP_6 + case 0x0037: return 0x0037; // 7 + case 0xffb7: return 0x0037; // KP_7 + case 0x0038: return 0x0038; // 8 + case 0xffb8: return 0x0038; // KP_8 + case 0x0039: return 0x0039; // 9 + case 0xffb9: return 0x0039; // KP_9 + case 0x003a: return 0x003a; // colon + case 0x003b: return 0x003b; // semicolon + case 0x0ba3: return 0x003c; // leftcaret + case 0x003c: return 0x003c; // less + case 0xffbd: return 0x003d; // KP_Equal + case 0x003d: return 0x003d; // equal + case 0x003e: return 0x003e; // greater + case 0x0ba6: return 0x003e; // rightcaret + case 0x003f: return 0x003f; // question + case 0x0040: return 0x0040; // at + case 0x0041: return 0x0041; // A + case 0x0042: return 0x0042; // B + case 0x0043: return 0x0043; // C + case 0x0044: return 0x0044; // D + case 0x0045: return 0x0045; // E + case 0x0046: return 0x0046; // F + case 0x0047: return 0x0047; // G + case 0x0048: return 0x0048; // H + case 0x0049: return 0x0049; // I + case 0x004a: return 0x004a; // J + case 0x004b: return 0x004b; // K + case 0x004c: return 0x004c; // L + case 0x004d: return 0x004d; // M + case 0x004e: return 0x004e; // N + case 0x004f: return 0x004f; // O + case 0x0050: return 0x0050; // P + case 0x0051: return 0x0051; // Q + case 0x0052: return 0x0052; // R + case 0x0053: return 0x0053; // S + case 0x0054: return 0x0054; // T + case 0x0055: return 0x0055; // U + case 0x0056: return 0x0056; // V + case 0x0057: return 0x0057; // W + case 0x0058: return 0x0058; // X + case 0x0059: return 0x0059; // Y + case 0x005a: return 0x005a; // Z + case 0x005b: return 0x005b; // bracketleft + case 0x005c: return 0x005c; // backslash + case 0x005d: return 0x005d; // bracketright + case 0x005e: return 0x005e; // asciicircum + case 0x0bc6: return 0x005f; // underbar + case 0x005f: return 0x005f; // underscore + case 0x0060: return 0x0060; // quoteleft + case 0x0061: return 0x0061; // a + case 0x0062: return 0x0062; // b + case 0x0063: return 0x0063; // c + case 0x0064: return 0x0064; // d + case 0x0065: return 0x0065; // e + case 0x0066: return 0x0066; // f + case 0x0067: return 0x0067; // g + case 0x0068: return 0x0068; // h + case 0x0069: return 0x0069; // i + case 0x006a: return 0x006a; // j + case 0x006b: return 0x006b; // k + case 0x006c: return 0x006c; // l + case 0x006d: return 0x006d; // m + case 0x006e: return 0x006e; // n + case 0x006f: return 0x006f; // o + case 0x0070: return 0x0070; // p + case 0x0071: return 0x0071; // q + case 0x0072: return 0x0072; // r + case 0x0073: return 0x0073; // s + case 0x0074: return 0x0074; // t + case 0x0075: return 0x0075; // u + case 0x0076: return 0x0076; // v + case 0x0077: return 0x0077; // w + case 0x0078: return 0x0078; // x + case 0x0079: return 0x0079; // y + case 0x007a: return 0x007a; // z + case 0x007b: return 0x007b; // braceleft + case 0x007c: return 0x007c; // bar + case 0x007d: return 0x007d; // braceright + case 0x007e: return 0x007e; // asciitilde + case 0x00a0: return 0x00a0; // nobreakspace + case 0x00a1: return 0x00a1; // exclamdown + case 0x00a2: return 0x00a2; // cent + case 0x00a3: return 0x00a3; // sterling + case 0x00a4: return 0x00a4; // currency + case 0x00a5: return 0x00a5; // yen + case 0x00a6: return 0x00a6; // brokenbar + case 0x14ff: return 0x00a7; // Armenian_section_sign + case 0x00a7: return 0x00a7; // section + case 0x00a8: return 0x00a8; // diaeresis + case 0x00a9: return 0x00a9; // copyright + case 0x00aa: return 0x00aa; // ordfeminine + case 0x14a7: return 0x00ab; // Armenian_guillemotleft + case 0x00ab: return 0x00ab; // guillemotleft + case 0x00ac: return 0x00ac; // notsign + case 0x00ad: return 0x00ad; // hyphen + case 0x00ae: return 0x00ae; // registered + case 0x00af: return 0x00af; // macron + case 0x0bc0: return 0x00af; // overbar + case 0x00b0: return 0x00b0; // degree + case 0x00b1: return 0x00b1; // plusminus + case 0x00b2: return 0x00b2; // twosuperior + case 0x00b3: return 0x00b3; // threesuperior + case 0x00b4: return 0x00b4; // acute + case 0x00b5: return 0x00b5; // mu + case 0x00b6: return 0x00b6; // paragraph + case 0x00b7: return 0x00b7; // periodcentered + case 0x00b8: return 0x00b8; // cedilla + case 0x00b9: return 0x00b9; // onesuperior + case 0x00ba: return 0x00ba; // masculine + case 0x14a6: return 0x00bb; // Armenian_guillemotright + case 0x00bb: return 0x00bb; // guillemotright + case 0x00bc: return 0x00bc; // onequarter + case 0x00bd: return 0x00bd; // onehalf + case 0x00be: return 0x00be; // threequarters + case 0x00bf: return 0x00bf; // questiondown + case 0x00c0: return 0x00c0; // Agrave + case 0x00c1: return 0x00c1; // Aacute + case 0x00c2: return 0x00c2; // Acircumflex + case 0x00c3: return 0x00c3; // Atilde + case 0x00c4: return 0x00c4; // Adiaeresis + case 0x00c5: return 0x00c5; // Aring + case 0x00c6: return 0x00c6; // AE + case 0x00c7: return 0x00c7; // Ccedilla + case 0x00c8: return 0x00c8; // Egrave + case 0x00c9: return 0x00c9; // Eacute + case 0x00ca: return 0x00ca; // Ecircumflex + case 0x00cb: return 0x00cb; // Ediaeresis + case 0x00cc: return 0x00cc; // Igrave + case 0x00cd: return 0x00cd; // Iacute + case 0x00ce: return 0x00ce; // Icircumflex + case 0x00cf: return 0x00cf; // Idiaeresis + case 0x00d0: return 0x00d0; // Eth + case 0x00d1: return 0x00d1; // Ntilde + case 0x00d2: return 0x00d2; // Ograve + case 0x00d3: return 0x00d3; // Oacute + case 0x00d4: return 0x00d4; // Ocircumflex + case 0x00d5: return 0x00d5; // Otilde + case 0x00d6: return 0x00d6; // Odiaeresis + case 0x00d7: return 0x00d7; // multiply + case 0x00d8: return 0x00d8; // Ooblique + case 0x00d9: return 0x00d9; // Ugrave + case 0x00da: return 0x00da; // Uacute + case 0x00db: return 0x00db; // Ucircumflex + case 0x00dc: return 0x00dc; // Udiaeresis + case 0x00dd: return 0x00dd; // Yacute + case 0x00de: return 0x00de; // Thorn + case 0x00df: return 0x00df; // ssharp + case 0x00e0: return 0x00e0; // agrave + case 0x00e1: return 0x00e1; // aacute + case 0x00e2: return 0x00e2; // acircumflex + case 0x00e3: return 0x00e3; // atilde + case 0x00e4: return 0x00e4; // adiaeresis + case 0x00e5: return 0x00e5; // aring + case 0x00e6: return 0x00e6; // ae + case 0x00e7: return 0x00e7; // ccedilla + case 0x00e8: return 0x00e8; // egrave + case 0x00e9: return 0x00e9; // eacute + case 0x00ea: return 0x00ea; // ecircumflex + case 0x00eb: return 0x00eb; // ediaeresis + case 0x00ec: return 0x00ec; // igrave + case 0x00ed: return 0x00ed; // iacute + case 0x00ee: return 0x00ee; // icircumflex + case 0x00ef: return 0x00ef; // idiaeresis + case 0x00f0: return 0x00f0; // eth + case 0x00f1: return 0x00f1; // ntilde + case 0x00f2: return 0x00f2; // ograve + case 0x00f3: return 0x00f3; // oacute + case 0x00f4: return 0x00f4; // ocircumflex + case 0x00f5: return 0x00f5; // otilde + case 0x00f6: return 0x00f6; // odiaeresis + case 0x00f7: return 0x00f7; // division + case 0x00f8: return 0x00f8; // oslash + case 0x00f9: return 0x00f9; // ugrave + case 0x00fa: return 0x00fa; // uacute + case 0x00fb: return 0x00fb; // ucircumflex + case 0x00fc: return 0x00fc; // udiaeresis + case 0x00fd: return 0x00fd; // yacute + case 0x00fe: return 0x00fe; // thorn + case 0x00ff: return 0x00ff; // ydiaeresis + case 0x03c0: return 0x0100; // Amacron + case 0x03e0: return 0x0101; // amacron + case 0x01c3: return 0x0102; // Abreve + case 0x01e3: return 0x0103; // abreve + case 0x01a1: return 0x0104; // Aogonek + case 0x01b1: return 0x0105; // aogonek + case 0x01c6: return 0x0106; // Cacute + case 0x01e6: return 0x0107; // cacute + case 0x02c6: return 0x0108; // Ccircumflex + case 0x02e6: return 0x0109; // ccircumflex + case 0x02c5: return 0x010a; // Cabovedot + case 0x02e5: return 0x010b; // cabovedot + case 0x01c8: return 0x010c; // Ccaron + case 0x01e8: return 0x010d; // ccaron + case 0x01cf: return 0x010e; // Dcaron + case 0x01ef: return 0x010f; // dcaron + case 0x01d0: return 0x0110; // Dstroke + case 0x01f0: return 0x0111; // dstroke + case 0x03aa: return 0x0112; // Emacron + case 0x03ba: return 0x0113; // emacron + case 0x03cc: return 0x0116; // Eabovedot + case 0x03ec: return 0x0117; // eabovedot + case 0x01ca: return 0x0118; // Eogonek + case 0x01ea: return 0x0119; // eogonek + case 0x01cc: return 0x011a; // Ecaron + case 0x01ec: return 0x011b; // ecaron + case 0x02d8: return 0x011c; // Gcircumflex + case 0x02f8: return 0x011d; // gcircumflex + case 0x02ab: return 0x011e; // Gbreve + case 0x02bb: return 0x011f; // gbreve + case 0x02d5: return 0x0120; // Gabovedot + case 0x02f5: return 0x0121; // gabovedot + case 0x03ab: return 0x0122; // Gcedilla + case 0x03bb: return 0x0123; // gcedilla + case 0x02a6: return 0x0124; // Hcircumflex + case 0x02b6: return 0x0125; // hcircumflex + case 0x02a1: return 0x0126; // Hstroke + case 0x02b1: return 0x0127; // hstroke + case 0x03a5: return 0x0128; // Itilde + case 0x03b5: return 0x0129; // itilde + case 0x03cf: return 0x012a; // Imacron + case 0x03ef: return 0x012b; // imacron + case 0x16a6: return 0x012c; // Ibreve + case 0x16b6: return 0x012d; // ibreve + case 0x03c7: return 0x012e; // Iogonek + case 0x03e7: return 0x012f; // iogonek + case 0x02a9: return 0x0130; // Iabovedot + case 0x02b9: return 0x0131; // idotless + case 0x02ac: return 0x0134; // Jcircumflex + case 0x02bc: return 0x0135; // jcircumflex + case 0x03d3: return 0x0136; // Kcedilla + case 0x03f3: return 0x0137; // kcedilla + case 0x03a2: return 0x0138; // kra + case 0x01c5: return 0x0139; // Lacute + case 0x01e5: return 0x013a; // lacute + case 0x03a6: return 0x013b; // Lcedilla + case 0x03b6: return 0x013c; // lcedilla + case 0x01a5: return 0x013d; // Lcaron + case 0x01b5: return 0x013e; // lcaron + case 0x01a3: return 0x0141; // Lstroke + case 0x01b3: return 0x0142; // lstroke + case 0x01d1: return 0x0143; // Nacute + case 0x01f1: return 0x0144; // nacute + case 0x03d1: return 0x0145; // Ncedilla + case 0x03f1: return 0x0146; // ncedilla + case 0x01d2: return 0x0147; // Ncaron + case 0x01f2: return 0x0148; // ncaron + case 0x03bd: return 0x014a; // ENG + case 0x03bf: return 0x014b; // eng + case 0x03d2: return 0x014c; // Omacron + case 0x03f2: return 0x014d; // omacron + case 0x01d5: return 0x0150; // Odoubleacute + case 0x01f5: return 0x0151; // odoubleacute + case 0x13bc: return 0x0152; // OE + case 0x13bd: return 0x0153; // oe + case 0x01c0: return 0x0154; // Racute + case 0x01e0: return 0x0155; // racute + case 0x03a3: return 0x0156; // Rcedilla + case 0x03b3: return 0x0157; // rcedilla + case 0x01d8: return 0x0158; // Rcaron + case 0x01f8: return 0x0159; // rcaron + case 0x01a6: return 0x015a; // Sacute + case 0x01b6: return 0x015b; // sacute + case 0x02de: return 0x015c; // Scircumflex + case 0x02fe: return 0x015d; // scircumflex + case 0x01aa: return 0x015e; // Scedilla + case 0x01ba: return 0x015f; // scedilla + case 0x01a9: return 0x0160; // Scaron + case 0x01b9: return 0x0161; // scaron + case 0x01de: return 0x0162; // Tcedilla + case 0x01fe: return 0x0163; // tcedilla + case 0x01ab: return 0x0164; // Tcaron + case 0x01bb: return 0x0165; // tcaron + case 0x03ac: return 0x0166; // Tslash + case 0x03bc: return 0x0167; // tslash + case 0x03dd: return 0x0168; // Utilde + case 0x03fd: return 0x0169; // utilde + case 0x03de: return 0x016a; // Umacron + case 0x03fe: return 0x016b; // umacron + case 0x02dd: return 0x016c; // Ubreve + case 0x02fd: return 0x016d; // ubreve + case 0x01d9: return 0x016e; // Uring + case 0x01f9: return 0x016f; // uring + case 0x01db: return 0x0170; // Udoubleacute + case 0x01fb: return 0x0171; // udoubleacute + case 0x03d9: return 0x0172; // Uogonek + case 0x03f9: return 0x0173; // uogonek + case 0x12d0: return 0x0174; // Wcircumflex + case 0x12f0: return 0x0175; // wcircumflex + case 0x12de: return 0x0176; // Ycircumflex + case 0x12fe: return 0x0177; // ycircumflex + case 0x13be: return 0x0178; // Ydiaeresis + case 0x01ac: return 0x0179; // Zacute + case 0x01bc: return 0x017a; // zacute + case 0x01af: return 0x017b; // Zabovedot + case 0x01bf: return 0x017c; // zabovedot + case 0x01ae: return 0x017d; // Zcaron + case 0x01be: return 0x017e; // zcaron + case 0x16c6: return 0x018f; // SCHWA + case 0x08f6: return 0x0192; // function + case 0x16af: return 0x019f; // Obarred + case 0x1efa: return 0x01a0; // Ohorn + case 0x1efb: return 0x01a1; // ohorn + case 0x1efc: return 0x01af; // Uhorn + case 0x1efd: return 0x01b0; // uhorn + case 0x16a9: return 0x01b5; // Zstroke + case 0x16b9: return 0x01b6; // zstroke + case 0x16bd: return 0x01d2; // ocaron + case 0x16aa: return 0x01e6; // Gcaron + case 0x16ba: return 0x01e7; // gcaron + case 0x16f6: return 0x0259; // schwa + case 0x16bf: return 0x0275; // obarred + case 0x01b7: return 0x02c7; // caron + case 0x01a2: return 0x02d8; // breve + case 0x01ff: return 0x02d9; // abovedot + case 0x01b2: return 0x02db; // ogonek + case 0x01bd: return 0x02dd; // doubleacute + case 0x1ef2: return 0x0300; // combining_grave + case 0xfe50: return 0x0300; // dead_grave + case 0x1ef3: return 0x0301; // combining_acute + case 0xfe51: return 0x0301; // dead_acute + case 0xfe52: return 0x0302; // dead_circumflex + case 0x1e9f: return 0x0303; // combining_tilde + case 0xfe53: return 0x0303; // dead_tilde + case 0xfe54: return 0x0304; // dead_macron + case 0xfe55: return 0x0306; // dead_breve + case 0xfe56: return 0x0307; // dead_abovedot + case 0xfe57: return 0x0308; // dead_diaeresis + case 0x1efe: return 0x0309; // combining_hook + case 0xfe61: return 0x0309; // dead_hook + case 0xfe58: return 0x030a; // dead_abovering + case 0xfe59: return 0x030b; // dead_doubleacute + case 0xfe5a: return 0x030c; // dead_caron + case 0xfe62: return 0x031b; // dead_horn + case 0x1eff: return 0x0323; // combining_belowdot + case 0xfe60: return 0x0323; // dead_belowdot + case 0xfe5b: return 0x0327; // dead_cedilla + case 0xfe5c: return 0x0328; // dead_ogonek + case 0xfe5d: return 0x0345; // dead_iota + case 0x07ae: return 0x0385; // Greek_accentdieresis + case 0x07a1: return 0x0386; // Greek_ALPHAaccent + case 0x07a2: return 0x0388; // Greek_EPSILONaccent + case 0x07a3: return 0x0389; // Greek_ETAaccent + case 0x07a4: return 0x038a; // Greek_IOTAaccent + case 0x07a7: return 0x038c; // Greek_OMICRONaccent + case 0x07a8: return 0x038e; // Greek_UPSILONaccent + case 0x07ab: return 0x038f; // Greek_OMEGAaccent + case 0x07b6: return 0x0390; // Greek_iotaaccentdieresis + case 0x07c1: return 0x0391; // Greek_ALPHA + case 0x07c2: return 0x0392; // Greek_BETA + case 0x07c3: return 0x0393; // Greek_GAMMA + case 0x07c4: return 0x0394; // Greek_DELTA + case 0x07c5: return 0x0395; // Greek_EPSILON + case 0x07c6: return 0x0396; // Greek_ZETA + case 0x07c7: return 0x0397; // Greek_ETA + case 0x07c8: return 0x0398; // Greek_THETA + case 0x07c9: return 0x0399; // Greek_IOTA + case 0x07ca: return 0x039a; // Greek_KAPPA + case 0x07cb: return 0x039b; // Greek_LAMDA + case 0x07cc: return 0x039c; // Greek_MU + case 0x07cd: return 0x039d; // Greek_NU + case 0x07ce: return 0x039e; // Greek_XI + case 0x07cf: return 0x039f; // Greek_OMICRON + case 0x07d0: return 0x03a0; // Greek_PI + case 0x07d1: return 0x03a1; // Greek_RHO + case 0x07d2: return 0x03a3; // Greek_SIGMA + case 0x07d4: return 0x03a4; // Greek_TAU + case 0x07d5: return 0x03a5; // Greek_UPSILON + case 0x07d6: return 0x03a6; // Greek_PHI + case 0x07d7: return 0x03a7; // Greek_CHI + case 0x07d8: return 0x03a8; // Greek_PSI + case 0x07d9: return 0x03a9; // Greek_OMEGA + case 0x07a5: return 0x03aa; // Greek_IOTAdiaeresis + case 0x07a9: return 0x03ab; // Greek_UPSILONdieresis + case 0x07b1: return 0x03ac; // Greek_alphaaccent + case 0x07b2: return 0x03ad; // Greek_epsilonaccent + case 0x07b3: return 0x03ae; // Greek_etaaccent + case 0x07b4: return 0x03af; // Greek_iotaaccent + case 0x07ba: return 0x03b0; // Greek_upsilonaccentdieresis + case 0x07e1: return 0x03b1; // Greek_alpha + case 0x07e2: return 0x03b2; // Greek_beta + case 0x07e3: return 0x03b3; // Greek_gamma + case 0x07e4: return 0x03b4; // Greek_delta + case 0x07e5: return 0x03b5; // Greek_epsilon + case 0x07e6: return 0x03b6; // Greek_zeta + case 0x07e7: return 0x03b7; // Greek_eta + case 0x07e8: return 0x03b8; // Greek_theta + case 0x07e9: return 0x03b9; // Greek_iota + case 0x07ea: return 0x03ba; // Greek_kappa + case 0x07eb: return 0x03bb; // Greek_lambda + case 0x07ec: return 0x03bc; // Greek_mu + case 0x07ed: return 0x03bd; // Greek_nu + case 0x07ee: return 0x03be; // Greek_xi + case 0x07ef: return 0x03bf; // Greek_omicron + case 0x07f0: return 0x03c0; // Greek_pi + case 0x07f1: return 0x03c1; // Greek_rho + case 0x07f3: return 0x03c2; // Greek_finalsmallsigma + case 0x07f2: return 0x03c3; // Greek_sigma + case 0x07f4: return 0x03c4; // Greek_tau + case 0x07f5: return 0x03c5; // Greek_upsilon + case 0x07f6: return 0x03c6; // Greek_phi + case 0x07f7: return 0x03c7; // Greek_chi + case 0x07f8: return 0x03c8; // Greek_psi + case 0x07f9: return 0x03c9; // Greek_omega + case 0x07b5: return 0x03ca; // Greek_iotadieresis + case 0x07b9: return 0x03cb; // Greek_upsilondieresis + case 0x07b7: return 0x03cc; // Greek_omicronaccent + case 0x07b8: return 0x03cd; // Greek_upsilonaccent + case 0x07bb: return 0x03ce; // Greek_omegaaccent + case 0x06b3: return 0x0401; // Cyrillic_IO + case 0x06b1: return 0x0402; // Serbian_DJE + case 0x06b2: return 0x0403; // Macedonia_GJE + case 0x06b4: return 0x0404; // Ukrainian_IE + case 0x06b5: return 0x0405; // Macedonia_DSE + case 0x06b6: return 0x0406; // Ukrainian_I + case 0x06b7: return 0x0407; // Ukrainian_YI + case 0x06b8: return 0x0408; // Cyrillic_JE + case 0x06b9: return 0x0409; // Cyrillic_LJE + case 0x06ba: return 0x040a; // Cyrillic_NJE + case 0x06bb: return 0x040b; // Serbian_TSHE + case 0x06bc: return 0x040c; // Macedonia_KJE + case 0x06be: return 0x040e; // Byelorussian_SHORTU + case 0x06bf: return 0x040f; // Cyrillic_DZHE + case 0x06e1: return 0x0410; // Cyrillic_A + case 0x06e2: return 0x0411; // Cyrillic_BE + case 0x06f7: return 0x0412; // Cyrillic_VE + case 0x06e7: return 0x0413; // Cyrillic_GHE + case 0x06e4: return 0x0414; // Cyrillic_DE + case 0x06e5: return 0x0415; // Cyrillic_IE + case 0x06f6: return 0x0416; // Cyrillic_ZHE + case 0x06fa: return 0x0417; // Cyrillic_ZE + case 0x06e9: return 0x0418; // Cyrillic_I + case 0x06ea: return 0x0419; // Cyrillic_SHORTI + case 0x06eb: return 0x041a; // Cyrillic_KA + case 0x06ec: return 0x041b; // Cyrillic_EL + case 0x06ed: return 0x041c; // Cyrillic_EM + case 0x06ee: return 0x041d; // Cyrillic_EN + case 0x06ef: return 0x041e; // Cyrillic_O + case 0x06f0: return 0x041f; // Cyrillic_PE + case 0x06f2: return 0x0420; // Cyrillic_ER + case 0x06f3: return 0x0421; // Cyrillic_ES + case 0x06f4: return 0x0422; // Cyrillic_TE + case 0x06f5: return 0x0423; // Cyrillic_U + case 0x06e6: return 0x0424; // Cyrillic_EF + case 0x06e8: return 0x0425; // Cyrillic_HA + case 0x06e3: return 0x0426; // Cyrillic_TSE + case 0x06fe: return 0x0427; // Cyrillic_CHE + case 0x06fb: return 0x0428; // Cyrillic_SHA + case 0x06fd: return 0x0429; // Cyrillic_SHCHA + case 0x06ff: return 0x042a; // Cyrillic_HARDSIGN + case 0x06f9: return 0x042b; // Cyrillic_YERU + case 0x06f8: return 0x042c; // Cyrillic_SOFTSIGN + case 0x06fc: return 0x042d; // Cyrillic_E + case 0x06e0: return 0x042e; // Cyrillic_YU + case 0x06f1: return 0x042f; // Cyrillic_YA + case 0x06c1: return 0x0430; // Cyrillic_a + case 0x06c2: return 0x0431; // Cyrillic_be + case 0x06d7: return 0x0432; // Cyrillic_ve + case 0x06c7: return 0x0433; // Cyrillic_ghe + case 0x06c4: return 0x0434; // Cyrillic_de + case 0x06c5: return 0x0435; // Cyrillic_ie + case 0x06d6: return 0x0436; // Cyrillic_zhe + case 0x06da: return 0x0437; // Cyrillic_ze + case 0x06c9: return 0x0438; // Cyrillic_i + case 0x06ca: return 0x0439; // Cyrillic_shorti + case 0x06cb: return 0x043a; // Cyrillic_ka + case 0x06cc: return 0x043b; // Cyrillic_el + case 0x06cd: return 0x043c; // Cyrillic_em + case 0x06ce: return 0x043d; // Cyrillic_en + case 0x06cf: return 0x043e; // Cyrillic_o + case 0x06d0: return 0x043f; // Cyrillic_pe + case 0x06d2: return 0x0440; // Cyrillic_er + case 0x06d3: return 0x0441; // Cyrillic_es + case 0x06d4: return 0x0442; // Cyrillic_te + case 0x06d5: return 0x0443; // Cyrillic_u + case 0x06c6: return 0x0444; // Cyrillic_ef + case 0x06c8: return 0x0445; // Cyrillic_ha + case 0x06c3: return 0x0446; // Cyrillic_tse + case 0x06de: return 0x0447; // Cyrillic_che + case 0x06db: return 0x0448; // Cyrillic_sha + case 0x06dd: return 0x0449; // Cyrillic_shcha + case 0x06df: return 0x044a; // Cyrillic_hardsign + case 0x06d9: return 0x044b; // Cyrillic_yeru + case 0x06d8: return 0x044c; // Cyrillic_softsign + case 0x06dc: return 0x044d; // Cyrillic_e + case 0x06c0: return 0x044e; // Cyrillic_yu + case 0x06d1: return 0x044f; // Cyrillic_ya + case 0x06a3: return 0x0451; // Cyrillic_io + case 0x06a1: return 0x0452; // Serbian_dje + case 0x06a2: return 0x0453; // Macedonia_gje + case 0x06a4: return 0x0454; // Ukrainian_ie + case 0x06a5: return 0x0455; // Macedonia_dse + case 0x06a6: return 0x0456; // Ukrainian_i + case 0x06a7: return 0x0457; // Ukrainian_yi + case 0x06a8: return 0x0458; // Cyrillic_je + case 0x06a9: return 0x0459; // Cyrillic_lje + case 0x06aa: return 0x045a; // Cyrillic_nje + case 0x06ab: return 0x045b; // Serbian_tshe + case 0x06ac: return 0x045c; // Macedonia_kje + case 0x06ae: return 0x045e; // Byelorussian_shortu + case 0x06af: return 0x045f; // Cyrillic_dzhe + case 0x06bd: return 0x0490; // Ukrainian_GHE_WITH_UPTURN + case 0x06ad: return 0x0491; // Ukrainian_ghe_with_upturn + case 0x0680: return 0x0492; // Cyrillic_GHE_bar + case 0x0690: return 0x0493; // Cyrillic_ghe_bar + case 0x0681: return 0x0496; // Cyrillic_ZHE_descender + case 0x0691: return 0x0497; // Cyrillic_zhe_descender + case 0x0682: return 0x049a; // Cyrillic_KA_descender + case 0x0692: return 0x049b; // Cyrillic_ka_descender + case 0x0683: return 0x049c; // Cyrillic_KA_vertstroke + case 0x0693: return 0x049d; // Cyrillic_ka_vertstroke + case 0x0684: return 0x04a2; // Cyrillic_EN_descender + case 0x0694: return 0x04a3; // Cyrillic_en_descender + case 0x0685: return 0x04ae; // Cyrillic_U_straight + case 0x0695: return 0x04af; // Cyrillic_u_straight + case 0x0686: return 0x04b0; // Cyrillic_U_straight_bar + case 0x0696: return 0x04b1; // Cyrillic_u_straight_bar + case 0x0687: return 0x04b2; // Cyrillic_HA_descender + case 0x0697: return 0x04b3; // Cyrillic_ha_descender + case 0x0688: return 0x04b6; // Cyrillic_CHE_descender + case 0x0698: return 0x04b7; // Cyrillic_che_descender + case 0x0689: return 0x04b8; // Cyrillic_CHE_vertstroke + case 0x0699: return 0x04b9; // Cyrillic_che_vertstroke + case 0x068a: return 0x04ba; // Cyrillic_SHHA + case 0x069a: return 0x04bb; // Cyrillic_shha + case 0x068c: return 0x04d8; // Cyrillic_SCHWA + case 0x069c: return 0x04d9; // Cyrillic_schwa + case 0x068d: return 0x04e2; // Cyrillic_I_macron + case 0x069d: return 0x04e3; // Cyrillic_i_macron + case 0x068e: return 0x04e8; // Cyrillic_O_bar + case 0x069e: return 0x04e9; // Cyrillic_o_bar + case 0x068f: return 0x04ee; // Cyrillic_U_macron + case 0x069f: return 0x04ef; // Cyrillic_u_macron + case 0x14b2: return 0x0531; // Armenian_AYB + case 0x14b4: return 0x0532; // Armenian_BEN + case 0x14b6: return 0x0533; // Armenian_GIM + case 0x14b8: return 0x0534; // Armenian_DA + case 0x14ba: return 0x0535; // Armenian_YECH + case 0x14bc: return 0x0536; // Armenian_ZA + case 0x14be: return 0x0537; // Armenian_E + case 0x14c0: return 0x0538; // Armenian_AT + case 0x14c2: return 0x0539; // Armenian_TO + case 0x14c4: return 0x053a; // Armenian_ZHE + case 0x14c6: return 0x053b; // Armenian_INI + case 0x14c8: return 0x053c; // Armenian_LYUN + case 0x14ca: return 0x053d; // Armenian_KHE + case 0x14cc: return 0x053e; // Armenian_TSA + case 0x14ce: return 0x053f; // Armenian_KEN + case 0x14d0: return 0x0540; // Armenian_HO + case 0x14d2: return 0x0541; // Armenian_DZA + case 0x14d4: return 0x0542; // Armenian_GHAT + case 0x14d6: return 0x0543; // Armenian_TCHE + case 0x14d8: return 0x0544; // Armenian_MEN + case 0x14da: return 0x0545; // Armenian_HI + case 0x14dc: return 0x0546; // Armenian_NU + case 0x14de: return 0x0547; // Armenian_SHA + case 0x14e0: return 0x0548; // Armenian_VO + case 0x14e2: return 0x0549; // Armenian_CHA + case 0x14e4: return 0x054a; // Armenian_PE + case 0x14e6: return 0x054b; // Armenian_JE + case 0x14e8: return 0x054c; // Armenian_RA + case 0x14ea: return 0x054d; // Armenian_SE + case 0x14ec: return 0x054e; // Armenian_VEV + case 0x14ee: return 0x054f; // Armenian_TYUN + case 0x14f0: return 0x0550; // Armenian_RE + case 0x14f2: return 0x0551; // Armenian_TSO + case 0x14f4: return 0x0552; // Armenian_VYUN + case 0x14f6: return 0x0553; // Armenian_PYUR + case 0x14f8: return 0x0554; // Armenian_KE + case 0x14fa: return 0x0555; // Armenian_O + case 0x14fc: return 0x0556; // Armenian_FE + case 0x14fe: return 0x055a; // Armenian_apostrophe + case 0x14b0: return 0x055b; // Armenian_shesht + case 0x14af: return 0x055c; // Armenian_amanak + case 0x14aa: return 0x055d; // Armenian_but + case 0x14b1: return 0x055e; // Armenian_paruyk + case 0x14b3: return 0x0561; // Armenian_ayb + case 0x14b5: return 0x0562; // Armenian_ben + case 0x14b7: return 0x0563; // Armenian_gim + case 0x14b9: return 0x0564; // Armenian_da + case 0x14bb: return 0x0565; // Armenian_yech + case 0x14bd: return 0x0566; // Armenian_za + case 0x14bf: return 0x0567; // Armenian_e + case 0x14c1: return 0x0568; // Armenian_at + case 0x14c3: return 0x0569; // Armenian_to + case 0x14c5: return 0x056a; // Armenian_zhe + case 0x14c7: return 0x056b; // Armenian_ini + case 0x14c9: return 0x056c; // Armenian_lyun + case 0x14cb: return 0x056d; // Armenian_khe + case 0x14cd: return 0x056e; // Armenian_tsa + case 0x14cf: return 0x056f; // Armenian_ken + case 0x14d1: return 0x0570; // Armenian_ho + case 0x14d3: return 0x0571; // Armenian_dza + case 0x14d5: return 0x0572; // Armenian_ghat + case 0x14d7: return 0x0573; // Armenian_tche + case 0x14d9: return 0x0574; // Armenian_men + case 0x14db: return 0x0575; // Armenian_hi + case 0x14dd: return 0x0576; // Armenian_nu + case 0x14df: return 0x0577; // Armenian_sha + case 0x14e1: return 0x0578; // Armenian_vo + case 0x14e3: return 0x0579; // Armenian_cha + case 0x14e5: return 0x057a; // Armenian_pe + case 0x14e7: return 0x057b; // Armenian_je + case 0x14e9: return 0x057c; // Armenian_ra + case 0x14eb: return 0x057d; // Armenian_se + case 0x14ed: return 0x057e; // Armenian_vev + case 0x14ef: return 0x057f; // Armenian_tyun + case 0x14f1: return 0x0580; // Armenian_re + case 0x14f3: return 0x0581; // Armenian_tso + case 0x14f5: return 0x0582; // Armenian_vyun + case 0x14f7: return 0x0583; // Armenian_pyur + case 0x14f9: return 0x0584; // Armenian_ke + case 0x14fb: return 0x0585; // Armenian_o + case 0x14fd: return 0x0586; // Armenian_fe + case 0x14a2: return 0x0587; // Armenian_ligature_ew + case 0x14a3: return 0x0589; // Armenian_verjaket + case 0x14ad: return 0x058a; // Armenian_yentamna + case 0x0ce0: return 0x05d0; // hebrew_aleph + case 0x0ce1: return 0x05d1; // hebrew_beth + case 0x0ce2: return 0x05d2; // hebrew_gimmel + case 0x0ce3: return 0x05d3; // hebrew_daleth + case 0x0ce4: return 0x05d4; // hebrew_he + case 0x0ce5: return 0x05d5; // hebrew_waw + case 0x0ce6: return 0x05d6; // hebrew_zayin + case 0x0ce7: return 0x05d7; // hebrew_het + case 0x0ce8: return 0x05d8; // hebrew_teth + case 0x0ce9: return 0x05d9; // hebrew_yod + case 0x0cea: return 0x05da; // hebrew_finalkaph + case 0x0ceb: return 0x05db; // hebrew_kaph + case 0x0cec: return 0x05dc; // hebrew_lamed + case 0x0ced: return 0x05dd; // hebrew_finalmem + case 0x0cee: return 0x05de; // hebrew_mem + case 0x0cef: return 0x05df; // hebrew_finalnun + case 0x0cf0: return 0x05e0; // hebrew_nun + case 0x0cf1: return 0x05e1; // hebrew_samekh + case 0x0cf2: return 0x05e2; // hebrew_ayin + case 0x0cf3: return 0x05e3; // hebrew_finalpe + case 0x0cf4: return 0x05e4; // hebrew_pe + case 0x0cf5: return 0x05e5; // hebrew_finalzadi + case 0x0cf6: return 0x05e6; // hebrew_zadi + case 0x0cf7: return 0x05e7; // hebrew_qoph + case 0x0cf8: return 0x05e8; // hebrew_resh + case 0x0cf9: return 0x05e9; // hebrew_shin + case 0x0cfa: return 0x05ea; // hebrew_taw + case 0x05ac: return 0x060c; // Arabic_comma + case 0x05bb: return 0x061b; // Arabic_semicolon + case 0x05bf: return 0x061f; // Arabic_question_mark + case 0x05c1: return 0x0621; // Arabic_hamza + case 0x05c2: return 0x0622; // Arabic_maddaonalef + case 0x05c3: return 0x0623; // Arabic_hamzaonalef + case 0x05c4: return 0x0624; // Arabic_hamzaonwaw + case 0x05c5: return 0x0625; // Arabic_hamzaunderalef + case 0x05c6: return 0x0626; // Arabic_hamzaonyeh + case 0x05c7: return 0x0627; // Arabic_alef + case 0x05c8: return 0x0628; // Arabic_beh + case 0x05c9: return 0x0629; // Arabic_tehmarbuta + case 0x05ca: return 0x062a; // Arabic_teh + case 0x05cb: return 0x062b; // Arabic_theh + case 0x05cc: return 0x062c; // Arabic_jeem + case 0x05cd: return 0x062d; // Arabic_hah + case 0x05ce: return 0x062e; // Arabic_khah + case 0x05cf: return 0x062f; // Arabic_dal + case 0x05d0: return 0x0630; // Arabic_thal + case 0x05d1: return 0x0631; // Arabic_ra + case 0x05d2: return 0x0632; // Arabic_zain + case 0x05d3: return 0x0633; // Arabic_seen + case 0x05d4: return 0x0634; // Arabic_sheen + case 0x05d5: return 0x0635; // Arabic_sad + case 0x05d6: return 0x0636; // Arabic_dad + case 0x05d7: return 0x0637; // Arabic_tah + case 0x05d8: return 0x0638; // Arabic_zah + case 0x05d9: return 0x0639; // Arabic_ain + case 0x05da: return 0x063a; // Arabic_ghain + case 0x05e0: return 0x0640; // Arabic_tatweel + case 0x05e1: return 0x0641; // Arabic_feh + case 0x05e2: return 0x0642; // Arabic_qaf + case 0x05e3: return 0x0643; // Arabic_kaf + case 0x05e4: return 0x0644; // Arabic_lam + case 0x05e5: return 0x0645; // Arabic_meem + case 0x05e6: return 0x0646; // Arabic_noon + case 0x05e7: return 0x0647; // Arabic_ha + case 0x05e8: return 0x0648; // Arabic_waw + case 0x05e9: return 0x0649; // Arabic_alefmaksura + case 0x05ea: return 0x064a; // Arabic_yeh + case 0x05eb: return 0x064b; // Arabic_fathatan + case 0x05ec: return 0x064c; // Arabic_dammatan + case 0x05ed: return 0x064d; // Arabic_kasratan + case 0x05ee: return 0x064e; // Arabic_fatha + case 0x05ef: return 0x064f; // Arabic_damma + case 0x05f0: return 0x0650; // Arabic_kasra + case 0x05f1: return 0x0651; // Arabic_shadda + case 0x05f2: return 0x0652; // Arabic_sukun + case 0x05f3: return 0x0653; // Arabic_madda_above + case 0x05f4: return 0x0654; // Arabic_hamza_above + case 0x05f5: return 0x0655; // Arabic_hamza_below + case 0x05b0: return 0x0660; // Arabic_0 + case 0x05b1: return 0x0661; // Arabic_1 + case 0x05b2: return 0x0662; // Arabic_2 + case 0x05b3: return 0x0663; // Arabic_3 + case 0x05b4: return 0x0664; // Arabic_4 + case 0x05b5: return 0x0665; // Arabic_5 + case 0x05b6: return 0x0666; // Arabic_6 + case 0x05b7: return 0x0667; // Arabic_7 + case 0x05b8: return 0x0668; // Arabic_8 + case 0x05b9: return 0x0669; // Arabic_9 + case 0x05a5: return 0x066a; // Arabic_percent + case 0x05a6: return 0x0670; // Arabic_superscript_alef + case 0x05a7: return 0x0679; // Arabic_tteh + case 0x05a8: return 0x067e; // Arabic_peh + case 0x05a9: return 0x0686; // Arabic_tcheh + case 0x05aa: return 0x0688; // Arabic_ddal + case 0x05ab: return 0x0691; // Arabic_rreh + case 0x05f6: return 0x0698; // Arabic_jeh + case 0x05f7: return 0x06a4; // Arabic_veh + case 0x05f8: return 0x06a9; // Arabic_keheh + case 0x05f9: return 0x06af; // Arabic_gaf + case 0x05fa: return 0x06ba; // Arabic_noon_ghunna + case 0x05fb: return 0x06be; // Arabic_heh_doachashmee + case 0x05fe: return 0x06c1; // Arabic_heh_goal + case 0x05fc: return 0x06cc; // Farsi_yeh + case 0x05fd: return 0x06d2; // Arabic_yeh_baree + case 0x05ae: return 0x06d4; // Arabic_fullstop + case 0x0590: return 0x06f0; // Farsi_0 + case 0x0591: return 0x06f1; // Farsi_1 + case 0x0592: return 0x06f2; // Farsi_2 + case 0x0593: return 0x06f3; // Farsi_3 + case 0x0594: return 0x06f4; // Farsi_4 + case 0x0595: return 0x06f5; // Farsi_5 + case 0x0596: return 0x06f6; // Farsi_6 + case 0x0597: return 0x06f7; // Farsi_7 + case 0x0598: return 0x06f8; // Farsi_8 + case 0x0599: return 0x06f9; // Farsi_9 + case 0x0da1: return 0x0e01; // Thai_kokai + case 0x0da2: return 0x0e02; // Thai_khokhai + case 0x0da3: return 0x0e03; // Thai_khokhuat + case 0x0da4: return 0x0e04; // Thai_khokhwai + case 0x0da5: return 0x0e05; // Thai_khokhon + case 0x0da6: return 0x0e06; // Thai_khorakhang + case 0x0da7: return 0x0e07; // Thai_ngongu + case 0x0da8: return 0x0e08; // Thai_chochan + case 0x0da9: return 0x0e09; // Thai_choching + case 0x0daa: return 0x0e0a; // Thai_chochang + case 0x0dab: return 0x0e0b; // Thai_soso + case 0x0dac: return 0x0e0c; // Thai_chochoe + case 0x0dad: return 0x0e0d; // Thai_yoying + case 0x0dae: return 0x0e0e; // Thai_dochada + case 0x0daf: return 0x0e0f; // Thai_topatak + case 0x0db0: return 0x0e10; // Thai_thothan + case 0x0db1: return 0x0e11; // Thai_thonangmontho + case 0x0db2: return 0x0e12; // Thai_thophuthao + case 0x0db3: return 0x0e13; // Thai_nonen + case 0x0db4: return 0x0e14; // Thai_dodek + case 0x0db5: return 0x0e15; // Thai_totao + case 0x0db6: return 0x0e16; // Thai_thothung + case 0x0db7: return 0x0e17; // Thai_thothahan + case 0x0db8: return 0x0e18; // Thai_thothong + case 0x0db9: return 0x0e19; // Thai_nonu + case 0x0dba: return 0x0e1a; // Thai_bobaimai + case 0x0dbb: return 0x0e1b; // Thai_popla + case 0x0dbc: return 0x0e1c; // Thai_phophung + case 0x0dbd: return 0x0e1d; // Thai_fofa + case 0x0dbe: return 0x0e1e; // Thai_phophan + case 0x0dbf: return 0x0e1f; // Thai_fofan + case 0x0dc0: return 0x0e20; // Thai_phosamphao + case 0x0dc1: return 0x0e21; // Thai_moma + case 0x0dc2: return 0x0e22; // Thai_yoyak + case 0x0dc3: return 0x0e23; // Thai_rorua + case 0x0dc4: return 0x0e24; // Thai_ru + case 0x0dc5: return 0x0e25; // Thai_loling + case 0x0dc6: return 0x0e26; // Thai_lu + case 0x0dc7: return 0x0e27; // Thai_wowaen + case 0x0dc8: return 0x0e28; // Thai_sosala + case 0x0dc9: return 0x0e29; // Thai_sorusi + case 0x0dca: return 0x0e2a; // Thai_sosua + case 0x0dcb: return 0x0e2b; // Thai_hohip + case 0x0dcc: return 0x0e2c; // Thai_lochula + case 0x0dcd: return 0x0e2d; // Thai_oang + case 0x0dce: return 0x0e2e; // Thai_honokhuk + case 0x0dcf: return 0x0e2f; // Thai_paiyannoi + case 0x0dd0: return 0x0e30; // Thai_saraa + case 0x0dd1: return 0x0e31; // Thai_maihanakat + case 0x0dd2: return 0x0e32; // Thai_saraaa + case 0x0dd3: return 0x0e33; // Thai_saraam + case 0x0dd4: return 0x0e34; // Thai_sarai + case 0x0dd5: return 0x0e35; // Thai_saraii + case 0x0dd6: return 0x0e36; // Thai_saraue + case 0x0dd7: return 0x0e37; // Thai_sarauee + case 0x0dd8: return 0x0e38; // Thai_sarau + case 0x0dd9: return 0x0e39; // Thai_sarauu + case 0x0dda: return 0x0e3a; // Thai_phinthu + case 0x0ddf: return 0x0e3f; // Thai_baht + case 0x0de0: return 0x0e40; // Thai_sarae + case 0x0de1: return 0x0e41; // Thai_saraae + case 0x0de2: return 0x0e42; // Thai_sarao + case 0x0de3: return 0x0e43; // Thai_saraaimaimuan + case 0x0de4: return 0x0e44; // Thai_saraaimaimalai + case 0x0de5: return 0x0e45; // Thai_lakkhangyao + case 0x0de6: return 0x0e46; // Thai_maiyamok + case 0x0de7: return 0x0e47; // Thai_maitaikhu + case 0x0de8: return 0x0e48; // Thai_maiek + case 0x0de9: return 0x0e49; // Thai_maitho + case 0x0dea: return 0x0e4a; // Thai_maitri + case 0x0deb: return 0x0e4b; // Thai_maichattawa + case 0x0dec: return 0x0e4c; // Thai_thanthakhat + case 0x0ded: return 0x0e4d; // Thai_nikhahit + case 0x0df0: return 0x0e50; // Thai_leksun + case 0x0df1: return 0x0e51; // Thai_leknung + case 0x0df2: return 0x0e52; // Thai_leksong + case 0x0df3: return 0x0e53; // Thai_leksam + case 0x0df4: return 0x0e54; // Thai_leksi + case 0x0df5: return 0x0e55; // Thai_lekha + case 0x0df6: return 0x0e56; // Thai_lekhok + case 0x0df7: return 0x0e57; // Thai_lekchet + case 0x0df8: return 0x0e58; // Thai_lekpaet + case 0x0df9: return 0x0e59; // Thai_lekkao + case 0x15d0: return 0x10d0; // Georgian_an + case 0x15d1: return 0x10d1; // Georgian_ban + case 0x15d2: return 0x10d2; // Georgian_gan + case 0x15d3: return 0x10d3; // Georgian_don + case 0x15d4: return 0x10d4; // Georgian_en + case 0x15d5: return 0x10d5; // Georgian_vin + case 0x15d6: return 0x10d6; // Georgian_zen + case 0x15d7: return 0x10d7; // Georgian_tan + case 0x15d8: return 0x10d8; // Georgian_in + case 0x15d9: return 0x10d9; // Georgian_kan + case 0x15da: return 0x10da; // Georgian_las + case 0x15db: return 0x10db; // Georgian_man + case 0x15dc: return 0x10dc; // Georgian_nar + case 0x15dd: return 0x10dd; // Georgian_on + case 0x15de: return 0x10de; // Georgian_par + case 0x15df: return 0x10df; // Georgian_zhar + case 0x15e0: return 0x10e0; // Georgian_rae + case 0x15e1: return 0x10e1; // Georgian_san + case 0x15e2: return 0x10e2; // Georgian_tar + case 0x15e3: return 0x10e3; // Georgian_un + case 0x15e4: return 0x10e4; // Georgian_phar + case 0x15e5: return 0x10e5; // Georgian_khar + case 0x15e6: return 0x10e6; // Georgian_ghan + case 0x15e7: return 0x10e7; // Georgian_qar + case 0x15e8: return 0x10e8; // Georgian_shin + case 0x15e9: return 0x10e9; // Georgian_chin + case 0x15ea: return 0x10ea; // Georgian_can + case 0x15eb: return 0x10eb; // Georgian_jil + case 0x15ec: return 0x10ec; // Georgian_cil + case 0x15ed: return 0x10ed; // Georgian_char + case 0x15ee: return 0x10ee; // Georgian_xan + case 0x15ef: return 0x10ef; // Georgian_jhan + case 0x15f0: return 0x10f0; // Georgian_hae + case 0x15f1: return 0x10f1; // Georgian_he + case 0x15f2: return 0x10f2; // Georgian_hie + case 0x15f3: return 0x10f3; // Georgian_we + case 0x15f4: return 0x10f4; // Georgian_har + case 0x15f5: return 0x10f5; // Georgian_hoe + case 0x15f6: return 0x10f6; // Georgian_fi + case 0x0ed4: return 0x11a8; // Hangul_J_Kiyeog + case 0x0ed5: return 0x11a9; // Hangul_J_SsangKiyeog + case 0x0ed6: return 0x11aa; // Hangul_J_KiyeogSios + case 0x0ed7: return 0x11ab; // Hangul_J_Nieun + case 0x0ed8: return 0x11ac; // Hangul_J_NieunJieuj + case 0x0ed9: return 0x11ad; // Hangul_J_NieunHieuh + case 0x0eda: return 0x11ae; // Hangul_J_Dikeud + case 0x0edb: return 0x11af; // Hangul_J_Rieul + case 0x0edc: return 0x11b0; // Hangul_J_RieulKiyeog + case 0x0edd: return 0x11b1; // Hangul_J_RieulMieum + case 0x0ede: return 0x11b2; // Hangul_J_RieulPieub + case 0x0edf: return 0x11b3; // Hangul_J_RieulSios + case 0x0ee0: return 0x11b4; // Hangul_J_RieulTieut + case 0x0ee1: return 0x11b5; // Hangul_J_RieulPhieuf + case 0x0ee2: return 0x11b6; // Hangul_J_RieulHieuh + case 0x0ee3: return 0x11b7; // Hangul_J_Mieum + case 0x0ee4: return 0x11b8; // Hangul_J_Pieub + case 0x0ee5: return 0x11b9; // Hangul_J_PieubSios + case 0x0ee6: return 0x11ba; // Hangul_J_Sios + case 0x0ee7: return 0x11bb; // Hangul_J_SsangSios + case 0x0ee8: return 0x11bc; // Hangul_J_Ieung + case 0x0ee9: return 0x11bd; // Hangul_J_Jieuj + case 0x0eea: return 0x11be; // Hangul_J_Cieuc + case 0x0eeb: return 0x11bf; // Hangul_J_Khieuq + case 0x0eec: return 0x11c0; // Hangul_J_Tieut + case 0x0eed: return 0x11c1; // Hangul_J_Phieuf + case 0x0eee: return 0x11c2; // Hangul_J_Hieuh + case 0x0ef8: return 0x11eb; // Hangul_J_PanSios + case 0x0ef9: return 0x11f0; // Hangul_J_KkogjiDalrinIeung + case 0x0efa: return 0x11f9; // Hangul_J_YeorinHieuh + case 0x12a1: return 0x1e02; // Babovedot + case 0x12a2: return 0x1e03; // babovedot + case 0x12a6: return 0x1e0a; // Dabovedot + case 0x12ab: return 0x1e0b; // dabovedot + case 0x12b0: return 0x1e1e; // Fabovedot + case 0x12b1: return 0x1e1f; // fabovedot + case 0x16d1: return 0x1e36; // Lbelowdot + case 0x16e1: return 0x1e37; // lbelowdot + case 0x12b4: return 0x1e40; // Mabovedot + case 0x12b5: return 0x1e41; // mabovedot + case 0x12b7: return 0x1e56; // Pabovedot + case 0x12b9: return 0x1e57; // pabovedot + case 0x12bb: return 0x1e60; // Sabovedot + case 0x12bf: return 0x1e61; // sabovedot + case 0x12d7: return 0x1e6a; // Tabovedot + case 0x12f7: return 0x1e6b; // tabovedot + case 0x12a8: return 0x1e80; // Wgrave + case 0x12b8: return 0x1e81; // wgrave + case 0x12aa: return 0x1e82; // Wacute + case 0x12ba: return 0x1e83; // wacute + case 0x12bd: return 0x1e84; // Wdiaeresis + case 0x12be: return 0x1e85; // wdiaeresis + case 0x16a3: return 0x1e8a; // Xabovedot + case 0x16b3: return 0x1e8b; // xabovedot + case 0x1ea0: return 0x1ea0; // Abelowdot + case 0x1ea1: return 0x1ea1; // abelowdot + case 0x1ea2: return 0x1ea2; // Ahook + case 0x1ea3: return 0x1ea3; // ahook + case 0x1ea4: return 0x1ea4; // Acircumflexacute + case 0x1ea5: return 0x1ea5; // acircumflexacute + case 0x1ea6: return 0x1ea6; // Acircumflexgrave + case 0x1ea7: return 0x1ea7; // acircumflexgrave + case 0x1ea8: return 0x1ea8; // Acircumflexhook + case 0x1ea9: return 0x1ea9; // acircumflexhook + case 0x1eaa: return 0x1eaa; // Acircumflextilde + case 0x1eab: return 0x1eab; // acircumflextilde + case 0x1eac: return 0x1eac; // Acircumflexbelowdot + case 0x1ead: return 0x1ead; // acircumflexbelowdot + case 0x1eae: return 0x1eae; // Abreveacute + case 0x1eaf: return 0x1eaf; // abreveacute + case 0x1eb0: return 0x1eb0; // Abrevegrave + case 0x1eb1: return 0x1eb1; // abrevegrave + case 0x1eb2: return 0x1eb2; // Abrevehook + case 0x1eb3: return 0x1eb3; // abrevehook + case 0x1eb4: return 0x1eb4; // Abrevetilde + case 0x1eb5: return 0x1eb5; // abrevetilde + case 0x1eb6: return 0x1eb6; // Abrevebelowdot + case 0x1eb7: return 0x1eb7; // abrevebelowdot + case 0x1eb8: return 0x1eb8; // Ebelowdot + case 0x1eb9: return 0x1eb9; // ebelowdot + case 0x1eba: return 0x1eba; // Ehook + case 0x1ebb: return 0x1ebb; // ehook + case 0x1ebc: return 0x1ebc; // Etilde + case 0x1ebd: return 0x1ebd; // etilde + case 0x1ebe: return 0x1ebe; // Ecircumflexacute + case 0x1ebf: return 0x1ebf; // ecircumflexacute + case 0x1ec0: return 0x1ec0; // Ecircumflexgrave + case 0x1ec1: return 0x1ec1; // ecircumflexgrave + case 0x1ec2: return 0x1ec2; // Ecircumflexhook + case 0x1ec3: return 0x1ec3; // ecircumflexhook + case 0x1ec4: return 0x1ec4; // Ecircumflextilde + case 0x1ec5: return 0x1ec5; // ecircumflextilde + case 0x1ec6: return 0x1ec6; // Ecircumflexbelowdot + case 0x1ec7: return 0x1ec7; // ecircumflexbelowdot + case 0x1ec8: return 0x1ec8; // Ihook + case 0x1ec9: return 0x1ec9; // ihook + case 0x1eca: return 0x1eca; // Ibelowdot + case 0x1ecb: return 0x1ecb; // ibelowdot + case 0x1ecc: return 0x1ecc; // Obelowdot + case 0x1ecd: return 0x1ecd; // obelowdot + case 0x1ece: return 0x1ece; // Ohook + case 0x1ecf: return 0x1ecf; // ohook + case 0x1ed0: return 0x1ed0; // Ocircumflexacute + case 0x1ed1: return 0x1ed1; // ocircumflexacute + case 0x1ed2: return 0x1ed2; // Ocircumflexgrave + case 0x1ed3: return 0x1ed3; // ocircumflexgrave + case 0x1ed4: return 0x1ed4; // Ocircumflexhook + case 0x1ed5: return 0x1ed5; // ocircumflexhook + case 0x1ed6: return 0x1ed6; // Ocircumflextilde + case 0x1ed7: return 0x1ed7; // ocircumflextilde + case 0x1ed8: return 0x1ed8; // Ocircumflexbelowdot + case 0x1ed9: return 0x1ed9; // ocircumflexbelowdot + case 0x1eda: return 0x1eda; // Ohornacute + case 0x1edb: return 0x1edb; // ohornacute + case 0x1edc: return 0x1edc; // Ohorngrave + case 0x1edd: return 0x1edd; // ohorngrave + case 0x1ede: return 0x1ede; // Ohornhook + case 0x1edf: return 0x1edf; // ohornhook + case 0x1ee0: return 0x1ee0; // Ohorntilde + case 0x1ee1: return 0x1ee1; // ohorntilde + case 0x1ee2: return 0x1ee2; // Ohornbelowdot + case 0x1ee3: return 0x1ee3; // ohornbelowdot + case 0x1ee4: return 0x1ee4; // Ubelowdot + case 0x1ee5: return 0x1ee5; // ubelowdot + case 0x1ee6: return 0x1ee6; // Uhook + case 0x1ee7: return 0x1ee7; // uhook + case 0x1ee8: return 0x1ee8; // Uhornacute + case 0x1ee9: return 0x1ee9; // uhornacute + case 0x1eea: return 0x1eea; // Uhorngrave + case 0x1eeb: return 0x1eeb; // uhorngrave + case 0x1eec: return 0x1eec; // Uhornhook + case 0x1eed: return 0x1eed; // uhornhook + case 0x1eee: return 0x1eee; // Uhorntilde + case 0x1eef: return 0x1eef; // uhorntilde + case 0x1ef0: return 0x1ef0; // Uhornbelowdot + case 0x1ef1: return 0x1ef1; // uhornbelowdot + case 0x12ac: return 0x1ef2; // Ygrave + case 0x12bc: return 0x1ef3; // ygrave + case 0x1ef4: return 0x1ef4; // Ybelowdot + case 0x1ef5: return 0x1ef5; // ybelowdot + case 0x1ef6: return 0x1ef6; // Yhook + case 0x1ef7: return 0x1ef7; // yhook + case 0x1ef8: return 0x1ef8; // Ytilde + case 0x1ef9: return 0x1ef9; // ytilde + case 0x0aa2: return 0x2002; // enspace + case 0x0aa1: return 0x2003; // emspace + case 0x0aa3: return 0x2004; // em3space + case 0x0aa4: return 0x2005; // em4space + case 0x0aa5: return 0x2007; // digitspace + case 0x0aa6: return 0x2008; // punctspace + case 0x0aa7: return 0x2009; // thinspace + case 0x0aa8: return 0x200a; // hairspace + case 0x0abb: return 0x2012; // figdash + case 0x14ac: return 0x2013; // Armenian_en_dash + case 0x0aaa: return 0x2013; // endash + case 0x14a8: return 0x2014; // Armenian_em_dash + case 0x0aa9: return 0x2014; // emdash + case 0x07af: return 0x2015; // Greek_horizbar + case 0x0cdf: return 0x2017; // hebrew_doublelowline + case 0x0ad0: return 0x2018; // leftsinglequotemark + case 0x0ad1: return 0x2019; // rightsinglequotemark + case 0x0afd: return 0x201a; // singlelowquotemark + case 0x0ad2: return 0x201c; // leftdoublequotemark + case 0x0ad3: return 0x201d; // rightdoublequotemark + case 0x0afe: return 0x201e; // doublelowquotemark + case 0x0af1: return 0x2020; // dagger + case 0x0af2: return 0x2021; // doubledagger + case 0x0ae6: return 0x2022; // enfilledcircbullet + case 0x0aaf: return 0x2025; // doubbaselinedot + case 0x14ae: return 0x2026; // Armenian_ellipsis + case 0x0aae: return 0x2026; // ellipsis + case 0x0ad6: return 0x2032; // minutes + case 0x0ad7: return 0x2033; // seconds + case 0x0afc: return 0x2038; // caret + case 0x047e: return 0x203e; // overline + case 0x20a0: return 0x20a0; // EcuSign + case 0x20a1: return 0x20a1; // ColonSign + case 0x20a2: return 0x20a2; // CruzeiroSign + case 0x20a3: return 0x20a3; // FFrancSign + case 0x20a4: return 0x20a4; // LiraSign + case 0x20a5: return 0x20a5; // MillSign + case 0x20a6: return 0x20a6; // NairaSign + case 0x20a7: return 0x20a7; // PesetaSign + case 0x20a8: return 0x20a8; // RupeeSign + case 0x0eff: return 0x20a9; // Korean_Won + case 0x20a9: return 0x20a9; // WonSign + case 0x20aa: return 0x20aa; // NewSheqelSign + case 0x20ab: return 0x20ab; // DongSign + case 0x20ac: return 0x20ac; // EuroSign + case 0x0ab8: return 0x2105; // careof + case 0x06b0: return 0x2116; // numerosign + case 0x0afb: return 0x2117; // phonographcopyright + case 0x0ad4: return 0x211e; // prescription + case 0x0ac9: return 0x2122; // trademark + case 0x0ab0: return 0x2153; // onethird + case 0x0ab1: return 0x2154; // twothirds + case 0x0ab2: return 0x2155; // onefifth + case 0x0ab3: return 0x2156; // twofifths + case 0x0ab4: return 0x2157; // threefifths + case 0x0ab5: return 0x2158; // fourfifths + case 0x0ab6: return 0x2159; // onesixth + case 0x0ab7: return 0x215a; // fivesixths + case 0x0ac3: return 0x215b; // oneeighth + case 0x0ac4: return 0x215c; // threeeighths + case 0x0ac5: return 0x215d; // fiveeighths + case 0x0ac6: return 0x215e; // seveneighths + case 0x08fb: return 0x2190; // leftarrow + case 0x08fc: return 0x2191; // uparrow + case 0x08fd: return 0x2192; // rightarrow + case 0x08fe: return 0x2193; // downarrow + case 0x08ce: return 0x21d2; // implies + case 0x08cd: return 0x21d4; // ifonlyif + case 0x08ef: return 0x2202; // partialderivative + case 0x08c5: return 0x2207; // nabla + case 0x0bca: return 0x2218; // jot + case 0x08d6: return 0x221a; // radical + case 0x08c1: return 0x221d; // variation + case 0x08c2: return 0x221e; // infinity + case 0x08de: return 0x2227; // logicaland + case 0x0ba9: return 0x2227; // upcaret + case 0x0ba8: return 0x2228; // downcaret + case 0x08df: return 0x2228; // logicalor + case 0x08dc: return 0x2229; // intersection + case 0x0bc3: return 0x2229; // upshoe + case 0x0bd6: return 0x222a; // downshoe + case 0x08dd: return 0x222a; // union + case 0x08bf: return 0x222b; // integral + case 0x08c0: return 0x2234; // therefore + case 0x08c8: return 0x223c; // approximate + case 0x08c9: return 0x2243; // similarequal + case 0x08bd: return 0x2260; // notequal + case 0x08cf: return 0x2261; // identical + case 0x08bc: return 0x2264; // lessthanequal + case 0x08be: return 0x2265; // greaterthanequal + case 0x08da: return 0x2282; // includedin + case 0x0bda: return 0x2282; // leftshoe + case 0x08db: return 0x2283; // includes + case 0x0bd8: return 0x2283; // rightshoe + case 0x0bdc: return 0x22a2; // lefttack + case 0x0bfc: return 0x22a3; // righttack + case 0x0bce: return 0x22a4; // uptack + case 0x0bc2: return 0x22a5; // downtack + case 0x0bd3: return 0x2308; // upstile + case 0x0bc4: return 0x230a; // downstile + case 0x0afa: return 0x2315; // telephonerecorder + case 0x08a4: return 0x2320; // topintegral + case 0x08a5: return 0x2321; // botintegral + case 0x0bcc: return 0x2395; // quad + case 0x08ab: return 0x239b; // topleftparens + case 0x08ac: return 0x239d; // botleftparens + case 0x08ad: return 0x239e; // toprightparens + case 0x08ae: return 0x23a0; // botrightparens + case 0x08a7: return 0x23a1; // topleftsqbracket + case 0x08a8: return 0x23a3; // botleftsqbracket + case 0x08a9: return 0x23a4; // toprightsqbracket + case 0x08aa: return 0x23a6; // botrightsqbracket + case 0x08af: return 0x23a8; // leftmiddlecurlybrace + case 0x08b0: return 0x23ac; // rightmiddlecurlybrace + case 0x08a1: return 0x23b7; // leftradical + case 0x09ef: return 0x23ba; // horizlinescan1 + case 0x09f0: return 0x23bb; // horizlinescan3 + case 0x09f2: return 0x23bc; // horizlinescan7 + case 0x09f3: return 0x23bd; // horizlinescan9 + case 0x09e2: return 0x2409; // ht + case 0x09e5: return 0x240a; // lf + case 0x09e9: return 0x240b; // vt + case 0x09e3: return 0x240c; // ff + case 0x09e4: return 0x240d; // cr + case 0x0aac: return 0x2423; // signifblank + case 0x09e8: return 0x2424; // nl + case 0x08a3: return 0x2500; // horizconnector + case 0x09f1: return 0x2500; // horizlinescan5 + case 0x09f8: return 0x2502; // vertbar + case 0x08a6: return 0x2502; // vertconnector + case 0x08a2: return 0x250c; // topleftradical + case 0x09ec: return 0x250c; // upleftcorner + case 0x09eb: return 0x2510; // uprightcorner + case 0x09ed: return 0x2514; // lowleftcorner + case 0x09ea: return 0x2518; // lowrightcorner + case 0x09f4: return 0x251c; // leftt + case 0x09f5: return 0x2524; // rightt + case 0x09f7: return 0x252c; // topt + case 0x09f6: return 0x2534; // bott + case 0x09ee: return 0x253c; // crossinglines + case 0x09e1: return 0x2592; // checkerboard + case 0x0ae7: return 0x25aa; // enfilledsqbullet + case 0x0ae1: return 0x25ab; // enopensquarebullet + case 0x0adb: return 0x25ac; // filledrectbullet + case 0x0ae2: return 0x25ad; // openrectbullet + case 0x0adf: return 0x25ae; // emfilledrect + case 0x0acf: return 0x25af; // emopenrectangle + case 0x0ae8: return 0x25b2; // filledtribulletup + case 0x0ae3: return 0x25b3; // opentribulletup + case 0x0add: return 0x25b6; // filledrighttribullet + case 0x0acd: return 0x25b7; // rightopentriangle + case 0x0ae9: return 0x25bc; // filledtribulletdown + case 0x0ae4: return 0x25bd; // opentribulletdown + case 0x0adc: return 0x25c0; // filledlefttribullet + case 0x0acc: return 0x25c1; // leftopentriangle + case 0x09e0: return 0x25c6; // soliddiamond + case 0x0bcf: return 0x25cb; // circle + case 0x0ace: return 0x25cb; // emopencircle + case 0x0ade: return 0x25cf; // emfilledcircle + case 0x0ae0: return 0x25e6; // enopencircbullet + case 0x0ae5: return 0x2606; // openstar + case 0x0af9: return 0x260e; // telephone + case 0x0aca: return 0x2613; // signaturemark + case 0x0aea: return 0x261c; // leftpointer + case 0x0aeb: return 0x261e; // rightpointer + case 0x0af8: return 0x2640; // femalesymbol + case 0x0af7: return 0x2642; // malesymbol + case 0x0aec: return 0x2663; // club + case 0x0aee: return 0x2665; // heart + case 0x0aed: return 0x2666; // diamond + case 0x0af6: return 0x266d; // musicalflat + case 0x0af5: return 0x266f; // musicalsharp + case 0x0af3: return 0x2713; // checkmark + case 0x0af4: return 0x2717; // ballotcross + case 0x0ad9: return 0x271d; // latincross + case 0x0af0: return 0x2720; // maltesecross + case 0x0abc: return 0x27e8; // leftanglebracket + case 0x0abe: return 0x27e9; // rightanglebracket + case 0x04a4: return 0x3001; // kana_comma + case 0x04a1: return 0x3002; // kana_fullstop + case 0x04a2: return 0x300c; // kana_openingbracket + case 0x04a3: return 0x300d; // kana_closingbracket + case 0xfe5e: return 0x3099; // dead_voiced_sound + case 0xfe5f: return 0x309a; // dead_semivoiced_sound + case 0x04de: return 0x309b; // voicedsound + case 0x04df: return 0x309c; // semivoicedsound + case 0x04a7: return 0x30a1; // kana_a + case 0x04b1: return 0x30a2; // kana_A + case 0x04a8: return 0x30a3; // kana_i + case 0x04b2: return 0x30a4; // kana_I + case 0x04a9: return 0x30a5; // kana_u + case 0x04b3: return 0x30a6; // kana_U + case 0x04aa: return 0x30a7; // kana_e + case 0x04b4: return 0x30a8; // kana_E + case 0x04ab: return 0x30a9; // kana_o + case 0x04b5: return 0x30aa; // kana_O + case 0x04b6: return 0x30ab; // kana_KA + case 0x04b7: return 0x30ad; // kana_KI + case 0x04b8: return 0x30af; // kana_KU + case 0x04b9: return 0x30b1; // kana_KE + case 0x04ba: return 0x30b3; // kana_KO + case 0x04bb: return 0x30b5; // kana_SA + case 0x04bc: return 0x30b7; // kana_SHI + case 0x04bd: return 0x30b9; // kana_SU + case 0x04be: return 0x30bb; // kana_SE + case 0x04bf: return 0x30bd; // kana_SO + case 0x04c0: return 0x30bf; // kana_TA + case 0x04c1: return 0x30c1; // kana_CHI + case 0x04af: return 0x30c3; // kana_tsu + case 0x04c2: return 0x30c4; // kana_TSU + case 0x04c3: return 0x30c6; // kana_TE + case 0x04c4: return 0x30c8; // kana_TO + case 0x04c5: return 0x30ca; // kana_NA + case 0x04c6: return 0x30cb; // kana_NI + case 0x04c7: return 0x30cc; // kana_NU + case 0x04c8: return 0x30cd; // kana_NE + case 0x04c9: return 0x30ce; // kana_NO + case 0x04ca: return 0x30cf; // kana_HA + case 0x04cb: return 0x30d2; // kana_HI + case 0x04cc: return 0x30d5; // kana_FU + case 0x04cd: return 0x30d8; // kana_HE + case 0x04ce: return 0x30db; // kana_HO + case 0x04cf: return 0x30de; // kana_MA + case 0x04d0: return 0x30df; // kana_MI + case 0x04d1: return 0x30e0; // kana_MU + case 0x04d2: return 0x30e1; // kana_ME + case 0x04d3: return 0x30e2; // kana_MO + case 0x04ac: return 0x30e3; // kana_ya + case 0x04d4: return 0x30e4; // kana_YA + case 0x04ad: return 0x30e5; // kana_yu + case 0x04d5: return 0x30e6; // kana_YU + case 0x04ae: return 0x30e7; // kana_yo + case 0x04d6: return 0x30e8; // kana_YO + case 0x04d7: return 0x30e9; // kana_RA + case 0x04d8: return 0x30ea; // kana_RI + case 0x04d9: return 0x30eb; // kana_RU + case 0x04da: return 0x30ec; // kana_RE + case 0x04db: return 0x30ed; // kana_RO + case 0x04dc: return 0x30ef; // kana_WA + case 0x04a6: return 0x30f2; // kana_WO + case 0x04dd: return 0x30f3; // kana_N + case 0x04a5: return 0x30fb; // kana_conjunctive + case 0x04b0: return 0x30fc; // prolongedsound + case 0x0ea1: return 0x3131; // Hangul_Kiyeog + case 0x0ea2: return 0x3132; // Hangul_SsangKiyeog + case 0x0ea3: return 0x3133; // Hangul_KiyeogSios + case 0x0ea4: return 0x3134; // Hangul_Nieun + case 0x0ea5: return 0x3135; // Hangul_NieunJieuj + case 0x0ea6: return 0x3136; // Hangul_NieunHieuh + case 0x0ea7: return 0x3137; // Hangul_Dikeud + case 0x0ea8: return 0x3138; // Hangul_SsangDikeud + case 0x0ea9: return 0x3139; // Hangul_Rieul + case 0x0eaa: return 0x313a; // Hangul_RieulKiyeog + case 0x0eab: return 0x313b; // Hangul_RieulMieum + case 0x0eac: return 0x313c; // Hangul_RieulPieub + case 0x0ead: return 0x313d; // Hangul_RieulSios + case 0x0eae: return 0x313e; // Hangul_RieulTieut + case 0x0eaf: return 0x313f; // Hangul_RieulPhieuf + case 0x0eb0: return 0x3140; // Hangul_RieulHieuh + case 0x0eb1: return 0x3141; // Hangul_Mieum + case 0x0eb2: return 0x3142; // Hangul_Pieub + case 0x0eb3: return 0x3143; // Hangul_SsangPieub + case 0x0eb4: return 0x3144; // Hangul_PieubSios + case 0x0eb5: return 0x3145; // Hangul_Sios + case 0x0eb6: return 0x3146; // Hangul_SsangSios + case 0x0eb7: return 0x3147; // Hangul_Ieung + case 0x0eb8: return 0x3148; // Hangul_Jieuj + case 0x0eb9: return 0x3149; // Hangul_SsangJieuj + case 0x0eba: return 0x314a; // Hangul_Cieuc + case 0x0ebb: return 0x314b; // Hangul_Khieuq + case 0x0ebc: return 0x314c; // Hangul_Tieut + case 0x0ebd: return 0x314d; // Hangul_Phieuf + case 0x0ebe: return 0x314e; // Hangul_Hieuh + case 0x0ebf: return 0x314f; // Hangul_A + case 0x0ec0: return 0x3150; // Hangul_AE + case 0x0ec1: return 0x3151; // Hangul_YA + case 0x0ec2: return 0x3152; // Hangul_YAE + case 0x0ec3: return 0x3153; // Hangul_EO + case 0x0ec4: return 0x3154; // Hangul_E + case 0x0ec5: return 0x3155; // Hangul_YEO + case 0x0ec6: return 0x3156; // Hangul_YE + case 0x0ec7: return 0x3157; // Hangul_O + case 0x0ec8: return 0x3158; // Hangul_WA + case 0x0ec9: return 0x3159; // Hangul_WAE + case 0x0eca: return 0x315a; // Hangul_OE + case 0x0ecb: return 0x315b; // Hangul_YO + case 0x0ecc: return 0x315c; // Hangul_U + case 0x0ecd: return 0x315d; // Hangul_WEO + case 0x0ece: return 0x315e; // Hangul_WE + case 0x0ecf: return 0x315f; // Hangul_WI + case 0x0ed0: return 0x3160; // Hangul_YU + case 0x0ed1: return 0x3161; // Hangul_EU + case 0x0ed2: return 0x3162; // Hangul_YI + case 0x0ed3: return 0x3163; // Hangul_I + case 0x0eef: return 0x316d; // Hangul_RieulYeorinHieuh + case 0x0ef0: return 0x3171; // Hangul_SunkyeongeumMieum + case 0x0ef1: return 0x3178; // Hangul_SunkyeongeumPieub + case 0x0ef2: return 0x317f; // Hangul_PanSios + case 0x0ef3: return 0x3181; // Hangul_KkogjiDalrinIeung + case 0x0ef4: return 0x3184; // Hangul_SunkyeongeumPhieuf + case 0x0ef5: return 0x3186; // Hangul_YeorinHieuh + case 0x0ef6: return 0x318d; // Hangul_AraeA + case 0x0ef7: return 0x318e; // Hangul_AraeAE + } + return 0; +} + + +} // namespace priv + +} // namespace sf + +#endif // SFML_KEYSYMTOUNICODEMAPPING_HPP diff --git a/src/SFML/Window/Unix/WindowImplX11.cpp b/src/SFML/Window/Unix/WindowImplX11.cpp index 48f2ab2e..5f29dfb0 100644 --- a/src/SFML/Window/Unix/WindowImplX11.cpp +++ b/src/SFML/Window/Unix/WindowImplX11.cpp @@ -1607,7 +1607,7 @@ void WindowImplX11::initialize() createHiddenCursor(); // init X11 keycode <-> SFML scancode mapping - X11InputManager::getInstance().initialize(m_display, m_inputContext); + X11InputManager::getInstance().initialize(m_display); // Flush the commands queue XFlush(m_display); diff --git a/src/SFML/Window/Unix/X11InputManager.cpp b/src/SFML/Window/Unix/X11InputManager.cpp index 7d69e600..4f414822 100644 --- a/src/SFML/Window/Unix/X11InputManager.cpp +++ b/src/SFML/Window/Unix/X11InputManager.cpp @@ -25,9 +25,10 @@ //////////////////////////////////////////////////////////// // Headers //////////////////////////////////////////////////////////// -#include #include +#include #include +#include #include #include #include @@ -39,6 +40,7 @@ namespace priv { namespace { + //////////////////////////////////////////////////////////// sf::Keyboard::Key keysymToSF(KeySym symbol) { @@ -450,8 +452,7 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) //////////////////////////////////////////////////////////// X11InputManager::X11InputManager() : - m_display(NULL), - m_inputContext(NULL) + m_display(NULL) { for (int i = 0; i < sf::Keyboard::ScanCodeCount; ++i) { @@ -474,10 +475,9 @@ X11InputManager& X11InputManager::getInstance() //////////////////////////////////////////////////////////// -void X11InputManager::initialize(Display* display, XIC inputContext) +void X11InputManager::initialize(Display* display) { m_display = display; - m_inputContext = inputContext; // Find the X11 key code -> SFML key code mapping // This code was inspired by GLFW implementation @@ -634,43 +634,11 @@ sf::String X11InputManager::getDescription(Keyboard::Scancode code) const if (checkInput) { - // fake keypress event - XKeyPressedEvent ev; - ev.keycode = SFtoKeyCode(code); - ev.display = m_display; - ev.type = KeyPress; - - #ifdef X_HAVE_UTF8_STRING - if (m_inputContext) - { - Status status; - Uint8 keyBuffer[16]; - - int length = Xutf8LookupString( - m_inputContext, - &ev, - reinterpret_cast(keyBuffer), - sizeof(keyBuffer), - NULL, - &status - ); - - if (length > 0) - { - Uint32 unicode = 0; - Utf8::decode(keyBuffer, keyBuffer + length, unicode, 0); - if (unicode != 0) - return sf::String(unicode); - } - } - else - #endif - { - static XComposeStatus status; - char keyBuffer[16]; - if (XLookupString(&ev, keyBuffer, sizeof(keyBuffer), NULL, &status)) - return sf::String(static_cast(keyBuffer[0])); - } + KeyCode keycode = SFtoKeyCode(code); + KeySym keysym = XkbKeycodeToKeysym(m_display, keycode, 0, 0); + sf::Uint32 unicode = keysymToUnicode(keysym); + if (unicode != 0) + return sf::String(unicode); } // Fallback to our best guess for the keys that are known to be independent of the layout. diff --git a/src/SFML/Window/Unix/X11InputManager.hpp b/src/SFML/Window/Unix/X11InputManager.hpp index 44db0b88..5afab50a 100644 --- a/src/SFML/Window/Unix/X11InputManager.hpp +++ b/src/SFML/Window/Unix/X11InputManager.hpp @@ -74,7 +74,7 @@ public: /// X11 keycodes /// //////////////////////////////////////////////////////////// - void initialize(Display* display, XIC inputContext); + void initialize(Display* display); //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::isKeyPressed(Key) @@ -164,10 +164,10 @@ private: KeyCode m_scancodeToKeycode[sf::Keyboard::ScanCodeCount]; ///< Mapping of SFML scancode to X11 KeyCode sf::Keyboard::Scancode m_keycodeToScancode[256]; ///< Mapping of X11 KeyCode to SFML scancode Display* m_display; ///< Pointer to the display - XIC m_inputContext; ///< Input context used to get unicode input in our window (used for getDescription) }; } // namespace priv + } // namespace sf #endif // SFML_X11INPUTMANAGER_HPP From 5cb59b802cafe21f4e636b694c7bc570bb6749e3 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Sat, 31 Mar 2018 02:09:21 +0300 Subject: [PATCH 14/59] KeySym to sf::Keyboard::Key mapping (also made better names for keycode, sf::Scancode and sf::Key conversion functions) --- src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp | 283 ++++++++++++++++++ src/SFML/Window/Unix/X11InputManager.cpp | 255 +--------------- src/SFML/Window/Unix/X11InputManager.hpp | 6 +- 3 files changed, 300 insertions(+), 244 deletions(-) create mode 100644 src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp diff --git a/src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp b/src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp new file mode 100644 index 00000000..cd681311 --- /dev/null +++ b/src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp @@ -0,0 +1,283 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2017 Laurent Gomila (laurent@sfml-dev.org) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_KEYSYMTOSFKEYMAPPING_HPP +#define SFML_KEYSYMTOSFKEYMAPPING_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include // sf::Keyboard::Key +#include +#include + +namespace sf +{ +namespace priv +{ +//////////////////////////////////////////////////////////// +/// \brief Convert X11 KeySym to sf::Keyboard::Key +/// +/// \param symbol X11 KeySym +/// +/// \return The corresponding sf::Keyboard::Key +/// +//////////////////////////////////////////////////////////// +inline sf::Keyboard::Key keySymToSFKey(KeySym symbol) +{ + switch (symbol) + { + case XK_Shift_L: return sf::Keyboard::LShift; + case XK_Shift_R: return sf::Keyboard::RShift; + case XK_Control_L: return sf::Keyboard::LControl; + case XK_Control_R: return sf::Keyboard::RControl; + case XK_Alt_L: return sf::Keyboard::LAlt; + case XK_Alt_R: return sf::Keyboard::RAlt; + case XK_Super_L: return sf::Keyboard::LSystem; + case XK_Super_R: return sf::Keyboard::RSystem; + case XK_Menu: return sf::Keyboard::Menu; + case XK_Escape: return sf::Keyboard::Escape; + case XK_semicolon: return sf::Keyboard::SemiColon; + case XK_slash: return sf::Keyboard::Slash; + case XK_equal: return sf::Keyboard::Equal; + case XK_minus: return sf::Keyboard::Dash; + case XK_bracketleft: return sf::Keyboard::LBracket; + case XK_bracketright: return sf::Keyboard::RBracket; + case XK_comma: return sf::Keyboard::Comma; + case XK_period: return sf::Keyboard::Period; + case XK_apostrophe: return sf::Keyboard::Quote; + case XK_backslash: return sf::Keyboard::BackSlash; + case XK_grave: return sf::Keyboard::Tilde; + case XK_space: return sf::Keyboard::Space; + case XK_Return: return sf::Keyboard::Return; + case XK_KP_Enter: return sf::Keyboard::Return; + case XK_BackSpace: return sf::Keyboard::BackSpace; + case XK_Tab: return sf::Keyboard::Tab; + case XK_Prior: return sf::Keyboard::PageUp; + case XK_Next: return sf::Keyboard::PageDown; + case XK_End: return sf::Keyboard::End; + case XK_Home: return sf::Keyboard::Home; + case XK_Insert: return sf::Keyboard::Insert; + case XK_Delete: return sf::Keyboard::Delete; + case XK_KP_Add: return sf::Keyboard::Add; + case XK_KP_Subtract: return sf::Keyboard::Subtract; + case XK_KP_Multiply: return sf::Keyboard::Multiply; + case XK_KP_Divide: return sf::Keyboard::Divide; + case XK_Pause: return sf::Keyboard::Pause; + case XK_F1: return sf::Keyboard::F1; + case XK_F2: return sf::Keyboard::F2; + case XK_F3: return sf::Keyboard::F3; + case XK_F4: return sf::Keyboard::F4; + case XK_F5: return sf::Keyboard::F5; + case XK_F6: return sf::Keyboard::F6; + case XK_F7: return sf::Keyboard::F7; + case XK_F8: return sf::Keyboard::F8; + case XK_F9: return sf::Keyboard::F9; + case XK_F10: return sf::Keyboard::F10; + case XK_F11: return sf::Keyboard::F11; + case XK_F12: return sf::Keyboard::F12; + case XK_F13: return sf::Keyboard::F13; + case XK_F14: return sf::Keyboard::F14; + case XK_F15: return sf::Keyboard::F15; + case XK_Left: return sf::Keyboard::Left; + case XK_Right: return sf::Keyboard::Right; + case XK_Up: return sf::Keyboard::Up; + case XK_Down: return sf::Keyboard::Down; + case XK_KP_Insert: return sf::Keyboard::Numpad0; + case XK_KP_End: return sf::Keyboard::Numpad1; + case XK_KP_Down: return sf::Keyboard::Numpad2; + case XK_KP_Page_Down: return sf::Keyboard::Numpad3; + case XK_KP_Left: return sf::Keyboard::Numpad4; + case XK_KP_Begin: return sf::Keyboard::Numpad5; + case XK_KP_Right: return sf::Keyboard::Numpad6; + case XK_KP_Home: return sf::Keyboard::Numpad7; + case XK_KP_Up: return sf::Keyboard::Numpad8; + case XK_KP_Page_Up: return sf::Keyboard::Numpad9; + case XK_a: return sf::Keyboard::A; + case XK_b: return sf::Keyboard::B; + case XK_c: return sf::Keyboard::C; + case XK_d: return sf::Keyboard::D; + case XK_e: return sf::Keyboard::E; + case XK_f: return sf::Keyboard::F; + case XK_g: return sf::Keyboard::G; + case XK_h: return sf::Keyboard::H; + case XK_i: return sf::Keyboard::I; + case XK_j: return sf::Keyboard::J; + case XK_k: return sf::Keyboard::K; + case XK_l: return sf::Keyboard::L; + case XK_m: return sf::Keyboard::M; + case XK_n: return sf::Keyboard::N; + case XK_o: return sf::Keyboard::O; + case XK_p: return sf::Keyboard::P; + case XK_q: return sf::Keyboard::Q; + case XK_r: return sf::Keyboard::R; + case XK_s: return sf::Keyboard::S; + case XK_t: return sf::Keyboard::T; + case XK_u: return sf::Keyboard::U; + case XK_v: return sf::Keyboard::V; + case XK_w: return sf::Keyboard::W; + case XK_x: return sf::Keyboard::X; + case XK_y: return sf::Keyboard::Y; + case XK_z: return sf::Keyboard::Z; + case XK_0: return sf::Keyboard::Num0; + case XK_1: return sf::Keyboard::Num1; + case XK_2: return sf::Keyboard::Num2; + case XK_3: return sf::Keyboard::Num3; + case XK_4: return sf::Keyboard::Num4; + case XK_5: return sf::Keyboard::Num5; + case XK_6: return sf::Keyboard::Num6; + case XK_7: return sf::Keyboard::Num7; + case XK_8: return sf::Keyboard::Num8; + case XK_9: return sf::Keyboard::Num9; + } + + return sf::Keyboard::Unknown; +} + + +//////////////////////////////////////////////////////////// +/// \brief Convert sf::Keyboard::Key to X11 KeySym +/// +/// \param key X11 sf::Keyboard::Key +/// +/// \return The corresponding X11 KeySym +/// +//////////////////////////////////////////////////////////// +inline KeySym SFKeyToKeySym(sf::Keyboard::Key key) +{ + // Get the corresponding X11 keysym + KeySym keysym = 0; + switch (key) + { + case sf::Keyboard::LShift: keysym = XK_Shift_L; break; + case sf::Keyboard::RShift: keysym = XK_Shift_R; break; + case sf::Keyboard::LControl: keysym = XK_Control_L; break; + case sf::Keyboard::RControl: keysym = XK_Control_R; break; + case sf::Keyboard::LAlt: keysym = XK_Alt_L; break; + case sf::Keyboard::RAlt: keysym = XK_Alt_R; break; + case sf::Keyboard::LSystem: keysym = XK_Super_L; break; + case sf::Keyboard::RSystem: keysym = XK_Super_R; break; + case sf::Keyboard::Menu: keysym = XK_Menu; break; + case sf::Keyboard::Escape: keysym = XK_Escape; break; + case sf::Keyboard::SemiColon: keysym = XK_semicolon; break; + case sf::Keyboard::Slash: keysym = XK_slash; break; + case sf::Keyboard::Equal: keysym = XK_equal; break; + case sf::Keyboard::Dash: keysym = XK_minus; break; + case sf::Keyboard::LBracket: keysym = XK_bracketleft; break; + case sf::Keyboard::RBracket: keysym = XK_bracketright; break; + case sf::Keyboard::Comma: keysym = XK_comma; break; + case sf::Keyboard::Period: keysym = XK_period; break; + case sf::Keyboard::Quote: keysym = XK_apostrophe; break; + case sf::Keyboard::BackSlash: keysym = XK_backslash; break; + case sf::Keyboard::Tilde: keysym = XK_grave; break; + case sf::Keyboard::Space: keysym = XK_space; break; + case sf::Keyboard::Return: keysym = XK_Return; break; + case sf::Keyboard::BackSpace: keysym = XK_BackSpace; break; + case sf::Keyboard::Tab: keysym = XK_Tab; break; + case sf::Keyboard::PageUp: keysym = XK_Prior; break; + case sf::Keyboard::PageDown: keysym = XK_Next; break; + case sf::Keyboard::End: keysym = XK_End; break; + case sf::Keyboard::Home: keysym = XK_Home; break; + case sf::Keyboard::Insert: keysym = XK_Insert; break; + case sf::Keyboard::Delete: keysym = XK_Delete; break; + case sf::Keyboard::Add: keysym = XK_KP_Add; break; + case sf::Keyboard::Subtract: keysym = XK_KP_Subtract; break; + case sf::Keyboard::Multiply: keysym = XK_KP_Multiply; break; + case sf::Keyboard::Divide: keysym = XK_KP_Divide; break; + case sf::Keyboard::Pause: keysym = XK_Pause; break; + case sf::Keyboard::F1: keysym = XK_F1; break; + case sf::Keyboard::F2: keysym = XK_F2; break; + case sf::Keyboard::F3: keysym = XK_F3; break; + case sf::Keyboard::F4: keysym = XK_F4; break; + case sf::Keyboard::F5: keysym = XK_F5; break; + case sf::Keyboard::F6: keysym = XK_F6; break; + case sf::Keyboard::F7: keysym = XK_F7; break; + case sf::Keyboard::F8: keysym = XK_F8; break; + case sf::Keyboard::F9: keysym = XK_F9; break; + case sf::Keyboard::F10: keysym = XK_F10; break; + case sf::Keyboard::F11: keysym = XK_F11; break; + case sf::Keyboard::F12: keysym = XK_F12; break; + case sf::Keyboard::F13: keysym = XK_F13; break; + case sf::Keyboard::F14: keysym = XK_F14; break; + case sf::Keyboard::F15: keysym = XK_F15; break; + case sf::Keyboard::Left: keysym = XK_Left; break; + case sf::Keyboard::Right: keysym = XK_Right; break; + case sf::Keyboard::Up: keysym = XK_Up; break; + case sf::Keyboard::Down: keysym = XK_Down; break; + case sf::Keyboard::Numpad0: keysym = XK_KP_Insert; break; + case sf::Keyboard::Numpad1: keysym = XK_KP_End; break; + case sf::Keyboard::Numpad2: keysym = XK_KP_Down; break; + case sf::Keyboard::Numpad3: keysym = XK_KP_Page_Down; break; + case sf::Keyboard::Numpad4: keysym = XK_KP_Left; break; + case sf::Keyboard::Numpad5: keysym = XK_KP_Begin; break; + case sf::Keyboard::Numpad6: keysym = XK_KP_Right; break; + case sf::Keyboard::Numpad7: keysym = XK_KP_Home; break; + case sf::Keyboard::Numpad8: keysym = XK_KP_Up; break; + case sf::Keyboard::Numpad9: keysym = XK_KP_Page_Up; break; + case sf::Keyboard::A: keysym = XK_a; break; + case sf::Keyboard::B: keysym = XK_b; break; + case sf::Keyboard::C: keysym = XK_c; break; + case sf::Keyboard::D: keysym = XK_d; break; + case sf::Keyboard::E: keysym = XK_e; break; + case sf::Keyboard::F: keysym = XK_f; break; + case sf::Keyboard::G: keysym = XK_g; break; + case sf::Keyboard::H: keysym = XK_h; break; + case sf::Keyboard::I: keysym = XK_i; break; + case sf::Keyboard::J: keysym = XK_j; break; + case sf::Keyboard::K: keysym = XK_k; break; + case sf::Keyboard::L: keysym = XK_l; break; + case sf::Keyboard::M: keysym = XK_m; break; + case sf::Keyboard::N: keysym = XK_n; break; + case sf::Keyboard::O: keysym = XK_o; break; + case sf::Keyboard::P: keysym = XK_p; break; + case sf::Keyboard::Q: keysym = XK_q; break; + case sf::Keyboard::R: keysym = XK_r; break; + case sf::Keyboard::S: keysym = XK_s; break; + case sf::Keyboard::T: keysym = XK_t; break; + case sf::Keyboard::U: keysym = XK_u; break; + case sf::Keyboard::V: keysym = XK_v; break; + case sf::Keyboard::W: keysym = XK_w; break; + case sf::Keyboard::X: keysym = XK_x; break; + case sf::Keyboard::Y: keysym = XK_y; break; + case sf::Keyboard::Z: keysym = XK_z; break; + case sf::Keyboard::Num0: keysym = XK_0; break; + case sf::Keyboard::Num1: keysym = XK_1; break; + case sf::Keyboard::Num2: keysym = XK_2; break; + case sf::Keyboard::Num3: keysym = XK_3; break; + case sf::Keyboard::Num4: keysym = XK_4; break; + case sf::Keyboard::Num5: keysym = XK_5; break; + case sf::Keyboard::Num6: keysym = XK_6; break; + case sf::Keyboard::Num7: keysym = XK_7; break; + case sf::Keyboard::Num8: keysym = XK_8; break; + case sf::Keyboard::Num9: keysym = XK_9; break; + default: keysym = 0; break; + } + return keysym; +} + +} // namespace priv + +} // namespace sf + +#endif // SFML_KEYSYMTOSFKEYMAPPING_HPP diff --git a/src/SFML/Window/Unix/X11InputManager.cpp b/src/SFML/Window/Unix/X11InputManager.cpp index 4f414822..e5906882 100644 --- a/src/SFML/Window/Unix/X11InputManager.cpp +++ b/src/SFML/Window/Unix/X11InputManager.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -40,234 +41,6 @@ namespace priv { namespace { - -//////////////////////////////////////////////////////////// -sf::Keyboard::Key keysymToSF(KeySym symbol) -{ - switch (symbol) - { - case XK_Shift_L: return sf::Keyboard::LShift; - case XK_Shift_R: return sf::Keyboard::RShift; - case XK_Control_L: return sf::Keyboard::LControl; - case XK_Control_R: return sf::Keyboard::RControl; - case XK_Alt_L: return sf::Keyboard::LAlt; - case XK_Alt_R: return sf::Keyboard::RAlt; - case XK_Super_L: return sf::Keyboard::LSystem; - case XK_Super_R: return sf::Keyboard::RSystem; - case XK_Menu: return sf::Keyboard::Menu; - case XK_Escape: return sf::Keyboard::Escape; - case XK_semicolon: return sf::Keyboard::SemiColon; - case XK_slash: return sf::Keyboard::Slash; - case XK_equal: return sf::Keyboard::Equal; - case XK_minus: return sf::Keyboard::Dash; - case XK_bracketleft: return sf::Keyboard::LBracket; - case XK_bracketright: return sf::Keyboard::RBracket; - case XK_comma: return sf::Keyboard::Comma; - case XK_period: return sf::Keyboard::Period; - case XK_apostrophe: return sf::Keyboard::Quote; - case XK_backslash: return sf::Keyboard::BackSlash; - case XK_grave: return sf::Keyboard::Tilde; - case XK_space: return sf::Keyboard::Space; - case XK_Return: return sf::Keyboard::Return; - case XK_KP_Enter: return sf::Keyboard::Return; - case XK_BackSpace: return sf::Keyboard::BackSpace; - case XK_Tab: return sf::Keyboard::Tab; - case XK_Prior: return sf::Keyboard::PageUp; - case XK_Next: return sf::Keyboard::PageDown; - case XK_End: return sf::Keyboard::End; - case XK_Home: return sf::Keyboard::Home; - case XK_Insert: return sf::Keyboard::Insert; - case XK_Delete: return sf::Keyboard::Delete; - case XK_KP_Add: return sf::Keyboard::Add; - case XK_KP_Subtract: return sf::Keyboard::Subtract; - case XK_KP_Multiply: return sf::Keyboard::Multiply; - case XK_KP_Divide: return sf::Keyboard::Divide; - case XK_Pause: return sf::Keyboard::Pause; - case XK_F1: return sf::Keyboard::F1; - case XK_F2: return sf::Keyboard::F2; - case XK_F3: return sf::Keyboard::F3; - case XK_F4: return sf::Keyboard::F4; - case XK_F5: return sf::Keyboard::F5; - case XK_F6: return sf::Keyboard::F6; - case XK_F7: return sf::Keyboard::F7; - case XK_F8: return sf::Keyboard::F8; - case XK_F9: return sf::Keyboard::F9; - case XK_F10: return sf::Keyboard::F10; - case XK_F11: return sf::Keyboard::F11; - case XK_F12: return sf::Keyboard::F12; - case XK_F13: return sf::Keyboard::F13; - case XK_F14: return sf::Keyboard::F14; - case XK_F15: return sf::Keyboard::F15; - case XK_Left: return sf::Keyboard::Left; - case XK_Right: return sf::Keyboard::Right; - case XK_Up: return sf::Keyboard::Up; - case XK_Down: return sf::Keyboard::Down; - case XK_KP_Insert: return sf::Keyboard::Numpad0; - case XK_KP_End: return sf::Keyboard::Numpad1; - case XK_KP_Down: return sf::Keyboard::Numpad2; - case XK_KP_Page_Down: return sf::Keyboard::Numpad3; - case XK_KP_Left: return sf::Keyboard::Numpad4; - case XK_KP_Begin: return sf::Keyboard::Numpad5; - case XK_KP_Right: return sf::Keyboard::Numpad6; - case XK_KP_Home: return sf::Keyboard::Numpad7; - case XK_KP_Up: return sf::Keyboard::Numpad8; - case XK_KP_Page_Up: return sf::Keyboard::Numpad9; - case XK_a: return sf::Keyboard::A; - case XK_b: return sf::Keyboard::B; - case XK_c: return sf::Keyboard::C; - case XK_d: return sf::Keyboard::D; - case XK_e: return sf::Keyboard::E; - case XK_f: return sf::Keyboard::F; - case XK_g: return sf::Keyboard::G; - case XK_h: return sf::Keyboard::H; - case XK_i: return sf::Keyboard::I; - case XK_j: return sf::Keyboard::J; - case XK_k: return sf::Keyboard::K; - case XK_l: return sf::Keyboard::L; - case XK_m: return sf::Keyboard::M; - case XK_n: return sf::Keyboard::N; - case XK_o: return sf::Keyboard::O; - case XK_p: return sf::Keyboard::P; - case XK_q: return sf::Keyboard::Q; - case XK_r: return sf::Keyboard::R; - case XK_s: return sf::Keyboard::S; - case XK_t: return sf::Keyboard::T; - case XK_u: return sf::Keyboard::U; - case XK_v: return sf::Keyboard::V; - case XK_w: return sf::Keyboard::W; - case XK_x: return sf::Keyboard::X; - case XK_y: return sf::Keyboard::Y; - case XK_z: return sf::Keyboard::Z; - case XK_0: return sf::Keyboard::Num0; - case XK_1: return sf::Keyboard::Num1; - case XK_2: return sf::Keyboard::Num2; - case XK_3: return sf::Keyboard::Num3; - case XK_4: return sf::Keyboard::Num4; - case XK_5: return sf::Keyboard::Num5; - case XK_6: return sf::Keyboard::Num6; - case XK_7: return sf::Keyboard::Num7; - case XK_8: return sf::Keyboard::Num8; - case XK_9: return sf::Keyboard::Num9; - } - - return sf::Keyboard::Unknown; -} - - -//////////////////////////////////////////////////////////// -KeySym SFtoKeysym(sf::Keyboard::Key key) -{ - // Get the corresponding X11 keysym - KeySym keysym = 0; - switch (key) - { - case sf::Keyboard::LShift: keysym = XK_Shift_L; break; - case sf::Keyboard::RShift: keysym = XK_Shift_R; break; - case sf::Keyboard::LControl: keysym = XK_Control_L; break; - case sf::Keyboard::RControl: keysym = XK_Control_R; break; - case sf::Keyboard::LAlt: keysym = XK_Alt_L; break; - case sf::Keyboard::RAlt: keysym = XK_Alt_R; break; - case sf::Keyboard::LSystem: keysym = XK_Super_L; break; - case sf::Keyboard::RSystem: keysym = XK_Super_R; break; - case sf::Keyboard::Menu: keysym = XK_Menu; break; - case sf::Keyboard::Escape: keysym = XK_Escape; break; - case sf::Keyboard::SemiColon: keysym = XK_semicolon; break; - case sf::Keyboard::Slash: keysym = XK_slash; break; - case sf::Keyboard::Equal: keysym = XK_equal; break; - case sf::Keyboard::Dash: keysym = XK_minus; break; - case sf::Keyboard::LBracket: keysym = XK_bracketleft; break; - case sf::Keyboard::RBracket: keysym = XK_bracketright; break; - case sf::Keyboard::Comma: keysym = XK_comma; break; - case sf::Keyboard::Period: keysym = XK_period; break; - case sf::Keyboard::Quote: keysym = XK_apostrophe; break; - case sf::Keyboard::BackSlash: keysym = XK_backslash; break; - case sf::Keyboard::Tilde: keysym = XK_grave; break; - case sf::Keyboard::Space: keysym = XK_space; break; - case sf::Keyboard::Return: keysym = XK_Return; break; - case sf::Keyboard::BackSpace: keysym = XK_BackSpace; break; - case sf::Keyboard::Tab: keysym = XK_Tab; break; - case sf::Keyboard::PageUp: keysym = XK_Prior; break; - case sf::Keyboard::PageDown: keysym = XK_Next; break; - case sf::Keyboard::End: keysym = XK_End; break; - case sf::Keyboard::Home: keysym = XK_Home; break; - case sf::Keyboard::Insert: keysym = XK_Insert; break; - case sf::Keyboard::Delete: keysym = XK_Delete; break; - case sf::Keyboard::Add: keysym = XK_KP_Add; break; - case sf::Keyboard::Subtract: keysym = XK_KP_Subtract; break; - case sf::Keyboard::Multiply: keysym = XK_KP_Multiply; break; - case sf::Keyboard::Divide: keysym = XK_KP_Divide; break; - case sf::Keyboard::Pause: keysym = XK_Pause; break; - case sf::Keyboard::F1: keysym = XK_F1; break; - case sf::Keyboard::F2: keysym = XK_F2; break; - case sf::Keyboard::F3: keysym = XK_F3; break; - case sf::Keyboard::F4: keysym = XK_F4; break; - case sf::Keyboard::F5: keysym = XK_F5; break; - case sf::Keyboard::F6: keysym = XK_F6; break; - case sf::Keyboard::F7: keysym = XK_F7; break; - case sf::Keyboard::F8: keysym = XK_F8; break; - case sf::Keyboard::F9: keysym = XK_F9; break; - case sf::Keyboard::F10: keysym = XK_F10; break; - case sf::Keyboard::F11: keysym = XK_F11; break; - case sf::Keyboard::F12: keysym = XK_F12; break; - case sf::Keyboard::F13: keysym = XK_F13; break; - case sf::Keyboard::F14: keysym = XK_F14; break; - case sf::Keyboard::F15: keysym = XK_F15; break; - case sf::Keyboard::Left: keysym = XK_Left; break; - case sf::Keyboard::Right: keysym = XK_Right; break; - case sf::Keyboard::Up: keysym = XK_Up; break; - case sf::Keyboard::Down: keysym = XK_Down; break; - case sf::Keyboard::Numpad0: keysym = XK_KP_Insert; break; - case sf::Keyboard::Numpad1: keysym = XK_KP_End; break; - case sf::Keyboard::Numpad2: keysym = XK_KP_Down; break; - case sf::Keyboard::Numpad3: keysym = XK_KP_Page_Down; break; - case sf::Keyboard::Numpad4: keysym = XK_KP_Left; break; - case sf::Keyboard::Numpad5: keysym = XK_KP_Begin; break; - case sf::Keyboard::Numpad6: keysym = XK_KP_Right; break; - case sf::Keyboard::Numpad7: keysym = XK_KP_Home; break; - case sf::Keyboard::Numpad8: keysym = XK_KP_Up; break; - case sf::Keyboard::Numpad9: keysym = XK_KP_Page_Up; break; - case sf::Keyboard::A: keysym = XK_a; break; - case sf::Keyboard::B: keysym = XK_b; break; - case sf::Keyboard::C: keysym = XK_c; break; - case sf::Keyboard::D: keysym = XK_d; break; - case sf::Keyboard::E: keysym = XK_e; break; - case sf::Keyboard::F: keysym = XK_f; break; - case sf::Keyboard::G: keysym = XK_g; break; - case sf::Keyboard::H: keysym = XK_h; break; - case sf::Keyboard::I: keysym = XK_i; break; - case sf::Keyboard::J: keysym = XK_j; break; - case sf::Keyboard::K: keysym = XK_k; break; - case sf::Keyboard::L: keysym = XK_l; break; - case sf::Keyboard::M: keysym = XK_m; break; - case sf::Keyboard::N: keysym = XK_n; break; - case sf::Keyboard::O: keysym = XK_o; break; - case sf::Keyboard::P: keysym = XK_p; break; - case sf::Keyboard::Q: keysym = XK_q; break; - case sf::Keyboard::R: keysym = XK_r; break; - case sf::Keyboard::S: keysym = XK_s; break; - case sf::Keyboard::T: keysym = XK_t; break; - case sf::Keyboard::U: keysym = XK_u; break; - case sf::Keyboard::V: keysym = XK_v; break; - case sf::Keyboard::W: keysym = XK_w; break; - case sf::Keyboard::X: keysym = XK_x; break; - case sf::Keyboard::Y: keysym = XK_y; break; - case sf::Keyboard::Z: keysym = XK_z; break; - case sf::Keyboard::Num0: keysym = XK_0; break; - case sf::Keyboard::Num1: keysym = XK_1; break; - case sf::Keyboard::Num2: keysym = XK_2; break; - case sf::Keyboard::Num3: keysym = XK_3; break; - case sf::Keyboard::Num4: keysym = XK_4; break; - case sf::Keyboard::Num5: keysym = XK_5; break; - case sf::Keyboard::Num6: keysym = XK_6; break; - case sf::Keyboard::Num7: keysym = XK_7; break; - case sf::Keyboard::Num8: keysym = XK_8; break; - case sf::Keyboard::Num9: keysym = XK_9; break; - default: keysym = 0; break; - } - return keysym; -} - - //////////////////////////////////////////////////////////// sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) { @@ -587,7 +360,7 @@ bool isKeyPressedImpl(Display* display, KeyCode keycode) //////////////////////////////////////////////////////////// bool X11InputManager::isKeyPressed(sf::Keyboard::Key key) const { - KeyCode keycode = SFtoKeyCode(key); + KeyCode keycode = SFKeyToKeyCode(key); return isKeyPressedImpl(m_display, keycode); } @@ -595,7 +368,7 @@ bool X11InputManager::isKeyPressed(sf::Keyboard::Key key) const //////////////////////////////////////////////////////////// bool X11InputManager::isKeyPressed(sf::Keyboard::Scancode code) const { - KeyCode keycode = SFtoKeyCode(code); + KeyCode keycode = SFScancodeToKeyCode(code); return isKeyPressedImpl(m_display, keycode); } @@ -603,17 +376,17 @@ bool X11InputManager::isKeyPressed(sf::Keyboard::Scancode code) const //////////////////////////////////////////////////////////// sf::Keyboard::Scancode X11InputManager::unlocalize(sf::Keyboard::Key key) const { - KeyCode keycode = SFtoKeyCode(key); - return keyCodeToSF(keycode); + KeyCode keycode = SFKeyToKeyCode(key); + return keyCodeToSFScancode(keycode); } //////////////////////////////////////////////////////////// sf::Keyboard::Key X11InputManager::localize(sf::Keyboard::Scancode code) const { - KeyCode keycode = SFtoKeyCode(code); + KeyCode keycode = SFScancodeToKeyCode(code); KeySym keysym = XkbKeycodeToKeysym(m_display, keycode, 0, 0); - return keysymToSF(keysym); + return keySymToSFKey(keysym); } //////////////////////////////////////////////////////////// @@ -634,7 +407,7 @@ sf::String X11InputManager::getDescription(Keyboard::Scancode code) const if (checkInput) { - KeyCode keycode = SFtoKeyCode(code); + KeyCode keycode = SFScancodeToKeyCode(code); KeySym keysym = XkbKeycodeToKeysym(m_display, keycode, 0, 0); sf::Uint32 unicode = keysymToUnicode(keysym); if (unicode != 0) @@ -743,7 +516,7 @@ sf::Keyboard::Key X11InputManager::getKeyFromEvent(XKeyEvent& event) const { // Get the SFML keyboard code from the keysym of the key that has been pressed KeySym keysym = XLookupKeysym(&event, i); - key = keysymToSF(keysym); + key = keySymToSFKey(keysym); if (key != Keyboard::Unknown) break; @@ -755,27 +528,27 @@ sf::Keyboard::Key X11InputManager::getKeyFromEvent(XKeyEvent& event) const //////////////////////////////////////////////////////////// sf::Keyboard::Scancode X11InputManager::getScancodeFromEvent(XKeyEvent& event) const { - return keyCodeToSF(event.keycode); + return keyCodeToSFScancode(event.keycode); } //////////////////////////////////////////////////////////// -KeyCode X11InputManager::SFtoKeyCode(sf::Keyboard::Key key) const +KeyCode X11InputManager::SFKeyToKeyCode(sf::Keyboard::Key key) const { - KeySym keysym = SFtoKeysym(key); + KeySym keysym = SFKeyToKeySym(key); return XKeysymToKeycode(m_display, keysym); } //////////////////////////////////////////////////////////// -KeyCode X11InputManager::SFtoKeyCode(sf::Keyboard::Scancode code) const +KeyCode X11InputManager::SFScancodeToKeyCode(sf::Keyboard::Scancode code) const { return m_scancodeToKeycode[code]; } //////////////////////////////////////////////////////////// -sf::Keyboard::Scancode X11InputManager::keyCodeToSF(KeyCode code) const +sf::Keyboard::Scancode X11InputManager::keyCodeToSFScancode(KeyCode code) const { return m_keycodeToScancode[code]; } diff --git a/src/SFML/Window/Unix/X11InputManager.hpp b/src/SFML/Window/Unix/X11InputManager.hpp index 5afab50a..999a6852 100644 --- a/src/SFML/Window/Unix/X11InputManager.hpp +++ b/src/SFML/Window/Unix/X11InputManager.hpp @@ -136,7 +136,7 @@ private: /// \return A corresponding X11 Keycode /// //////////////////////////////////////////////////////////// - KeyCode SFtoKeyCode(sf::Keyboard::Key key) const; + KeyCode SFKeyToKeyCode(sf::Keyboard::Key key) const; //////////////////////////////////////////////////////////// /// \brief Converts sf::Keyboard::Scancode to X11 keycode @@ -146,7 +146,7 @@ private: /// \return A corresponding X11 Keycode /// //////////////////////////////////////////////////////////// - KeyCode SFtoKeyCode(sf::Keyboard::Scancode code) const; + KeyCode SFScancodeToKeyCode(sf::Keyboard::Scancode code) const; //////////////////////////////////////////////////////////// /// \brief Convert X11 Keycode to sf::Keyboard::Scancode @@ -156,7 +156,7 @@ private: /// \return The corresponding sf::Keyboard::Scancode /// //////////////////////////////////////////////////////////// - sf::Keyboard::Scancode keyCodeToSF(KeyCode code) const; + sf::Keyboard::Scancode keyCodeToSFScancode(KeyCode code) const; //////////////////////////////////////////////////////////// // Member data From e845e501423ff7847dea445271d4d467d2986251 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Sat, 31 Mar 2018 02:25:51 +0300 Subject: [PATCH 15/59] X11InputManager doesn't need m_display now --- src/SFML/Window/Unix/WindowImplX11.cpp | 2 +- src/SFML/Window/Unix/X11InputManager.cpp | 48 ++++++++++++++++-------- src/SFML/Window/Unix/X11InputManager.hpp | 13 ++++++- 3 files changed, 44 insertions(+), 19 deletions(-) diff --git a/src/SFML/Window/Unix/WindowImplX11.cpp b/src/SFML/Window/Unix/WindowImplX11.cpp index 5f29dfb0..28908f15 100644 --- a/src/SFML/Window/Unix/WindowImplX11.cpp +++ b/src/SFML/Window/Unix/WindowImplX11.cpp @@ -1607,7 +1607,7 @@ void WindowImplX11::initialize() createHiddenCursor(); // init X11 keycode <-> SFML scancode mapping - X11InputManager::getInstance().initialize(m_display); + X11InputManager::getInstance().initialize(); // Flush the commands queue XFlush(m_display); diff --git a/src/SFML/Window/Unix/X11InputManager.cpp b/src/SFML/Window/Unix/X11InputManager.cpp index e5906882..bc76750b 100644 --- a/src/SFML/Window/Unix/X11InputManager.cpp +++ b/src/SFML/Window/Unix/X11InputManager.cpp @@ -224,8 +224,7 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) //////////////////////////////////////////////////////////// -X11InputManager::X11InputManager() : - m_display(NULL) +X11InputManager::X11InputManager() { for (int i = 0; i < sf::Keyboard::ScanCodeCount; ++i) { @@ -248,16 +247,16 @@ X11InputManager& X11InputManager::getInstance() //////////////////////////////////////////////////////////// -void X11InputManager::initialize(Display* display) +void X11InputManager::initialize() { - m_display = display; + Display* display = OpenDisplay(); // Find the X11 key code -> SFML key code mapping // This code was inspired by GLFW implementation char name[XkbKeyNameLength + 1]; - XkbDescPtr desc = XkbGetMap(m_display, 0, XkbUseCoreKbd); - XkbGetNames(m_display, XkbKeyNamesMask, desc); + XkbDescPtr desc = XkbGetMap(display, 0, XkbUseCoreKbd); + XkbGetNames(display, XkbKeyNamesMask, desc); sf::Keyboard::Scancode sc; for (int keycode = desc->min_key_code; keycode <= desc->max_key_code; ++keycode) @@ -330,11 +329,13 @@ void X11InputManager::initialize(Display* display) { if (m_keycodeToScancode[keycode] == sf::Keyboard::ScanUnknown) { - sf::Keyboard::Scancode sc = translateKeyCode(m_display, keycode); + sf::Keyboard::Scancode sc = translateKeyCode(display, keycode); m_scancodeToKeycode[sc] = keycode; m_keycodeToScancode[keycode] = sc; } } + + CloseDisplay(display); } @@ -360,16 +361,20 @@ bool isKeyPressedImpl(Display* display, KeyCode keycode) //////////////////////////////////////////////////////////// bool X11InputManager::isKeyPressed(sf::Keyboard::Key key) const { - KeyCode keycode = SFKeyToKeyCode(key); - return isKeyPressedImpl(m_display, keycode); + Display* display = OpenDisplay(); + bool pressed = isKeyPressedImpl(display, SFKeyToKeyCode(key)); + CloseDisplay(display); + return pressed; } //////////////////////////////////////////////////////////// bool X11InputManager::isKeyPressed(sf::Keyboard::Scancode code) const { - KeyCode keycode = SFScancodeToKeyCode(code); - return isKeyPressedImpl(m_display, keycode); + Display* display = OpenDisplay(); + bool pressed = isKeyPressedImpl(display, SFScancodeToKeyCode(code)); + CloseDisplay(display); + return pressed; } @@ -384,8 +389,7 @@ sf::Keyboard::Scancode X11InputManager::unlocalize(sf::Keyboard::Key key) const //////////////////////////////////////////////////////////// sf::Keyboard::Key X11InputManager::localize(sf::Keyboard::Scancode code) const { - KeyCode keycode = SFScancodeToKeyCode(code); - KeySym keysym = XkbKeycodeToKeysym(m_display, keycode, 0, 0); + KeySym keysym = SFScancodeToKeySym(code); return keySymToSFKey(keysym); } @@ -407,8 +411,7 @@ sf::String X11InputManager::getDescription(Keyboard::Scancode code) const if (checkInput) { - KeyCode keycode = SFScancodeToKeyCode(code); - KeySym keysym = XkbKeycodeToKeysym(m_display, keycode, 0, 0); + KeySym keysym = SFScancodeToKeySym(code); sf::Uint32 unicode = keysymToUnicode(keysym); if (unicode != 0) return sf::String(unicode); @@ -536,7 +539,10 @@ sf::Keyboard::Scancode X11InputManager::getScancodeFromEvent(XKeyEvent& event) c KeyCode X11InputManager::SFKeyToKeyCode(sf::Keyboard::Key key) const { KeySym keysym = SFKeyToKeySym(key); - return XKeysymToKeycode(m_display, keysym); + Display* display = OpenDisplay(); + KeyCode keycode = XKeysymToKeycode(display, keysym); + CloseDisplay(display); + return keycode; } @@ -553,5 +559,15 @@ sf::Keyboard::Scancode X11InputManager::keyCodeToSFScancode(KeyCode code) const return m_keycodeToScancode[code]; } +//////////////////////////////////////////////////////////// +KeySym X11InputManager::SFScancodeToKeySym(sf::Keyboard::Scancode code) const +{ + Display* display = OpenDisplay(); + KeyCode keycode = SFScancodeToKeyCode(code); + KeySym keysym = XkbKeycodeToKeysym(display, keycode, 0, 0); + CloseDisplay(display); + return keysym; +} + } // namespace priv } // namespace sf diff --git a/src/SFML/Window/Unix/X11InputManager.hpp b/src/SFML/Window/Unix/X11InputManager.hpp index 999a6852..a03ef0db 100644 --- a/src/SFML/Window/Unix/X11InputManager.hpp +++ b/src/SFML/Window/Unix/X11InputManager.hpp @@ -74,7 +74,7 @@ public: /// X11 keycodes /// //////////////////////////////////////////////////////////// - void initialize(Display* display); + void initialize(); //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::isKeyPressed(Key) @@ -158,12 +158,21 @@ private: //////////////////////////////////////////////////////////// sf::Keyboard::Scancode keyCodeToSFScancode(KeyCode code) const; + //////////////////////////////////////////////////////////// + /// \brief Convert sf::Keyboard::Scancode to KeySym + /// + /// \param code sf::Keyboard::ScanCode + /// + /// \return The corresponding X11 KeySym + /// + //////////////////////////////////////////////////////////// + KeySym SFScancodeToKeySym(sf::Keyboard::Scancode code) const; + //////////////////////////////////////////////////////////// // Member data //////////////////////////////////////////////////////////// KeyCode m_scancodeToKeycode[sf::Keyboard::ScanCodeCount]; ///< Mapping of SFML scancode to X11 KeyCode sf::Keyboard::Scancode m_keycodeToScancode[256]; ///< Mapping of X11 KeyCode to SFML scancode - Display* m_display; ///< Pointer to the display }; } // namespace priv From 02b9dafc6fa571fb1b31d85a7ad756d6eb0651fd Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Sat, 31 Mar 2018 02:36:11 +0300 Subject: [PATCH 16/59] Almost got rid of singleton (move a lot of stuff into free functions) --- src/SFML/Window/Unix/WindowImplX11.cpp | 3 - src/SFML/Window/Unix/X11InputManager.cpp | 89 +++++++++++++----------- src/SFML/Window/Unix/X11InputManager.hpp | 35 ---------- 3 files changed, 48 insertions(+), 79 deletions(-) diff --git a/src/SFML/Window/Unix/WindowImplX11.cpp b/src/SFML/Window/Unix/WindowImplX11.cpp index 28908f15..914a8d4c 100644 --- a/src/SFML/Window/Unix/WindowImplX11.cpp +++ b/src/SFML/Window/Unix/WindowImplX11.cpp @@ -1606,9 +1606,6 @@ void WindowImplX11::initialize() // Create the hidden cursor createHiddenCursor(); - // init X11 keycode <-> SFML scancode mapping - X11InputManager::getInstance().initialize(); - // Flush the commands queue XFlush(m_display); diff --git a/src/SFML/Window/Unix/X11InputManager.cpp b/src/SFML/Window/Unix/X11InputManager.cpp index bc76750b..fcd30496 100644 --- a/src/SFML/Window/Unix/X11InputManager.cpp +++ b/src/SFML/Window/Unix/X11InputManager.cpp @@ -41,6 +41,11 @@ namespace priv { namespace { + +KeyCode scancodeToKeycode[sf::Keyboard::ScanCodeCount]; ///< Mapping of SFML scancode to X11 KeyCode +sf::Keyboard::Scancode keycodeToScancode[256]; ///< Mapping of X11 KeyCode to SFML scancode +bool is_init = false; + //////////////////////////////////////////////////////////// sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) { @@ -219,36 +224,18 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) return sf::Keyboard::ScanUnknown; } - -} // anonymous namespace - - -//////////////////////////////////////////////////////////// -X11InputManager::X11InputManager() +void init() { for (int i = 0; i < sf::Keyboard::ScanCodeCount; ++i) { - m_scancodeToKeycode[i] = 0; + scancodeToKeycode[i] = 0; } for (int i = 0; i < 256; ++i) { - m_keycodeToScancode[i] = sf::Keyboard::ScanUnknown; + keycodeToScancode[i] = sf::Keyboard::ScanUnknown; } -} - -//////////////////////////////////////////////////////////// -X11InputManager& X11InputManager::getInstance() -{ - static X11InputManager instance; - return instance; -} - - -//////////////////////////////////////////////////////////// -void X11InputManager::initialize() -{ Display* display = OpenDisplay(); // Find the X11 key code -> SFML key code mapping @@ -316,8 +303,8 @@ void X11InputManager::initialize() if ((keycode >= 0) && (keycode < 256)) { - m_scancodeToKeycode[sc] = keycode; - m_keycodeToScancode[keycode] = sc; + scancodeToKeycode[sc] = keycode; + keycodeToScancode[keycode] = sc; } } @@ -325,20 +312,54 @@ void X11InputManager::initialize() XkbFreeKeyboard(desc, 0, True); // Translate un-translated keycodes using traditional X11 KeySym lookups - for (int keycode = 0; keycode < 256; ++keycode) + for (int keycode = 0; keycode < 256; ++keycode) { - if (m_keycodeToScancode[keycode] == sf::Keyboard::ScanUnknown) + if (keycodeToScancode[keycode] == sf::Keyboard::ScanUnknown) { sf::Keyboard::Scancode sc = translateKeyCode(display, keycode); - m_scancodeToKeycode[sc] = keycode; - m_keycodeToScancode[keycode] = sc; + scancodeToKeycode[sc] = keycode; + keycodeToScancode[keycode] = sc; } } CloseDisplay(display); + + is_init = true; +} + +//////////////////////////////////////////////////////////// +KeyCode SFScancodeToKeyCode(sf::Keyboard::Scancode code) +{ + if (!is_init) + init(); + + return scancodeToKeycode[code]; +} + +//////////////////////////////////////////////////////////// +sf::Keyboard::Scancode keyCodeToSFScancode(KeyCode code) +{ + if (!is_init) + init(); + + return keycodeToScancode[code]; +} + +} // anonymous namespace + + +//////////////////////////////////////////////////////////// +X11InputManager::X11InputManager() +{ } +//////////////////////////////////////////////////////////// +X11InputManager& X11InputManager::getInstance() +{ + static X11InputManager instance; + return instance; +} namespace { //////////////////////////////////////////////////////////// @@ -545,20 +566,6 @@ KeyCode X11InputManager::SFKeyToKeyCode(sf::Keyboard::Key key) const return keycode; } - -//////////////////////////////////////////////////////////// -KeyCode X11InputManager::SFScancodeToKeyCode(sf::Keyboard::Scancode code) const -{ - return m_scancodeToKeycode[code]; -} - - -//////////////////////////////////////////////////////////// -sf::Keyboard::Scancode X11InputManager::keyCodeToSFScancode(KeyCode code) const -{ - return m_keycodeToScancode[code]; -} - //////////////////////////////////////////////////////////// KeySym X11InputManager::SFScancodeToKeySym(sf::Keyboard::Scancode code) const { diff --git a/src/SFML/Window/Unix/X11InputManager.hpp b/src/SFML/Window/Unix/X11InputManager.hpp index a03ef0db..a1510f9e 100644 --- a/src/SFML/Window/Unix/X11InputManager.hpp +++ b/src/SFML/Window/Unix/X11InputManager.hpp @@ -67,15 +67,6 @@ private: X11InputManager(); public: - //////////////////////////////////////////////////////////// - /// \brief Initialize the keyboard - /// - /// Builds a mapping between sf::Keyboard::Scancode and - /// X11 keycodes - /// - //////////////////////////////////////////////////////////// - void initialize(); - //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::isKeyPressed(Key) /// @@ -138,26 +129,6 @@ private: //////////////////////////////////////////////////////////// KeyCode SFKeyToKeyCode(sf::Keyboard::Key key) const; - //////////////////////////////////////////////////////////// - /// \brief Converts sf::Keyboard::Scancode to X11 keycode - /// - /// \param code A scancode to be converted - /// - /// \return A corresponding X11 Keycode - /// - //////////////////////////////////////////////////////////// - KeyCode SFScancodeToKeyCode(sf::Keyboard::Scancode code) const; - - //////////////////////////////////////////////////////////// - /// \brief Convert X11 Keycode to sf::Keyboard::Scancode - /// - /// \param code X11 keycode - /// - /// \return The corresponding sf::Keyboard::Scancode - /// - //////////////////////////////////////////////////////////// - sf::Keyboard::Scancode keyCodeToSFScancode(KeyCode code) const; - //////////////////////////////////////////////////////////// /// \brief Convert sf::Keyboard::Scancode to KeySym /// @@ -167,12 +138,6 @@ private: /// //////////////////////////////////////////////////////////// KeySym SFScancodeToKeySym(sf::Keyboard::Scancode code) const; - - //////////////////////////////////////////////////////////// - // Member data - //////////////////////////////////////////////////////////// - KeyCode m_scancodeToKeycode[sf::Keyboard::ScanCodeCount]; ///< Mapping of SFML scancode to X11 KeyCode - sf::Keyboard::Scancode m_keycodeToScancode[256]; ///< Mapping of X11 KeyCode to SFML scancode }; } // namespace priv From 281d3d8528fed63e987167405ad3e05676149923 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Sat, 31 Mar 2018 02:49:44 +0300 Subject: [PATCH 17/59] X11InputManager now only has static members --- src/SFML/Window/Unix/InputImpl.cpp | 148 ++++------------------- src/SFML/Window/Unix/WindowImplX11.cpp | 50 +++----- src/SFML/Window/Unix/X11InputManager.cpp | 62 ++++------ src/SFML/Window/Unix/X11InputManager.hpp | 55 ++------- 4 files changed, 65 insertions(+), 250 deletions(-) diff --git a/src/SFML/Window/Unix/InputImpl.cpp b/src/SFML/Window/Unix/InputImpl.cpp index 04339fbe..9c8a0d12 100644 --- a/src/SFML/Window/Unix/InputImpl.cpp +++ b/src/SFML/Window/Unix/InputImpl.cpp @@ -41,142 +41,38 @@ namespace priv //////////////////////////////////////////////////////////// bool InputImpl::isKeyPressed(Keyboard::Key key) { - // Get the corresponding X11 keysym - KeySym keysym = 0; - switch (key) - { - case Keyboard::LShift: keysym = XK_Shift_L; break; - case Keyboard::RShift: keysym = XK_Shift_R; break; - case Keyboard::LControl: keysym = XK_Control_L; break; - case Keyboard::RControl: keysym = XK_Control_R; break; - case Keyboard::LAlt: keysym = XK_Alt_L; break; - case Keyboard::RAlt: keysym = XK_Alt_R; break; - case Keyboard::LSystem: keysym = XK_Super_L; break; - case Keyboard::RSystem: keysym = XK_Super_R; break; - case Keyboard::Menu: keysym = XK_Menu; break; - case Keyboard::Escape: keysym = XK_Escape; break; - case Keyboard::Semicolon: keysym = XK_semicolon; break; - case Keyboard::Slash: keysym = XK_slash; break; - case Keyboard::Equal: keysym = XK_equal; break; - case Keyboard::Hyphen: keysym = XK_minus; break; - case Keyboard::LBracket: keysym = XK_bracketleft; break; - case Keyboard::RBracket: keysym = XK_bracketright; break; - case Keyboard::Comma: keysym = XK_comma; break; - case Keyboard::Period: keysym = XK_period; break; - case Keyboard::Quote: keysym = XK_apostrophe; break; - case Keyboard::Backslash: keysym = XK_backslash; break; - case Keyboard::Tilde: keysym = XK_grave; break; - case Keyboard::Space: keysym = XK_space; break; - case Keyboard::Enter: keysym = XK_Return; break; - case Keyboard::Backspace: keysym = XK_BackSpace; break; - case Keyboard::Tab: keysym = XK_Tab; break; - case Keyboard::PageUp: keysym = XK_Prior; break; - case Keyboard::PageDown: keysym = XK_Next; break; - case Keyboard::End: keysym = XK_End; break; - case Keyboard::Home: keysym = XK_Home; break; - case Keyboard::Insert: keysym = XK_Insert; break; - case Keyboard::Delete: keysym = XK_Delete; break; - case Keyboard::Add: keysym = XK_KP_Add; break; - case Keyboard::Subtract: keysym = XK_KP_Subtract; break; - case Keyboard::Multiply: keysym = XK_KP_Multiply; break; - case Keyboard::Divide: keysym = XK_KP_Divide; break; - case Keyboard::Pause: keysym = XK_Pause; break; - case Keyboard::F1: keysym = XK_F1; break; - case Keyboard::F2: keysym = XK_F2; break; - case Keyboard::F3: keysym = XK_F3; break; - case Keyboard::F4: keysym = XK_F4; break; - case Keyboard::F5: keysym = XK_F5; break; - case Keyboard::F6: keysym = XK_F6; break; - case Keyboard::F7: keysym = XK_F7; break; - case Keyboard::F8: keysym = XK_F8; break; - case Keyboard::F9: keysym = XK_F9; break; - case Keyboard::F10: keysym = XK_F10; break; - case Keyboard::F11: keysym = XK_F11; break; - case Keyboard::F12: keysym = XK_F12; break; - case Keyboard::F13: keysym = XK_F13; break; - case Keyboard::F14: keysym = XK_F14; break; - case Keyboard::F15: keysym = XK_F15; break; - case Keyboard::Left: keysym = XK_Left; break; - case Keyboard::Right: keysym = XK_Right; break; - case Keyboard::Up: keysym = XK_Up; break; - case Keyboard::Down: keysym = XK_Down; break; - case Keyboard::Numpad0: keysym = XK_KP_Insert; break; - case Keyboard::Numpad1: keysym = XK_KP_End; break; - case Keyboard::Numpad2: keysym = XK_KP_Down; break; - case Keyboard::Numpad3: keysym = XK_KP_Page_Down; break; - case Keyboard::Numpad4: keysym = XK_KP_Left; break; - case Keyboard::Numpad5: keysym = XK_KP_Begin; break; - case Keyboard::Numpad6: keysym = XK_KP_Right; break; - case Keyboard::Numpad7: keysym = XK_KP_Home; break; - case Keyboard::Numpad8: keysym = XK_KP_Up; break; - case Keyboard::Numpad9: keysym = XK_KP_Page_Up; break; - case Keyboard::A: keysym = XK_a; break; - case Keyboard::B: keysym = XK_b; break; - case Keyboard::C: keysym = XK_c; break; - case Keyboard::D: keysym = XK_d; break; - case Keyboard::E: keysym = XK_e; break; - case Keyboard::F: keysym = XK_f; break; - case Keyboard::G: keysym = XK_g; break; - case Keyboard::H: keysym = XK_h; break; - case Keyboard::I: keysym = XK_i; break; - case Keyboard::J: keysym = XK_j; break; - case Keyboard::K: keysym = XK_k; break; - case Keyboard::L: keysym = XK_l; break; - case Keyboard::M: keysym = XK_m; break; - case Keyboard::N: keysym = XK_n; break; - case Keyboard::O: keysym = XK_o; break; - case Keyboard::P: keysym = XK_p; break; - case Keyboard::Q: keysym = XK_q; break; - case Keyboard::R: keysym = XK_r; break; - case Keyboard::S: keysym = XK_s; break; - case Keyboard::T: keysym = XK_t; break; - case Keyboard::U: keysym = XK_u; break; - case Keyboard::V: keysym = XK_v; break; - case Keyboard::W: keysym = XK_w; break; - case Keyboard::X: keysym = XK_x; break; - case Keyboard::Y: keysym = XK_y; break; - case Keyboard::Z: keysym = XK_z; break; - case Keyboard::Num0: keysym = XK_0; break; - case Keyboard::Num1: keysym = XK_1; break; - case Keyboard::Num2: keysym = XK_2; break; - case Keyboard::Num3: keysym = XK_3; break; - case Keyboard::Num4: keysym = XK_4; break; - case Keyboard::Num5: keysym = XK_5; break; - case Keyboard::Num6: keysym = XK_6; break; - case Keyboard::Num7: keysym = XK_7; break; - case Keyboard::Num8: keysym = XK_8; break; - case Keyboard::Num9: keysym = XK_9; break; - default: keysym = 0; break; - } + return X11InputManager::isKeyPressed(key); +} - // Sanity checks - if (key < 0 || key >= sf::Keyboard::KeyCount) - return false; +//////////////////////////////////////////////////////////// +bool InputImpl::isKeyPressed(Keyboard::Scancode code) +{ + return X11InputManager::isKeyPressed(code); +} // Open a connection with the X server Display* display = OpenDisplay(); - // Convert to keycode - KeyCode keycode = XKeysymToKeycode(display, keysym); - if (keycode != 0) - { - // Get the whole keyboard state - char keys[32]; - XQueryKeymap(display, keys); +//////////////////////////////////////////////////////////// +Keyboard::Key InputImpl::localize(Keyboard::Scancode code) +{ + return X11InputManager::localize(code); +} // Close the connection with the X server CloseDisplay(display); - // Check our keycode - return (keys[keycode / 8] & (1 << (keycode % 8))) != 0; - } - else - { - // Close the connection with the X server - CloseDisplay(display); +//////////////////////////////////////////////////////////// +Keyboard::Scancode InputImpl::unlocalize(Keyboard::Key key) +{ + return X11InputManager::unlocalize(key); +} - return false; - } + +//////////////////////////////////////////////////////////// +String InputImpl::getDescription(Keyboard::Scancode code) +{ + return X11InputManager::getDescription(code); } diff --git a/src/SFML/Window/Unix/WindowImplX11.cpp b/src/SFML/Window/Unix/WindowImplX11.cpp index 914a8d4c..b698acd7 100644 --- a/src/SFML/Window/Unix/WindowImplX11.cpp +++ b/src/SFML/Window/Unix/WindowImplX11.cpp @@ -1826,27 +1826,16 @@ bool WindowImplX11::processEvent(XEvent& windowEvent) // Key down event case KeyPress: { - Keyboard::Key key = Keyboard::Unknown; - - // Try each KeySym index (modifier group) until we get a match - for (int i = 0; i < 4; ++i) - { - // Get the SFML keyboard code from the keysym of the key that has been pressed - key = keysymToSF(XLookupKeysym(&windowEvent.xkey, i)); - - if (key != Keyboard::Unknown) - break; - } - // Fill the event parameters // TODO: if modifiers are wrong, use XGetModifierMapping to retrieve the actual modifiers mapping Event event; - event.type = Event::KeyPressed; - event.key.code = key; - event.key.alt = windowEvent.xkey.state & Mod1Mask; - event.key.control = windowEvent.xkey.state & ControlMask; - event.key.shift = windowEvent.xkey.state & ShiftMask; - event.key.system = windowEvent.xkey.state & Mod4Mask; + event.type = Event::KeyPressed; + event.key.code = X11InputManager::getKeyFromEvent(windowEvent.xkey); + event.key.scancode = X11InputManager::getScancodeFromEvent(windowEvent.xkey); + event.key.alt = windowEvent.xkey.state & Mod1Mask; + event.key.control = windowEvent.xkey.state & ControlMask; + event.key.shift = windowEvent.xkey.state & ShiftMask; + event.key.system = windowEvent.xkey.state & Mod4Mask; pushEvent(event); // Generate a TextEntered event @@ -1903,26 +1892,15 @@ bool WindowImplX11::processEvent(XEvent& windowEvent) // Key up event case KeyRelease: { - Keyboard::Key key = Keyboard::Unknown; - - // Try each KeySym index (modifier group) until we get a match - for (int i = 0; i < 4; ++i) - { - // Get the SFML keyboard code from the keysym of the key that has been released - key = keysymToSF(XLookupKeysym(&windowEvent.xkey, i)); - - if (key != Keyboard::Unknown) - break; - } - // Fill the event parameters Event event; - event.type = Event::KeyReleased; - event.key.code = key; - event.key.alt = windowEvent.xkey.state & Mod1Mask; - event.key.control = windowEvent.xkey.state & ControlMask; - event.key.shift = windowEvent.xkey.state & ShiftMask; - event.key.system = windowEvent.xkey.state & Mod4Mask; + event.type = Event::KeyReleased; + event.key.code = X11InputManager::getKeyFromEvent(windowEvent.xkey); + event.key.scancode = X11InputManager::getScancodeFromEvent(windowEvent.xkey); + event.key.alt = windowEvent.xkey.state & Mod1Mask; + event.key.control = windowEvent.xkey.state & ControlMask; + event.key.shift = windowEvent.xkey.state & ShiftMask; + event.key.system = windowEvent.xkey.state & Mod4Mask; pushEvent(event); break; diff --git a/src/SFML/Window/Unix/X11InputManager.cpp b/src/SFML/Window/Unix/X11InputManager.cpp index fcd30496..97ea2f62 100644 --- a/src/SFML/Window/Unix/X11InputManager.cpp +++ b/src/SFML/Window/Unix/X11InputManager.cpp @@ -224,7 +224,7 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) return sf::Keyboard::ScanUnknown; } -void init() +void initMapping() { for (int i = 0; i < sf::Keyboard::ScanCodeCount; ++i) { @@ -331,7 +331,7 @@ void init() KeyCode SFScancodeToKeyCode(sf::Keyboard::Scancode code) { if (!is_init) - init(); + initMapping(); return scancodeToKeycode[code]; } @@ -340,28 +340,31 @@ KeyCode SFScancodeToKeyCode(sf::Keyboard::Scancode code) sf::Keyboard::Scancode keyCodeToSFScancode(KeyCode code) { if (!is_init) - init(); + initMapping(); return keycodeToScancode[code]; } -} // anonymous namespace - - //////////////////////////////////////////////////////////// -X11InputManager::X11InputManager() +KeyCode SFKeyToKeyCode(sf::Keyboard::Key key) { + KeySym keysym = SFKeyToKeySym(key); + Display* display = OpenDisplay(); + KeyCode keycode = XKeysymToKeycode(display, keysym); + CloseDisplay(display); + return keycode; } - //////////////////////////////////////////////////////////// -X11InputManager& X11InputManager::getInstance() +KeySym SFScancodeToKeySym(sf::Keyboard::Scancode code) { - static X11InputManager instance; - return instance; + Display* display = OpenDisplay(); + KeyCode keycode = SFScancodeToKeyCode(code); + KeySym keysym = XkbKeycodeToKeysym(display, keycode, 0, 0); + CloseDisplay(display); + return keysym; } -namespace { //////////////////////////////////////////////////////////// bool isKeyPressedImpl(Display* display, KeyCode keycode) { @@ -380,7 +383,7 @@ bool isKeyPressedImpl(Display* display, KeyCode keycode) } // anonymous namespace //////////////////////////////////////////////////////////// -bool X11InputManager::isKeyPressed(sf::Keyboard::Key key) const +bool X11InputManager::isKeyPressed(sf::Keyboard::Key key) { Display* display = OpenDisplay(); bool pressed = isKeyPressedImpl(display, SFKeyToKeyCode(key)); @@ -390,7 +393,7 @@ bool X11InputManager::isKeyPressed(sf::Keyboard::Key key) const //////////////////////////////////////////////////////////// -bool X11InputManager::isKeyPressed(sf::Keyboard::Scancode code) const +bool X11InputManager::isKeyPressed(sf::Keyboard::Scancode code) { Display* display = OpenDisplay(); bool pressed = isKeyPressedImpl(display, SFScancodeToKeyCode(code)); @@ -400,7 +403,7 @@ bool X11InputManager::isKeyPressed(sf::Keyboard::Scancode code) const //////////////////////////////////////////////////////////// -sf::Keyboard::Scancode X11InputManager::unlocalize(sf::Keyboard::Key key) const +sf::Keyboard::Scancode X11InputManager::unlocalize(sf::Keyboard::Key key) { KeyCode keycode = SFKeyToKeyCode(key); return keyCodeToSFScancode(keycode); @@ -408,14 +411,14 @@ sf::Keyboard::Scancode X11InputManager::unlocalize(sf::Keyboard::Key key) const //////////////////////////////////////////////////////////// -sf::Keyboard::Key X11InputManager::localize(sf::Keyboard::Scancode code) const +sf::Keyboard::Key X11InputManager::localize(sf::Keyboard::Scancode code) { KeySym keysym = SFScancodeToKeySym(code); return keySymToSFKey(keysym); } //////////////////////////////////////////////////////////// -sf::String X11InputManager::getDescription(Keyboard::Scancode code) const +sf::String X11InputManager::getDescription(Keyboard::Scancode code) { bool checkInput = true; @@ -531,7 +534,7 @@ sf::String X11InputManager::getDescription(Keyboard::Scancode code) const //////////////////////////////////////////////////////////// -sf::Keyboard::Key X11InputManager::getKeyFromEvent(XKeyEvent& event) const +sf::Keyboard::Key X11InputManager::getKeyFromEvent(XKeyEvent& event) { sf::Keyboard::Key key = Keyboard::Unknown; @@ -550,31 +553,10 @@ sf::Keyboard::Key X11InputManager::getKeyFromEvent(XKeyEvent& event) const //////////////////////////////////////////////////////////// -sf::Keyboard::Scancode X11InputManager::getScancodeFromEvent(XKeyEvent& event) const +sf::Keyboard::Scancode X11InputManager::getScancodeFromEvent(XKeyEvent& event) { return keyCodeToSFScancode(event.keycode); } - -//////////////////////////////////////////////////////////// -KeyCode X11InputManager::SFKeyToKeyCode(sf::Keyboard::Key key) const -{ - KeySym keysym = SFKeyToKeySym(key); - Display* display = OpenDisplay(); - KeyCode keycode = XKeysymToKeycode(display, keysym); - CloseDisplay(display); - return keycode; -} - -//////////////////////////////////////////////////////////// -KeySym X11InputManager::SFScancodeToKeySym(sf::Keyboard::Scancode code) const -{ - Display* display = OpenDisplay(); - KeyCode keycode = SFScancodeToKeyCode(code); - KeySym keysym = XkbKeycodeToKeysym(display, keycode, 0, 0); - CloseDisplay(display); - return keysym; -} - } // namespace priv } // namespace sf diff --git a/src/SFML/Window/Unix/X11InputManager.hpp b/src/SFML/Window/Unix/X11InputManager.hpp index a1510f9e..aac32e89 100644 --- a/src/SFML/Window/Unix/X11InputManager.hpp +++ b/src/SFML/Window/Unix/X11InputManager.hpp @@ -48,54 +48,35 @@ class X11InputManager { public: - //////////////////////////////////////////////////////////// - /// \brief Get the unique instance of the class - /// - /// \note Private use only - /// - /// \return Reference to the X11InputManager instance - /// - //////////////////////////////////////////////////////////// - static X11InputManager& getInstance(); - -private: - - //////////////////////////////////////////////////////////// - /// \brief Default constructor - /// - //////////////////////////////////////////////////////////// - X11InputManager(); -public: - //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::isKeyPressed(Key) /// //////////////////////////////////////////////////////////// - bool isKeyPressed(sf::Keyboard::Key key) const; + static bool isKeyPressed(sf::Keyboard::Key key); //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::isKeyPressed(Scancode) /// //////////////////////////////////////////////////////////// - bool isKeyPressed(sf::Keyboard::Scancode code) const; + static bool isKeyPressed(sf::Keyboard::Scancode code); //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::localize /// //////////////////////////////////////////////////////////// - sf::Keyboard::Scancode unlocalize(sf::Keyboard::Key key) const; + static sf::Keyboard::Scancode unlocalize(sf::Keyboard::Key key); //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::unlocalize /// //////////////////////////////////////////////////////////// - sf::Keyboard::Key localize(sf::Keyboard::Scancode code) const; + static sf::Keyboard::Key localize(sf::Keyboard::Scancode code); //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::getDescription /// //////////////////////////////////////////////////////////// - sf::String getDescription(Keyboard::Scancode code) const; + static sf::String getDescription(Keyboard::Scancode code); //////////////////////////////////////////////////////////// /// \brief Get the sf::Keyboard::Key from XKeyEvent @@ -105,7 +86,7 @@ public: /// \return A key being pressed or released /// //////////////////////////////////////////////////////////// - sf::Keyboard::Key getKeyFromEvent(XKeyEvent& event) const; + static sf::Keyboard::Key getKeyFromEvent(XKeyEvent& event); //////////////////////////////////////////////////////////// /// \brief Get the sf::Keyboard::Scancode from XKeyEvent @@ -115,29 +96,7 @@ public: /// \return A scancode of a key being pressed or released /// //////////////////////////////////////////////////////////// - sf::Keyboard::Scancode getScancodeFromEvent(XKeyEvent& event) const; - -private: - - //////////////////////////////////////////////////////////// - /// \brief Converts sf::Keyboard::Key to X11 keycode - /// - /// \param key A key to be converted - /// - /// \return A corresponding X11 Keycode - /// - //////////////////////////////////////////////////////////// - KeyCode SFKeyToKeyCode(sf::Keyboard::Key key) const; - - //////////////////////////////////////////////////////////// - /// \brief Convert sf::Keyboard::Scancode to KeySym - /// - /// \param code sf::Keyboard::ScanCode - /// - /// \return The corresponding X11 KeySym - /// - //////////////////////////////////////////////////////////// - KeySym SFScancodeToKeySym(sf::Keyboard::Scancode code) const; + static sf::Keyboard::Scancode getScancodeFromEvent(XKeyEvent& event); }; } // namespace priv From 56457d922a43c87c9e722de5aa44ccee9c96c837 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Sat, 31 Mar 2018 02:58:01 +0300 Subject: [PATCH 18/59] X11InputManager -> KeyboardImpl --- src/SFML/Window/CMakeLists.txt | 4 +++ src/SFML/Window/Unix/InputImpl.cpp | 12 +++---- .../{X11InputManager.cpp => KeyboardImpl.cpp} | 33 ++++++++++--------- .../{X11InputManager.hpp => KeyboardImpl.hpp} | 8 ++--- src/SFML/Window/Unix/WindowImplX11.cpp | 9 ++--- 5 files changed, 36 insertions(+), 30 deletions(-) rename src/SFML/Window/Unix/{X11InputManager.cpp => KeyboardImpl.cpp} (96%) rename src/SFML/Window/Unix/{X11InputManager.hpp => KeyboardImpl.hpp} (96%) diff --git a/src/SFML/Window/CMakeLists.txt b/src/SFML/Window/CMakeLists.txt index bd9571b4..61442e6a 100644 --- a/src/SFML/Window/CMakeLists.txt +++ b/src/SFML/Window/CMakeLists.txt @@ -91,6 +91,10 @@ elseif(SFML_OS_LINUX OR SFML_OS_FREEBSD OR SFML_OS_OPENBSD) ${SRCROOT}/Unix/Display.hpp ${SRCROOT}/Unix/InputImpl.cpp ${SRCROOT}/Unix/InputImpl.hpp + ${SRCROOT}/Unix/KeyboardImpl.hpp + ${SRCROOT}/Unix/KeyboardImpl.cpp + ${SRCROOT}/Unix/KeySymToSFKeyMapping.hpp + ${SRCROOT}/Unix/KeySymToUnicodeMapping.hpp ${SRCROOT}/Unix/SensorImpl.cpp ${SRCROOT}/Unix/SensorImpl.hpp ${SRCROOT}/Unix/VideoModeImpl.cpp diff --git a/src/SFML/Window/Unix/InputImpl.cpp b/src/SFML/Window/Unix/InputImpl.cpp index 9c8a0d12..a5d84de8 100644 --- a/src/SFML/Window/Unix/InputImpl.cpp +++ b/src/SFML/Window/Unix/InputImpl.cpp @@ -28,7 +28,7 @@ #include // important to be included first (conflict with None) #include #include -#include +#include #include #include #include @@ -41,13 +41,13 @@ namespace priv //////////////////////////////////////////////////////////// bool InputImpl::isKeyPressed(Keyboard::Key key) { - return X11InputManager::isKeyPressed(key); + return KeyboardImpl::isKeyPressed(key); } //////////////////////////////////////////////////////////// bool InputImpl::isKeyPressed(Keyboard::Scancode code) { - return X11InputManager::isKeyPressed(code); + return KeyboardImpl::isKeyPressed(code); } // Open a connection with the X server @@ -56,7 +56,7 @@ bool InputImpl::isKeyPressed(Keyboard::Scancode code) //////////////////////////////////////////////////////////// Keyboard::Key InputImpl::localize(Keyboard::Scancode code) { - return X11InputManager::localize(code); + return KeyboardImpl::localize(code); } // Close the connection with the X server @@ -65,14 +65,14 @@ Keyboard::Key InputImpl::localize(Keyboard::Scancode code) //////////////////////////////////////////////////////////// Keyboard::Scancode InputImpl::unlocalize(Keyboard::Key key) { - return X11InputManager::unlocalize(key); + return KeyboardImpl::unlocalize(key); } //////////////////////////////////////////////////////////// String InputImpl::getDescription(Keyboard::Scancode code) { - return X11InputManager::getDescription(code); + return KeyboardImpl::getDescription(code); } diff --git a/src/SFML/Window/Unix/X11InputManager.cpp b/src/SFML/Window/Unix/KeyboardImpl.cpp similarity index 96% rename from src/SFML/Window/Unix/X11InputManager.cpp rename to src/SFML/Window/Unix/KeyboardImpl.cpp index 97ea2f62..d340c9d0 100644 --- a/src/SFML/Window/Unix/X11InputManager.cpp +++ b/src/SFML/Window/Unix/KeyboardImpl.cpp @@ -25,7 +25,7 @@ //////////////////////////////////////////////////////////// // Headers //////////////////////////////////////////////////////////// -#include +#include #include #include #include @@ -44,7 +44,7 @@ namespace { KeyCode scancodeToKeycode[sf::Keyboard::ScanCodeCount]; ///< Mapping of SFML scancode to X11 KeyCode sf::Keyboard::Scancode keycodeToScancode[256]; ///< Mapping of X11 KeyCode to SFML scancode -bool is_init = false; +bool isMappingInitialized = false; //////////////////////////////////////////////////////////// sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) @@ -324,13 +324,13 @@ void initMapping() CloseDisplay(display); - is_init = true; + isMappingInitialized = true; } //////////////////////////////////////////////////////////// KeyCode SFScancodeToKeyCode(sf::Keyboard::Scancode code) { - if (!is_init) + if (!isMappingInitialized) initMapping(); return scancodeToKeycode[code]; @@ -339,7 +339,7 @@ KeyCode SFScancodeToKeyCode(sf::Keyboard::Scancode code) //////////////////////////////////////////////////////////// sf::Keyboard::Scancode keyCodeToSFScancode(KeyCode code) { - if (!is_init) + if (!isMappingInitialized) initMapping(); return keycodeToScancode[code]; @@ -383,7 +383,7 @@ bool isKeyPressedImpl(Display* display, KeyCode keycode) } // anonymous namespace //////////////////////////////////////////////////////////// -bool X11InputManager::isKeyPressed(sf::Keyboard::Key key) +bool KeyboardImpl::isKeyPressed(sf::Keyboard::Key key) { Display* display = OpenDisplay(); bool pressed = isKeyPressedImpl(display, SFKeyToKeyCode(key)); @@ -393,7 +393,7 @@ bool X11InputManager::isKeyPressed(sf::Keyboard::Key key) //////////////////////////////////////////////////////////// -bool X11InputManager::isKeyPressed(sf::Keyboard::Scancode code) +bool KeyboardImpl::isKeyPressed(sf::Keyboard::Scancode code) { Display* display = OpenDisplay(); bool pressed = isKeyPressedImpl(display, SFScancodeToKeyCode(code)); @@ -403,7 +403,7 @@ bool X11InputManager::isKeyPressed(sf::Keyboard::Scancode code) //////////////////////////////////////////////////////////// -sf::Keyboard::Scancode X11InputManager::unlocalize(sf::Keyboard::Key key) +sf::Keyboard::Scancode KeyboardImpl::unlocalize(sf::Keyboard::Key key) { KeyCode keycode = SFKeyToKeyCode(key); return keyCodeToSFScancode(keycode); @@ -411,23 +411,23 @@ sf::Keyboard::Scancode X11InputManager::unlocalize(sf::Keyboard::Key key) //////////////////////////////////////////////////////////// -sf::Keyboard::Key X11InputManager::localize(sf::Keyboard::Scancode code) +sf::Keyboard::Key KeyboardImpl::localize(sf::Keyboard::Scancode code) { KeySym keysym = SFScancodeToKeySym(code); return keySymToSFKey(keysym); } //////////////////////////////////////////////////////////// -sf::String X11InputManager::getDescription(Keyboard::Scancode code) +sf::String KeyboardImpl::getDescription(Keyboard::Scancode code) { bool checkInput = true; // these scancodes actually correspond to keys with input // but we want to return their description, not their behaviour - if (code == sf::Keyboard::ScanEnter || - code == sf::Keyboard::ScanReturn || - code == sf::Keyboard::ScanTab || - code == sf::Keyboard::ScanDelete || + if (code == sf::Keyboard::ScanEnter || + code == sf::Keyboard::ScanReturn || + code == sf::Keyboard::ScanTab || + code == sf::Keyboard::ScanDelete || code == sf::Keyboard::ScanBackspace || code == sf::Keyboard::ScanSpace) { checkInput = false; @@ -437,6 +437,7 @@ sf::String X11InputManager::getDescription(Keyboard::Scancode code) { KeySym keysym = SFScancodeToKeySym(code); sf::Uint32 unicode = keysymToUnicode(keysym); + if (unicode != 0) return sf::String(unicode); } @@ -534,7 +535,7 @@ sf::String X11InputManager::getDescription(Keyboard::Scancode code) //////////////////////////////////////////////////////////// -sf::Keyboard::Key X11InputManager::getKeyFromEvent(XKeyEvent& event) +sf::Keyboard::Key KeyboardImpl::getKeyFromEvent(XKeyEvent& event) { sf::Keyboard::Key key = Keyboard::Unknown; @@ -553,7 +554,7 @@ sf::Keyboard::Key X11InputManager::getKeyFromEvent(XKeyEvent& event) //////////////////////////////////////////////////////////// -sf::Keyboard::Scancode X11InputManager::getScancodeFromEvent(XKeyEvent& event) +sf::Keyboard::Scancode KeyboardImpl::getScancodeFromEvent(XKeyEvent& event) { return keyCodeToSFScancode(event.keycode); } diff --git a/src/SFML/Window/Unix/X11InputManager.hpp b/src/SFML/Window/Unix/KeyboardImpl.hpp similarity index 96% rename from src/SFML/Window/Unix/X11InputManager.hpp rename to src/SFML/Window/Unix/KeyboardImpl.hpp index aac32e89..6e43c296 100644 --- a/src/SFML/Window/Unix/X11InputManager.hpp +++ b/src/SFML/Window/Unix/KeyboardImpl.hpp @@ -22,8 +22,8 @@ // //////////////////////////////////////////////////////////// -#ifndef SFML_X11INPUTMANAGER_HPP -#define SFML_X11INPUTMANAGER_HPP +#ifndef SFML_KEYBOARD_IMPL_HPP +#define SFML_KEYBOARD_IMPL_HPP //////////////////////////////////////////////////////////// // Headers @@ -44,7 +44,7 @@ namespace priv { /// Its purpose is to help sf::priv::InputImpl class. /// //////////////////////////////////////////////////////////// -class X11InputManager +class KeyboardImpl { public: @@ -103,4 +103,4 @@ public: } // namespace sf -#endif // SFML_X11INPUTMANAGER_HPP +#endif // SFML_KEYBOARD_IMPL_HPP diff --git a/src/SFML/Window/Unix/WindowImplX11.cpp b/src/SFML/Window/Unix/WindowImplX11.cpp index b698acd7..2adfa7d6 100644 --- a/src/SFML/Window/Unix/WindowImplX11.cpp +++ b/src/SFML/Window/Unix/WindowImplX11.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -1830,8 +1831,8 @@ bool WindowImplX11::processEvent(XEvent& windowEvent) // TODO: if modifiers are wrong, use XGetModifierMapping to retrieve the actual modifiers mapping Event event; event.type = Event::KeyPressed; - event.key.code = X11InputManager::getKeyFromEvent(windowEvent.xkey); - event.key.scancode = X11InputManager::getScancodeFromEvent(windowEvent.xkey); + event.key.code = KeyboardImpl::getKeyFromEvent(windowEvent.xkey); + event.key.scancode = KeyboardImpl::getScancodeFromEvent(windowEvent.xkey); event.key.alt = windowEvent.xkey.state & Mod1Mask; event.key.control = windowEvent.xkey.state & ControlMask; event.key.shift = windowEvent.xkey.state & ShiftMask; @@ -1895,8 +1896,8 @@ bool WindowImplX11::processEvent(XEvent& windowEvent) // Fill the event parameters Event event; event.type = Event::KeyReleased; - event.key.code = X11InputManager::getKeyFromEvent(windowEvent.xkey); - event.key.scancode = X11InputManager::getScancodeFromEvent(windowEvent.xkey); + event.key.code = KeyboardImpl::getKeyFromEvent(windowEvent.xkey); + event.key.scancode = KeyboardImpl::getScancodeFromEvent(windowEvent.xkey); event.key.alt = windowEvent.xkey.state & Mod1Mask; event.key.control = windowEvent.xkey.state & ControlMask; event.key.shift = windowEvent.xkey.state & ShiftMask; From 6cef8046dddc1c0aee41a43bdbc4aa87b1f9c145 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Sat, 31 Mar 2018 13:48:32 +0300 Subject: [PATCH 19/59] Small refactorings --- src/SFML/Window/Unix/KeyboardImpl.cpp | 38 +++++++++------------------ 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/src/SFML/Window/Unix/KeyboardImpl.cpp b/src/SFML/Window/Unix/KeyboardImpl.cpp index d340c9d0..af559fb9 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.cpp +++ b/src/SFML/Window/Unix/KeyboardImpl.cpp @@ -42,15 +42,13 @@ namespace priv namespace { -KeyCode scancodeToKeycode[sf::Keyboard::ScanCodeCount]; ///< Mapping of SFML scancode to X11 KeyCode -sf::Keyboard::Scancode keycodeToScancode[256]; ///< Mapping of X11 KeyCode to SFML scancode +KeyCode scancodeToKeycode[sf::Keyboard::ScanCodeCount] = { 0 }; ///< Mapping of SFML scancode to X11 KeyCode +sf::Keyboard::Scancode keycodeToScancode[256] = { sf::Keyboard::ScanUnknown}; ///< Mapping of X11 KeyCode to SFML scancode bool isMappingInitialized = false; //////////////////////////////////////////////////////////// sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) { - KeySym keySym; - // Valid key code range is [8,255], according to the Xlib manual if (keycode < 8 || keycode > 255) return sf::Keyboard::ScanUnknown; @@ -59,7 +57,7 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) // Note: This way we always force "NumLock = ON", which is intentional // since the returned key code should correspond to a physical // location. - keySym = XkbKeycodeToKeysym(display, keycode, 0, 1); + KeySym keySym = XkbKeycodeToKeysym(display, keycode, 0, 1); switch (keySym) { case XK_KP_0: return sf::Keyboard::ScanNumpad0; @@ -226,16 +224,6 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) void initMapping() { - for (int i = 0; i < sf::Keyboard::ScanCodeCount; ++i) - { - scancodeToKeycode[i] = 0; - } - - for (int i = 0; i < 256; ++i) - { - keycodeToScancode[i] = sf::Keyboard::ScanUnknown; - } - Display* display = OpenDisplay(); // Find the X11 key code -> SFML key code mapping @@ -366,14 +354,18 @@ KeySym SFScancodeToKeySym(sf::Keyboard::Scancode code) } //////////////////////////////////////////////////////////// -bool isKeyPressedImpl(Display* display, KeyCode keycode) +bool isKeyPressedImpl(KeyCode keycode) { if (keycode != 0) { + Display* display = OpenDisplay(); + // Get the whole keyboard state char keys[32]; XQueryKeymap(display, keys); + CloseDisplay(display); + // Check our keycode return (keys[keycode / 8] & (1 << (keycode % 8))) != 0; } @@ -385,20 +377,16 @@ bool isKeyPressedImpl(Display* display, KeyCode keycode) //////////////////////////////////////////////////////////// bool KeyboardImpl::isKeyPressed(sf::Keyboard::Key key) { - Display* display = OpenDisplay(); - bool pressed = isKeyPressedImpl(display, SFKeyToKeyCode(key)); - CloseDisplay(display); - return pressed; + KeyCode keycode = SFKeyToKeyCode(key); + return isKeyPressedImpl(keycode); } //////////////////////////////////////////////////////////// bool KeyboardImpl::isKeyPressed(sf::Keyboard::Scancode code) { - Display* display = OpenDisplay(); - bool pressed = isKeyPressedImpl(display, SFScancodeToKeyCode(code)); - CloseDisplay(display); - return pressed; + KeyCode keycode = SFScancodeToKeyCode(code); + return isKeyPressedImpl(keycode); } @@ -530,7 +518,7 @@ sf::String KeyboardImpl::getDescription(Keyboard::Scancode code) case sf::Keyboard::ScanRSystem: return "Meta (Right)"; } - return sf::String("Unknown Scancode"); // no guess good enough possible. + return "Unknown Scancode"; // no guess good enough possible. } From c4f72fe8c24aaef1daa50c22c4a111f7f4b501f3 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Sat, 31 Mar 2018 14:20:52 +0300 Subject: [PATCH 20/59] Safety and handling of edge cases --- src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp | 2 +- src/SFML/Window/Unix/KeyboardImpl.cpp | 36 +++++++++++++------ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp b/src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp index cd681311..e5314f72 100644 --- a/src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp +++ b/src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp @@ -167,7 +167,7 @@ inline sf::Keyboard::Key keySymToSFKey(KeySym symbol) inline KeySym SFKeyToKeySym(sf::Keyboard::Key key) { // Get the corresponding X11 keysym - KeySym keysym = 0; + KeySym keysym = NoSymbol; switch (key) { case sf::Keyboard::LShift: keysym = XK_Shift_L; break; diff --git a/src/SFML/Window/Unix/KeyboardImpl.cpp b/src/SFML/Window/Unix/KeyboardImpl.cpp index af559fb9..2b0b54fd 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.cpp +++ b/src/SFML/Window/Unix/KeyboardImpl.cpp @@ -42,15 +42,21 @@ namespace priv namespace { -KeyCode scancodeToKeycode[sf::Keyboard::ScanCodeCount] = { 0 }; ///< Mapping of SFML scancode to X11 KeyCode +KeyCode scancodeToKeycode[sf::Keyboard::ScanCodeCount] = { 0 }; ///< Mapping of SFML scancode to X11 KeyCode sf::Keyboard::Scancode keycodeToScancode[256] = { sf::Keyboard::ScanUnknown}; ///< Mapping of X11 KeyCode to SFML scancode bool isMappingInitialized = false; //////////////////////////////////////////////////////////// -sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) +bool isValidKeycode(KeyCode keycode) { // Valid key code range is [8,255], according to the Xlib manual - if (keycode < 8 || keycode > 255) + return keycode >= 8 || keycode <= 255; +} + +//////////////////////////////////////////////////////////// +sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) +{ + if (!isValidKeycode(keycode)) return sf::Keyboard::ScanUnknown; // Try secondary keysym, for numeric keypad keys @@ -289,7 +295,7 @@ void initMapping() else if (strcmp(name, "AB10") == 0) sc = sf::Keyboard::ScanForwardSlash; else sc = sf::Keyboard::ScanUnknown; - if ((keycode >= 0) && (keycode < 256)) + if (isValidKeycode(keycode)) { scancodeToKeycode[sc] = keycode; keycodeToScancode[keycode] = sc; @@ -300,7 +306,8 @@ void initMapping() XkbFreeKeyboard(desc, 0, True); // Translate un-translated keycodes using traditional X11 KeySym lookups - for (int keycode = 0; keycode < 256; ++keycode) + // Valid keycodes are [8;255], so we only initialize them + for (int keycode = 8; keycode < 256; ++keycode) { if (keycodeToScancode[keycode] == sf::Keyboard::ScanUnknown) { @@ -330,25 +337,32 @@ sf::Keyboard::Scancode keyCodeToSFScancode(KeyCode code) if (!isMappingInitialized) initMapping(); - return keycodeToScancode[code]; + if (isValidKeycode(code)) + return keycodeToScancode[code]; + return sf::Keyboard::ScanUnknown; } //////////////////////////////////////////////////////////// KeyCode SFKeyToKeyCode(sf::Keyboard::Key key) { KeySym keysym = SFKeyToKeySym(key); - Display* display = OpenDisplay(); - KeyCode keycode = XKeysymToKeycode(display, keysym); - CloseDisplay(display); - return keycode; + if (keysym != NoSymbol) { + Display* display = OpenDisplay(); + KeyCode keycode = XKeysymToKeycode(display, keysym); + CloseDisplay(display); + return keycode; + } + return 0; } //////////////////////////////////////////////////////////// KeySym SFScancodeToKeySym(sf::Keyboard::Scancode code) { Display* display = OpenDisplay(); + KeySym keysym = NoSymbol; KeyCode keycode = SFScancodeToKeyCode(code); - KeySym keysym = XkbKeycodeToKeysym(display, keycode, 0, 0); + if (keycode != 0) // ensure that this Scancode is mapped to keycode + keysym = XkbKeycodeToKeysym(display, keycode, 0, 0); CloseDisplay(display); return keysym; } From 75e793218faff1dbdecaa31fa32c4066d832f824 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Sat, 31 Mar 2018 17:55:36 +0300 Subject: [PATCH 21/59] Coding standards fix (braces on other line) --- src/SFML/Window/Unix/KeyboardImpl.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/SFML/Window/Unix/KeyboardImpl.cpp b/src/SFML/Window/Unix/KeyboardImpl.cpp index 2b0b54fd..bd756a51 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.cpp +++ b/src/SFML/Window/Unix/KeyboardImpl.cpp @@ -346,7 +346,8 @@ sf::Keyboard::Scancode keyCodeToSFScancode(KeyCode code) KeyCode SFKeyToKeyCode(sf::Keyboard::Key key) { KeySym keysym = SFKeyToKeySym(key); - if (keysym != NoSymbol) { + if (keysym != NoSymbol) + { Display* display = OpenDisplay(); KeyCode keycode = XKeysymToKeycode(display, keysym); CloseDisplay(display); @@ -431,7 +432,8 @@ sf::String KeyboardImpl::getDescription(Keyboard::Scancode code) code == sf::Keyboard::ScanTab || code == sf::Keyboard::ScanDelete || code == sf::Keyboard::ScanBackspace || - code == sf::Keyboard::ScanSpace) { + code == sf::Keyboard::ScanSpace) + { checkInput = false; } From 16a95cfc208904ec2611346b5c5d6d3ab8fba27a Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Sat, 31 Mar 2018 18:10:39 +0300 Subject: [PATCH 22/59] * Removed redundant "sf::" where possible * Moved some functions from sf::priv::anonymous to anonymous namespace. --- src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp | 418 +++++++++--------- src/SFML/Window/Unix/KeyboardImpl.cpp | 210 ++++----- src/SFML/Window/Unix/KeyboardImpl.hpp | 14 +- 3 files changed, 321 insertions(+), 321 deletions(-) diff --git a/src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp b/src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp index e5314f72..14fecf37 100644 --- a/src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp +++ b/src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp @@ -28,7 +28,7 @@ //////////////////////////////////////////////////////////// // Headers //////////////////////////////////////////////////////////// -#include // sf::Keyboard::Key +#include #include #include @@ -44,233 +44,233 @@ namespace priv /// \return The corresponding sf::Keyboard::Key /// //////////////////////////////////////////////////////////// -inline sf::Keyboard::Key keySymToSFKey(KeySym symbol) +inline Keyboard::Key keySymToSFKey(KeySym symbol) { switch (symbol) { - case XK_Shift_L: return sf::Keyboard::LShift; - case XK_Shift_R: return sf::Keyboard::RShift; - case XK_Control_L: return sf::Keyboard::LControl; - case XK_Control_R: return sf::Keyboard::RControl; - case XK_Alt_L: return sf::Keyboard::LAlt; - case XK_Alt_R: return sf::Keyboard::RAlt; - case XK_Super_L: return sf::Keyboard::LSystem; - case XK_Super_R: return sf::Keyboard::RSystem; - case XK_Menu: return sf::Keyboard::Menu; - case XK_Escape: return sf::Keyboard::Escape; - case XK_semicolon: return sf::Keyboard::SemiColon; - case XK_slash: return sf::Keyboard::Slash; - case XK_equal: return sf::Keyboard::Equal; - case XK_minus: return sf::Keyboard::Dash; - case XK_bracketleft: return sf::Keyboard::LBracket; - case XK_bracketright: return sf::Keyboard::RBracket; - case XK_comma: return sf::Keyboard::Comma; - case XK_period: return sf::Keyboard::Period; - case XK_apostrophe: return sf::Keyboard::Quote; - case XK_backslash: return sf::Keyboard::BackSlash; - case XK_grave: return sf::Keyboard::Tilde; - case XK_space: return sf::Keyboard::Space; - case XK_Return: return sf::Keyboard::Return; - case XK_KP_Enter: return sf::Keyboard::Return; - case XK_BackSpace: return sf::Keyboard::BackSpace; - case XK_Tab: return sf::Keyboard::Tab; - case XK_Prior: return sf::Keyboard::PageUp; - case XK_Next: return sf::Keyboard::PageDown; - case XK_End: return sf::Keyboard::End; - case XK_Home: return sf::Keyboard::Home; - case XK_Insert: return sf::Keyboard::Insert; - case XK_Delete: return sf::Keyboard::Delete; - case XK_KP_Add: return sf::Keyboard::Add; - case XK_KP_Subtract: return sf::Keyboard::Subtract; - case XK_KP_Multiply: return sf::Keyboard::Multiply; - case XK_KP_Divide: return sf::Keyboard::Divide; - case XK_Pause: return sf::Keyboard::Pause; - case XK_F1: return sf::Keyboard::F1; - case XK_F2: return sf::Keyboard::F2; - case XK_F3: return sf::Keyboard::F3; - case XK_F4: return sf::Keyboard::F4; - case XK_F5: return sf::Keyboard::F5; - case XK_F6: return sf::Keyboard::F6; - case XK_F7: return sf::Keyboard::F7; - case XK_F8: return sf::Keyboard::F8; - case XK_F9: return sf::Keyboard::F9; - case XK_F10: return sf::Keyboard::F10; - case XK_F11: return sf::Keyboard::F11; - case XK_F12: return sf::Keyboard::F12; - case XK_F13: return sf::Keyboard::F13; - case XK_F14: return sf::Keyboard::F14; - case XK_F15: return sf::Keyboard::F15; - case XK_Left: return sf::Keyboard::Left; - case XK_Right: return sf::Keyboard::Right; - case XK_Up: return sf::Keyboard::Up; - case XK_Down: return sf::Keyboard::Down; - case XK_KP_Insert: return sf::Keyboard::Numpad0; - case XK_KP_End: return sf::Keyboard::Numpad1; - case XK_KP_Down: return sf::Keyboard::Numpad2; - case XK_KP_Page_Down: return sf::Keyboard::Numpad3; - case XK_KP_Left: return sf::Keyboard::Numpad4; - case XK_KP_Begin: return sf::Keyboard::Numpad5; - case XK_KP_Right: return sf::Keyboard::Numpad6; - case XK_KP_Home: return sf::Keyboard::Numpad7; - case XK_KP_Up: return sf::Keyboard::Numpad8; - case XK_KP_Page_Up: return sf::Keyboard::Numpad9; - case XK_a: return sf::Keyboard::A; - case XK_b: return sf::Keyboard::B; - case XK_c: return sf::Keyboard::C; - case XK_d: return sf::Keyboard::D; - case XK_e: return sf::Keyboard::E; - case XK_f: return sf::Keyboard::F; - case XK_g: return sf::Keyboard::G; - case XK_h: return sf::Keyboard::H; - case XK_i: return sf::Keyboard::I; - case XK_j: return sf::Keyboard::J; - case XK_k: return sf::Keyboard::K; - case XK_l: return sf::Keyboard::L; - case XK_m: return sf::Keyboard::M; - case XK_n: return sf::Keyboard::N; - case XK_o: return sf::Keyboard::O; - case XK_p: return sf::Keyboard::P; - case XK_q: return sf::Keyboard::Q; - case XK_r: return sf::Keyboard::R; - case XK_s: return sf::Keyboard::S; - case XK_t: return sf::Keyboard::T; - case XK_u: return sf::Keyboard::U; - case XK_v: return sf::Keyboard::V; - case XK_w: return sf::Keyboard::W; - case XK_x: return sf::Keyboard::X; - case XK_y: return sf::Keyboard::Y; - case XK_z: return sf::Keyboard::Z; - case XK_0: return sf::Keyboard::Num0; - case XK_1: return sf::Keyboard::Num1; - case XK_2: return sf::Keyboard::Num2; - case XK_3: return sf::Keyboard::Num3; - case XK_4: return sf::Keyboard::Num4; - case XK_5: return sf::Keyboard::Num5; - case XK_6: return sf::Keyboard::Num6; - case XK_7: return sf::Keyboard::Num7; - case XK_8: return sf::Keyboard::Num8; - case XK_9: return sf::Keyboard::Num9; + case XK_Shift_L: return Keyboard::LShift; + case XK_Shift_R: return Keyboard::RShift; + case XK_Control_L: return Keyboard::LControl; + case XK_Control_R: return Keyboard::RControl; + case XK_Alt_L: return Keyboard::LAlt; + case XK_Alt_R: return Keyboard::RAlt; + case XK_Super_L: return Keyboard::LSystem; + case XK_Super_R: return Keyboard::RSystem; + case XK_Menu: return Keyboard::Menu; + case XK_Escape: return Keyboard::Escape; + case XK_semicolon: return Keyboard::SemiColon; + case XK_slash: return Keyboard::Slash; + case XK_equal: return Keyboard::Equal; + case XK_minus: return Keyboard::Dash; + case XK_bracketleft: return Keyboard::LBracket; + case XK_bracketright: return Keyboard::RBracket; + case XK_comma: return Keyboard::Comma; + case XK_period: return Keyboard::Period; + case XK_apostrophe: return Keyboard::Quote; + case XK_backslash: return Keyboard::BackSlash; + case XK_grave: return Keyboard::Tilde; + case XK_space: return Keyboard::Space; + case XK_Return: return Keyboard::Return; + case XK_KP_Enter: return Keyboard::Return; + case XK_BackSpace: return Keyboard::BackSpace; + case XK_Tab: return Keyboard::Tab; + case XK_Prior: return Keyboard::PageUp; + case XK_Next: return Keyboard::PageDown; + case XK_End: return Keyboard::End; + case XK_Home: return Keyboard::Home; + case XK_Insert: return Keyboard::Insert; + case XK_Delete: return Keyboard::Delete; + case XK_KP_Add: return Keyboard::Add; + case XK_KP_Subtract: return Keyboard::Subtract; + case XK_KP_Multiply: return Keyboard::Multiply; + case XK_KP_Divide: return Keyboard::Divide; + case XK_Pause: return Keyboard::Pause; + case XK_F1: return Keyboard::F1; + case XK_F2: return Keyboard::F2; + case XK_F3: return Keyboard::F3; + case XK_F4: return Keyboard::F4; + case XK_F5: return Keyboard::F5; + case XK_F6: return Keyboard::F6; + case XK_F7: return Keyboard::F7; + case XK_F8: return Keyboard::F8; + case XK_F9: return Keyboard::F9; + case XK_F10: return Keyboard::F10; + case XK_F11: return Keyboard::F11; + case XK_F12: return Keyboard::F12; + case XK_F13: return Keyboard::F13; + case XK_F14: return Keyboard::F14; + case XK_F15: return Keyboard::F15; + case XK_Left: return Keyboard::Left; + case XK_Right: return Keyboard::Right; + case XK_Up: return Keyboard::Up; + case XK_Down: return Keyboard::Down; + case XK_KP_Insert: return Keyboard::Numpad0; + case XK_KP_End: return Keyboard::Numpad1; + case XK_KP_Down: return Keyboard::Numpad2; + case XK_KP_Page_Down: return Keyboard::Numpad3; + case XK_KP_Left: return Keyboard::Numpad4; + case XK_KP_Begin: return Keyboard::Numpad5; + case XK_KP_Right: return Keyboard::Numpad6; + case XK_KP_Home: return Keyboard::Numpad7; + case XK_KP_Up: return Keyboard::Numpad8; + case XK_KP_Page_Up: return Keyboard::Numpad9; + case XK_a: return Keyboard::A; + case XK_b: return Keyboard::B; + case XK_c: return Keyboard::C; + case XK_d: return Keyboard::D; + case XK_e: return Keyboard::E; + case XK_f: return Keyboard::F; + case XK_g: return Keyboard::G; + case XK_h: return Keyboard::H; + case XK_i: return Keyboard::I; + case XK_j: return Keyboard::J; + case XK_k: return Keyboard::K; + case XK_l: return Keyboard::L; + case XK_m: return Keyboard::M; + case XK_n: return Keyboard::N; + case XK_o: return Keyboard::O; + case XK_p: return Keyboard::P; + case XK_q: return Keyboard::Q; + case XK_r: return Keyboard::R; + case XK_s: return Keyboard::S; + case XK_t: return Keyboard::T; + case XK_u: return Keyboard::U; + case XK_v: return Keyboard::V; + case XK_w: return Keyboard::W; + case XK_x: return Keyboard::X; + case XK_y: return Keyboard::Y; + case XK_z: return Keyboard::Z; + case XK_0: return Keyboard::Num0; + case XK_1: return Keyboard::Num1; + case XK_2: return Keyboard::Num2; + case XK_3: return Keyboard::Num3; + case XK_4: return Keyboard::Num4; + case XK_5: return Keyboard::Num5; + case XK_6: return Keyboard::Num6; + case XK_7: return Keyboard::Num7; + case XK_8: return Keyboard::Num8; + case XK_9: return Keyboard::Num9; } - return sf::Keyboard::Unknown; + return Keyboard::Unknown; } //////////////////////////////////////////////////////////// -/// \brief Convert sf::Keyboard::Key to X11 KeySym +/// \brief Convert Keyboard::Key to X11 KeySym /// -/// \param key X11 sf::Keyboard::Key +/// \param key X11 Keyboard::Key /// /// \return The corresponding X11 KeySym /// //////////////////////////////////////////////////////////// -inline KeySym SFKeyToKeySym(sf::Keyboard::Key key) +inline KeySym SFKeyToKeySym(Keyboard::Key key) { // Get the corresponding X11 keysym KeySym keysym = NoSymbol; switch (key) { - case sf::Keyboard::LShift: keysym = XK_Shift_L; break; - case sf::Keyboard::RShift: keysym = XK_Shift_R; break; - case sf::Keyboard::LControl: keysym = XK_Control_L; break; - case sf::Keyboard::RControl: keysym = XK_Control_R; break; - case sf::Keyboard::LAlt: keysym = XK_Alt_L; break; - case sf::Keyboard::RAlt: keysym = XK_Alt_R; break; - case sf::Keyboard::LSystem: keysym = XK_Super_L; break; - case sf::Keyboard::RSystem: keysym = XK_Super_R; break; - case sf::Keyboard::Menu: keysym = XK_Menu; break; - case sf::Keyboard::Escape: keysym = XK_Escape; break; - case sf::Keyboard::SemiColon: keysym = XK_semicolon; break; - case sf::Keyboard::Slash: keysym = XK_slash; break; - case sf::Keyboard::Equal: keysym = XK_equal; break; - case sf::Keyboard::Dash: keysym = XK_minus; break; - case sf::Keyboard::LBracket: keysym = XK_bracketleft; break; - case sf::Keyboard::RBracket: keysym = XK_bracketright; break; - case sf::Keyboard::Comma: keysym = XK_comma; break; - case sf::Keyboard::Period: keysym = XK_period; break; - case sf::Keyboard::Quote: keysym = XK_apostrophe; break; - case sf::Keyboard::BackSlash: keysym = XK_backslash; break; - case sf::Keyboard::Tilde: keysym = XK_grave; break; - case sf::Keyboard::Space: keysym = XK_space; break; - case sf::Keyboard::Return: keysym = XK_Return; break; - case sf::Keyboard::BackSpace: keysym = XK_BackSpace; break; - case sf::Keyboard::Tab: keysym = XK_Tab; break; - case sf::Keyboard::PageUp: keysym = XK_Prior; break; - case sf::Keyboard::PageDown: keysym = XK_Next; break; - case sf::Keyboard::End: keysym = XK_End; break; - case sf::Keyboard::Home: keysym = XK_Home; break; - case sf::Keyboard::Insert: keysym = XK_Insert; break; - case sf::Keyboard::Delete: keysym = XK_Delete; break; - case sf::Keyboard::Add: keysym = XK_KP_Add; break; - case sf::Keyboard::Subtract: keysym = XK_KP_Subtract; break; - case sf::Keyboard::Multiply: keysym = XK_KP_Multiply; break; - case sf::Keyboard::Divide: keysym = XK_KP_Divide; break; - case sf::Keyboard::Pause: keysym = XK_Pause; break; - case sf::Keyboard::F1: keysym = XK_F1; break; - case sf::Keyboard::F2: keysym = XK_F2; break; - case sf::Keyboard::F3: keysym = XK_F3; break; - case sf::Keyboard::F4: keysym = XK_F4; break; - case sf::Keyboard::F5: keysym = XK_F5; break; - case sf::Keyboard::F6: keysym = XK_F6; break; - case sf::Keyboard::F7: keysym = XK_F7; break; - case sf::Keyboard::F8: keysym = XK_F8; break; - case sf::Keyboard::F9: keysym = XK_F9; break; - case sf::Keyboard::F10: keysym = XK_F10; break; - case sf::Keyboard::F11: keysym = XK_F11; break; - case sf::Keyboard::F12: keysym = XK_F12; break; - case sf::Keyboard::F13: keysym = XK_F13; break; - case sf::Keyboard::F14: keysym = XK_F14; break; - case sf::Keyboard::F15: keysym = XK_F15; break; - case sf::Keyboard::Left: keysym = XK_Left; break; - case sf::Keyboard::Right: keysym = XK_Right; break; - case sf::Keyboard::Up: keysym = XK_Up; break; - case sf::Keyboard::Down: keysym = XK_Down; break; - case sf::Keyboard::Numpad0: keysym = XK_KP_Insert; break; - case sf::Keyboard::Numpad1: keysym = XK_KP_End; break; - case sf::Keyboard::Numpad2: keysym = XK_KP_Down; break; - case sf::Keyboard::Numpad3: keysym = XK_KP_Page_Down; break; - case sf::Keyboard::Numpad4: keysym = XK_KP_Left; break; - case sf::Keyboard::Numpad5: keysym = XK_KP_Begin; break; - case sf::Keyboard::Numpad6: keysym = XK_KP_Right; break; - case sf::Keyboard::Numpad7: keysym = XK_KP_Home; break; - case sf::Keyboard::Numpad8: keysym = XK_KP_Up; break; - case sf::Keyboard::Numpad9: keysym = XK_KP_Page_Up; break; - case sf::Keyboard::A: keysym = XK_a; break; - case sf::Keyboard::B: keysym = XK_b; break; - case sf::Keyboard::C: keysym = XK_c; break; - case sf::Keyboard::D: keysym = XK_d; break; - case sf::Keyboard::E: keysym = XK_e; break; - case sf::Keyboard::F: keysym = XK_f; break; - case sf::Keyboard::G: keysym = XK_g; break; - case sf::Keyboard::H: keysym = XK_h; break; - case sf::Keyboard::I: keysym = XK_i; break; - case sf::Keyboard::J: keysym = XK_j; break; - case sf::Keyboard::K: keysym = XK_k; break; - case sf::Keyboard::L: keysym = XK_l; break; - case sf::Keyboard::M: keysym = XK_m; break; - case sf::Keyboard::N: keysym = XK_n; break; - case sf::Keyboard::O: keysym = XK_o; break; - case sf::Keyboard::P: keysym = XK_p; break; - case sf::Keyboard::Q: keysym = XK_q; break; - case sf::Keyboard::R: keysym = XK_r; break; - case sf::Keyboard::S: keysym = XK_s; break; - case sf::Keyboard::T: keysym = XK_t; break; - case sf::Keyboard::U: keysym = XK_u; break; - case sf::Keyboard::V: keysym = XK_v; break; - case sf::Keyboard::W: keysym = XK_w; break; - case sf::Keyboard::X: keysym = XK_x; break; - case sf::Keyboard::Y: keysym = XK_y; break; - case sf::Keyboard::Z: keysym = XK_z; break; - case sf::Keyboard::Num0: keysym = XK_0; break; - case sf::Keyboard::Num1: keysym = XK_1; break; - case sf::Keyboard::Num2: keysym = XK_2; break; - case sf::Keyboard::Num3: keysym = XK_3; break; - case sf::Keyboard::Num4: keysym = XK_4; break; - case sf::Keyboard::Num5: keysym = XK_5; break; - case sf::Keyboard::Num6: keysym = XK_6; break; - case sf::Keyboard::Num7: keysym = XK_7; break; - case sf::Keyboard::Num8: keysym = XK_8; break; - case sf::Keyboard::Num9: keysym = XK_9; break; + case Keyboard::LShift: keysym = XK_Shift_L; break; + case Keyboard::RShift: keysym = XK_Shift_R; break; + case Keyboard::LControl: keysym = XK_Control_L; break; + case Keyboard::RControl: keysym = XK_Control_R; break; + case Keyboard::LAlt: keysym = XK_Alt_L; break; + case Keyboard::RAlt: keysym = XK_Alt_R; break; + case Keyboard::LSystem: keysym = XK_Super_L; break; + case Keyboard::RSystem: keysym = XK_Super_R; break; + case Keyboard::Menu: keysym = XK_Menu; break; + case Keyboard::Escape: keysym = XK_Escape; break; + case Keyboard::SemiColon: keysym = XK_semicolon; break; + case Keyboard::Slash: keysym = XK_slash; break; + case Keyboard::Equal: keysym = XK_equal; break; + case Keyboard::Dash: keysym = XK_minus; break; + case Keyboard::LBracket: keysym = XK_bracketleft; break; + case Keyboard::RBracket: keysym = XK_bracketright; break; + case Keyboard::Comma: keysym = XK_comma; break; + case Keyboard::Period: keysym = XK_period; break; + case Keyboard::Quote: keysym = XK_apostrophe; break; + case Keyboard::BackSlash: keysym = XK_backslash; break; + case Keyboard::Tilde: keysym = XK_grave; break; + case Keyboard::Space: keysym = XK_space; break; + case Keyboard::Return: keysym = XK_Return; break; + case Keyboard::BackSpace: keysym = XK_BackSpace; break; + case Keyboard::Tab: keysym = XK_Tab; break; + case Keyboard::PageUp: keysym = XK_Prior; break; + case Keyboard::PageDown: keysym = XK_Next; break; + case Keyboard::End: keysym = XK_End; break; + case Keyboard::Home: keysym = XK_Home; break; + case Keyboard::Insert: keysym = XK_Insert; break; + case Keyboard::Delete: keysym = XK_Delete; break; + case Keyboard::Add: keysym = XK_KP_Add; break; + case Keyboard::Subtract: keysym = XK_KP_Subtract; break; + case Keyboard::Multiply: keysym = XK_KP_Multiply; break; + case Keyboard::Divide: keysym = XK_KP_Divide; break; + case Keyboard::Pause: keysym = XK_Pause; break; + case Keyboard::F1: keysym = XK_F1; break; + case Keyboard::F2: keysym = XK_F2; break; + case Keyboard::F3: keysym = XK_F3; break; + case Keyboard::F4: keysym = XK_F4; break; + case Keyboard::F5: keysym = XK_F5; break; + case Keyboard::F6: keysym = XK_F6; break; + case Keyboard::F7: keysym = XK_F7; break; + case Keyboard::F8: keysym = XK_F8; break; + case Keyboard::F9: keysym = XK_F9; break; + case Keyboard::F10: keysym = XK_F10; break; + case Keyboard::F11: keysym = XK_F11; break; + case Keyboard::F12: keysym = XK_F12; break; + case Keyboard::F13: keysym = XK_F13; break; + case Keyboard::F14: keysym = XK_F14; break; + case Keyboard::F15: keysym = XK_F15; break; + case Keyboard::Left: keysym = XK_Left; break; + case Keyboard::Right: keysym = XK_Right; break; + case Keyboard::Up: keysym = XK_Up; break; + case Keyboard::Down: keysym = XK_Down; break; + case Keyboard::Numpad0: keysym = XK_KP_Insert; break; + case Keyboard::Numpad1: keysym = XK_KP_End; break; + case Keyboard::Numpad2: keysym = XK_KP_Down; break; + case Keyboard::Numpad3: keysym = XK_KP_Page_Down; break; + case Keyboard::Numpad4: keysym = XK_KP_Left; break; + case Keyboard::Numpad5: keysym = XK_KP_Begin; break; + case Keyboard::Numpad6: keysym = XK_KP_Right; break; + case Keyboard::Numpad7: keysym = XK_KP_Home; break; + case Keyboard::Numpad8: keysym = XK_KP_Up; break; + case Keyboard::Numpad9: keysym = XK_KP_Page_Up; break; + case Keyboard::A: keysym = XK_a; break; + case Keyboard::B: keysym = XK_b; break; + case Keyboard::C: keysym = XK_c; break; + case Keyboard::D: keysym = XK_d; break; + case Keyboard::E: keysym = XK_e; break; + case Keyboard::F: keysym = XK_f; break; + case Keyboard::G: keysym = XK_g; break; + case Keyboard::H: keysym = XK_h; break; + case Keyboard::I: keysym = XK_i; break; + case Keyboard::J: keysym = XK_j; break; + case Keyboard::K: keysym = XK_k; break; + case Keyboard::L: keysym = XK_l; break; + case Keyboard::M: keysym = XK_m; break; + case Keyboard::N: keysym = XK_n; break; + case Keyboard::O: keysym = XK_o; break; + case Keyboard::P: keysym = XK_p; break; + case Keyboard::Q: keysym = XK_q; break; + case Keyboard::R: keysym = XK_r; break; + case Keyboard::S: keysym = XK_s; break; + case Keyboard::T: keysym = XK_t; break; + case Keyboard::U: keysym = XK_u; break; + case Keyboard::V: keysym = XK_v; break; + case Keyboard::W: keysym = XK_w; break; + case Keyboard::X: keysym = XK_x; break; + case Keyboard::Y: keysym = XK_y; break; + case Keyboard::Z: keysym = XK_z; break; + case Keyboard::Num0: keysym = XK_0; break; + case Keyboard::Num1: keysym = XK_1; break; + case Keyboard::Num2: keysym = XK_2; break; + case Keyboard::Num3: keysym = XK_3; break; + case Keyboard::Num4: keysym = XK_4; break; + case Keyboard::Num5: keysym = XK_5; break; + case Keyboard::Num6: keysym = XK_6; break; + case Keyboard::Num7: keysym = XK_7; break; + case Keyboard::Num8: keysym = XK_8; break; + case Keyboard::Num9: keysym = XK_9; break; default: keysym = 0; break; } return keysym; diff --git a/src/SFML/Window/Unix/KeyboardImpl.cpp b/src/SFML/Window/Unix/KeyboardImpl.cpp index bd756a51..57960fe7 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.cpp +++ b/src/SFML/Window/Unix/KeyboardImpl.cpp @@ -35,11 +35,6 @@ #include #include -namespace sf -{ -namespace priv -{ - namespace { KeyCode scancodeToKeycode[sf::Keyboard::ScanCodeCount] = { 0 }; ///< Mapping of SFML scancode to X11 KeyCode @@ -230,7 +225,7 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) void initMapping() { - Display* display = OpenDisplay(); + Display* display = sf::priv::OpenDisplay(); // Find the X11 key code -> SFML key code mapping // This code was inspired by GLFW implementation @@ -317,7 +312,7 @@ void initMapping() } } - CloseDisplay(display); + sf::priv::CloseDisplay(display); isMappingInitialized = true; } @@ -345,12 +340,12 @@ sf::Keyboard::Scancode keyCodeToSFScancode(KeyCode code) //////////////////////////////////////////////////////////// KeyCode SFKeyToKeyCode(sf::Keyboard::Key key) { - KeySym keysym = SFKeyToKeySym(key); + KeySym keysym = sf::priv::SFKeyToKeySym(key); if (keysym != NoSymbol) { - Display* display = OpenDisplay(); + Display* display = sf::priv::OpenDisplay(); KeyCode keycode = XKeysymToKeycode(display, keysym); - CloseDisplay(display); + sf::priv::CloseDisplay(display); return keycode; } return 0; @@ -359,12 +354,12 @@ KeyCode SFKeyToKeyCode(sf::Keyboard::Key key) //////////////////////////////////////////////////////////// KeySym SFScancodeToKeySym(sf::Keyboard::Scancode code) { - Display* display = OpenDisplay(); + Display* display = sf::priv::OpenDisplay(); KeySym keysym = NoSymbol; KeyCode keycode = SFScancodeToKeyCode(code); if (keycode != 0) // ensure that this Scancode is mapped to keycode keysym = XkbKeycodeToKeysym(display, keycode, 0, 0); - CloseDisplay(display); + sf::priv::CloseDisplay(display); return keysym; } @@ -373,13 +368,13 @@ bool isKeyPressedImpl(KeyCode keycode) { if (keycode != 0) { - Display* display = OpenDisplay(); + Display* display = sf::priv::OpenDisplay(); // Get the whole keyboard state char keys[32]; XQueryKeymap(display, keys); - CloseDisplay(display); + sf::priv::CloseDisplay(display); // Check our keycode return (keys[keycode / 8] & (1 << (keycode % 8))) != 0; @@ -389,8 +384,13 @@ bool isKeyPressedImpl(KeyCode keycode) } // anonymous namespace +namespace sf +{ +namespace priv +{ + //////////////////////////////////////////////////////////// -bool KeyboardImpl::isKeyPressed(sf::Keyboard::Key key) +bool KeyboardImpl::isKeyPressed(Keyboard::Key key) { KeyCode keycode = SFKeyToKeyCode(key); return isKeyPressedImpl(keycode); @@ -398,7 +398,7 @@ bool KeyboardImpl::isKeyPressed(sf::Keyboard::Key key) //////////////////////////////////////////////////////////// -bool KeyboardImpl::isKeyPressed(sf::Keyboard::Scancode code) +bool KeyboardImpl::isKeyPressed(Keyboard::Scancode code) { KeyCode keycode = SFScancodeToKeyCode(code); return isKeyPressedImpl(keycode); @@ -406,7 +406,7 @@ bool KeyboardImpl::isKeyPressed(sf::Keyboard::Scancode code) //////////////////////////////////////////////////////////// -sf::Keyboard::Scancode KeyboardImpl::unlocalize(sf::Keyboard::Key key) +Keyboard::Scancode KeyboardImpl::unlocalize(Keyboard::Key key) { KeyCode keycode = SFKeyToKeyCode(key); return keyCodeToSFScancode(keycode); @@ -414,25 +414,25 @@ sf::Keyboard::Scancode KeyboardImpl::unlocalize(sf::Keyboard::Key key) //////////////////////////////////////////////////////////// -sf::Keyboard::Key KeyboardImpl::localize(sf::Keyboard::Scancode code) +Keyboard::Key KeyboardImpl::localize(Keyboard::Scancode code) { KeySym keysym = SFScancodeToKeySym(code); return keySymToSFKey(keysym); } //////////////////////////////////////////////////////////// -sf::String KeyboardImpl::getDescription(Keyboard::Scancode code) +String KeyboardImpl::getDescription(Keyboard::Scancode code) { bool checkInput = true; // these scancodes actually correspond to keys with input // but we want to return their description, not their behaviour - if (code == sf::Keyboard::ScanEnter || - code == sf::Keyboard::ScanReturn || - code == sf::Keyboard::ScanTab || - code == sf::Keyboard::ScanDelete || - code == sf::Keyboard::ScanBackspace || - code == sf::Keyboard::ScanSpace) + if (code == Keyboard::ScanEnter || + code == Keyboard::ScanReturn || + code == Keyboard::ScanTab || + code == Keyboard::ScanDelete || + code == Keyboard::ScanBackspace || + code == Keyboard::ScanSpace) { checkInput = false; } @@ -440,98 +440,98 @@ sf::String KeyboardImpl::getDescription(Keyboard::Scancode code) if (checkInput) { KeySym keysym = SFScancodeToKeySym(code); - sf::Uint32 unicode = keysymToUnicode(keysym); + Uint32 unicode = keysymToUnicode(keysym); if (unicode != 0) - return sf::String(unicode); + return String(unicode); } // 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 Keyboard::ScanEnter: return "Enter"; + case Keyboard::ScanEscape: return "Escape"; + case Keyboard::ScanBackspace: return "Backspace"; + case Keyboard::ScanTab: return "Tab"; + case 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 Keyboard::ScanF1: return "F1"; + case Keyboard::ScanF2: return "F2"; + case Keyboard::ScanF3: return "F3"; + case Keyboard::ScanF4: return "F4"; + case Keyboard::ScanF5: return "F5"; + case Keyboard::ScanF6: return "F6"; + case Keyboard::ScanF7: return "F7"; + case Keyboard::ScanF8: return "F8"; + case Keyboard::ScanF9: return "F9"; + case Keyboard::ScanF10: return "F10"; + case Keyboard::ScanF11: return "F11"; + case Keyboard::ScanF12: return "F12"; + case Keyboard::ScanF13: return "F13"; + case Keyboard::ScanF14: return "F14"; + case Keyboard::ScanF15: return "F15"; - case sf::Keyboard::ScanCapsLock: return "CapsLock"; - case sf::Keyboard::ScanPrintScreen: return "PrintScreen"; - case sf::Keyboard::ScanScrollLock: return "ScrollLock"; + case Keyboard::ScanCapsLock: return "CapsLock"; + case Keyboard::ScanPrintScreen: return "PrintScreen"; + case Keyboard::ScanScrollLock: return "ScrollLock"; - 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 Keyboard::ScanPause: return "Pause"; + case Keyboard::ScanInsert: return "Insert"; + case Keyboard::ScanHome: return "Home"; + case Keyboard::ScanPageUp: return "PageUp"; + case Keyboard::ScanDelete: return "Delete"; + case Keyboard::ScanEnd: return "End"; + case 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 Keyboard::ScanLeft: return "Left Arrow"; + case Keyboard::ScanRight: return "Right Arrow"; + case Keyboard::ScanDown: return "Down Arrow"; + case 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 Keyboard::ScanNumLock: return "NumLock"; + case Keyboard::ScanDivide: return "Divide (Numpad)"; + case Keyboard::ScanMultiply: return "Multiply (Numpad)"; + case Keyboard::ScanMinus: return "Minux (Numpad)"; + case Keyboard::ScanPlus: return "Plus (Numpad)"; + case Keyboard::ScanPadEquals: return "Equals (Numpad)"; + case Keyboard::ScanReturn: return "Return (Numpad)"; + case 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 Keyboard::ScanNumpad0: return "0 (Numpad)"; + case Keyboard::ScanNumpad1: return "1 (Numpad)"; + case Keyboard::ScanNumpad2: return "2 (Numpad)"; + case Keyboard::ScanNumpad3: return "3 (Numpad)"; + case Keyboard::ScanNumpad4: return "4 (Numpad)"; + case Keyboard::ScanNumpad5: return "5 (Numpad)"; + case Keyboard::ScanNumpad6: return "6 (Numpad)"; + case Keyboard::ScanNumpad7: return "7 (Numpad)"; + case Keyboard::ScanNumpad8: return "8 (Numpad)"; + case 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 Keyboard::ScanApplication: return "Application"; + case Keyboard::ScanExecute: return "Execute"; + case Keyboard::ScanHelp: return "Help"; + case Keyboard::ScanMenu: return "Menu"; + case Keyboard::ScanSelect: return "Select"; + case Keyboard::ScanStop: return "Stop"; + case Keyboard::ScanAgain: return "Again"; + case Keyboard::ScanUndo: return "Undo"; + case Keyboard::ScanCut: return "Cut"; + case Keyboard::ScanCopy: return "Copy"; + case Keyboard::ScanPaste: return "Paste"; + case Keyboard::ScanFind: return "Find"; + case Keyboard::ScanMute: return "Mute"; + case Keyboard::ScanVolumeUp: return "Volume Up"; + case 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 "Meta (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 "Meta (Right)"; + case Keyboard::ScanLControl: return "Control (Left)"; + case Keyboard::ScanLShift: return "Shift (Left)"; + case Keyboard::ScanLAlt: return "Alt (Left)"; + case Keyboard::ScanLSystem: return "Meta (Left)"; + case Keyboard::ScanRControl: return "Control (Right)"; + case Keyboard::ScanRShift: return "Shift (Right)"; + case Keyboard::ScanRAlt: return "Alt (Right)"; + case Keyboard::ScanRSystem: return "Meta (Right)"; } return "Unknown Scancode"; // no guess good enough possible. @@ -539,9 +539,9 @@ sf::String KeyboardImpl::getDescription(Keyboard::Scancode code) //////////////////////////////////////////////////////////// -sf::Keyboard::Key KeyboardImpl::getKeyFromEvent(XKeyEvent& event) +Keyboard::Key KeyboardImpl::getKeyFromEvent(XKeyEvent& event) { - sf::Keyboard::Key key = Keyboard::Unknown; + Keyboard::Key key = Keyboard::Unknown; // Try each KeySym index (modifier group) until we get a match for (int i = 0; i < 4; ++i) @@ -558,7 +558,7 @@ sf::Keyboard::Key KeyboardImpl::getKeyFromEvent(XKeyEvent& event) //////////////////////////////////////////////////////////// -sf::Keyboard::Scancode KeyboardImpl::getScancodeFromEvent(XKeyEvent& event) +Keyboard::Scancode KeyboardImpl::getScancodeFromEvent(XKeyEvent& event) { return keyCodeToSFScancode(event.keycode); } diff --git a/src/SFML/Window/Unix/KeyboardImpl.hpp b/src/SFML/Window/Unix/KeyboardImpl.hpp index 6e43c296..3b01e217 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.hpp +++ b/src/SFML/Window/Unix/KeyboardImpl.hpp @@ -52,31 +52,31 @@ public: /// \copydoc sf::Keyboard::isKeyPressed(Key) /// //////////////////////////////////////////////////////////// - static bool isKeyPressed(sf::Keyboard::Key key); + static bool isKeyPressed(Keyboard::Key key); //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::isKeyPressed(Scancode) /// //////////////////////////////////////////////////////////// - static bool isKeyPressed(sf::Keyboard::Scancode code); + static bool isKeyPressed(Keyboard::Scancode code); //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::localize /// //////////////////////////////////////////////////////////// - static sf::Keyboard::Scancode unlocalize(sf::Keyboard::Key key); + static Keyboard::Scancode unlocalize(Keyboard::Key key); //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::unlocalize /// //////////////////////////////////////////////////////////// - static sf::Keyboard::Key localize(sf::Keyboard::Scancode code); + static Keyboard::Key localize(Keyboard::Scancode code); //////////////////////////////////////////////////////////// /// \copydoc sf::Keyboard::getDescription /// //////////////////////////////////////////////////////////// - static sf::String getDescription(Keyboard::Scancode code); + static String getDescription(Keyboard::Scancode code); //////////////////////////////////////////////////////////// /// \brief Get the sf::Keyboard::Key from XKeyEvent @@ -86,7 +86,7 @@ public: /// \return A key being pressed or released /// //////////////////////////////////////////////////////////// - static sf::Keyboard::Key getKeyFromEvent(XKeyEvent& event); + static Keyboard::Key getKeyFromEvent(XKeyEvent& event); //////////////////////////////////////////////////////////// /// \brief Get the sf::Keyboard::Scancode from XKeyEvent @@ -96,7 +96,7 @@ public: /// \return A scancode of a key being pressed or released /// //////////////////////////////////////////////////////////// - static sf::Keyboard::Scancode getScancodeFromEvent(XKeyEvent& event); + static Keyboard::Scancode getScancodeFromEvent(XKeyEvent& event); }; } // namespace priv From e40063ab6faec295ee840ef5d58e9d720275ab64 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Sat, 31 Mar 2018 18:12:40 +0300 Subject: [PATCH 23/59] Small fixes --- src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp b/src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp index 14fecf37..5ef4f425 100644 --- a/src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp +++ b/src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp @@ -157,9 +157,9 @@ inline Keyboard::Key keySymToSFKey(KeySym symbol) //////////////////////////////////////////////////////////// -/// \brief Convert Keyboard::Key to X11 KeySym +/// \brief Convert sf::Keyboard::Key to X11 KeySym /// -/// \param key X11 Keyboard::Key +/// \param key X11 sf::Keyboard::Key /// /// \return The corresponding X11 KeySym /// @@ -271,7 +271,6 @@ inline KeySym SFKeyToKeySym(Keyboard::Key key) case Keyboard::Num7: keysym = XK_7; break; case Keyboard::Num8: keysym = XK_8; break; case Keyboard::Num9: keysym = XK_9; break; - default: keysym = 0; break; } return keysym; } From e430aa3106ab2aeb36a5e9ffcda69b083f6966ca Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Mon, 2 Apr 2018 22:39:47 +0300 Subject: [PATCH 24/59] Added NullKeyCode constant for readability --- src/SFML/Window/Unix/KeyboardImpl.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/SFML/Window/Unix/KeyboardImpl.cpp b/src/SFML/Window/Unix/KeyboardImpl.cpp index 57960fe7..7f70e588 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.cpp +++ b/src/SFML/Window/Unix/KeyboardImpl.cpp @@ -37,7 +37,8 @@ namespace { -KeyCode scancodeToKeycode[sf::Keyboard::ScanCodeCount] = { 0 }; ///< Mapping of SFML scancode to X11 KeyCode +const KeyCode NullKeyCode = 0; +KeyCode scancodeToKeycode[sf::Keyboard::ScanCodeCount] = { NullKeyCode }; ///< Mapping of SFML scancode to X11 KeyCode sf::Keyboard::Scancode keycodeToScancode[256] = { sf::Keyboard::ScanUnknown}; ///< Mapping of X11 KeyCode to SFML scancode bool isMappingInitialized = false; @@ -348,7 +349,7 @@ KeyCode SFKeyToKeyCode(sf::Keyboard::Key key) sf::priv::CloseDisplay(display); return keycode; } - return 0; + return NullKeyCode; } //////////////////////////////////////////////////////////// @@ -357,7 +358,7 @@ KeySym SFScancodeToKeySym(sf::Keyboard::Scancode code) Display* display = sf::priv::OpenDisplay(); KeySym keysym = NoSymbol; KeyCode keycode = SFScancodeToKeyCode(code); - if (keycode != 0) // ensure that this Scancode is mapped to keycode + if (keycode != NullKeyCode) // ensure that this Scancode is mapped to keycode keysym = XkbKeycodeToKeysym(display, keycode, 0, 0); sf::priv::CloseDisplay(display); return keysym; @@ -366,7 +367,7 @@ KeySym SFScancodeToKeySym(sf::Keyboard::Scancode code) //////////////////////////////////////////////////////////// bool isKeyPressedImpl(KeyCode keycode) { - if (keycode != 0) + if (keycode != NullKeyCode) { Display* display = sf::priv::OpenDisplay(); From 8850944f83c365c2ba233fc085cd9ad1db9727c2 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Tue, 3 Apr 2018 00:11:31 +0300 Subject: [PATCH 25/59] Changed getDescription output: Alt -> Meta, System -> Super --- src/SFML/Window/Unix/KeyboardImpl.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/SFML/Window/Unix/KeyboardImpl.cpp b/src/SFML/Window/Unix/KeyboardImpl.cpp index 7f70e588..5f89d617 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.cpp +++ b/src/SFML/Window/Unix/KeyboardImpl.cpp @@ -527,12 +527,12 @@ String KeyboardImpl::getDescription(Keyboard::Scancode code) case Keyboard::ScanLControl: return "Control (Left)"; case Keyboard::ScanLShift: return "Shift (Left)"; - case Keyboard::ScanLAlt: return "Alt (Left)"; - case Keyboard::ScanLSystem: return "Meta (Left)"; + case Keyboard::ScanLAlt: return "Meta (Left)"; + case Keyboard::ScanLSystem: return "Super (Left)"; case Keyboard::ScanRControl: return "Control (Right)"; case Keyboard::ScanRShift: return "Shift (Right)"; - case Keyboard::ScanRAlt: return "Alt (Right)"; - case Keyboard::ScanRSystem: return "Meta (Right)"; + case Keyboard::ScanRAlt: return "Meta (Right)"; + case Keyboard::ScanRSystem: return "Super (Right)"; } return "Unknown Scancode"; // no guess good enough possible. From 993cf0bcdc5c6ff981427764d3b21a1e38e7c1b7 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Tue, 3 Apr 2018 01:16:06 +0300 Subject: [PATCH 26/59] Correct initialization of mapping arrays --- src/SFML/Window/Unix/KeyboardImpl.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/SFML/Window/Unix/KeyboardImpl.cpp b/src/SFML/Window/Unix/KeyboardImpl.cpp index 5f89d617..e830b4b1 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.cpp +++ b/src/SFML/Window/Unix/KeyboardImpl.cpp @@ -38,8 +38,8 @@ namespace { const KeyCode NullKeyCode = 0; -KeyCode scancodeToKeycode[sf::Keyboard::ScanCodeCount] = { NullKeyCode }; ///< Mapping of SFML scancode to X11 KeyCode -sf::Keyboard::Scancode keycodeToScancode[256] = { sf::Keyboard::ScanUnknown}; ///< Mapping of X11 KeyCode to SFML scancode +KeyCode scancodeToKeycode[sf::Keyboard::ScanCodeCount]; ///< Mapping of SFML scancode to X11 KeyCode +sf::Keyboard::Scancode keycodeToScancode[256]; ///< Mapping of X11 KeyCode to SFML scancode bool isMappingInitialized = false; //////////////////////////////////////////////////////////// @@ -226,6 +226,12 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) void initMapping() { + for (int i = 0; i < 256; ++i) + scancodeToKeycode[i] = NullKeyCode; + + for (int i = 0; i < sf::Keyboard::ScanCodeCount; ++i) + keycodeToScancode[i] = sf::Keyboard::ScanUnknown; + Display* display = sf::priv::OpenDisplay(); // Find the X11 key code -> SFML key code mapping From d78858fe371e7512041ff77e26577eb247964616 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Tue, 3 Apr 2018 01:34:41 +0300 Subject: [PATCH 27/59] Added "ReverseSolidus" support --- src/SFML/Window/Unix/KeyboardImpl.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/SFML/Window/Unix/KeyboardImpl.cpp b/src/SFML/Window/Unix/KeyboardImpl.cpp index e830b4b1..ee8ce59e 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.cpp +++ b/src/SFML/Window/Unix/KeyboardImpl.cpp @@ -216,7 +216,7 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) case XK_comma: return sf::Keyboard::ScanComma; case XK_period: return sf::Keyboard::ScanPeriod; case XK_slash: return sf::Keyboard::ScanForwardSlash; - // case XK_less: return sf::Keyboard::ScanWorld1; // At least in some layouts... + case XK_less: return sf::Keyboard::ScanReverseSolidus; default: break; } @@ -295,6 +295,7 @@ void initMapping() else if (strcmp(name, "AB08") == 0) sc = sf::Keyboard::ScanComma; else if (strcmp(name, "AB09") == 0) sc = sf::Keyboard::ScanPeriod; else if (strcmp(name, "AB10") == 0) sc = sf::Keyboard::ScanForwardSlash; + else if (strcmp(name, "LSGT") == 0) sc = sf::Keyboard::ScanReverseSolidus; else sc = sf::Keyboard::ScanUnknown; if (isValidKeycode(keycode)) From 0632f88379f1db5161406af178a48e9b09d842d6 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Tue, 3 Apr 2018 02:14:15 +0300 Subject: [PATCH 28/59] Better order of includes --- src/SFML/Window/Unix/InputImpl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SFML/Window/Unix/InputImpl.cpp b/src/SFML/Window/Unix/InputImpl.cpp index a5d84de8..4783d4e7 100644 --- a/src/SFML/Window/Unix/InputImpl.cpp +++ b/src/SFML/Window/Unix/InputImpl.cpp @@ -26,8 +26,8 @@ // Headers //////////////////////////////////////////////////////////// #include // important to be included first (conflict with None) -#include #include +#include #include #include #include From 2ca993e96ee31e0d2ad7a57526496576555cf638 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Sat, 7 Apr 2018 22:45:18 +0300 Subject: [PATCH 29/59] Swap ScanEnter and ScanReturn (ScanEnter = Numpad Enter, ScanReturn = Keyboard Enter) --- src/SFML/Window/Unix/KeyboardImpl.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/SFML/Window/Unix/KeyboardImpl.cpp b/src/SFML/Window/Unix/KeyboardImpl.cpp index ee8ce59e..d764967d 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.cpp +++ b/src/SFML/Window/Unix/KeyboardImpl.cpp @@ -75,7 +75,7 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) case XK_KP_Separator: case XK_KP_Decimal: return sf::Keyboard::ScanDecimal; case XK_KP_Equal: return sf::Keyboard::ScanPadEquals; - case XK_KP_Enter: return sf::Keyboard::ScanReturn; + case XK_KP_Enter: return sf::Keyboard::ScanEnter; default: break; } @@ -107,7 +107,7 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) case XK_Pause: return sf::Keyboard::ScanPause; case XK_Delete: return sf::Keyboard::ScanDelete; case XK_BackSpace: return sf::Keyboard::ScanBackspace; - case XK_Return: return sf::Keyboard::ScanEnter; + case XK_Return: return sf::Keyboard::ScanReturn; case XK_Home: return sf::Keyboard::ScanHome; case XK_End: return sf::Keyboard::ScanEnd; case XK_Page_Up: return sf::Keyboard::ScanPageUp; @@ -457,7 +457,7 @@ String KeyboardImpl::getDescription(Keyboard::Scancode code) // Fallback to our best guess for the keys that are known to be independent of the layout. switch (code) { - case Keyboard::ScanEnter: return "Enter"; + case Keyboard::ScanReturn: return "Enter"; case Keyboard::ScanEscape: return "Escape"; case Keyboard::ScanBackspace: return "Backspace"; case Keyboard::ScanTab: return "Tab"; @@ -502,7 +502,7 @@ String KeyboardImpl::getDescription(Keyboard::Scancode code) case Keyboard::ScanMinus: return "Minux (Numpad)"; case Keyboard::ScanPlus: return "Plus (Numpad)"; case Keyboard::ScanPadEquals: return "Equals (Numpad)"; - case Keyboard::ScanReturn: return "Return (Numpad)"; + case Keyboard::ScanEnter: return "Enter (Numpad)"; case Keyboard::ScanDecimal: return "Decimal (Numpad)"; case Keyboard::ScanNumpad0: return "0 (Numpad)"; From c99611a22678f5db33e8d7b271def5e505ad3d89 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Sat, 7 Apr 2018 22:53:45 +0300 Subject: [PATCH 30/59] Really fix enter keys confusion... --- src/SFML/Window/Unix/KeyboardImpl.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/SFML/Window/Unix/KeyboardImpl.cpp b/src/SFML/Window/Unix/KeyboardImpl.cpp index d764967d..da08940d 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.cpp +++ b/src/SFML/Window/Unix/KeyboardImpl.cpp @@ -75,7 +75,7 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) case XK_KP_Separator: case XK_KP_Decimal: return sf::Keyboard::ScanDecimal; case XK_KP_Equal: return sf::Keyboard::ScanPadEquals; - case XK_KP_Enter: return sf::Keyboard::ScanEnter; + case XK_KP_Enter: return sf::Keyboard::ScanReturn; default: break; } @@ -107,7 +107,7 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) case XK_Pause: return sf::Keyboard::ScanPause; case XK_Delete: return sf::Keyboard::ScanDelete; case XK_BackSpace: return sf::Keyboard::ScanBackspace; - case XK_Return: return sf::Keyboard::ScanReturn; + case XK_Return: return sf::Keyboard::ScanEnter; case XK_Home: return sf::Keyboard::ScanHome; case XK_End: return sf::Keyboard::ScanEnd; case XK_Page_Up: return sf::Keyboard::ScanPageUp; @@ -457,7 +457,7 @@ String KeyboardImpl::getDescription(Keyboard::Scancode code) // Fallback to our best guess for the keys that are known to be independent of the layout. switch (code) { - case Keyboard::ScanReturn: return "Enter"; + case Keyboard::ScanEnter: return "Enter"; case Keyboard::ScanEscape: return "Escape"; case Keyboard::ScanBackspace: return "Backspace"; case Keyboard::ScanTab: return "Tab"; @@ -502,7 +502,7 @@ String KeyboardImpl::getDescription(Keyboard::Scancode code) case Keyboard::ScanMinus: return "Minux (Numpad)"; case Keyboard::ScanPlus: return "Plus (Numpad)"; case Keyboard::ScanPadEquals: return "Equals (Numpad)"; - case Keyboard::ScanEnter: return "Enter (Numpad)"; + case Keyboard::ScanReturn: return "Enter (Numpad)"; case Keyboard::ScanDecimal: return "Decimal (Numpad)"; case Keyboard::ScanNumpad0: return "0 (Numpad)"; From dae210e75cdc2cdf38f172b9de47a446a643de26 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Sat, 7 Apr 2018 22:56:53 +0300 Subject: [PATCH 31/59] Fix formatting --- src/SFML/Window/Unix/KeyboardImpl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SFML/Window/Unix/KeyboardImpl.cpp b/src/SFML/Window/Unix/KeyboardImpl.cpp index da08940d..a662e8e2 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.cpp +++ b/src/SFML/Window/Unix/KeyboardImpl.cpp @@ -457,7 +457,7 @@ String KeyboardImpl::getDescription(Keyboard::Scancode code) // Fallback to our best guess for the keys that are known to be independent of the layout. switch (code) { - case Keyboard::ScanEnter: return "Enter"; + case Keyboard::ScanEnter: return "Enter"; case Keyboard::ScanEscape: return "Escape"; case Keyboard::ScanBackspace: return "Backspace"; case Keyboard::ScanTab: return "Tab"; @@ -502,7 +502,7 @@ String KeyboardImpl::getDescription(Keyboard::Scancode code) case Keyboard::ScanMinus: return "Minux (Numpad)"; case Keyboard::ScanPlus: return "Plus (Numpad)"; case Keyboard::ScanPadEquals: return "Equals (Numpad)"; - case Keyboard::ScanReturn: return "Enter (Numpad)"; + case Keyboard::ScanReturn: return "Enter (Numpad)"; case Keyboard::ScanDecimal: return "Decimal (Numpad)"; case Keyboard::ScanNumpad0: return "0 (Numpad)"; From babd5af0743c6d4d13c52cff3e6ac27e36e102f7 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Mon, 9 Apr 2018 23:56:55 +0300 Subject: [PATCH 32/59] Code review changes --- src/SFML/Window/CMakeLists.txt | 4 +- src/SFML/Window/Unix/InputImpl.cpp | 1 - src/SFML/Window/Unix/KeySymToKeyMapping.cpp | 261 +++ src/SFML/Window/Unix/KeySymToKeyMapping.hpp | 63 + src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp | 282 ---- .../Window/Unix/KeySymToUnicodeMapping.cpp | 1399 +++++++++++++++++ .../Window/Unix/KeySymToUnicodeMapping.hpp | 1366 +--------------- src/SFML/Window/Unix/KeyboardImpl.cpp | 88 +- src/SFML/Window/Unix/KeyboardImpl.hpp | 17 +- 9 files changed, 1787 insertions(+), 1694 deletions(-) create mode 100644 src/SFML/Window/Unix/KeySymToKeyMapping.cpp create mode 100644 src/SFML/Window/Unix/KeySymToKeyMapping.hpp delete mode 100644 src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp create mode 100644 src/SFML/Window/Unix/KeySymToUnicodeMapping.cpp diff --git a/src/SFML/Window/CMakeLists.txt b/src/SFML/Window/CMakeLists.txt index 61442e6a..b176563e 100644 --- a/src/SFML/Window/CMakeLists.txt +++ b/src/SFML/Window/CMakeLists.txt @@ -93,8 +93,10 @@ elseif(SFML_OS_LINUX OR SFML_OS_FREEBSD OR SFML_OS_OPENBSD) ${SRCROOT}/Unix/InputImpl.hpp ${SRCROOT}/Unix/KeyboardImpl.hpp ${SRCROOT}/Unix/KeyboardImpl.cpp - ${SRCROOT}/Unix/KeySymToSFKeyMapping.hpp + ${SRCROOT}/Unix/KeySymToKeyMapping.hpp + ${SRCROOT}/Unix/KeySymToKeyMapping.cpp ${SRCROOT}/Unix/KeySymToUnicodeMapping.hpp + ${SRCROOT}/Unix/KeySymToUnicodeMapping.cpp ${SRCROOT}/Unix/SensorImpl.cpp ${SRCROOT}/Unix/SensorImpl.hpp ${SRCROOT}/Unix/VideoModeImpl.cpp diff --git a/src/SFML/Window/Unix/InputImpl.cpp b/src/SFML/Window/Unix/InputImpl.cpp index 4783d4e7..532a2103 100644 --- a/src/SFML/Window/Unix/InputImpl.cpp +++ b/src/SFML/Window/Unix/InputImpl.cpp @@ -33,7 +33,6 @@ #include #include - namespace sf { namespace priv diff --git a/src/SFML/Window/Unix/KeySymToKeyMapping.cpp b/src/SFML/Window/Unix/KeySymToKeyMapping.cpp new file mode 100644 index 00000000..e2fbba62 --- /dev/null +++ b/src/SFML/Window/Unix/KeySymToKeyMapping.cpp @@ -0,0 +1,261 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2018 Laurent Gomila (laurent@sfml-dev.org) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include + +namespace sf +{ +namespace priv +{ + +//////////////////////////////////////////////////////////// +Keyboard::Key keySymToKey(KeySym symbol) +{ + switch (symbol) + { + case XK_Shift_L: return Keyboard::LShift; + case XK_Shift_R: return Keyboard::RShift; + case XK_Control_L: return Keyboard::LControl; + case XK_Control_R: return Keyboard::RControl; + case XK_Alt_L: return Keyboard::LAlt; + case XK_Alt_R: return Keyboard::RAlt; + case XK_Super_L: return Keyboard::LSystem; + case XK_Super_R: return Keyboard::RSystem; + case XK_Menu: return Keyboard::Menu; + case XK_Escape: return Keyboard::Escape; + case XK_semicolon: return Keyboard::SemiColon; + case XK_slash: return Keyboard::Slash; + case XK_equal: return Keyboard::Equal; + case XK_minus: return Keyboard::Dash; + case XK_bracketleft: return Keyboard::LBracket; + case XK_bracketright: return Keyboard::RBracket; + case XK_comma: return Keyboard::Comma; + case XK_period: return Keyboard::Period; + case XK_apostrophe: return Keyboard::Quote; + case XK_backslash: return Keyboard::BackSlash; + case XK_grave: return Keyboard::Tilde; + case XK_space: return Keyboard::Space; + case XK_Return: return Keyboard::Return; + case XK_KP_Enter: return Keyboard::Return; + case XK_BackSpace: return Keyboard::BackSpace; + case XK_Tab: return Keyboard::Tab; + case XK_Prior: return Keyboard::PageUp; + case XK_Next: return Keyboard::PageDown; + case XK_End: return Keyboard::End; + case XK_Home: return Keyboard::Home; + case XK_Insert: return Keyboard::Insert; + case XK_Delete: return Keyboard::Delete; + case XK_KP_Add: return Keyboard::Add; + case XK_KP_Subtract: return Keyboard::Subtract; + case XK_KP_Multiply: return Keyboard::Multiply; + case XK_KP_Divide: return Keyboard::Divide; + case XK_Pause: return Keyboard::Pause; + case XK_F1: return Keyboard::F1; + case XK_F2: return Keyboard::F2; + case XK_F3: return Keyboard::F3; + case XK_F4: return Keyboard::F4; + case XK_F5: return Keyboard::F5; + case XK_F6: return Keyboard::F6; + case XK_F7: return Keyboard::F7; + case XK_F8: return Keyboard::F8; + case XK_F9: return Keyboard::F9; + case XK_F10: return Keyboard::F10; + case XK_F11: return Keyboard::F11; + case XK_F12: return Keyboard::F12; + case XK_F13: return Keyboard::F13; + case XK_F14: return Keyboard::F14; + case XK_F15: return Keyboard::F15; + case XK_Left: return Keyboard::Left; + case XK_Right: return Keyboard::Right; + case XK_Up: return Keyboard::Up; + case XK_Down: return Keyboard::Down; + case XK_KP_Insert: return Keyboard::Numpad0; + case XK_KP_End: return Keyboard::Numpad1; + case XK_KP_Down: return Keyboard::Numpad2; + case XK_KP_Page_Down: return Keyboard::Numpad3; + case XK_KP_Left: return Keyboard::Numpad4; + case XK_KP_Begin: return Keyboard::Numpad5; + case XK_KP_Right: return Keyboard::Numpad6; + case XK_KP_Home: return Keyboard::Numpad7; + case XK_KP_Up: return Keyboard::Numpad8; + case XK_KP_Page_Up: return Keyboard::Numpad9; + case XK_a: return Keyboard::A; + case XK_b: return Keyboard::B; + case XK_c: return Keyboard::C; + case XK_d: return Keyboard::D; + case XK_e: return Keyboard::E; + case XK_f: return Keyboard::F; + case XK_g: return Keyboard::G; + case XK_h: return Keyboard::H; + case XK_i: return Keyboard::I; + case XK_j: return Keyboard::J; + case XK_k: return Keyboard::K; + case XK_l: return Keyboard::L; + case XK_m: return Keyboard::M; + case XK_n: return Keyboard::N; + case XK_o: return Keyboard::O; + case XK_p: return Keyboard::P; + case XK_q: return Keyboard::Q; + case XK_r: return Keyboard::R; + case XK_s: return Keyboard::S; + case XK_t: return Keyboard::T; + case XK_u: return Keyboard::U; + case XK_v: return Keyboard::V; + case XK_w: return Keyboard::W; + case XK_x: return Keyboard::X; + case XK_y: return Keyboard::Y; + case XK_z: return Keyboard::Z; + case XK_0: return Keyboard::Num0; + case XK_1: return Keyboard::Num1; + case XK_2: return Keyboard::Num2; + case XK_3: return Keyboard::Num3; + case XK_4: return Keyboard::Num4; + case XK_5: return Keyboard::Num5; + case XK_6: return Keyboard::Num6; + case XK_7: return Keyboard::Num7; + case XK_8: return Keyboard::Num8; + case XK_9: return Keyboard::Num9; + default: return Keyboard::Unknown; + } +} + + +//////////////////////////////////////////////////////////// +KeySym keyToKeySym(Keyboard::Key key) +{ + switch (key) + { + case Keyboard::LShift: return XK_Shift_L; + case Keyboard::RShift: return XK_Shift_R; + case Keyboard::LControl: return XK_Control_L; + case Keyboard::RControl: return XK_Control_R; + case Keyboard::LAlt: return XK_Alt_L; + case Keyboard::RAlt: return XK_Alt_R; + case Keyboard::LSystem: return XK_Super_L; + case Keyboard::RSystem: return XK_Super_R; + case Keyboard::Menu: return XK_Menu; + case Keyboard::Escape: return XK_Escape; + case Keyboard::SemiColon: return XK_semicolon; + case Keyboard::Slash: return XK_slash; + case Keyboard::Equal: return XK_equal; + case Keyboard::Dash: return XK_minus; + case Keyboard::LBracket: return XK_bracketleft; + case Keyboard::RBracket: return XK_bracketright; + case Keyboard::Comma: return XK_comma; + case Keyboard::Period: return XK_period; + case Keyboard::Quote: return XK_apostrophe; + case Keyboard::BackSlash: return XK_backslash; + case Keyboard::Tilde: return XK_grave; + case Keyboard::Space: return XK_space; + case Keyboard::Return: return XK_Return; + case Keyboard::BackSpace: return XK_BackSpace; + case Keyboard::Tab: return XK_Tab; + case Keyboard::PageUp: return XK_Prior; + case Keyboard::PageDown: return XK_Next; + case Keyboard::End: return XK_End; + case Keyboard::Home: return XK_Home; + case Keyboard::Insert: return XK_Insert; + case Keyboard::Delete: return XK_Delete; + case Keyboard::Add: return XK_KP_Add; + case Keyboard::Subtract: return XK_KP_Subtract; + case Keyboard::Multiply: return XK_KP_Multiply; + case Keyboard::Divide: return XK_KP_Divide; + case Keyboard::Pause: return XK_Pause; + case Keyboard::F1: return XK_F1; + case Keyboard::F2: return XK_F2; + case Keyboard::F3: return XK_F3; + case Keyboard::F4: return XK_F4; + case Keyboard::F5: return XK_F5; + case Keyboard::F6: return XK_F6; + case Keyboard::F7: return XK_F7; + case Keyboard::F8: return XK_F8; + case Keyboard::F9: return XK_F9; + case Keyboard::F10: return XK_F10; + case Keyboard::F11: return XK_F11; + case Keyboard::F12: return XK_F12; + case Keyboard::F13: return XK_F13; + case Keyboard::F14: return XK_F14; + case Keyboard::F15: return XK_F15; + case Keyboard::Left: return XK_Left; + case Keyboard::Right: return XK_Right; + case Keyboard::Up: return XK_Up; + case Keyboard::Down: return XK_Down; + case Keyboard::Numpad0: return XK_KP_Insert; + case Keyboard::Numpad1: return XK_KP_End; + case Keyboard::Numpad2: return XK_KP_Down; + case Keyboard::Numpad3: return XK_KP_Page_Down; + case Keyboard::Numpad4: return XK_KP_Left; + case Keyboard::Numpad5: return XK_KP_Begin; + case Keyboard::Numpad6: return XK_KP_Right; + case Keyboard::Numpad7: return XK_KP_Home; + case Keyboard::Numpad8: return XK_KP_Up; + case Keyboard::Numpad9: return XK_KP_Page_Up; + case Keyboard::A: return XK_a; + case Keyboard::B: return XK_b; + case Keyboard::C: return XK_c; + case Keyboard::D: return XK_d; + case Keyboard::E: return XK_e; + case Keyboard::F: return XK_f; + case Keyboard::G: return XK_g; + case Keyboard::H: return XK_h; + case Keyboard::I: return XK_i; + case Keyboard::J: return XK_j; + case Keyboard::K: return XK_k; + case Keyboard::L: return XK_l; + case Keyboard::M: return XK_m; + case Keyboard::N: return XK_n; + case Keyboard::O: return XK_o; + case Keyboard::P: return XK_p; + case Keyboard::Q: return XK_q; + case Keyboard::R: return XK_r; + case Keyboard::S: return XK_s; + case Keyboard::T: return XK_t; + case Keyboard::U: return XK_u; + case Keyboard::V: return XK_v; + case Keyboard::W: return XK_w; + case Keyboard::X: return XK_x; + case Keyboard::Y: return XK_y; + case Keyboard::Z: return XK_z; + case Keyboard::Num0: return XK_0; + case Keyboard::Num1: return XK_1; + case Keyboard::Num2: return XK_2; + case Keyboard::Num3: return XK_3; + case Keyboard::Num4: return XK_4; + case Keyboard::Num5: return XK_5; + case Keyboard::Num6: return XK_6; + case Keyboard::Num7: return XK_7; + case Keyboard::Num8: return XK_8; + case Keyboard::Num9: return XK_9; + default: return NoSymbol; + } +} + +} // namespace priv + +} // namespace sf + diff --git a/src/SFML/Window/Unix/KeySymToKeyMapping.hpp b/src/SFML/Window/Unix/KeySymToKeyMapping.hpp new file mode 100644 index 00000000..638fb71e --- /dev/null +++ b/src/SFML/Window/Unix/KeySymToKeyMapping.hpp @@ -0,0 +1,63 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2018 Laurent Gomila (laurent@sfml-dev.org) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +#ifndef SFML_KEYSYMTOKEYMAPPING_HPP +#define SFML_KEYSYMTOKEYMAPPING_HPP + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include // sf::Keyboard::Key +#include // KeySym + +namespace sf +{ +namespace priv +{ +//////////////////////////////////////////////////////////// +/// \brief Convert X11 KeySym to sf::Keyboard::Key +/// +/// \param symbol X11 KeySym +/// +/// \return The corresponding sf::Keyboard::Key +/// +//////////////////////////////////////////////////////////// +Keyboard::Key keySymToKey(KeySym symbol); + + +//////////////////////////////////////////////////////////// +/// \brief Convert sf::Keyboard::Key to X11 KeySym +/// +/// \param key X11 sf::Keyboard::Key +/// +/// \return The corresponding X11 KeySym +/// +//////////////////////////////////////////////////////////// +KeySym keyToKeySym(Keyboard::Key key); + +} // namespace priv + +} // namespace sf + +#endif // SFML_KEYSYMTOKEYMAPPING_HPP diff --git a/src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp b/src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp deleted file mode 100644 index 5ef4f425..00000000 --- a/src/SFML/Window/Unix/KeySymToSFKeyMapping.hpp +++ /dev/null @@ -1,282 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2017 Laurent Gomila (laurent@sfml-dev.org) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef SFML_KEYSYMTOSFKEYMAPPING_HPP -#define SFML_KEYSYMTOSFKEYMAPPING_HPP - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// -#include -#include -#include - -namespace sf -{ -namespace priv -{ -//////////////////////////////////////////////////////////// -/// \brief Convert X11 KeySym to sf::Keyboard::Key -/// -/// \param symbol X11 KeySym -/// -/// \return The corresponding sf::Keyboard::Key -/// -//////////////////////////////////////////////////////////// -inline Keyboard::Key keySymToSFKey(KeySym symbol) -{ - switch (symbol) - { - case XK_Shift_L: return Keyboard::LShift; - case XK_Shift_R: return Keyboard::RShift; - case XK_Control_L: return Keyboard::LControl; - case XK_Control_R: return Keyboard::RControl; - case XK_Alt_L: return Keyboard::LAlt; - case XK_Alt_R: return Keyboard::RAlt; - case XK_Super_L: return Keyboard::LSystem; - case XK_Super_R: return Keyboard::RSystem; - case XK_Menu: return Keyboard::Menu; - case XK_Escape: return Keyboard::Escape; - case XK_semicolon: return Keyboard::SemiColon; - case XK_slash: return Keyboard::Slash; - case XK_equal: return Keyboard::Equal; - case XK_minus: return Keyboard::Dash; - case XK_bracketleft: return Keyboard::LBracket; - case XK_bracketright: return Keyboard::RBracket; - case XK_comma: return Keyboard::Comma; - case XK_period: return Keyboard::Period; - case XK_apostrophe: return Keyboard::Quote; - case XK_backslash: return Keyboard::BackSlash; - case XK_grave: return Keyboard::Tilde; - case XK_space: return Keyboard::Space; - case XK_Return: return Keyboard::Return; - case XK_KP_Enter: return Keyboard::Return; - case XK_BackSpace: return Keyboard::BackSpace; - case XK_Tab: return Keyboard::Tab; - case XK_Prior: return Keyboard::PageUp; - case XK_Next: return Keyboard::PageDown; - case XK_End: return Keyboard::End; - case XK_Home: return Keyboard::Home; - case XK_Insert: return Keyboard::Insert; - case XK_Delete: return Keyboard::Delete; - case XK_KP_Add: return Keyboard::Add; - case XK_KP_Subtract: return Keyboard::Subtract; - case XK_KP_Multiply: return Keyboard::Multiply; - case XK_KP_Divide: return Keyboard::Divide; - case XK_Pause: return Keyboard::Pause; - case XK_F1: return Keyboard::F1; - case XK_F2: return Keyboard::F2; - case XK_F3: return Keyboard::F3; - case XK_F4: return Keyboard::F4; - case XK_F5: return Keyboard::F5; - case XK_F6: return Keyboard::F6; - case XK_F7: return Keyboard::F7; - case XK_F8: return Keyboard::F8; - case XK_F9: return Keyboard::F9; - case XK_F10: return Keyboard::F10; - case XK_F11: return Keyboard::F11; - case XK_F12: return Keyboard::F12; - case XK_F13: return Keyboard::F13; - case XK_F14: return Keyboard::F14; - case XK_F15: return Keyboard::F15; - case XK_Left: return Keyboard::Left; - case XK_Right: return Keyboard::Right; - case XK_Up: return Keyboard::Up; - case XK_Down: return Keyboard::Down; - case XK_KP_Insert: return Keyboard::Numpad0; - case XK_KP_End: return Keyboard::Numpad1; - case XK_KP_Down: return Keyboard::Numpad2; - case XK_KP_Page_Down: return Keyboard::Numpad3; - case XK_KP_Left: return Keyboard::Numpad4; - case XK_KP_Begin: return Keyboard::Numpad5; - case XK_KP_Right: return Keyboard::Numpad6; - case XK_KP_Home: return Keyboard::Numpad7; - case XK_KP_Up: return Keyboard::Numpad8; - case XK_KP_Page_Up: return Keyboard::Numpad9; - case XK_a: return Keyboard::A; - case XK_b: return Keyboard::B; - case XK_c: return Keyboard::C; - case XK_d: return Keyboard::D; - case XK_e: return Keyboard::E; - case XK_f: return Keyboard::F; - case XK_g: return Keyboard::G; - case XK_h: return Keyboard::H; - case XK_i: return Keyboard::I; - case XK_j: return Keyboard::J; - case XK_k: return Keyboard::K; - case XK_l: return Keyboard::L; - case XK_m: return Keyboard::M; - case XK_n: return Keyboard::N; - case XK_o: return Keyboard::O; - case XK_p: return Keyboard::P; - case XK_q: return Keyboard::Q; - case XK_r: return Keyboard::R; - case XK_s: return Keyboard::S; - case XK_t: return Keyboard::T; - case XK_u: return Keyboard::U; - case XK_v: return Keyboard::V; - case XK_w: return Keyboard::W; - case XK_x: return Keyboard::X; - case XK_y: return Keyboard::Y; - case XK_z: return Keyboard::Z; - case XK_0: return Keyboard::Num0; - case XK_1: return Keyboard::Num1; - case XK_2: return Keyboard::Num2; - case XK_3: return Keyboard::Num3; - case XK_4: return Keyboard::Num4; - case XK_5: return Keyboard::Num5; - case XK_6: return Keyboard::Num6; - case XK_7: return Keyboard::Num7; - case XK_8: return Keyboard::Num8; - case XK_9: return Keyboard::Num9; - } - - return Keyboard::Unknown; -} - - -//////////////////////////////////////////////////////////// -/// \brief Convert sf::Keyboard::Key to X11 KeySym -/// -/// \param key X11 sf::Keyboard::Key -/// -/// \return The corresponding X11 KeySym -/// -//////////////////////////////////////////////////////////// -inline KeySym SFKeyToKeySym(Keyboard::Key key) -{ - // Get the corresponding X11 keysym - KeySym keysym = NoSymbol; - switch (key) - { - case Keyboard::LShift: keysym = XK_Shift_L; break; - case Keyboard::RShift: keysym = XK_Shift_R; break; - case Keyboard::LControl: keysym = XK_Control_L; break; - case Keyboard::RControl: keysym = XK_Control_R; break; - case Keyboard::LAlt: keysym = XK_Alt_L; break; - case Keyboard::RAlt: keysym = XK_Alt_R; break; - case Keyboard::LSystem: keysym = XK_Super_L; break; - case Keyboard::RSystem: keysym = XK_Super_R; break; - case Keyboard::Menu: keysym = XK_Menu; break; - case Keyboard::Escape: keysym = XK_Escape; break; - case Keyboard::SemiColon: keysym = XK_semicolon; break; - case Keyboard::Slash: keysym = XK_slash; break; - case Keyboard::Equal: keysym = XK_equal; break; - case Keyboard::Dash: keysym = XK_minus; break; - case Keyboard::LBracket: keysym = XK_bracketleft; break; - case Keyboard::RBracket: keysym = XK_bracketright; break; - case Keyboard::Comma: keysym = XK_comma; break; - case Keyboard::Period: keysym = XK_period; break; - case Keyboard::Quote: keysym = XK_apostrophe; break; - case Keyboard::BackSlash: keysym = XK_backslash; break; - case Keyboard::Tilde: keysym = XK_grave; break; - case Keyboard::Space: keysym = XK_space; break; - case Keyboard::Return: keysym = XK_Return; break; - case Keyboard::BackSpace: keysym = XK_BackSpace; break; - case Keyboard::Tab: keysym = XK_Tab; break; - case Keyboard::PageUp: keysym = XK_Prior; break; - case Keyboard::PageDown: keysym = XK_Next; break; - case Keyboard::End: keysym = XK_End; break; - case Keyboard::Home: keysym = XK_Home; break; - case Keyboard::Insert: keysym = XK_Insert; break; - case Keyboard::Delete: keysym = XK_Delete; break; - case Keyboard::Add: keysym = XK_KP_Add; break; - case Keyboard::Subtract: keysym = XK_KP_Subtract; break; - case Keyboard::Multiply: keysym = XK_KP_Multiply; break; - case Keyboard::Divide: keysym = XK_KP_Divide; break; - case Keyboard::Pause: keysym = XK_Pause; break; - case Keyboard::F1: keysym = XK_F1; break; - case Keyboard::F2: keysym = XK_F2; break; - case Keyboard::F3: keysym = XK_F3; break; - case Keyboard::F4: keysym = XK_F4; break; - case Keyboard::F5: keysym = XK_F5; break; - case Keyboard::F6: keysym = XK_F6; break; - case Keyboard::F7: keysym = XK_F7; break; - case Keyboard::F8: keysym = XK_F8; break; - case Keyboard::F9: keysym = XK_F9; break; - case Keyboard::F10: keysym = XK_F10; break; - case Keyboard::F11: keysym = XK_F11; break; - case Keyboard::F12: keysym = XK_F12; break; - case Keyboard::F13: keysym = XK_F13; break; - case Keyboard::F14: keysym = XK_F14; break; - case Keyboard::F15: keysym = XK_F15; break; - case Keyboard::Left: keysym = XK_Left; break; - case Keyboard::Right: keysym = XK_Right; break; - case Keyboard::Up: keysym = XK_Up; break; - case Keyboard::Down: keysym = XK_Down; break; - case Keyboard::Numpad0: keysym = XK_KP_Insert; break; - case Keyboard::Numpad1: keysym = XK_KP_End; break; - case Keyboard::Numpad2: keysym = XK_KP_Down; break; - case Keyboard::Numpad3: keysym = XK_KP_Page_Down; break; - case Keyboard::Numpad4: keysym = XK_KP_Left; break; - case Keyboard::Numpad5: keysym = XK_KP_Begin; break; - case Keyboard::Numpad6: keysym = XK_KP_Right; break; - case Keyboard::Numpad7: keysym = XK_KP_Home; break; - case Keyboard::Numpad8: keysym = XK_KP_Up; break; - case Keyboard::Numpad9: keysym = XK_KP_Page_Up; break; - case Keyboard::A: keysym = XK_a; break; - case Keyboard::B: keysym = XK_b; break; - case Keyboard::C: keysym = XK_c; break; - case Keyboard::D: keysym = XK_d; break; - case Keyboard::E: keysym = XK_e; break; - case Keyboard::F: keysym = XK_f; break; - case Keyboard::G: keysym = XK_g; break; - case Keyboard::H: keysym = XK_h; break; - case Keyboard::I: keysym = XK_i; break; - case Keyboard::J: keysym = XK_j; break; - case Keyboard::K: keysym = XK_k; break; - case Keyboard::L: keysym = XK_l; break; - case Keyboard::M: keysym = XK_m; break; - case Keyboard::N: keysym = XK_n; break; - case Keyboard::O: keysym = XK_o; break; - case Keyboard::P: keysym = XK_p; break; - case Keyboard::Q: keysym = XK_q; break; - case Keyboard::R: keysym = XK_r; break; - case Keyboard::S: keysym = XK_s; break; - case Keyboard::T: keysym = XK_t; break; - case Keyboard::U: keysym = XK_u; break; - case Keyboard::V: keysym = XK_v; break; - case Keyboard::W: keysym = XK_w; break; - case Keyboard::X: keysym = XK_x; break; - case Keyboard::Y: keysym = XK_y; break; - case Keyboard::Z: keysym = XK_z; break; - case Keyboard::Num0: keysym = XK_0; break; - case Keyboard::Num1: keysym = XK_1; break; - case Keyboard::Num2: keysym = XK_2; break; - case Keyboard::Num3: keysym = XK_3; break; - case Keyboard::Num4: keysym = XK_4; break; - case Keyboard::Num5: keysym = XK_5; break; - case Keyboard::Num6: keysym = XK_6; break; - case Keyboard::Num7: keysym = XK_7; break; - case Keyboard::Num8: keysym = XK_8; break; - case Keyboard::Num9: keysym = XK_9; break; - } - return keysym; -} - -} // namespace priv - -} // namespace sf - -#endif // SFML_KEYSYMTOSFKEYMAPPING_HPP diff --git a/src/SFML/Window/Unix/KeySymToUnicodeMapping.cpp b/src/SFML/Window/Unix/KeySymToUnicodeMapping.cpp new file mode 100644 index 00000000..0f122cc6 --- /dev/null +++ b/src/SFML/Window/Unix/KeySymToUnicodeMapping.cpp @@ -0,0 +1,1399 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2018 Laurent Gomila (laurent@sfml-dev.org) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + +namespace sf +{ +namespace priv +{ + +Uint32 keysymToUnicode(KeySym keysym) +{ + switch (keysym) + { + case 0xff08: return 0x0008; // BackSpace + case 0xff89: return 0x0009; // KP_Tab + case 0xff09: return 0x0009; // Tab + case 0xff0a: return 0x000a; // Linefeed + case 0xff0b: return 0x000b; // Clear + case 0xff8d: return 0x000d; // KP_Enter + case 0xff0d: return 0x000d; // Return + case 0xff13: return 0x0013; // Pause + case 0xff14: return 0x0014; // Scroll_Lock + case 0xff15: return 0x0015; // Sys_Req + case 0xff1b: return 0x001b; // Escape + case 0xff80: return 0x0020; // KP_Space + case 0x0020: return 0x0020; // space + case 0x0021: return 0x0021; // exclam + case 0x0022: return 0x0022; // quotedbl + case 0x0023: return 0x0023; // numbersign + case 0x0024: return 0x0024; // dollar + case 0x0025: return 0x0025; // percent + case 0x0026: return 0x0026; // ampersand + case 0x0027: return 0x0027; // quoteright + case 0x14a5: return 0x0028; // Armenian_parenleft + case 0x0028: return 0x0028; // parenleft + case 0x14a4: return 0x0029; // Armenian_parenright + case 0x0029: return 0x0029; // parenright + case 0xffaa: return 0x002a; // KP_Multiply + case 0x002a: return 0x002a; // asterisk + case 0xffab: return 0x002b; // KP_Add + case 0x002b: return 0x002b; // plus + case 0x14ab: return 0x002c; // Armenian_comma + case 0xffac: return 0x002c; // KP_Separator + case 0x002c: return 0x002c; // comma + case 0xffad: return 0x002d; // KP_Subtract + case 0x002d: return 0x002d; // minus + case 0x14a9: return 0x002e; // Armenian_mijaket + case 0xffae: return 0x002e; // KP_Decimal + case 0x0abd: return 0x002e; // decimalpoint + case 0x002e: return 0x002e; // period + case 0xffaf: return 0x002f; // KP_Divide + case 0x002f: return 0x002f; // slash + case 0x0030: return 0x0030; // 0 + case 0xffb0: return 0x0030; // KP_0 + case 0x0031: return 0x0031; // 1 + case 0xffb1: return 0x0031; // KP_1 + case 0x0032: return 0x0032; // 2 + case 0xffb2: return 0x0032; // KP_2 + case 0x0033: return 0x0033; // 3 + case 0xffb3: return 0x0033; // KP_3 + case 0x0034: return 0x0034; // 4 + case 0xffb4: return 0x0034; // KP_4 + case 0x0035: return 0x0035; // 5 + case 0xffb5: return 0x0035; // KP_5 + case 0x0036: return 0x0036; // 6 + case 0xffb6: return 0x0036; // KP_6 + case 0x0037: return 0x0037; // 7 + case 0xffb7: return 0x0037; // KP_7 + case 0x0038: return 0x0038; // 8 + case 0xffb8: return 0x0038; // KP_8 + case 0x0039: return 0x0039; // 9 + case 0xffb9: return 0x0039; // KP_9 + case 0x003a: return 0x003a; // colon + case 0x003b: return 0x003b; // semicolon + case 0x0ba3: return 0x003c; // leftcaret + case 0x003c: return 0x003c; // less + case 0xffbd: return 0x003d; // KP_Equal + case 0x003d: return 0x003d; // equal + case 0x003e: return 0x003e; // greater + case 0x0ba6: return 0x003e; // rightcaret + case 0x003f: return 0x003f; // question + case 0x0040: return 0x0040; // at + case 0x0041: return 0x0041; // A + case 0x0042: return 0x0042; // B + case 0x0043: return 0x0043; // C + case 0x0044: return 0x0044; // D + case 0x0045: return 0x0045; // E + case 0x0046: return 0x0046; // F + case 0x0047: return 0x0047; // G + case 0x0048: return 0x0048; // H + case 0x0049: return 0x0049; // I + case 0x004a: return 0x004a; // J + case 0x004b: return 0x004b; // K + case 0x004c: return 0x004c; // L + case 0x004d: return 0x004d; // M + case 0x004e: return 0x004e; // N + case 0x004f: return 0x004f; // O + case 0x0050: return 0x0050; // P + case 0x0051: return 0x0051; // Q + case 0x0052: return 0x0052; // R + case 0x0053: return 0x0053; // S + case 0x0054: return 0x0054; // T + case 0x0055: return 0x0055; // U + case 0x0056: return 0x0056; // V + case 0x0057: return 0x0057; // W + case 0x0058: return 0x0058; // X + case 0x0059: return 0x0059; // Y + case 0x005a: return 0x005a; // Z + case 0x005b: return 0x005b; // bracketleft + case 0x005c: return 0x005c; // backslash + case 0x005d: return 0x005d; // bracketright + case 0x005e: return 0x005e; // asciicircum + case 0x0bc6: return 0x005f; // underbar + case 0x005f: return 0x005f; // underscore + case 0x0060: return 0x0060; // quoteleft + case 0x0061: return 0x0061; // a + case 0x0062: return 0x0062; // b + case 0x0063: return 0x0063; // c + case 0x0064: return 0x0064; // d + case 0x0065: return 0x0065; // e + case 0x0066: return 0x0066; // f + case 0x0067: return 0x0067; // g + case 0x0068: return 0x0068; // h + case 0x0069: return 0x0069; // i + case 0x006a: return 0x006a; // j + case 0x006b: return 0x006b; // k + case 0x006c: return 0x006c; // l + case 0x006d: return 0x006d; // m + case 0x006e: return 0x006e; // n + case 0x006f: return 0x006f; // o + case 0x0070: return 0x0070; // p + case 0x0071: return 0x0071; // q + case 0x0072: return 0x0072; // r + case 0x0073: return 0x0073; // s + case 0x0074: return 0x0074; // t + case 0x0075: return 0x0075; // u + case 0x0076: return 0x0076; // v + case 0x0077: return 0x0077; // w + case 0x0078: return 0x0078; // x + case 0x0079: return 0x0079; // y + case 0x007a: return 0x007a; // z + case 0x007b: return 0x007b; // braceleft + case 0x007c: return 0x007c; // bar + case 0x007d: return 0x007d; // braceright + case 0x007e: return 0x007e; // asciitilde + case 0x00a0: return 0x00a0; // nobreakspace + case 0x00a1: return 0x00a1; // exclamdown + case 0x00a2: return 0x00a2; // cent + case 0x00a3: return 0x00a3; // sterling + case 0x00a4: return 0x00a4; // currency + case 0x00a5: return 0x00a5; // yen + case 0x00a6: return 0x00a6; // brokenbar + case 0x14ff: return 0x00a7; // Armenian_section_sign + case 0x00a7: return 0x00a7; // section + case 0x00a8: return 0x00a8; // diaeresis + case 0x00a9: return 0x00a9; // copyright + case 0x00aa: return 0x00aa; // ordfeminine + case 0x14a7: return 0x00ab; // Armenian_guillemotleft + case 0x00ab: return 0x00ab; // guillemotleft + case 0x00ac: return 0x00ac; // notsign + case 0x00ad: return 0x00ad; // hyphen + case 0x00ae: return 0x00ae; // registered + case 0x00af: return 0x00af; // macron + case 0x0bc0: return 0x00af; // overbar + case 0x00b0: return 0x00b0; // degree + case 0x00b1: return 0x00b1; // plusminus + case 0x00b2: return 0x00b2; // twosuperior + case 0x00b3: return 0x00b3; // threesuperior + case 0x00b4: return 0x00b4; // acute + case 0x00b5: return 0x00b5; // mu + case 0x00b6: return 0x00b6; // paragraph + case 0x00b7: return 0x00b7; // periodcentered + case 0x00b8: return 0x00b8; // cedilla + case 0x00b9: return 0x00b9; // onesuperior + case 0x00ba: return 0x00ba; // masculine + case 0x14a6: return 0x00bb; // Armenian_guillemotright + case 0x00bb: return 0x00bb; // guillemotright + case 0x00bc: return 0x00bc; // onequarter + case 0x00bd: return 0x00bd; // onehalf + case 0x00be: return 0x00be; // threequarters + case 0x00bf: return 0x00bf; // questiondown + case 0x00c0: return 0x00c0; // Agrave + case 0x00c1: return 0x00c1; // Aacute + case 0x00c2: return 0x00c2; // Acircumflex + case 0x00c3: return 0x00c3; // Atilde + case 0x00c4: return 0x00c4; // Adiaeresis + case 0x00c5: return 0x00c5; // Aring + case 0x00c6: return 0x00c6; // AE + case 0x00c7: return 0x00c7; // Ccedilla + case 0x00c8: return 0x00c8; // Egrave + case 0x00c9: return 0x00c9; // Eacute + case 0x00ca: return 0x00ca; // Ecircumflex + case 0x00cb: return 0x00cb; // Ediaeresis + case 0x00cc: return 0x00cc; // Igrave + case 0x00cd: return 0x00cd; // Iacute + case 0x00ce: return 0x00ce; // Icircumflex + case 0x00cf: return 0x00cf; // Idiaeresis + case 0x00d0: return 0x00d0; // Eth + case 0x00d1: return 0x00d1; // Ntilde + case 0x00d2: return 0x00d2; // Ograve + case 0x00d3: return 0x00d3; // Oacute + case 0x00d4: return 0x00d4; // Ocircumflex + case 0x00d5: return 0x00d5; // Otilde + case 0x00d6: return 0x00d6; // Odiaeresis + case 0x00d7: return 0x00d7; // multiply + case 0x00d8: return 0x00d8; // Ooblique + case 0x00d9: return 0x00d9; // Ugrave + case 0x00da: return 0x00da; // Uacute + case 0x00db: return 0x00db; // Ucircumflex + case 0x00dc: return 0x00dc; // Udiaeresis + case 0x00dd: return 0x00dd; // Yacute + case 0x00de: return 0x00de; // Thorn + case 0x00df: return 0x00df; // ssharp + case 0x00e0: return 0x00e0; // agrave + case 0x00e1: return 0x00e1; // aacute + case 0x00e2: return 0x00e2; // acircumflex + case 0x00e3: return 0x00e3; // atilde + case 0x00e4: return 0x00e4; // adiaeresis + case 0x00e5: return 0x00e5; // aring + case 0x00e6: return 0x00e6; // ae + case 0x00e7: return 0x00e7; // ccedilla + case 0x00e8: return 0x00e8; // egrave + case 0x00e9: return 0x00e9; // eacute + case 0x00ea: return 0x00ea; // ecircumflex + case 0x00eb: return 0x00eb; // ediaeresis + case 0x00ec: return 0x00ec; // igrave + case 0x00ed: return 0x00ed; // iacute + case 0x00ee: return 0x00ee; // icircumflex + case 0x00ef: return 0x00ef; // idiaeresis + case 0x00f0: return 0x00f0; // eth + case 0x00f1: return 0x00f1; // ntilde + case 0x00f2: return 0x00f2; // ograve + case 0x00f3: return 0x00f3; // oacute + case 0x00f4: return 0x00f4; // ocircumflex + case 0x00f5: return 0x00f5; // otilde + case 0x00f6: return 0x00f6; // odiaeresis + case 0x00f7: return 0x00f7; // division + case 0x00f8: return 0x00f8; // oslash + case 0x00f9: return 0x00f9; // ugrave + case 0x00fa: return 0x00fa; // uacute + case 0x00fb: return 0x00fb; // ucircumflex + case 0x00fc: return 0x00fc; // udiaeresis + case 0x00fd: return 0x00fd; // yacute + case 0x00fe: return 0x00fe; // thorn + case 0x00ff: return 0x00ff; // ydiaeresis + case 0x03c0: return 0x0100; // Amacron + case 0x03e0: return 0x0101; // amacron + case 0x01c3: return 0x0102; // Abreve + case 0x01e3: return 0x0103; // abreve + case 0x01a1: return 0x0104; // Aogonek + case 0x01b1: return 0x0105; // aogonek + case 0x01c6: return 0x0106; // Cacute + case 0x01e6: return 0x0107; // cacute + case 0x02c6: return 0x0108; // Ccircumflex + case 0x02e6: return 0x0109; // ccircumflex + case 0x02c5: return 0x010a; // Cabovedot + case 0x02e5: return 0x010b; // cabovedot + case 0x01c8: return 0x010c; // Ccaron + case 0x01e8: return 0x010d; // ccaron + case 0x01cf: return 0x010e; // Dcaron + case 0x01ef: return 0x010f; // dcaron + case 0x01d0: return 0x0110; // Dstroke + case 0x01f0: return 0x0111; // dstroke + case 0x03aa: return 0x0112; // Emacron + case 0x03ba: return 0x0113; // emacron + case 0x03cc: return 0x0116; // Eabovedot + case 0x03ec: return 0x0117; // eabovedot + case 0x01ca: return 0x0118; // Eogonek + case 0x01ea: return 0x0119; // eogonek + case 0x01cc: return 0x011a; // Ecaron + case 0x01ec: return 0x011b; // ecaron + case 0x02d8: return 0x011c; // Gcircumflex + case 0x02f8: return 0x011d; // gcircumflex + case 0x02ab: return 0x011e; // Gbreve + case 0x02bb: return 0x011f; // gbreve + case 0x02d5: return 0x0120; // Gabovedot + case 0x02f5: return 0x0121; // gabovedot + case 0x03ab: return 0x0122; // Gcedilla + case 0x03bb: return 0x0123; // gcedilla + case 0x02a6: return 0x0124; // Hcircumflex + case 0x02b6: return 0x0125; // hcircumflex + case 0x02a1: return 0x0126; // Hstroke + case 0x02b1: return 0x0127; // hstroke + case 0x03a5: return 0x0128; // Itilde + case 0x03b5: return 0x0129; // itilde + case 0x03cf: return 0x012a; // Imacron + case 0x03ef: return 0x012b; // imacron + case 0x16a6: return 0x012c; // Ibreve + case 0x16b6: return 0x012d; // ibreve + case 0x03c7: return 0x012e; // Iogonek + case 0x03e7: return 0x012f; // iogonek + case 0x02a9: return 0x0130; // Iabovedot + case 0x02b9: return 0x0131; // idotless + case 0x02ac: return 0x0134; // Jcircumflex + case 0x02bc: return 0x0135; // jcircumflex + case 0x03d3: return 0x0136; // Kcedilla + case 0x03f3: return 0x0137; // kcedilla + case 0x03a2: return 0x0138; // kra + case 0x01c5: return 0x0139; // Lacute + case 0x01e5: return 0x013a; // lacute + case 0x03a6: return 0x013b; // Lcedilla + case 0x03b6: return 0x013c; // lcedilla + case 0x01a5: return 0x013d; // Lcaron + case 0x01b5: return 0x013e; // lcaron + case 0x01a3: return 0x0141; // Lstroke + case 0x01b3: return 0x0142; // lstroke + case 0x01d1: return 0x0143; // Nacute + case 0x01f1: return 0x0144; // nacute + case 0x03d1: return 0x0145; // Ncedilla + case 0x03f1: return 0x0146; // ncedilla + case 0x01d2: return 0x0147; // Ncaron + case 0x01f2: return 0x0148; // ncaron + case 0x03bd: return 0x014a; // ENG + case 0x03bf: return 0x014b; // eng + case 0x03d2: return 0x014c; // Omacron + case 0x03f2: return 0x014d; // omacron + case 0x01d5: return 0x0150; // Odoubleacute + case 0x01f5: return 0x0151; // odoubleacute + case 0x13bc: return 0x0152; // OE + case 0x13bd: return 0x0153; // oe + case 0x01c0: return 0x0154; // Racute + case 0x01e0: return 0x0155; // racute + case 0x03a3: return 0x0156; // Rcedilla + case 0x03b3: return 0x0157; // rcedilla + case 0x01d8: return 0x0158; // Rcaron + case 0x01f8: return 0x0159; // rcaron + case 0x01a6: return 0x015a; // Sacute + case 0x01b6: return 0x015b; // sacute + case 0x02de: return 0x015c; // Scircumflex + case 0x02fe: return 0x015d; // scircumflex + case 0x01aa: return 0x015e; // Scedilla + case 0x01ba: return 0x015f; // scedilla + case 0x01a9: return 0x0160; // Scaron + case 0x01b9: return 0x0161; // scaron + case 0x01de: return 0x0162; // Tcedilla + case 0x01fe: return 0x0163; // tcedilla + case 0x01ab: return 0x0164; // Tcaron + case 0x01bb: return 0x0165; // tcaron + case 0x03ac: return 0x0166; // Tslash + case 0x03bc: return 0x0167; // tslash + case 0x03dd: return 0x0168; // Utilde + case 0x03fd: return 0x0169; // utilde + case 0x03de: return 0x016a; // Umacron + case 0x03fe: return 0x016b; // umacron + case 0x02dd: return 0x016c; // Ubreve + case 0x02fd: return 0x016d; // ubreve + case 0x01d9: return 0x016e; // Uring + case 0x01f9: return 0x016f; // uring + case 0x01db: return 0x0170; // Udoubleacute + case 0x01fb: return 0x0171; // udoubleacute + case 0x03d9: return 0x0172; // Uogonek + case 0x03f9: return 0x0173; // uogonek + case 0x12d0: return 0x0174; // Wcircumflex + case 0x12f0: return 0x0175; // wcircumflex + case 0x12de: return 0x0176; // Ycircumflex + case 0x12fe: return 0x0177; // ycircumflex + case 0x13be: return 0x0178; // Ydiaeresis + case 0x01ac: return 0x0179; // Zacute + case 0x01bc: return 0x017a; // zacute + case 0x01af: return 0x017b; // Zabovedot + case 0x01bf: return 0x017c; // zabovedot + case 0x01ae: return 0x017d; // Zcaron + case 0x01be: return 0x017e; // zcaron + case 0x16c6: return 0x018f; // SCHWA + case 0x08f6: return 0x0192; // function + case 0x16af: return 0x019f; // Obarred + case 0x1efa: return 0x01a0; // Ohorn + case 0x1efb: return 0x01a1; // ohorn + case 0x1efc: return 0x01af; // Uhorn + case 0x1efd: return 0x01b0; // uhorn + case 0x16a9: return 0x01b5; // Zstroke + case 0x16b9: return 0x01b6; // zstroke + case 0x16bd: return 0x01d2; // ocaron + case 0x16aa: return 0x01e6; // Gcaron + case 0x16ba: return 0x01e7; // gcaron + case 0x16f6: return 0x0259; // schwa + case 0x16bf: return 0x0275; // obarred + case 0x01b7: return 0x02c7; // caron + case 0x01a2: return 0x02d8; // breve + case 0x01ff: return 0x02d9; // abovedot + case 0x01b2: return 0x02db; // ogonek + case 0x01bd: return 0x02dd; // doubleacute + case 0x1ef2: return 0x0300; // combining_grave + case 0xfe50: return 0x0300; // dead_grave + case 0x1ef3: return 0x0301; // combining_acute + case 0xfe51: return 0x0301; // dead_acute + case 0xfe52: return 0x0302; // dead_circumflex + case 0x1e9f: return 0x0303; // combining_tilde + case 0xfe53: return 0x0303; // dead_tilde + case 0xfe54: return 0x0304; // dead_macron + case 0xfe55: return 0x0306; // dead_breve + case 0xfe56: return 0x0307; // dead_abovedot + case 0xfe57: return 0x0308; // dead_diaeresis + case 0x1efe: return 0x0309; // combining_hook + case 0xfe61: return 0x0309; // dead_hook + case 0xfe58: return 0x030a; // dead_abovering + case 0xfe59: return 0x030b; // dead_doubleacute + case 0xfe5a: return 0x030c; // dead_caron + case 0xfe62: return 0x031b; // dead_horn + case 0x1eff: return 0x0323; // combining_belowdot + case 0xfe60: return 0x0323; // dead_belowdot + case 0xfe5b: return 0x0327; // dead_cedilla + case 0xfe5c: return 0x0328; // dead_ogonek + case 0xfe5d: return 0x0345; // dead_iota + case 0x07ae: return 0x0385; // Greek_accentdieresis + case 0x07a1: return 0x0386; // Greek_ALPHAaccent + case 0x07a2: return 0x0388; // Greek_EPSILONaccent + case 0x07a3: return 0x0389; // Greek_ETAaccent + case 0x07a4: return 0x038a; // Greek_IOTAaccent + case 0x07a7: return 0x038c; // Greek_OMICRONaccent + case 0x07a8: return 0x038e; // Greek_UPSILONaccent + case 0x07ab: return 0x038f; // Greek_OMEGAaccent + case 0x07b6: return 0x0390; // Greek_iotaaccentdieresis + case 0x07c1: return 0x0391; // Greek_ALPHA + case 0x07c2: return 0x0392; // Greek_BETA + case 0x07c3: return 0x0393; // Greek_GAMMA + case 0x07c4: return 0x0394; // Greek_DELTA + case 0x07c5: return 0x0395; // Greek_EPSILON + case 0x07c6: return 0x0396; // Greek_ZETA + case 0x07c7: return 0x0397; // Greek_ETA + case 0x07c8: return 0x0398; // Greek_THETA + case 0x07c9: return 0x0399; // Greek_IOTA + case 0x07ca: return 0x039a; // Greek_KAPPA + case 0x07cb: return 0x039b; // Greek_LAMDA + case 0x07cc: return 0x039c; // Greek_MU + case 0x07cd: return 0x039d; // Greek_NU + case 0x07ce: return 0x039e; // Greek_XI + case 0x07cf: return 0x039f; // Greek_OMICRON + case 0x07d0: return 0x03a0; // Greek_PI + case 0x07d1: return 0x03a1; // Greek_RHO + case 0x07d2: return 0x03a3; // Greek_SIGMA + case 0x07d4: return 0x03a4; // Greek_TAU + case 0x07d5: return 0x03a5; // Greek_UPSILON + case 0x07d6: return 0x03a6; // Greek_PHI + case 0x07d7: return 0x03a7; // Greek_CHI + case 0x07d8: return 0x03a8; // Greek_PSI + case 0x07d9: return 0x03a9; // Greek_OMEGA + case 0x07a5: return 0x03aa; // Greek_IOTAdiaeresis + case 0x07a9: return 0x03ab; // Greek_UPSILONdieresis + case 0x07b1: return 0x03ac; // Greek_alphaaccent + case 0x07b2: return 0x03ad; // Greek_epsilonaccent + case 0x07b3: return 0x03ae; // Greek_etaaccent + case 0x07b4: return 0x03af; // Greek_iotaaccent + case 0x07ba: return 0x03b0; // Greek_upsilonaccentdieresis + case 0x07e1: return 0x03b1; // Greek_alpha + case 0x07e2: return 0x03b2; // Greek_beta + case 0x07e3: return 0x03b3; // Greek_gamma + case 0x07e4: return 0x03b4; // Greek_delta + case 0x07e5: return 0x03b5; // Greek_epsilon + case 0x07e6: return 0x03b6; // Greek_zeta + case 0x07e7: return 0x03b7; // Greek_eta + case 0x07e8: return 0x03b8; // Greek_theta + case 0x07e9: return 0x03b9; // Greek_iota + case 0x07ea: return 0x03ba; // Greek_kappa + case 0x07eb: return 0x03bb; // Greek_lambda + case 0x07ec: return 0x03bc; // Greek_mu + case 0x07ed: return 0x03bd; // Greek_nu + case 0x07ee: return 0x03be; // Greek_xi + case 0x07ef: return 0x03bf; // Greek_omicron + case 0x07f0: return 0x03c0; // Greek_pi + case 0x07f1: return 0x03c1; // Greek_rho + case 0x07f3: return 0x03c2; // Greek_finalsmallsigma + case 0x07f2: return 0x03c3; // Greek_sigma + case 0x07f4: return 0x03c4; // Greek_tau + case 0x07f5: return 0x03c5; // Greek_upsilon + case 0x07f6: return 0x03c6; // Greek_phi + case 0x07f7: return 0x03c7; // Greek_chi + case 0x07f8: return 0x03c8; // Greek_psi + case 0x07f9: return 0x03c9; // Greek_omega + case 0x07b5: return 0x03ca; // Greek_iotadieresis + case 0x07b9: return 0x03cb; // Greek_upsilondieresis + case 0x07b7: return 0x03cc; // Greek_omicronaccent + case 0x07b8: return 0x03cd; // Greek_upsilonaccent + case 0x07bb: return 0x03ce; // Greek_omegaaccent + case 0x06b3: return 0x0401; // Cyrillic_IO + case 0x06b1: return 0x0402; // Serbian_DJE + case 0x06b2: return 0x0403; // Macedonia_GJE + case 0x06b4: return 0x0404; // Ukrainian_IE + case 0x06b5: return 0x0405; // Macedonia_DSE + case 0x06b6: return 0x0406; // Ukrainian_I + case 0x06b7: return 0x0407; // Ukrainian_YI + case 0x06b8: return 0x0408; // Cyrillic_JE + case 0x06b9: return 0x0409; // Cyrillic_LJE + case 0x06ba: return 0x040a; // Cyrillic_NJE + case 0x06bb: return 0x040b; // Serbian_TSHE + case 0x06bc: return 0x040c; // Macedonia_KJE + case 0x06be: return 0x040e; // Byelorussian_SHORTU + case 0x06bf: return 0x040f; // Cyrillic_DZHE + case 0x06e1: return 0x0410; // Cyrillic_A + case 0x06e2: return 0x0411; // Cyrillic_BE + case 0x06f7: return 0x0412; // Cyrillic_VE + case 0x06e7: return 0x0413; // Cyrillic_GHE + case 0x06e4: return 0x0414; // Cyrillic_DE + case 0x06e5: return 0x0415; // Cyrillic_IE + case 0x06f6: return 0x0416; // Cyrillic_ZHE + case 0x06fa: return 0x0417; // Cyrillic_ZE + case 0x06e9: return 0x0418; // Cyrillic_I + case 0x06ea: return 0x0419; // Cyrillic_SHORTI + case 0x06eb: return 0x041a; // Cyrillic_KA + case 0x06ec: return 0x041b; // Cyrillic_EL + case 0x06ed: return 0x041c; // Cyrillic_EM + case 0x06ee: return 0x041d; // Cyrillic_EN + case 0x06ef: return 0x041e; // Cyrillic_O + case 0x06f0: return 0x041f; // Cyrillic_PE + case 0x06f2: return 0x0420; // Cyrillic_ER + case 0x06f3: return 0x0421; // Cyrillic_ES + case 0x06f4: return 0x0422; // Cyrillic_TE + case 0x06f5: return 0x0423; // Cyrillic_U + case 0x06e6: return 0x0424; // Cyrillic_EF + case 0x06e8: return 0x0425; // Cyrillic_HA + case 0x06e3: return 0x0426; // Cyrillic_TSE + case 0x06fe: return 0x0427; // Cyrillic_CHE + case 0x06fb: return 0x0428; // Cyrillic_SHA + case 0x06fd: return 0x0429; // Cyrillic_SHCHA + case 0x06ff: return 0x042a; // Cyrillic_HARDSIGN + case 0x06f9: return 0x042b; // Cyrillic_YERU + case 0x06f8: return 0x042c; // Cyrillic_SOFTSIGN + case 0x06fc: return 0x042d; // Cyrillic_E + case 0x06e0: return 0x042e; // Cyrillic_YU + case 0x06f1: return 0x042f; // Cyrillic_YA + case 0x06c1: return 0x0430; // Cyrillic_a + case 0x06c2: return 0x0431; // Cyrillic_be + case 0x06d7: return 0x0432; // Cyrillic_ve + case 0x06c7: return 0x0433; // Cyrillic_ghe + case 0x06c4: return 0x0434; // Cyrillic_de + case 0x06c5: return 0x0435; // Cyrillic_ie + case 0x06d6: return 0x0436; // Cyrillic_zhe + case 0x06da: return 0x0437; // Cyrillic_ze + case 0x06c9: return 0x0438; // Cyrillic_i + case 0x06ca: return 0x0439; // Cyrillic_shorti + case 0x06cb: return 0x043a; // Cyrillic_ka + case 0x06cc: return 0x043b; // Cyrillic_el + case 0x06cd: return 0x043c; // Cyrillic_em + case 0x06ce: return 0x043d; // Cyrillic_en + case 0x06cf: return 0x043e; // Cyrillic_o + case 0x06d0: return 0x043f; // Cyrillic_pe + case 0x06d2: return 0x0440; // Cyrillic_er + case 0x06d3: return 0x0441; // Cyrillic_es + case 0x06d4: return 0x0442; // Cyrillic_te + case 0x06d5: return 0x0443; // Cyrillic_u + case 0x06c6: return 0x0444; // Cyrillic_ef + case 0x06c8: return 0x0445; // Cyrillic_ha + case 0x06c3: return 0x0446; // Cyrillic_tse + case 0x06de: return 0x0447; // Cyrillic_che + case 0x06db: return 0x0448; // Cyrillic_sha + case 0x06dd: return 0x0449; // Cyrillic_shcha + case 0x06df: return 0x044a; // Cyrillic_hardsign + case 0x06d9: return 0x044b; // Cyrillic_yeru + case 0x06d8: return 0x044c; // Cyrillic_softsign + case 0x06dc: return 0x044d; // Cyrillic_e + case 0x06c0: return 0x044e; // Cyrillic_yu + case 0x06d1: return 0x044f; // Cyrillic_ya + case 0x06a3: return 0x0451; // Cyrillic_io + case 0x06a1: return 0x0452; // Serbian_dje + case 0x06a2: return 0x0453; // Macedonia_gje + case 0x06a4: return 0x0454; // Ukrainian_ie + case 0x06a5: return 0x0455; // Macedonia_dse + case 0x06a6: return 0x0456; // Ukrainian_i + case 0x06a7: return 0x0457; // Ukrainian_yi + case 0x06a8: return 0x0458; // Cyrillic_je + case 0x06a9: return 0x0459; // Cyrillic_lje + case 0x06aa: return 0x045a; // Cyrillic_nje + case 0x06ab: return 0x045b; // Serbian_tshe + case 0x06ac: return 0x045c; // Macedonia_kje + case 0x06ae: return 0x045e; // Byelorussian_shortu + case 0x06af: return 0x045f; // Cyrillic_dzhe + case 0x06bd: return 0x0490; // Ukrainian_GHE_WITH_UPTURN + case 0x06ad: return 0x0491; // Ukrainian_ghe_with_upturn + case 0x0680: return 0x0492; // Cyrillic_GHE_bar + case 0x0690: return 0x0493; // Cyrillic_ghe_bar + case 0x0681: return 0x0496; // Cyrillic_ZHE_descender + case 0x0691: return 0x0497; // Cyrillic_zhe_descender + case 0x0682: return 0x049a; // Cyrillic_KA_descender + case 0x0692: return 0x049b; // Cyrillic_ka_descender + case 0x0683: return 0x049c; // Cyrillic_KA_vertstroke + case 0x0693: return 0x049d; // Cyrillic_ka_vertstroke + case 0x0684: return 0x04a2; // Cyrillic_EN_descender + case 0x0694: return 0x04a3; // Cyrillic_en_descender + case 0x0685: return 0x04ae; // Cyrillic_U_straight + case 0x0695: return 0x04af; // Cyrillic_u_straight + case 0x0686: return 0x04b0; // Cyrillic_U_straight_bar + case 0x0696: return 0x04b1; // Cyrillic_u_straight_bar + case 0x0687: return 0x04b2; // Cyrillic_HA_descender + case 0x0697: return 0x04b3; // Cyrillic_ha_descender + case 0x0688: return 0x04b6; // Cyrillic_CHE_descender + case 0x0698: return 0x04b7; // Cyrillic_che_descender + case 0x0689: return 0x04b8; // Cyrillic_CHE_vertstroke + case 0x0699: return 0x04b9; // Cyrillic_che_vertstroke + case 0x068a: return 0x04ba; // Cyrillic_SHHA + case 0x069a: return 0x04bb; // Cyrillic_shha + case 0x068c: return 0x04d8; // Cyrillic_SCHWA + case 0x069c: return 0x04d9; // Cyrillic_schwa + case 0x068d: return 0x04e2; // Cyrillic_I_macron + case 0x069d: return 0x04e3; // Cyrillic_i_macron + case 0x068e: return 0x04e8; // Cyrillic_O_bar + case 0x069e: return 0x04e9; // Cyrillic_o_bar + case 0x068f: return 0x04ee; // Cyrillic_U_macron + case 0x069f: return 0x04ef; // Cyrillic_u_macron + case 0x14b2: return 0x0531; // Armenian_AYB + case 0x14b4: return 0x0532; // Armenian_BEN + case 0x14b6: return 0x0533; // Armenian_GIM + case 0x14b8: return 0x0534; // Armenian_DA + case 0x14ba: return 0x0535; // Armenian_YECH + case 0x14bc: return 0x0536; // Armenian_ZA + case 0x14be: return 0x0537; // Armenian_E + case 0x14c0: return 0x0538; // Armenian_AT + case 0x14c2: return 0x0539; // Armenian_TO + case 0x14c4: return 0x053a; // Armenian_ZHE + case 0x14c6: return 0x053b; // Armenian_INI + case 0x14c8: return 0x053c; // Armenian_LYUN + case 0x14ca: return 0x053d; // Armenian_KHE + case 0x14cc: return 0x053e; // Armenian_TSA + case 0x14ce: return 0x053f; // Armenian_KEN + case 0x14d0: return 0x0540; // Armenian_HO + case 0x14d2: return 0x0541; // Armenian_DZA + case 0x14d4: return 0x0542; // Armenian_GHAT + case 0x14d6: return 0x0543; // Armenian_TCHE + case 0x14d8: return 0x0544; // Armenian_MEN + case 0x14da: return 0x0545; // Armenian_HI + case 0x14dc: return 0x0546; // Armenian_NU + case 0x14de: return 0x0547; // Armenian_SHA + case 0x14e0: return 0x0548; // Armenian_VO + case 0x14e2: return 0x0549; // Armenian_CHA + case 0x14e4: return 0x054a; // Armenian_PE + case 0x14e6: return 0x054b; // Armenian_JE + case 0x14e8: return 0x054c; // Armenian_RA + case 0x14ea: return 0x054d; // Armenian_SE + case 0x14ec: return 0x054e; // Armenian_VEV + case 0x14ee: return 0x054f; // Armenian_TYUN + case 0x14f0: return 0x0550; // Armenian_RE + case 0x14f2: return 0x0551; // Armenian_TSO + case 0x14f4: return 0x0552; // Armenian_VYUN + case 0x14f6: return 0x0553; // Armenian_PYUR + case 0x14f8: return 0x0554; // Armenian_KE + case 0x14fa: return 0x0555; // Armenian_O + case 0x14fc: return 0x0556; // Armenian_FE + case 0x14fe: return 0x055a; // Armenian_apostrophe + case 0x14b0: return 0x055b; // Armenian_shesht + case 0x14af: return 0x055c; // Armenian_amanak + case 0x14aa: return 0x055d; // Armenian_but + case 0x14b1: return 0x055e; // Armenian_paruyk + case 0x14b3: return 0x0561; // Armenian_ayb + case 0x14b5: return 0x0562; // Armenian_ben + case 0x14b7: return 0x0563; // Armenian_gim + case 0x14b9: return 0x0564; // Armenian_da + case 0x14bb: return 0x0565; // Armenian_yech + case 0x14bd: return 0x0566; // Armenian_za + case 0x14bf: return 0x0567; // Armenian_e + case 0x14c1: return 0x0568; // Armenian_at + case 0x14c3: return 0x0569; // Armenian_to + case 0x14c5: return 0x056a; // Armenian_zhe + case 0x14c7: return 0x056b; // Armenian_ini + case 0x14c9: return 0x056c; // Armenian_lyun + case 0x14cb: return 0x056d; // Armenian_khe + case 0x14cd: return 0x056e; // Armenian_tsa + case 0x14cf: return 0x056f; // Armenian_ken + case 0x14d1: return 0x0570; // Armenian_ho + case 0x14d3: return 0x0571; // Armenian_dza + case 0x14d5: return 0x0572; // Armenian_ghat + case 0x14d7: return 0x0573; // Armenian_tche + case 0x14d9: return 0x0574; // Armenian_men + case 0x14db: return 0x0575; // Armenian_hi + case 0x14dd: return 0x0576; // Armenian_nu + case 0x14df: return 0x0577; // Armenian_sha + case 0x14e1: return 0x0578; // Armenian_vo + case 0x14e3: return 0x0579; // Armenian_cha + case 0x14e5: return 0x057a; // Armenian_pe + case 0x14e7: return 0x057b; // Armenian_je + case 0x14e9: return 0x057c; // Armenian_ra + case 0x14eb: return 0x057d; // Armenian_se + case 0x14ed: return 0x057e; // Armenian_vev + case 0x14ef: return 0x057f; // Armenian_tyun + case 0x14f1: return 0x0580; // Armenian_re + case 0x14f3: return 0x0581; // Armenian_tso + case 0x14f5: return 0x0582; // Armenian_vyun + case 0x14f7: return 0x0583; // Armenian_pyur + case 0x14f9: return 0x0584; // Armenian_ke + case 0x14fb: return 0x0585; // Armenian_o + case 0x14fd: return 0x0586; // Armenian_fe + case 0x14a2: return 0x0587; // Armenian_ligature_ew + case 0x14a3: return 0x0589; // Armenian_verjaket + case 0x14ad: return 0x058a; // Armenian_yentamna + case 0x0ce0: return 0x05d0; // hebrew_aleph + case 0x0ce1: return 0x05d1; // hebrew_beth + case 0x0ce2: return 0x05d2; // hebrew_gimmel + case 0x0ce3: return 0x05d3; // hebrew_daleth + case 0x0ce4: return 0x05d4; // hebrew_he + case 0x0ce5: return 0x05d5; // hebrew_waw + case 0x0ce6: return 0x05d6; // hebrew_zayin + case 0x0ce7: return 0x05d7; // hebrew_het + case 0x0ce8: return 0x05d8; // hebrew_teth + case 0x0ce9: return 0x05d9; // hebrew_yod + case 0x0cea: return 0x05da; // hebrew_finalkaph + case 0x0ceb: return 0x05db; // hebrew_kaph + case 0x0cec: return 0x05dc; // hebrew_lamed + case 0x0ced: return 0x05dd; // hebrew_finalmem + case 0x0cee: return 0x05de; // hebrew_mem + case 0x0cef: return 0x05df; // hebrew_finalnun + case 0x0cf0: return 0x05e0; // hebrew_nun + case 0x0cf1: return 0x05e1; // hebrew_samekh + case 0x0cf2: return 0x05e2; // hebrew_ayin + case 0x0cf3: return 0x05e3; // hebrew_finalpe + case 0x0cf4: return 0x05e4; // hebrew_pe + case 0x0cf5: return 0x05e5; // hebrew_finalzadi + case 0x0cf6: return 0x05e6; // hebrew_zadi + case 0x0cf7: return 0x05e7; // hebrew_qoph + case 0x0cf8: return 0x05e8; // hebrew_resh + case 0x0cf9: return 0x05e9; // hebrew_shin + case 0x0cfa: return 0x05ea; // hebrew_taw + case 0x05ac: return 0x060c; // Arabic_comma + case 0x05bb: return 0x061b; // Arabic_semicolon + case 0x05bf: return 0x061f; // Arabic_question_mark + case 0x05c1: return 0x0621; // Arabic_hamza + case 0x05c2: return 0x0622; // Arabic_maddaonalef + case 0x05c3: return 0x0623; // Arabic_hamzaonalef + case 0x05c4: return 0x0624; // Arabic_hamzaonwaw + case 0x05c5: return 0x0625; // Arabic_hamzaunderalef + case 0x05c6: return 0x0626; // Arabic_hamzaonyeh + case 0x05c7: return 0x0627; // Arabic_alef + case 0x05c8: return 0x0628; // Arabic_beh + case 0x05c9: return 0x0629; // Arabic_tehmarbuta + case 0x05ca: return 0x062a; // Arabic_teh + case 0x05cb: return 0x062b; // Arabic_theh + case 0x05cc: return 0x062c; // Arabic_jeem + case 0x05cd: return 0x062d; // Arabic_hah + case 0x05ce: return 0x062e; // Arabic_khah + case 0x05cf: return 0x062f; // Arabic_dal + case 0x05d0: return 0x0630; // Arabic_thal + case 0x05d1: return 0x0631; // Arabic_ra + case 0x05d2: return 0x0632; // Arabic_zain + case 0x05d3: return 0x0633; // Arabic_seen + case 0x05d4: return 0x0634; // Arabic_sheen + case 0x05d5: return 0x0635; // Arabic_sad + case 0x05d6: return 0x0636; // Arabic_dad + case 0x05d7: return 0x0637; // Arabic_tah + case 0x05d8: return 0x0638; // Arabic_zah + case 0x05d9: return 0x0639; // Arabic_ain + case 0x05da: return 0x063a; // Arabic_ghain + case 0x05e0: return 0x0640; // Arabic_tatweel + case 0x05e1: return 0x0641; // Arabic_feh + case 0x05e2: return 0x0642; // Arabic_qaf + case 0x05e3: return 0x0643; // Arabic_kaf + case 0x05e4: return 0x0644; // Arabic_lam + case 0x05e5: return 0x0645; // Arabic_meem + case 0x05e6: return 0x0646; // Arabic_noon + case 0x05e7: return 0x0647; // Arabic_ha + case 0x05e8: return 0x0648; // Arabic_waw + case 0x05e9: return 0x0649; // Arabic_alefmaksura + case 0x05ea: return 0x064a; // Arabic_yeh + case 0x05eb: return 0x064b; // Arabic_fathatan + case 0x05ec: return 0x064c; // Arabic_dammatan + case 0x05ed: return 0x064d; // Arabic_kasratan + case 0x05ee: return 0x064e; // Arabic_fatha + case 0x05ef: return 0x064f; // Arabic_damma + case 0x05f0: return 0x0650; // Arabic_kasra + case 0x05f1: return 0x0651; // Arabic_shadda + case 0x05f2: return 0x0652; // Arabic_sukun + case 0x05f3: return 0x0653; // Arabic_madda_above + case 0x05f4: return 0x0654; // Arabic_hamza_above + case 0x05f5: return 0x0655; // Arabic_hamza_below + case 0x05b0: return 0x0660; // Arabic_0 + case 0x05b1: return 0x0661; // Arabic_1 + case 0x05b2: return 0x0662; // Arabic_2 + case 0x05b3: return 0x0663; // Arabic_3 + case 0x05b4: return 0x0664; // Arabic_4 + case 0x05b5: return 0x0665; // Arabic_5 + case 0x05b6: return 0x0666; // Arabic_6 + case 0x05b7: return 0x0667; // Arabic_7 + case 0x05b8: return 0x0668; // Arabic_8 + case 0x05b9: return 0x0669; // Arabic_9 + case 0x05a5: return 0x066a; // Arabic_percent + case 0x05a6: return 0x0670; // Arabic_superscript_alef + case 0x05a7: return 0x0679; // Arabic_tteh + case 0x05a8: return 0x067e; // Arabic_peh + case 0x05a9: return 0x0686; // Arabic_tcheh + case 0x05aa: return 0x0688; // Arabic_ddal + case 0x05ab: return 0x0691; // Arabic_rreh + case 0x05f6: return 0x0698; // Arabic_jeh + case 0x05f7: return 0x06a4; // Arabic_veh + case 0x05f8: return 0x06a9; // Arabic_keheh + case 0x05f9: return 0x06af; // Arabic_gaf + case 0x05fa: return 0x06ba; // Arabic_noon_ghunna + case 0x05fb: return 0x06be; // Arabic_heh_doachashmee + case 0x05fe: return 0x06c1; // Arabic_heh_goal + case 0x05fc: return 0x06cc; // Farsi_yeh + case 0x05fd: return 0x06d2; // Arabic_yeh_baree + case 0x05ae: return 0x06d4; // Arabic_fullstop + case 0x0590: return 0x06f0; // Farsi_0 + case 0x0591: return 0x06f1; // Farsi_1 + case 0x0592: return 0x06f2; // Farsi_2 + case 0x0593: return 0x06f3; // Farsi_3 + case 0x0594: return 0x06f4; // Farsi_4 + case 0x0595: return 0x06f5; // Farsi_5 + case 0x0596: return 0x06f6; // Farsi_6 + case 0x0597: return 0x06f7; // Farsi_7 + case 0x0598: return 0x06f8; // Farsi_8 + case 0x0599: return 0x06f9; // Farsi_9 + case 0x0da1: return 0x0e01; // Thai_kokai + case 0x0da2: return 0x0e02; // Thai_khokhai + case 0x0da3: return 0x0e03; // Thai_khokhuat + case 0x0da4: return 0x0e04; // Thai_khokhwai + case 0x0da5: return 0x0e05; // Thai_khokhon + case 0x0da6: return 0x0e06; // Thai_khorakhang + case 0x0da7: return 0x0e07; // Thai_ngongu + case 0x0da8: return 0x0e08; // Thai_chochan + case 0x0da9: return 0x0e09; // Thai_choching + case 0x0daa: return 0x0e0a; // Thai_chochang + case 0x0dab: return 0x0e0b; // Thai_soso + case 0x0dac: return 0x0e0c; // Thai_chochoe + case 0x0dad: return 0x0e0d; // Thai_yoying + case 0x0dae: return 0x0e0e; // Thai_dochada + case 0x0daf: return 0x0e0f; // Thai_topatak + case 0x0db0: return 0x0e10; // Thai_thothan + case 0x0db1: return 0x0e11; // Thai_thonangmontho + case 0x0db2: return 0x0e12; // Thai_thophuthao + case 0x0db3: return 0x0e13; // Thai_nonen + case 0x0db4: return 0x0e14; // Thai_dodek + case 0x0db5: return 0x0e15; // Thai_totao + case 0x0db6: return 0x0e16; // Thai_thothung + case 0x0db7: return 0x0e17; // Thai_thothahan + case 0x0db8: return 0x0e18; // Thai_thothong + case 0x0db9: return 0x0e19; // Thai_nonu + case 0x0dba: return 0x0e1a; // Thai_bobaimai + case 0x0dbb: return 0x0e1b; // Thai_popla + case 0x0dbc: return 0x0e1c; // Thai_phophung + case 0x0dbd: return 0x0e1d; // Thai_fofa + case 0x0dbe: return 0x0e1e; // Thai_phophan + case 0x0dbf: return 0x0e1f; // Thai_fofan + case 0x0dc0: return 0x0e20; // Thai_phosamphao + case 0x0dc1: return 0x0e21; // Thai_moma + case 0x0dc2: return 0x0e22; // Thai_yoyak + case 0x0dc3: return 0x0e23; // Thai_rorua + case 0x0dc4: return 0x0e24; // Thai_ru + case 0x0dc5: return 0x0e25; // Thai_loling + case 0x0dc6: return 0x0e26; // Thai_lu + case 0x0dc7: return 0x0e27; // Thai_wowaen + case 0x0dc8: return 0x0e28; // Thai_sosala + case 0x0dc9: return 0x0e29; // Thai_sorusi + case 0x0dca: return 0x0e2a; // Thai_sosua + case 0x0dcb: return 0x0e2b; // Thai_hohip + case 0x0dcc: return 0x0e2c; // Thai_lochula + case 0x0dcd: return 0x0e2d; // Thai_oang + case 0x0dce: return 0x0e2e; // Thai_honokhuk + case 0x0dcf: return 0x0e2f; // Thai_paiyannoi + case 0x0dd0: return 0x0e30; // Thai_saraa + case 0x0dd1: return 0x0e31; // Thai_maihanakat + case 0x0dd2: return 0x0e32; // Thai_saraaa + case 0x0dd3: return 0x0e33; // Thai_saraam + case 0x0dd4: return 0x0e34; // Thai_sarai + case 0x0dd5: return 0x0e35; // Thai_saraii + case 0x0dd6: return 0x0e36; // Thai_saraue + case 0x0dd7: return 0x0e37; // Thai_sarauee + case 0x0dd8: return 0x0e38; // Thai_sarau + case 0x0dd9: return 0x0e39; // Thai_sarauu + case 0x0dda: return 0x0e3a; // Thai_phinthu + case 0x0ddf: return 0x0e3f; // Thai_baht + case 0x0de0: return 0x0e40; // Thai_sarae + case 0x0de1: return 0x0e41; // Thai_saraae + case 0x0de2: return 0x0e42; // Thai_sarao + case 0x0de3: return 0x0e43; // Thai_saraaimaimuan + case 0x0de4: return 0x0e44; // Thai_saraaimaimalai + case 0x0de5: return 0x0e45; // Thai_lakkhangyao + case 0x0de6: return 0x0e46; // Thai_maiyamok + case 0x0de7: return 0x0e47; // Thai_maitaikhu + case 0x0de8: return 0x0e48; // Thai_maiek + case 0x0de9: return 0x0e49; // Thai_maitho + case 0x0dea: return 0x0e4a; // Thai_maitri + case 0x0deb: return 0x0e4b; // Thai_maichattawa + case 0x0dec: return 0x0e4c; // Thai_thanthakhat + case 0x0ded: return 0x0e4d; // Thai_nikhahit + case 0x0df0: return 0x0e50; // Thai_leksun + case 0x0df1: return 0x0e51; // Thai_leknung + case 0x0df2: return 0x0e52; // Thai_leksong + case 0x0df3: return 0x0e53; // Thai_leksam + case 0x0df4: return 0x0e54; // Thai_leksi + case 0x0df5: return 0x0e55; // Thai_lekha + case 0x0df6: return 0x0e56; // Thai_lekhok + case 0x0df7: return 0x0e57; // Thai_lekchet + case 0x0df8: return 0x0e58; // Thai_lekpaet + case 0x0df9: return 0x0e59; // Thai_lekkao + case 0x15d0: return 0x10d0; // Georgian_an + case 0x15d1: return 0x10d1; // Georgian_ban + case 0x15d2: return 0x10d2; // Georgian_gan + case 0x15d3: return 0x10d3; // Georgian_don + case 0x15d4: return 0x10d4; // Georgian_en + case 0x15d5: return 0x10d5; // Georgian_vin + case 0x15d6: return 0x10d6; // Georgian_zen + case 0x15d7: return 0x10d7; // Georgian_tan + case 0x15d8: return 0x10d8; // Georgian_in + case 0x15d9: return 0x10d9; // Georgian_kan + case 0x15da: return 0x10da; // Georgian_las + case 0x15db: return 0x10db; // Georgian_man + case 0x15dc: return 0x10dc; // Georgian_nar + case 0x15dd: return 0x10dd; // Georgian_on + case 0x15de: return 0x10de; // Georgian_par + case 0x15df: return 0x10df; // Georgian_zhar + case 0x15e0: return 0x10e0; // Georgian_rae + case 0x15e1: return 0x10e1; // Georgian_san + case 0x15e2: return 0x10e2; // Georgian_tar + case 0x15e3: return 0x10e3; // Georgian_un + case 0x15e4: return 0x10e4; // Georgian_phar + case 0x15e5: return 0x10e5; // Georgian_khar + case 0x15e6: return 0x10e6; // Georgian_ghan + case 0x15e7: return 0x10e7; // Georgian_qar + case 0x15e8: return 0x10e8; // Georgian_shin + case 0x15e9: return 0x10e9; // Georgian_chin + case 0x15ea: return 0x10ea; // Georgian_can + case 0x15eb: return 0x10eb; // Georgian_jil + case 0x15ec: return 0x10ec; // Georgian_cil + case 0x15ed: return 0x10ed; // Georgian_char + case 0x15ee: return 0x10ee; // Georgian_xan + case 0x15ef: return 0x10ef; // Georgian_jhan + case 0x15f0: return 0x10f0; // Georgian_hae + case 0x15f1: return 0x10f1; // Georgian_he + case 0x15f2: return 0x10f2; // Georgian_hie + case 0x15f3: return 0x10f3; // Georgian_we + case 0x15f4: return 0x10f4; // Georgian_har + case 0x15f5: return 0x10f5; // Georgian_hoe + case 0x15f6: return 0x10f6; // Georgian_fi + case 0x0ed4: return 0x11a8; // Hangul_J_Kiyeog + case 0x0ed5: return 0x11a9; // Hangul_J_SsangKiyeog + case 0x0ed6: return 0x11aa; // Hangul_J_KiyeogSios + case 0x0ed7: return 0x11ab; // Hangul_J_Nieun + case 0x0ed8: return 0x11ac; // Hangul_J_NieunJieuj + case 0x0ed9: return 0x11ad; // Hangul_J_NieunHieuh + case 0x0eda: return 0x11ae; // Hangul_J_Dikeud + case 0x0edb: return 0x11af; // Hangul_J_Rieul + case 0x0edc: return 0x11b0; // Hangul_J_RieulKiyeog + case 0x0edd: return 0x11b1; // Hangul_J_RieulMieum + case 0x0ede: return 0x11b2; // Hangul_J_RieulPieub + case 0x0edf: return 0x11b3; // Hangul_J_RieulSios + case 0x0ee0: return 0x11b4; // Hangul_J_RieulTieut + case 0x0ee1: return 0x11b5; // Hangul_J_RieulPhieuf + case 0x0ee2: return 0x11b6; // Hangul_J_RieulHieuh + case 0x0ee3: return 0x11b7; // Hangul_J_Mieum + case 0x0ee4: return 0x11b8; // Hangul_J_Pieub + case 0x0ee5: return 0x11b9; // Hangul_J_PieubSios + case 0x0ee6: return 0x11ba; // Hangul_J_Sios + case 0x0ee7: return 0x11bb; // Hangul_J_SsangSios + case 0x0ee8: return 0x11bc; // Hangul_J_Ieung + case 0x0ee9: return 0x11bd; // Hangul_J_Jieuj + case 0x0eea: return 0x11be; // Hangul_J_Cieuc + case 0x0eeb: return 0x11bf; // Hangul_J_Khieuq + case 0x0eec: return 0x11c0; // Hangul_J_Tieut + case 0x0eed: return 0x11c1; // Hangul_J_Phieuf + case 0x0eee: return 0x11c2; // Hangul_J_Hieuh + case 0x0ef8: return 0x11eb; // Hangul_J_PanSios + case 0x0ef9: return 0x11f0; // Hangul_J_KkogjiDalrinIeung + case 0x0efa: return 0x11f9; // Hangul_J_YeorinHieuh + case 0x12a1: return 0x1e02; // Babovedot + case 0x12a2: return 0x1e03; // babovedot + case 0x12a6: return 0x1e0a; // Dabovedot + case 0x12ab: return 0x1e0b; // dabovedot + case 0x12b0: return 0x1e1e; // Fabovedot + case 0x12b1: return 0x1e1f; // fabovedot + case 0x16d1: return 0x1e36; // Lbelowdot + case 0x16e1: return 0x1e37; // lbelowdot + case 0x12b4: return 0x1e40; // Mabovedot + case 0x12b5: return 0x1e41; // mabovedot + case 0x12b7: return 0x1e56; // Pabovedot + case 0x12b9: return 0x1e57; // pabovedot + case 0x12bb: return 0x1e60; // Sabovedot + case 0x12bf: return 0x1e61; // sabovedot + case 0x12d7: return 0x1e6a; // Tabovedot + case 0x12f7: return 0x1e6b; // tabovedot + case 0x12a8: return 0x1e80; // Wgrave + case 0x12b8: return 0x1e81; // wgrave + case 0x12aa: return 0x1e82; // Wacute + case 0x12ba: return 0x1e83; // wacute + case 0x12bd: return 0x1e84; // Wdiaeresis + case 0x12be: return 0x1e85; // wdiaeresis + case 0x16a3: return 0x1e8a; // Xabovedot + case 0x16b3: return 0x1e8b; // xabovedot + case 0x1ea0: return 0x1ea0; // Abelowdot + case 0x1ea1: return 0x1ea1; // abelowdot + case 0x1ea2: return 0x1ea2; // Ahook + case 0x1ea3: return 0x1ea3; // ahook + case 0x1ea4: return 0x1ea4; // Acircumflexacute + case 0x1ea5: return 0x1ea5; // acircumflexacute + case 0x1ea6: return 0x1ea6; // Acircumflexgrave + case 0x1ea7: return 0x1ea7; // acircumflexgrave + case 0x1ea8: return 0x1ea8; // Acircumflexhook + case 0x1ea9: return 0x1ea9; // acircumflexhook + case 0x1eaa: return 0x1eaa; // Acircumflextilde + case 0x1eab: return 0x1eab; // acircumflextilde + case 0x1eac: return 0x1eac; // Acircumflexbelowdot + case 0x1ead: return 0x1ead; // acircumflexbelowdot + case 0x1eae: return 0x1eae; // Abreveacute + case 0x1eaf: return 0x1eaf; // abreveacute + case 0x1eb0: return 0x1eb0; // Abrevegrave + case 0x1eb1: return 0x1eb1; // abrevegrave + case 0x1eb2: return 0x1eb2; // Abrevehook + case 0x1eb3: return 0x1eb3; // abrevehook + case 0x1eb4: return 0x1eb4; // Abrevetilde + case 0x1eb5: return 0x1eb5; // abrevetilde + case 0x1eb6: return 0x1eb6; // Abrevebelowdot + case 0x1eb7: return 0x1eb7; // abrevebelowdot + case 0x1eb8: return 0x1eb8; // Ebelowdot + case 0x1eb9: return 0x1eb9; // ebelowdot + case 0x1eba: return 0x1eba; // Ehook + case 0x1ebb: return 0x1ebb; // ehook + case 0x1ebc: return 0x1ebc; // Etilde + case 0x1ebd: return 0x1ebd; // etilde + case 0x1ebe: return 0x1ebe; // Ecircumflexacute + case 0x1ebf: return 0x1ebf; // ecircumflexacute + case 0x1ec0: return 0x1ec0; // Ecircumflexgrave + case 0x1ec1: return 0x1ec1; // ecircumflexgrave + case 0x1ec2: return 0x1ec2; // Ecircumflexhook + case 0x1ec3: return 0x1ec3; // ecircumflexhook + case 0x1ec4: return 0x1ec4; // Ecircumflextilde + case 0x1ec5: return 0x1ec5; // ecircumflextilde + case 0x1ec6: return 0x1ec6; // Ecircumflexbelowdot + case 0x1ec7: return 0x1ec7; // ecircumflexbelowdot + case 0x1ec8: return 0x1ec8; // Ihook + case 0x1ec9: return 0x1ec9; // ihook + case 0x1eca: return 0x1eca; // Ibelowdot + case 0x1ecb: return 0x1ecb; // ibelowdot + case 0x1ecc: return 0x1ecc; // Obelowdot + case 0x1ecd: return 0x1ecd; // obelowdot + case 0x1ece: return 0x1ece; // Ohook + case 0x1ecf: return 0x1ecf; // ohook + case 0x1ed0: return 0x1ed0; // Ocircumflexacute + case 0x1ed1: return 0x1ed1; // ocircumflexacute + case 0x1ed2: return 0x1ed2; // Ocircumflexgrave + case 0x1ed3: return 0x1ed3; // ocircumflexgrave + case 0x1ed4: return 0x1ed4; // Ocircumflexhook + case 0x1ed5: return 0x1ed5; // ocircumflexhook + case 0x1ed6: return 0x1ed6; // Ocircumflextilde + case 0x1ed7: return 0x1ed7; // ocircumflextilde + case 0x1ed8: return 0x1ed8; // Ocircumflexbelowdot + case 0x1ed9: return 0x1ed9; // ocircumflexbelowdot + case 0x1eda: return 0x1eda; // Ohornacute + case 0x1edb: return 0x1edb; // ohornacute + case 0x1edc: return 0x1edc; // Ohorngrave + case 0x1edd: return 0x1edd; // ohorngrave + case 0x1ede: return 0x1ede; // Ohornhook + case 0x1edf: return 0x1edf; // ohornhook + case 0x1ee0: return 0x1ee0; // Ohorntilde + case 0x1ee1: return 0x1ee1; // ohorntilde + case 0x1ee2: return 0x1ee2; // Ohornbelowdot + case 0x1ee3: return 0x1ee3; // ohornbelowdot + case 0x1ee4: return 0x1ee4; // Ubelowdot + case 0x1ee5: return 0x1ee5; // ubelowdot + case 0x1ee6: return 0x1ee6; // Uhook + case 0x1ee7: return 0x1ee7; // uhook + case 0x1ee8: return 0x1ee8; // Uhornacute + case 0x1ee9: return 0x1ee9; // uhornacute + case 0x1eea: return 0x1eea; // Uhorngrave + case 0x1eeb: return 0x1eeb; // uhorngrave + case 0x1eec: return 0x1eec; // Uhornhook + case 0x1eed: return 0x1eed; // uhornhook + case 0x1eee: return 0x1eee; // Uhorntilde + case 0x1eef: return 0x1eef; // uhorntilde + case 0x1ef0: return 0x1ef0; // Uhornbelowdot + case 0x1ef1: return 0x1ef1; // uhornbelowdot + case 0x12ac: return 0x1ef2; // Ygrave + case 0x12bc: return 0x1ef3; // ygrave + case 0x1ef4: return 0x1ef4; // Ybelowdot + case 0x1ef5: return 0x1ef5; // ybelowdot + case 0x1ef6: return 0x1ef6; // Yhook + case 0x1ef7: return 0x1ef7; // yhook + case 0x1ef8: return 0x1ef8; // Ytilde + case 0x1ef9: return 0x1ef9; // ytilde + case 0x0aa2: return 0x2002; // enspace + case 0x0aa1: return 0x2003; // emspace + case 0x0aa3: return 0x2004; // em3space + case 0x0aa4: return 0x2005; // em4space + case 0x0aa5: return 0x2007; // digitspace + case 0x0aa6: return 0x2008; // punctspace + case 0x0aa7: return 0x2009; // thinspace + case 0x0aa8: return 0x200a; // hairspace + case 0x0abb: return 0x2012; // figdash + case 0x14ac: return 0x2013; // Armenian_en_dash + case 0x0aaa: return 0x2013; // endash + case 0x14a8: return 0x2014; // Armenian_em_dash + case 0x0aa9: return 0x2014; // emdash + case 0x07af: return 0x2015; // Greek_horizbar + case 0x0cdf: return 0x2017; // hebrew_doublelowline + case 0x0ad0: return 0x2018; // leftsinglequotemark + case 0x0ad1: return 0x2019; // rightsinglequotemark + case 0x0afd: return 0x201a; // singlelowquotemark + case 0x0ad2: return 0x201c; // leftdoublequotemark + case 0x0ad3: return 0x201d; // rightdoublequotemark + case 0x0afe: return 0x201e; // doublelowquotemark + case 0x0af1: return 0x2020; // dagger + case 0x0af2: return 0x2021; // doubledagger + case 0x0ae6: return 0x2022; // enfilledcircbullet + case 0x0aaf: return 0x2025; // doubbaselinedot + case 0x14ae: return 0x2026; // Armenian_ellipsis + case 0x0aae: return 0x2026; // ellipsis + case 0x0ad6: return 0x2032; // minutes + case 0x0ad7: return 0x2033; // seconds + case 0x0afc: return 0x2038; // caret + case 0x047e: return 0x203e; // overline + case 0x20a0: return 0x20a0; // EcuSign + case 0x20a1: return 0x20a1; // ColonSign + case 0x20a2: return 0x20a2; // CruzeiroSign + case 0x20a3: return 0x20a3; // FFrancSign + case 0x20a4: return 0x20a4; // LiraSign + case 0x20a5: return 0x20a5; // MillSign + case 0x20a6: return 0x20a6; // NairaSign + case 0x20a7: return 0x20a7; // PesetaSign + case 0x20a8: return 0x20a8; // RupeeSign + case 0x0eff: return 0x20a9; // Korean_Won + case 0x20a9: return 0x20a9; // WonSign + case 0x20aa: return 0x20aa; // NewSheqelSign + case 0x20ab: return 0x20ab; // DongSign + case 0x20ac: return 0x20ac; // EuroSign + case 0x0ab8: return 0x2105; // careof + case 0x06b0: return 0x2116; // numerosign + case 0x0afb: return 0x2117; // phonographcopyright + case 0x0ad4: return 0x211e; // prescription + case 0x0ac9: return 0x2122; // trademark + case 0x0ab0: return 0x2153; // onethird + case 0x0ab1: return 0x2154; // twothirds + case 0x0ab2: return 0x2155; // onefifth + case 0x0ab3: return 0x2156; // twofifths + case 0x0ab4: return 0x2157; // threefifths + case 0x0ab5: return 0x2158; // fourfifths + case 0x0ab6: return 0x2159; // onesixth + case 0x0ab7: return 0x215a; // fivesixths + case 0x0ac3: return 0x215b; // oneeighth + case 0x0ac4: return 0x215c; // threeeighths + case 0x0ac5: return 0x215d; // fiveeighths + case 0x0ac6: return 0x215e; // seveneighths + case 0x08fb: return 0x2190; // leftarrow + case 0x08fc: return 0x2191; // uparrow + case 0x08fd: return 0x2192; // rightarrow + case 0x08fe: return 0x2193; // downarrow + case 0x08ce: return 0x21d2; // implies + case 0x08cd: return 0x21d4; // ifonlyif + case 0x08ef: return 0x2202; // partialderivative + case 0x08c5: return 0x2207; // nabla + case 0x0bca: return 0x2218; // jot + case 0x08d6: return 0x221a; // radical + case 0x08c1: return 0x221d; // variation + case 0x08c2: return 0x221e; // infinity + case 0x08de: return 0x2227; // logicaland + case 0x0ba9: return 0x2227; // upcaret + case 0x0ba8: return 0x2228; // downcaret + case 0x08df: return 0x2228; // logicalor + case 0x08dc: return 0x2229; // intersection + case 0x0bc3: return 0x2229; // upshoe + case 0x0bd6: return 0x222a; // downshoe + case 0x08dd: return 0x222a; // union + case 0x08bf: return 0x222b; // integral + case 0x08c0: return 0x2234; // therefore + case 0x08c8: return 0x223c; // approximate + case 0x08c9: return 0x2243; // similarequal + case 0x08bd: return 0x2260; // notequal + case 0x08cf: return 0x2261; // identical + case 0x08bc: return 0x2264; // lessthanequal + case 0x08be: return 0x2265; // greaterthanequal + case 0x08da: return 0x2282; // includedin + case 0x0bda: return 0x2282; // leftshoe + case 0x08db: return 0x2283; // includes + case 0x0bd8: return 0x2283; // rightshoe + case 0x0bdc: return 0x22a2; // lefttack + case 0x0bfc: return 0x22a3; // righttack + case 0x0bce: return 0x22a4; // uptack + case 0x0bc2: return 0x22a5; // downtack + case 0x0bd3: return 0x2308; // upstile + case 0x0bc4: return 0x230a; // downstile + case 0x0afa: return 0x2315; // telephonerecorder + case 0x08a4: return 0x2320; // topintegral + case 0x08a5: return 0x2321; // botintegral + case 0x0bcc: return 0x2395; // quad + case 0x08ab: return 0x239b; // topleftparens + case 0x08ac: return 0x239d; // botleftparens + case 0x08ad: return 0x239e; // toprightparens + case 0x08ae: return 0x23a0; // botrightparens + case 0x08a7: return 0x23a1; // topleftsqbracket + case 0x08a8: return 0x23a3; // botleftsqbracket + case 0x08a9: return 0x23a4; // toprightsqbracket + case 0x08aa: return 0x23a6; // botrightsqbracket + case 0x08af: return 0x23a8; // leftmiddlecurlybrace + case 0x08b0: return 0x23ac; // rightmiddlecurlybrace + case 0x08a1: return 0x23b7; // leftradical + case 0x09ef: return 0x23ba; // horizlinescan1 + case 0x09f0: return 0x23bb; // horizlinescan3 + case 0x09f2: return 0x23bc; // horizlinescan7 + case 0x09f3: return 0x23bd; // horizlinescan9 + case 0x09e2: return 0x2409; // ht + case 0x09e5: return 0x240a; // lf + case 0x09e9: return 0x240b; // vt + case 0x09e3: return 0x240c; // ff + case 0x09e4: return 0x240d; // cr + case 0x0aac: return 0x2423; // signifblank + case 0x09e8: return 0x2424; // nl + case 0x08a3: return 0x2500; // horizconnector + case 0x09f1: return 0x2500; // horizlinescan5 + case 0x09f8: return 0x2502; // vertbar + case 0x08a6: return 0x2502; // vertconnector + case 0x08a2: return 0x250c; // topleftradical + case 0x09ec: return 0x250c; // upleftcorner + case 0x09eb: return 0x2510; // uprightcorner + case 0x09ed: return 0x2514; // lowleftcorner + case 0x09ea: return 0x2518; // lowrightcorner + case 0x09f4: return 0x251c; // leftt + case 0x09f5: return 0x2524; // rightt + case 0x09f7: return 0x252c; // topt + case 0x09f6: return 0x2534; // bott + case 0x09ee: return 0x253c; // crossinglines + case 0x09e1: return 0x2592; // checkerboard + case 0x0ae7: return 0x25aa; // enfilledsqbullet + case 0x0ae1: return 0x25ab; // enopensquarebullet + case 0x0adb: return 0x25ac; // filledrectbullet + case 0x0ae2: return 0x25ad; // openrectbullet + case 0x0adf: return 0x25ae; // emfilledrect + case 0x0acf: return 0x25af; // emopenrectangle + case 0x0ae8: return 0x25b2; // filledtribulletup + case 0x0ae3: return 0x25b3; // opentribulletup + case 0x0add: return 0x25b6; // filledrighttribullet + case 0x0acd: return 0x25b7; // rightopentriangle + case 0x0ae9: return 0x25bc; // filledtribulletdown + case 0x0ae4: return 0x25bd; // opentribulletdown + case 0x0adc: return 0x25c0; // filledlefttribullet + case 0x0acc: return 0x25c1; // leftopentriangle + case 0x09e0: return 0x25c6; // soliddiamond + case 0x0bcf: return 0x25cb; // circle + case 0x0ace: return 0x25cb; // emopencircle + case 0x0ade: return 0x25cf; // emfilledcircle + case 0x0ae0: return 0x25e6; // enopencircbullet + case 0x0ae5: return 0x2606; // openstar + case 0x0af9: return 0x260e; // telephone + case 0x0aca: return 0x2613; // signaturemark + case 0x0aea: return 0x261c; // leftpointer + case 0x0aeb: return 0x261e; // rightpointer + case 0x0af8: return 0x2640; // femalesymbol + case 0x0af7: return 0x2642; // malesymbol + case 0x0aec: return 0x2663; // club + case 0x0aee: return 0x2665; // heart + case 0x0aed: return 0x2666; // diamond + case 0x0af6: return 0x266d; // musicalflat + case 0x0af5: return 0x266f; // musicalsharp + case 0x0af3: return 0x2713; // checkmark + case 0x0af4: return 0x2717; // ballotcross + case 0x0ad9: return 0x271d; // latincross + case 0x0af0: return 0x2720; // maltesecross + case 0x0abc: return 0x27e8; // leftanglebracket + case 0x0abe: return 0x27e9; // rightanglebracket + case 0x04a4: return 0x3001; // kana_comma + case 0x04a1: return 0x3002; // kana_fullstop + case 0x04a2: return 0x300c; // kana_openingbracket + case 0x04a3: return 0x300d; // kana_closingbracket + case 0xfe5e: return 0x3099; // dead_voiced_sound + case 0xfe5f: return 0x309a; // dead_semivoiced_sound + case 0x04de: return 0x309b; // voicedsound + case 0x04df: return 0x309c; // semivoicedsound + case 0x04a7: return 0x30a1; // kana_a + case 0x04b1: return 0x30a2; // kana_A + case 0x04a8: return 0x30a3; // kana_i + case 0x04b2: return 0x30a4; // kana_I + case 0x04a9: return 0x30a5; // kana_u + case 0x04b3: return 0x30a6; // kana_U + case 0x04aa: return 0x30a7; // kana_e + case 0x04b4: return 0x30a8; // kana_E + case 0x04ab: return 0x30a9; // kana_o + case 0x04b5: return 0x30aa; // kana_O + case 0x04b6: return 0x30ab; // kana_KA + case 0x04b7: return 0x30ad; // kana_KI + case 0x04b8: return 0x30af; // kana_KU + case 0x04b9: return 0x30b1; // kana_KE + case 0x04ba: return 0x30b3; // kana_KO + case 0x04bb: return 0x30b5; // kana_SA + case 0x04bc: return 0x30b7; // kana_SHI + case 0x04bd: return 0x30b9; // kana_SU + case 0x04be: return 0x30bb; // kana_SE + case 0x04bf: return 0x30bd; // kana_SO + case 0x04c0: return 0x30bf; // kana_TA + case 0x04c1: return 0x30c1; // kana_CHI + case 0x04af: return 0x30c3; // kana_tsu + case 0x04c2: return 0x30c4; // kana_TSU + case 0x04c3: return 0x30c6; // kana_TE + case 0x04c4: return 0x30c8; // kana_TO + case 0x04c5: return 0x30ca; // kana_NA + case 0x04c6: return 0x30cb; // kana_NI + case 0x04c7: return 0x30cc; // kana_NU + case 0x04c8: return 0x30cd; // kana_NE + case 0x04c9: return 0x30ce; // kana_NO + case 0x04ca: return 0x30cf; // kana_HA + case 0x04cb: return 0x30d2; // kana_HI + case 0x04cc: return 0x30d5; // kana_FU + case 0x04cd: return 0x30d8; // kana_HE + case 0x04ce: return 0x30db; // kana_HO + case 0x04cf: return 0x30de; // kana_MA + case 0x04d0: return 0x30df; // kana_MI + case 0x04d1: return 0x30e0; // kana_MU + case 0x04d2: return 0x30e1; // kana_ME + case 0x04d3: return 0x30e2; // kana_MO + case 0x04ac: return 0x30e3; // kana_ya + case 0x04d4: return 0x30e4; // kana_YA + case 0x04ad: return 0x30e5; // kana_yu + case 0x04d5: return 0x30e6; // kana_YU + case 0x04ae: return 0x30e7; // kana_yo + case 0x04d6: return 0x30e8; // kana_YO + case 0x04d7: return 0x30e9; // kana_RA + case 0x04d8: return 0x30ea; // kana_RI + case 0x04d9: return 0x30eb; // kana_RU + case 0x04da: return 0x30ec; // kana_RE + case 0x04db: return 0x30ed; // kana_RO + case 0x04dc: return 0x30ef; // kana_WA + case 0x04a6: return 0x30f2; // kana_WO + case 0x04dd: return 0x30f3; // kana_N + case 0x04a5: return 0x30fb; // kana_conjunctive + case 0x04b0: return 0x30fc; // prolongedsound + case 0x0ea1: return 0x3131; // Hangul_Kiyeog + case 0x0ea2: return 0x3132; // Hangul_SsangKiyeog + case 0x0ea3: return 0x3133; // Hangul_KiyeogSios + case 0x0ea4: return 0x3134; // Hangul_Nieun + case 0x0ea5: return 0x3135; // Hangul_NieunJieuj + case 0x0ea6: return 0x3136; // Hangul_NieunHieuh + case 0x0ea7: return 0x3137; // Hangul_Dikeud + case 0x0ea8: return 0x3138; // Hangul_SsangDikeud + case 0x0ea9: return 0x3139; // Hangul_Rieul + case 0x0eaa: return 0x313a; // Hangul_RieulKiyeog + case 0x0eab: return 0x313b; // Hangul_RieulMieum + case 0x0eac: return 0x313c; // Hangul_RieulPieub + case 0x0ead: return 0x313d; // Hangul_RieulSios + case 0x0eae: return 0x313e; // Hangul_RieulTieut + case 0x0eaf: return 0x313f; // Hangul_RieulPhieuf + case 0x0eb0: return 0x3140; // Hangul_RieulHieuh + case 0x0eb1: return 0x3141; // Hangul_Mieum + case 0x0eb2: return 0x3142; // Hangul_Pieub + case 0x0eb3: return 0x3143; // Hangul_SsangPieub + case 0x0eb4: return 0x3144; // Hangul_PieubSios + case 0x0eb5: return 0x3145; // Hangul_Sios + case 0x0eb6: return 0x3146; // Hangul_SsangSios + case 0x0eb7: return 0x3147; // Hangul_Ieung + case 0x0eb8: return 0x3148; // Hangul_Jieuj + case 0x0eb9: return 0x3149; // Hangul_SsangJieuj + case 0x0eba: return 0x314a; // Hangul_Cieuc + case 0x0ebb: return 0x314b; // Hangul_Khieuq + case 0x0ebc: return 0x314c; // Hangul_Tieut + case 0x0ebd: return 0x314d; // Hangul_Phieuf + case 0x0ebe: return 0x314e; // Hangul_Hieuh + case 0x0ebf: return 0x314f; // Hangul_A + case 0x0ec0: return 0x3150; // Hangul_AE + case 0x0ec1: return 0x3151; // Hangul_YA + case 0x0ec2: return 0x3152; // Hangul_YAE + case 0x0ec3: return 0x3153; // Hangul_EO + case 0x0ec4: return 0x3154; // Hangul_E + case 0x0ec5: return 0x3155; // Hangul_YEO + case 0x0ec6: return 0x3156; // Hangul_YE + case 0x0ec7: return 0x3157; // Hangul_O + case 0x0ec8: return 0x3158; // Hangul_WA + case 0x0ec9: return 0x3159; // Hangul_WAE + case 0x0eca: return 0x315a; // Hangul_OE + case 0x0ecb: return 0x315b; // Hangul_YO + case 0x0ecc: return 0x315c; // Hangul_U + case 0x0ecd: return 0x315d; // Hangul_WEO + case 0x0ece: return 0x315e; // Hangul_WE + case 0x0ecf: return 0x315f; // Hangul_WI + case 0x0ed0: return 0x3160; // Hangul_YU + case 0x0ed1: return 0x3161; // Hangul_EU + case 0x0ed2: return 0x3162; // Hangul_YI + case 0x0ed3: return 0x3163; // Hangul_I + case 0x0eef: return 0x316d; // Hangul_RieulYeorinHieuh + case 0x0ef0: return 0x3171; // Hangul_SunkyeongeumMieum + case 0x0ef1: return 0x3178; // Hangul_SunkyeongeumPieub + case 0x0ef2: return 0x317f; // Hangul_PanSios + case 0x0ef3: return 0x3181; // Hangul_KkogjiDalrinIeung + case 0x0ef4: return 0x3184; // Hangul_SunkyeongeumPhieuf + case 0x0ef5: return 0x3186; // Hangul_YeorinHieuh + case 0x0ef6: return 0x318d; // Hangul_AraeA + case 0x0ef7: return 0x318e; // Hangul_AraeAE + default: return 0; + } +} + + +} // namespace priv + +} // namespace sf \ No newline at end of file diff --git a/src/SFML/Window/Unix/KeySymToUnicodeMapping.hpp b/src/SFML/Window/Unix/KeySymToUnicodeMapping.hpp index 2ee95d8f..fbd088bf 100644 --- a/src/SFML/Window/Unix/KeySymToUnicodeMapping.hpp +++ b/src/SFML/Window/Unix/KeySymToUnicodeMapping.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2017 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2018 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. @@ -43,1369 +43,11 @@ namespace priv /// https://www.cl.cam.ac.uk/~mgk25/ucs/keysyms.txt /// /// \param keysym keysym to be converted +/// /// \return corresponding UTF-32 +/// //////////////////////////////////////////////////////////// -inline Uint32 keysymToUnicode(KeySym keysym) -{ - switch (keysym) - { - case 0xff08: return 0x0008; // BackSpace - case 0xff89: return 0x0009; // KP_Tab - case 0xff09: return 0x0009; // Tab - case 0xff0a: return 0x000a; // Linefeed - case 0xff0b: return 0x000b; // Clear - case 0xff8d: return 0x000d; // KP_Enter - case 0xff0d: return 0x000d; // Return - case 0xff13: return 0x0013; // Pause - case 0xff14: return 0x0014; // Scroll_Lock - case 0xff15: return 0x0015; // Sys_Req - case 0xff1b: return 0x001b; // Escape - case 0xff80: return 0x0020; // KP_Space - case 0x0020: return 0x0020; // space - case 0x0021: return 0x0021; // exclam - case 0x0022: return 0x0022; // quotedbl - case 0x0023: return 0x0023; // numbersign - case 0x0024: return 0x0024; // dollar - case 0x0025: return 0x0025; // percent - case 0x0026: return 0x0026; // ampersand - case 0x0027: return 0x0027; // quoteright - case 0x14a5: return 0x0028; // Armenian_parenleft - case 0x0028: return 0x0028; // parenleft - case 0x14a4: return 0x0029; // Armenian_parenright - case 0x0029: return 0x0029; // parenright - case 0xffaa: return 0x002a; // KP_Multiply - case 0x002a: return 0x002a; // asterisk - case 0xffab: return 0x002b; // KP_Add - case 0x002b: return 0x002b; // plus - case 0x14ab: return 0x002c; // Armenian_comma - case 0xffac: return 0x002c; // KP_Separator - case 0x002c: return 0x002c; // comma - case 0xffad: return 0x002d; // KP_Subtract - case 0x002d: return 0x002d; // minus - case 0x14a9: return 0x002e; // Armenian_mijaket - case 0xffae: return 0x002e; // KP_Decimal - case 0x0abd: return 0x002e; // decimalpoint - case 0x002e: return 0x002e; // period - case 0xffaf: return 0x002f; // KP_Divide - case 0x002f: return 0x002f; // slash - case 0x0030: return 0x0030; // 0 - case 0xffb0: return 0x0030; // KP_0 - case 0x0031: return 0x0031; // 1 - case 0xffb1: return 0x0031; // KP_1 - case 0x0032: return 0x0032; // 2 - case 0xffb2: return 0x0032; // KP_2 - case 0x0033: return 0x0033; // 3 - case 0xffb3: return 0x0033; // KP_3 - case 0x0034: return 0x0034; // 4 - case 0xffb4: return 0x0034; // KP_4 - case 0x0035: return 0x0035; // 5 - case 0xffb5: return 0x0035; // KP_5 - case 0x0036: return 0x0036; // 6 - case 0xffb6: return 0x0036; // KP_6 - case 0x0037: return 0x0037; // 7 - case 0xffb7: return 0x0037; // KP_7 - case 0x0038: return 0x0038; // 8 - case 0xffb8: return 0x0038; // KP_8 - case 0x0039: return 0x0039; // 9 - case 0xffb9: return 0x0039; // KP_9 - case 0x003a: return 0x003a; // colon - case 0x003b: return 0x003b; // semicolon - case 0x0ba3: return 0x003c; // leftcaret - case 0x003c: return 0x003c; // less - case 0xffbd: return 0x003d; // KP_Equal - case 0x003d: return 0x003d; // equal - case 0x003e: return 0x003e; // greater - case 0x0ba6: return 0x003e; // rightcaret - case 0x003f: return 0x003f; // question - case 0x0040: return 0x0040; // at - case 0x0041: return 0x0041; // A - case 0x0042: return 0x0042; // B - case 0x0043: return 0x0043; // C - case 0x0044: return 0x0044; // D - case 0x0045: return 0x0045; // E - case 0x0046: return 0x0046; // F - case 0x0047: return 0x0047; // G - case 0x0048: return 0x0048; // H - case 0x0049: return 0x0049; // I - case 0x004a: return 0x004a; // J - case 0x004b: return 0x004b; // K - case 0x004c: return 0x004c; // L - case 0x004d: return 0x004d; // M - case 0x004e: return 0x004e; // N - case 0x004f: return 0x004f; // O - case 0x0050: return 0x0050; // P - case 0x0051: return 0x0051; // Q - case 0x0052: return 0x0052; // R - case 0x0053: return 0x0053; // S - case 0x0054: return 0x0054; // T - case 0x0055: return 0x0055; // U - case 0x0056: return 0x0056; // V - case 0x0057: return 0x0057; // W - case 0x0058: return 0x0058; // X - case 0x0059: return 0x0059; // Y - case 0x005a: return 0x005a; // Z - case 0x005b: return 0x005b; // bracketleft - case 0x005c: return 0x005c; // backslash - case 0x005d: return 0x005d; // bracketright - case 0x005e: return 0x005e; // asciicircum - case 0x0bc6: return 0x005f; // underbar - case 0x005f: return 0x005f; // underscore - case 0x0060: return 0x0060; // quoteleft - case 0x0061: return 0x0061; // a - case 0x0062: return 0x0062; // b - case 0x0063: return 0x0063; // c - case 0x0064: return 0x0064; // d - case 0x0065: return 0x0065; // e - case 0x0066: return 0x0066; // f - case 0x0067: return 0x0067; // g - case 0x0068: return 0x0068; // h - case 0x0069: return 0x0069; // i - case 0x006a: return 0x006a; // j - case 0x006b: return 0x006b; // k - case 0x006c: return 0x006c; // l - case 0x006d: return 0x006d; // m - case 0x006e: return 0x006e; // n - case 0x006f: return 0x006f; // o - case 0x0070: return 0x0070; // p - case 0x0071: return 0x0071; // q - case 0x0072: return 0x0072; // r - case 0x0073: return 0x0073; // s - case 0x0074: return 0x0074; // t - case 0x0075: return 0x0075; // u - case 0x0076: return 0x0076; // v - case 0x0077: return 0x0077; // w - case 0x0078: return 0x0078; // x - case 0x0079: return 0x0079; // y - case 0x007a: return 0x007a; // z - case 0x007b: return 0x007b; // braceleft - case 0x007c: return 0x007c; // bar - case 0x007d: return 0x007d; // braceright - case 0x007e: return 0x007e; // asciitilde - case 0x00a0: return 0x00a0; // nobreakspace - case 0x00a1: return 0x00a1; // exclamdown - case 0x00a2: return 0x00a2; // cent - case 0x00a3: return 0x00a3; // sterling - case 0x00a4: return 0x00a4; // currency - case 0x00a5: return 0x00a5; // yen - case 0x00a6: return 0x00a6; // brokenbar - case 0x14ff: return 0x00a7; // Armenian_section_sign - case 0x00a7: return 0x00a7; // section - case 0x00a8: return 0x00a8; // diaeresis - case 0x00a9: return 0x00a9; // copyright - case 0x00aa: return 0x00aa; // ordfeminine - case 0x14a7: return 0x00ab; // Armenian_guillemotleft - case 0x00ab: return 0x00ab; // guillemotleft - case 0x00ac: return 0x00ac; // notsign - case 0x00ad: return 0x00ad; // hyphen - case 0x00ae: return 0x00ae; // registered - case 0x00af: return 0x00af; // macron - case 0x0bc0: return 0x00af; // overbar - case 0x00b0: return 0x00b0; // degree - case 0x00b1: return 0x00b1; // plusminus - case 0x00b2: return 0x00b2; // twosuperior - case 0x00b3: return 0x00b3; // threesuperior - case 0x00b4: return 0x00b4; // acute - case 0x00b5: return 0x00b5; // mu - case 0x00b6: return 0x00b6; // paragraph - case 0x00b7: return 0x00b7; // periodcentered - case 0x00b8: return 0x00b8; // cedilla - case 0x00b9: return 0x00b9; // onesuperior - case 0x00ba: return 0x00ba; // masculine - case 0x14a6: return 0x00bb; // Armenian_guillemotright - case 0x00bb: return 0x00bb; // guillemotright - case 0x00bc: return 0x00bc; // onequarter - case 0x00bd: return 0x00bd; // onehalf - case 0x00be: return 0x00be; // threequarters - case 0x00bf: return 0x00bf; // questiondown - case 0x00c0: return 0x00c0; // Agrave - case 0x00c1: return 0x00c1; // Aacute - case 0x00c2: return 0x00c2; // Acircumflex - case 0x00c3: return 0x00c3; // Atilde - case 0x00c4: return 0x00c4; // Adiaeresis - case 0x00c5: return 0x00c5; // Aring - case 0x00c6: return 0x00c6; // AE - case 0x00c7: return 0x00c7; // Ccedilla - case 0x00c8: return 0x00c8; // Egrave - case 0x00c9: return 0x00c9; // Eacute - case 0x00ca: return 0x00ca; // Ecircumflex - case 0x00cb: return 0x00cb; // Ediaeresis - case 0x00cc: return 0x00cc; // Igrave - case 0x00cd: return 0x00cd; // Iacute - case 0x00ce: return 0x00ce; // Icircumflex - case 0x00cf: return 0x00cf; // Idiaeresis - case 0x00d0: return 0x00d0; // Eth - case 0x00d1: return 0x00d1; // Ntilde - case 0x00d2: return 0x00d2; // Ograve - case 0x00d3: return 0x00d3; // Oacute - case 0x00d4: return 0x00d4; // Ocircumflex - case 0x00d5: return 0x00d5; // Otilde - case 0x00d6: return 0x00d6; // Odiaeresis - case 0x00d7: return 0x00d7; // multiply - case 0x00d8: return 0x00d8; // Ooblique - case 0x00d9: return 0x00d9; // Ugrave - case 0x00da: return 0x00da; // Uacute - case 0x00db: return 0x00db; // Ucircumflex - case 0x00dc: return 0x00dc; // Udiaeresis - case 0x00dd: return 0x00dd; // Yacute - case 0x00de: return 0x00de; // Thorn - case 0x00df: return 0x00df; // ssharp - case 0x00e0: return 0x00e0; // agrave - case 0x00e1: return 0x00e1; // aacute - case 0x00e2: return 0x00e2; // acircumflex - case 0x00e3: return 0x00e3; // atilde - case 0x00e4: return 0x00e4; // adiaeresis - case 0x00e5: return 0x00e5; // aring - case 0x00e6: return 0x00e6; // ae - case 0x00e7: return 0x00e7; // ccedilla - case 0x00e8: return 0x00e8; // egrave - case 0x00e9: return 0x00e9; // eacute - case 0x00ea: return 0x00ea; // ecircumflex - case 0x00eb: return 0x00eb; // ediaeresis - case 0x00ec: return 0x00ec; // igrave - case 0x00ed: return 0x00ed; // iacute - case 0x00ee: return 0x00ee; // icircumflex - case 0x00ef: return 0x00ef; // idiaeresis - case 0x00f0: return 0x00f0; // eth - case 0x00f1: return 0x00f1; // ntilde - case 0x00f2: return 0x00f2; // ograve - case 0x00f3: return 0x00f3; // oacute - case 0x00f4: return 0x00f4; // ocircumflex - case 0x00f5: return 0x00f5; // otilde - case 0x00f6: return 0x00f6; // odiaeresis - case 0x00f7: return 0x00f7; // division - case 0x00f8: return 0x00f8; // oslash - case 0x00f9: return 0x00f9; // ugrave - case 0x00fa: return 0x00fa; // uacute - case 0x00fb: return 0x00fb; // ucircumflex - case 0x00fc: return 0x00fc; // udiaeresis - case 0x00fd: return 0x00fd; // yacute - case 0x00fe: return 0x00fe; // thorn - case 0x00ff: return 0x00ff; // ydiaeresis - case 0x03c0: return 0x0100; // Amacron - case 0x03e0: return 0x0101; // amacron - case 0x01c3: return 0x0102; // Abreve - case 0x01e3: return 0x0103; // abreve - case 0x01a1: return 0x0104; // Aogonek - case 0x01b1: return 0x0105; // aogonek - case 0x01c6: return 0x0106; // Cacute - case 0x01e6: return 0x0107; // cacute - case 0x02c6: return 0x0108; // Ccircumflex - case 0x02e6: return 0x0109; // ccircumflex - case 0x02c5: return 0x010a; // Cabovedot - case 0x02e5: return 0x010b; // cabovedot - case 0x01c8: return 0x010c; // Ccaron - case 0x01e8: return 0x010d; // ccaron - case 0x01cf: return 0x010e; // Dcaron - case 0x01ef: return 0x010f; // dcaron - case 0x01d0: return 0x0110; // Dstroke - case 0x01f0: return 0x0111; // dstroke - case 0x03aa: return 0x0112; // Emacron - case 0x03ba: return 0x0113; // emacron - case 0x03cc: return 0x0116; // Eabovedot - case 0x03ec: return 0x0117; // eabovedot - case 0x01ca: return 0x0118; // Eogonek - case 0x01ea: return 0x0119; // eogonek - case 0x01cc: return 0x011a; // Ecaron - case 0x01ec: return 0x011b; // ecaron - case 0x02d8: return 0x011c; // Gcircumflex - case 0x02f8: return 0x011d; // gcircumflex - case 0x02ab: return 0x011e; // Gbreve - case 0x02bb: return 0x011f; // gbreve - case 0x02d5: return 0x0120; // Gabovedot - case 0x02f5: return 0x0121; // gabovedot - case 0x03ab: return 0x0122; // Gcedilla - case 0x03bb: return 0x0123; // gcedilla - case 0x02a6: return 0x0124; // Hcircumflex - case 0x02b6: return 0x0125; // hcircumflex - case 0x02a1: return 0x0126; // Hstroke - case 0x02b1: return 0x0127; // hstroke - case 0x03a5: return 0x0128; // Itilde - case 0x03b5: return 0x0129; // itilde - case 0x03cf: return 0x012a; // Imacron - case 0x03ef: return 0x012b; // imacron - case 0x16a6: return 0x012c; // Ibreve - case 0x16b6: return 0x012d; // ibreve - case 0x03c7: return 0x012e; // Iogonek - case 0x03e7: return 0x012f; // iogonek - case 0x02a9: return 0x0130; // Iabovedot - case 0x02b9: return 0x0131; // idotless - case 0x02ac: return 0x0134; // Jcircumflex - case 0x02bc: return 0x0135; // jcircumflex - case 0x03d3: return 0x0136; // Kcedilla - case 0x03f3: return 0x0137; // kcedilla - case 0x03a2: return 0x0138; // kra - case 0x01c5: return 0x0139; // Lacute - case 0x01e5: return 0x013a; // lacute - case 0x03a6: return 0x013b; // Lcedilla - case 0x03b6: return 0x013c; // lcedilla - case 0x01a5: return 0x013d; // Lcaron - case 0x01b5: return 0x013e; // lcaron - case 0x01a3: return 0x0141; // Lstroke - case 0x01b3: return 0x0142; // lstroke - case 0x01d1: return 0x0143; // Nacute - case 0x01f1: return 0x0144; // nacute - case 0x03d1: return 0x0145; // Ncedilla - case 0x03f1: return 0x0146; // ncedilla - case 0x01d2: return 0x0147; // Ncaron - case 0x01f2: return 0x0148; // ncaron - case 0x03bd: return 0x014a; // ENG - case 0x03bf: return 0x014b; // eng - case 0x03d2: return 0x014c; // Omacron - case 0x03f2: return 0x014d; // omacron - case 0x01d5: return 0x0150; // Odoubleacute - case 0x01f5: return 0x0151; // odoubleacute - case 0x13bc: return 0x0152; // OE - case 0x13bd: return 0x0153; // oe - case 0x01c0: return 0x0154; // Racute - case 0x01e0: return 0x0155; // racute - case 0x03a3: return 0x0156; // Rcedilla - case 0x03b3: return 0x0157; // rcedilla - case 0x01d8: return 0x0158; // Rcaron - case 0x01f8: return 0x0159; // rcaron - case 0x01a6: return 0x015a; // Sacute - case 0x01b6: return 0x015b; // sacute - case 0x02de: return 0x015c; // Scircumflex - case 0x02fe: return 0x015d; // scircumflex - case 0x01aa: return 0x015e; // Scedilla - case 0x01ba: return 0x015f; // scedilla - case 0x01a9: return 0x0160; // Scaron - case 0x01b9: return 0x0161; // scaron - case 0x01de: return 0x0162; // Tcedilla - case 0x01fe: return 0x0163; // tcedilla - case 0x01ab: return 0x0164; // Tcaron - case 0x01bb: return 0x0165; // tcaron - case 0x03ac: return 0x0166; // Tslash - case 0x03bc: return 0x0167; // tslash - case 0x03dd: return 0x0168; // Utilde - case 0x03fd: return 0x0169; // utilde - case 0x03de: return 0x016a; // Umacron - case 0x03fe: return 0x016b; // umacron - case 0x02dd: return 0x016c; // Ubreve - case 0x02fd: return 0x016d; // ubreve - case 0x01d9: return 0x016e; // Uring - case 0x01f9: return 0x016f; // uring - case 0x01db: return 0x0170; // Udoubleacute - case 0x01fb: return 0x0171; // udoubleacute - case 0x03d9: return 0x0172; // Uogonek - case 0x03f9: return 0x0173; // uogonek - case 0x12d0: return 0x0174; // Wcircumflex - case 0x12f0: return 0x0175; // wcircumflex - case 0x12de: return 0x0176; // Ycircumflex - case 0x12fe: return 0x0177; // ycircumflex - case 0x13be: return 0x0178; // Ydiaeresis - case 0x01ac: return 0x0179; // Zacute - case 0x01bc: return 0x017a; // zacute - case 0x01af: return 0x017b; // Zabovedot - case 0x01bf: return 0x017c; // zabovedot - case 0x01ae: return 0x017d; // Zcaron - case 0x01be: return 0x017e; // zcaron - case 0x16c6: return 0x018f; // SCHWA - case 0x08f6: return 0x0192; // function - case 0x16af: return 0x019f; // Obarred - case 0x1efa: return 0x01a0; // Ohorn - case 0x1efb: return 0x01a1; // ohorn - case 0x1efc: return 0x01af; // Uhorn - case 0x1efd: return 0x01b0; // uhorn - case 0x16a9: return 0x01b5; // Zstroke - case 0x16b9: return 0x01b6; // zstroke - case 0x16bd: return 0x01d2; // ocaron - case 0x16aa: return 0x01e6; // Gcaron - case 0x16ba: return 0x01e7; // gcaron - case 0x16f6: return 0x0259; // schwa - case 0x16bf: return 0x0275; // obarred - case 0x01b7: return 0x02c7; // caron - case 0x01a2: return 0x02d8; // breve - case 0x01ff: return 0x02d9; // abovedot - case 0x01b2: return 0x02db; // ogonek - case 0x01bd: return 0x02dd; // doubleacute - case 0x1ef2: return 0x0300; // combining_grave - case 0xfe50: return 0x0300; // dead_grave - case 0x1ef3: return 0x0301; // combining_acute - case 0xfe51: return 0x0301; // dead_acute - case 0xfe52: return 0x0302; // dead_circumflex - case 0x1e9f: return 0x0303; // combining_tilde - case 0xfe53: return 0x0303; // dead_tilde - case 0xfe54: return 0x0304; // dead_macron - case 0xfe55: return 0x0306; // dead_breve - case 0xfe56: return 0x0307; // dead_abovedot - case 0xfe57: return 0x0308; // dead_diaeresis - case 0x1efe: return 0x0309; // combining_hook - case 0xfe61: return 0x0309; // dead_hook - case 0xfe58: return 0x030a; // dead_abovering - case 0xfe59: return 0x030b; // dead_doubleacute - case 0xfe5a: return 0x030c; // dead_caron - case 0xfe62: return 0x031b; // dead_horn - case 0x1eff: return 0x0323; // combining_belowdot - case 0xfe60: return 0x0323; // dead_belowdot - case 0xfe5b: return 0x0327; // dead_cedilla - case 0xfe5c: return 0x0328; // dead_ogonek - case 0xfe5d: return 0x0345; // dead_iota - case 0x07ae: return 0x0385; // Greek_accentdieresis - case 0x07a1: return 0x0386; // Greek_ALPHAaccent - case 0x07a2: return 0x0388; // Greek_EPSILONaccent - case 0x07a3: return 0x0389; // Greek_ETAaccent - case 0x07a4: return 0x038a; // Greek_IOTAaccent - case 0x07a7: return 0x038c; // Greek_OMICRONaccent - case 0x07a8: return 0x038e; // Greek_UPSILONaccent - case 0x07ab: return 0x038f; // Greek_OMEGAaccent - case 0x07b6: return 0x0390; // Greek_iotaaccentdieresis - case 0x07c1: return 0x0391; // Greek_ALPHA - case 0x07c2: return 0x0392; // Greek_BETA - case 0x07c3: return 0x0393; // Greek_GAMMA - case 0x07c4: return 0x0394; // Greek_DELTA - case 0x07c5: return 0x0395; // Greek_EPSILON - case 0x07c6: return 0x0396; // Greek_ZETA - case 0x07c7: return 0x0397; // Greek_ETA - case 0x07c8: return 0x0398; // Greek_THETA - case 0x07c9: return 0x0399; // Greek_IOTA - case 0x07ca: return 0x039a; // Greek_KAPPA - case 0x07cb: return 0x039b; // Greek_LAMDA - case 0x07cc: return 0x039c; // Greek_MU - case 0x07cd: return 0x039d; // Greek_NU - case 0x07ce: return 0x039e; // Greek_XI - case 0x07cf: return 0x039f; // Greek_OMICRON - case 0x07d0: return 0x03a0; // Greek_PI - case 0x07d1: return 0x03a1; // Greek_RHO - case 0x07d2: return 0x03a3; // Greek_SIGMA - case 0x07d4: return 0x03a4; // Greek_TAU - case 0x07d5: return 0x03a5; // Greek_UPSILON - case 0x07d6: return 0x03a6; // Greek_PHI - case 0x07d7: return 0x03a7; // Greek_CHI - case 0x07d8: return 0x03a8; // Greek_PSI - case 0x07d9: return 0x03a9; // Greek_OMEGA - case 0x07a5: return 0x03aa; // Greek_IOTAdiaeresis - case 0x07a9: return 0x03ab; // Greek_UPSILONdieresis - case 0x07b1: return 0x03ac; // Greek_alphaaccent - case 0x07b2: return 0x03ad; // Greek_epsilonaccent - case 0x07b3: return 0x03ae; // Greek_etaaccent - case 0x07b4: return 0x03af; // Greek_iotaaccent - case 0x07ba: return 0x03b0; // Greek_upsilonaccentdieresis - case 0x07e1: return 0x03b1; // Greek_alpha - case 0x07e2: return 0x03b2; // Greek_beta - case 0x07e3: return 0x03b3; // Greek_gamma - case 0x07e4: return 0x03b4; // Greek_delta - case 0x07e5: return 0x03b5; // Greek_epsilon - case 0x07e6: return 0x03b6; // Greek_zeta - case 0x07e7: return 0x03b7; // Greek_eta - case 0x07e8: return 0x03b8; // Greek_theta - case 0x07e9: return 0x03b9; // Greek_iota - case 0x07ea: return 0x03ba; // Greek_kappa - case 0x07eb: return 0x03bb; // Greek_lambda - case 0x07ec: return 0x03bc; // Greek_mu - case 0x07ed: return 0x03bd; // Greek_nu - case 0x07ee: return 0x03be; // Greek_xi - case 0x07ef: return 0x03bf; // Greek_omicron - case 0x07f0: return 0x03c0; // Greek_pi - case 0x07f1: return 0x03c1; // Greek_rho - case 0x07f3: return 0x03c2; // Greek_finalsmallsigma - case 0x07f2: return 0x03c3; // Greek_sigma - case 0x07f4: return 0x03c4; // Greek_tau - case 0x07f5: return 0x03c5; // Greek_upsilon - case 0x07f6: return 0x03c6; // Greek_phi - case 0x07f7: return 0x03c7; // Greek_chi - case 0x07f8: return 0x03c8; // Greek_psi - case 0x07f9: return 0x03c9; // Greek_omega - case 0x07b5: return 0x03ca; // Greek_iotadieresis - case 0x07b9: return 0x03cb; // Greek_upsilondieresis - case 0x07b7: return 0x03cc; // Greek_omicronaccent - case 0x07b8: return 0x03cd; // Greek_upsilonaccent - case 0x07bb: return 0x03ce; // Greek_omegaaccent - case 0x06b3: return 0x0401; // Cyrillic_IO - case 0x06b1: return 0x0402; // Serbian_DJE - case 0x06b2: return 0x0403; // Macedonia_GJE - case 0x06b4: return 0x0404; // Ukrainian_IE - case 0x06b5: return 0x0405; // Macedonia_DSE - case 0x06b6: return 0x0406; // Ukrainian_I - case 0x06b7: return 0x0407; // Ukrainian_YI - case 0x06b8: return 0x0408; // Cyrillic_JE - case 0x06b9: return 0x0409; // Cyrillic_LJE - case 0x06ba: return 0x040a; // Cyrillic_NJE - case 0x06bb: return 0x040b; // Serbian_TSHE - case 0x06bc: return 0x040c; // Macedonia_KJE - case 0x06be: return 0x040e; // Byelorussian_SHORTU - case 0x06bf: return 0x040f; // Cyrillic_DZHE - case 0x06e1: return 0x0410; // Cyrillic_A - case 0x06e2: return 0x0411; // Cyrillic_BE - case 0x06f7: return 0x0412; // Cyrillic_VE - case 0x06e7: return 0x0413; // Cyrillic_GHE - case 0x06e4: return 0x0414; // Cyrillic_DE - case 0x06e5: return 0x0415; // Cyrillic_IE - case 0x06f6: return 0x0416; // Cyrillic_ZHE - case 0x06fa: return 0x0417; // Cyrillic_ZE - case 0x06e9: return 0x0418; // Cyrillic_I - case 0x06ea: return 0x0419; // Cyrillic_SHORTI - case 0x06eb: return 0x041a; // Cyrillic_KA - case 0x06ec: return 0x041b; // Cyrillic_EL - case 0x06ed: return 0x041c; // Cyrillic_EM - case 0x06ee: return 0x041d; // Cyrillic_EN - case 0x06ef: return 0x041e; // Cyrillic_O - case 0x06f0: return 0x041f; // Cyrillic_PE - case 0x06f2: return 0x0420; // Cyrillic_ER - case 0x06f3: return 0x0421; // Cyrillic_ES - case 0x06f4: return 0x0422; // Cyrillic_TE - case 0x06f5: return 0x0423; // Cyrillic_U - case 0x06e6: return 0x0424; // Cyrillic_EF - case 0x06e8: return 0x0425; // Cyrillic_HA - case 0x06e3: return 0x0426; // Cyrillic_TSE - case 0x06fe: return 0x0427; // Cyrillic_CHE - case 0x06fb: return 0x0428; // Cyrillic_SHA - case 0x06fd: return 0x0429; // Cyrillic_SHCHA - case 0x06ff: return 0x042a; // Cyrillic_HARDSIGN - case 0x06f9: return 0x042b; // Cyrillic_YERU - case 0x06f8: return 0x042c; // Cyrillic_SOFTSIGN - case 0x06fc: return 0x042d; // Cyrillic_E - case 0x06e0: return 0x042e; // Cyrillic_YU - case 0x06f1: return 0x042f; // Cyrillic_YA - case 0x06c1: return 0x0430; // Cyrillic_a - case 0x06c2: return 0x0431; // Cyrillic_be - case 0x06d7: return 0x0432; // Cyrillic_ve - case 0x06c7: return 0x0433; // Cyrillic_ghe - case 0x06c4: return 0x0434; // Cyrillic_de - case 0x06c5: return 0x0435; // Cyrillic_ie - case 0x06d6: return 0x0436; // Cyrillic_zhe - case 0x06da: return 0x0437; // Cyrillic_ze - case 0x06c9: return 0x0438; // Cyrillic_i - case 0x06ca: return 0x0439; // Cyrillic_shorti - case 0x06cb: return 0x043a; // Cyrillic_ka - case 0x06cc: return 0x043b; // Cyrillic_el - case 0x06cd: return 0x043c; // Cyrillic_em - case 0x06ce: return 0x043d; // Cyrillic_en - case 0x06cf: return 0x043e; // Cyrillic_o - case 0x06d0: return 0x043f; // Cyrillic_pe - case 0x06d2: return 0x0440; // Cyrillic_er - case 0x06d3: return 0x0441; // Cyrillic_es - case 0x06d4: return 0x0442; // Cyrillic_te - case 0x06d5: return 0x0443; // Cyrillic_u - case 0x06c6: return 0x0444; // Cyrillic_ef - case 0x06c8: return 0x0445; // Cyrillic_ha - case 0x06c3: return 0x0446; // Cyrillic_tse - case 0x06de: return 0x0447; // Cyrillic_che - case 0x06db: return 0x0448; // Cyrillic_sha - case 0x06dd: return 0x0449; // Cyrillic_shcha - case 0x06df: return 0x044a; // Cyrillic_hardsign - case 0x06d9: return 0x044b; // Cyrillic_yeru - case 0x06d8: return 0x044c; // Cyrillic_softsign - case 0x06dc: return 0x044d; // Cyrillic_e - case 0x06c0: return 0x044e; // Cyrillic_yu - case 0x06d1: return 0x044f; // Cyrillic_ya - case 0x06a3: return 0x0451; // Cyrillic_io - case 0x06a1: return 0x0452; // Serbian_dje - case 0x06a2: return 0x0453; // Macedonia_gje - case 0x06a4: return 0x0454; // Ukrainian_ie - case 0x06a5: return 0x0455; // Macedonia_dse - case 0x06a6: return 0x0456; // Ukrainian_i - case 0x06a7: return 0x0457; // Ukrainian_yi - case 0x06a8: return 0x0458; // Cyrillic_je - case 0x06a9: return 0x0459; // Cyrillic_lje - case 0x06aa: return 0x045a; // Cyrillic_nje - case 0x06ab: return 0x045b; // Serbian_tshe - case 0x06ac: return 0x045c; // Macedonia_kje - case 0x06ae: return 0x045e; // Byelorussian_shortu - case 0x06af: return 0x045f; // Cyrillic_dzhe - case 0x06bd: return 0x0490; // Ukrainian_GHE_WITH_UPTURN - case 0x06ad: return 0x0491; // Ukrainian_ghe_with_upturn - case 0x0680: return 0x0492; // Cyrillic_GHE_bar - case 0x0690: return 0x0493; // Cyrillic_ghe_bar - case 0x0681: return 0x0496; // Cyrillic_ZHE_descender - case 0x0691: return 0x0497; // Cyrillic_zhe_descender - case 0x0682: return 0x049a; // Cyrillic_KA_descender - case 0x0692: return 0x049b; // Cyrillic_ka_descender - case 0x0683: return 0x049c; // Cyrillic_KA_vertstroke - case 0x0693: return 0x049d; // Cyrillic_ka_vertstroke - case 0x0684: return 0x04a2; // Cyrillic_EN_descender - case 0x0694: return 0x04a3; // Cyrillic_en_descender - case 0x0685: return 0x04ae; // Cyrillic_U_straight - case 0x0695: return 0x04af; // Cyrillic_u_straight - case 0x0686: return 0x04b0; // Cyrillic_U_straight_bar - case 0x0696: return 0x04b1; // Cyrillic_u_straight_bar - case 0x0687: return 0x04b2; // Cyrillic_HA_descender - case 0x0697: return 0x04b3; // Cyrillic_ha_descender - case 0x0688: return 0x04b6; // Cyrillic_CHE_descender - case 0x0698: return 0x04b7; // Cyrillic_che_descender - case 0x0689: return 0x04b8; // Cyrillic_CHE_vertstroke - case 0x0699: return 0x04b9; // Cyrillic_che_vertstroke - case 0x068a: return 0x04ba; // Cyrillic_SHHA - case 0x069a: return 0x04bb; // Cyrillic_shha - case 0x068c: return 0x04d8; // Cyrillic_SCHWA - case 0x069c: return 0x04d9; // Cyrillic_schwa - case 0x068d: return 0x04e2; // Cyrillic_I_macron - case 0x069d: return 0x04e3; // Cyrillic_i_macron - case 0x068e: return 0x04e8; // Cyrillic_O_bar - case 0x069e: return 0x04e9; // Cyrillic_o_bar - case 0x068f: return 0x04ee; // Cyrillic_U_macron - case 0x069f: return 0x04ef; // Cyrillic_u_macron - case 0x14b2: return 0x0531; // Armenian_AYB - case 0x14b4: return 0x0532; // Armenian_BEN - case 0x14b6: return 0x0533; // Armenian_GIM - case 0x14b8: return 0x0534; // Armenian_DA - case 0x14ba: return 0x0535; // Armenian_YECH - case 0x14bc: return 0x0536; // Armenian_ZA - case 0x14be: return 0x0537; // Armenian_E - case 0x14c0: return 0x0538; // Armenian_AT - case 0x14c2: return 0x0539; // Armenian_TO - case 0x14c4: return 0x053a; // Armenian_ZHE - case 0x14c6: return 0x053b; // Armenian_INI - case 0x14c8: return 0x053c; // Armenian_LYUN - case 0x14ca: return 0x053d; // Armenian_KHE - case 0x14cc: return 0x053e; // Armenian_TSA - case 0x14ce: return 0x053f; // Armenian_KEN - case 0x14d0: return 0x0540; // Armenian_HO - case 0x14d2: return 0x0541; // Armenian_DZA - case 0x14d4: return 0x0542; // Armenian_GHAT - case 0x14d6: return 0x0543; // Armenian_TCHE - case 0x14d8: return 0x0544; // Armenian_MEN - case 0x14da: return 0x0545; // Armenian_HI - case 0x14dc: return 0x0546; // Armenian_NU - case 0x14de: return 0x0547; // Armenian_SHA - case 0x14e0: return 0x0548; // Armenian_VO - case 0x14e2: return 0x0549; // Armenian_CHA - case 0x14e4: return 0x054a; // Armenian_PE - case 0x14e6: return 0x054b; // Armenian_JE - case 0x14e8: return 0x054c; // Armenian_RA - case 0x14ea: return 0x054d; // Armenian_SE - case 0x14ec: return 0x054e; // Armenian_VEV - case 0x14ee: return 0x054f; // Armenian_TYUN - case 0x14f0: return 0x0550; // Armenian_RE - case 0x14f2: return 0x0551; // Armenian_TSO - case 0x14f4: return 0x0552; // Armenian_VYUN - case 0x14f6: return 0x0553; // Armenian_PYUR - case 0x14f8: return 0x0554; // Armenian_KE - case 0x14fa: return 0x0555; // Armenian_O - case 0x14fc: return 0x0556; // Armenian_FE - case 0x14fe: return 0x055a; // Armenian_apostrophe - case 0x14b0: return 0x055b; // Armenian_shesht - case 0x14af: return 0x055c; // Armenian_amanak - case 0x14aa: return 0x055d; // Armenian_but - case 0x14b1: return 0x055e; // Armenian_paruyk - case 0x14b3: return 0x0561; // Armenian_ayb - case 0x14b5: return 0x0562; // Armenian_ben - case 0x14b7: return 0x0563; // Armenian_gim - case 0x14b9: return 0x0564; // Armenian_da - case 0x14bb: return 0x0565; // Armenian_yech - case 0x14bd: return 0x0566; // Armenian_za - case 0x14bf: return 0x0567; // Armenian_e - case 0x14c1: return 0x0568; // Armenian_at - case 0x14c3: return 0x0569; // Armenian_to - case 0x14c5: return 0x056a; // Armenian_zhe - case 0x14c7: return 0x056b; // Armenian_ini - case 0x14c9: return 0x056c; // Armenian_lyun - case 0x14cb: return 0x056d; // Armenian_khe - case 0x14cd: return 0x056e; // Armenian_tsa - case 0x14cf: return 0x056f; // Armenian_ken - case 0x14d1: return 0x0570; // Armenian_ho - case 0x14d3: return 0x0571; // Armenian_dza - case 0x14d5: return 0x0572; // Armenian_ghat - case 0x14d7: return 0x0573; // Armenian_tche - case 0x14d9: return 0x0574; // Armenian_men - case 0x14db: return 0x0575; // Armenian_hi - case 0x14dd: return 0x0576; // Armenian_nu - case 0x14df: return 0x0577; // Armenian_sha - case 0x14e1: return 0x0578; // Armenian_vo - case 0x14e3: return 0x0579; // Armenian_cha - case 0x14e5: return 0x057a; // Armenian_pe - case 0x14e7: return 0x057b; // Armenian_je - case 0x14e9: return 0x057c; // Armenian_ra - case 0x14eb: return 0x057d; // Armenian_se - case 0x14ed: return 0x057e; // Armenian_vev - case 0x14ef: return 0x057f; // Armenian_tyun - case 0x14f1: return 0x0580; // Armenian_re - case 0x14f3: return 0x0581; // Armenian_tso - case 0x14f5: return 0x0582; // Armenian_vyun - case 0x14f7: return 0x0583; // Armenian_pyur - case 0x14f9: return 0x0584; // Armenian_ke - case 0x14fb: return 0x0585; // Armenian_o - case 0x14fd: return 0x0586; // Armenian_fe - case 0x14a2: return 0x0587; // Armenian_ligature_ew - case 0x14a3: return 0x0589; // Armenian_verjaket - case 0x14ad: return 0x058a; // Armenian_yentamna - case 0x0ce0: return 0x05d0; // hebrew_aleph - case 0x0ce1: return 0x05d1; // hebrew_beth - case 0x0ce2: return 0x05d2; // hebrew_gimmel - case 0x0ce3: return 0x05d3; // hebrew_daleth - case 0x0ce4: return 0x05d4; // hebrew_he - case 0x0ce5: return 0x05d5; // hebrew_waw - case 0x0ce6: return 0x05d6; // hebrew_zayin - case 0x0ce7: return 0x05d7; // hebrew_het - case 0x0ce8: return 0x05d8; // hebrew_teth - case 0x0ce9: return 0x05d9; // hebrew_yod - case 0x0cea: return 0x05da; // hebrew_finalkaph - case 0x0ceb: return 0x05db; // hebrew_kaph - case 0x0cec: return 0x05dc; // hebrew_lamed - case 0x0ced: return 0x05dd; // hebrew_finalmem - case 0x0cee: return 0x05de; // hebrew_mem - case 0x0cef: return 0x05df; // hebrew_finalnun - case 0x0cf0: return 0x05e0; // hebrew_nun - case 0x0cf1: return 0x05e1; // hebrew_samekh - case 0x0cf2: return 0x05e2; // hebrew_ayin - case 0x0cf3: return 0x05e3; // hebrew_finalpe - case 0x0cf4: return 0x05e4; // hebrew_pe - case 0x0cf5: return 0x05e5; // hebrew_finalzadi - case 0x0cf6: return 0x05e6; // hebrew_zadi - case 0x0cf7: return 0x05e7; // hebrew_qoph - case 0x0cf8: return 0x05e8; // hebrew_resh - case 0x0cf9: return 0x05e9; // hebrew_shin - case 0x0cfa: return 0x05ea; // hebrew_taw - case 0x05ac: return 0x060c; // Arabic_comma - case 0x05bb: return 0x061b; // Arabic_semicolon - case 0x05bf: return 0x061f; // Arabic_question_mark - case 0x05c1: return 0x0621; // Arabic_hamza - case 0x05c2: return 0x0622; // Arabic_maddaonalef - case 0x05c3: return 0x0623; // Arabic_hamzaonalef - case 0x05c4: return 0x0624; // Arabic_hamzaonwaw - case 0x05c5: return 0x0625; // Arabic_hamzaunderalef - case 0x05c6: return 0x0626; // Arabic_hamzaonyeh - case 0x05c7: return 0x0627; // Arabic_alef - case 0x05c8: return 0x0628; // Arabic_beh - case 0x05c9: return 0x0629; // Arabic_tehmarbuta - case 0x05ca: return 0x062a; // Arabic_teh - case 0x05cb: return 0x062b; // Arabic_theh - case 0x05cc: return 0x062c; // Arabic_jeem - case 0x05cd: return 0x062d; // Arabic_hah - case 0x05ce: return 0x062e; // Arabic_khah - case 0x05cf: return 0x062f; // Arabic_dal - case 0x05d0: return 0x0630; // Arabic_thal - case 0x05d1: return 0x0631; // Arabic_ra - case 0x05d2: return 0x0632; // Arabic_zain - case 0x05d3: return 0x0633; // Arabic_seen - case 0x05d4: return 0x0634; // Arabic_sheen - case 0x05d5: return 0x0635; // Arabic_sad - case 0x05d6: return 0x0636; // Arabic_dad - case 0x05d7: return 0x0637; // Arabic_tah - case 0x05d8: return 0x0638; // Arabic_zah - case 0x05d9: return 0x0639; // Arabic_ain - case 0x05da: return 0x063a; // Arabic_ghain - case 0x05e0: return 0x0640; // Arabic_tatweel - case 0x05e1: return 0x0641; // Arabic_feh - case 0x05e2: return 0x0642; // Arabic_qaf - case 0x05e3: return 0x0643; // Arabic_kaf - case 0x05e4: return 0x0644; // Arabic_lam - case 0x05e5: return 0x0645; // Arabic_meem - case 0x05e6: return 0x0646; // Arabic_noon - case 0x05e7: return 0x0647; // Arabic_ha - case 0x05e8: return 0x0648; // Arabic_waw - case 0x05e9: return 0x0649; // Arabic_alefmaksura - case 0x05ea: return 0x064a; // Arabic_yeh - case 0x05eb: return 0x064b; // Arabic_fathatan - case 0x05ec: return 0x064c; // Arabic_dammatan - case 0x05ed: return 0x064d; // Arabic_kasratan - case 0x05ee: return 0x064e; // Arabic_fatha - case 0x05ef: return 0x064f; // Arabic_damma - case 0x05f0: return 0x0650; // Arabic_kasra - case 0x05f1: return 0x0651; // Arabic_shadda - case 0x05f2: return 0x0652; // Arabic_sukun - case 0x05f3: return 0x0653; // Arabic_madda_above - case 0x05f4: return 0x0654; // Arabic_hamza_above - case 0x05f5: return 0x0655; // Arabic_hamza_below - case 0x05b0: return 0x0660; // Arabic_0 - case 0x05b1: return 0x0661; // Arabic_1 - case 0x05b2: return 0x0662; // Arabic_2 - case 0x05b3: return 0x0663; // Arabic_3 - case 0x05b4: return 0x0664; // Arabic_4 - case 0x05b5: return 0x0665; // Arabic_5 - case 0x05b6: return 0x0666; // Arabic_6 - case 0x05b7: return 0x0667; // Arabic_7 - case 0x05b8: return 0x0668; // Arabic_8 - case 0x05b9: return 0x0669; // Arabic_9 - case 0x05a5: return 0x066a; // Arabic_percent - case 0x05a6: return 0x0670; // Arabic_superscript_alef - case 0x05a7: return 0x0679; // Arabic_tteh - case 0x05a8: return 0x067e; // Arabic_peh - case 0x05a9: return 0x0686; // Arabic_tcheh - case 0x05aa: return 0x0688; // Arabic_ddal - case 0x05ab: return 0x0691; // Arabic_rreh - case 0x05f6: return 0x0698; // Arabic_jeh - case 0x05f7: return 0x06a4; // Arabic_veh - case 0x05f8: return 0x06a9; // Arabic_keheh - case 0x05f9: return 0x06af; // Arabic_gaf - case 0x05fa: return 0x06ba; // Arabic_noon_ghunna - case 0x05fb: return 0x06be; // Arabic_heh_doachashmee - case 0x05fe: return 0x06c1; // Arabic_heh_goal - case 0x05fc: return 0x06cc; // Farsi_yeh - case 0x05fd: return 0x06d2; // Arabic_yeh_baree - case 0x05ae: return 0x06d4; // Arabic_fullstop - case 0x0590: return 0x06f0; // Farsi_0 - case 0x0591: return 0x06f1; // Farsi_1 - case 0x0592: return 0x06f2; // Farsi_2 - case 0x0593: return 0x06f3; // Farsi_3 - case 0x0594: return 0x06f4; // Farsi_4 - case 0x0595: return 0x06f5; // Farsi_5 - case 0x0596: return 0x06f6; // Farsi_6 - case 0x0597: return 0x06f7; // Farsi_7 - case 0x0598: return 0x06f8; // Farsi_8 - case 0x0599: return 0x06f9; // Farsi_9 - case 0x0da1: return 0x0e01; // Thai_kokai - case 0x0da2: return 0x0e02; // Thai_khokhai - case 0x0da3: return 0x0e03; // Thai_khokhuat - case 0x0da4: return 0x0e04; // Thai_khokhwai - case 0x0da5: return 0x0e05; // Thai_khokhon - case 0x0da6: return 0x0e06; // Thai_khorakhang - case 0x0da7: return 0x0e07; // Thai_ngongu - case 0x0da8: return 0x0e08; // Thai_chochan - case 0x0da9: return 0x0e09; // Thai_choching - case 0x0daa: return 0x0e0a; // Thai_chochang - case 0x0dab: return 0x0e0b; // Thai_soso - case 0x0dac: return 0x0e0c; // Thai_chochoe - case 0x0dad: return 0x0e0d; // Thai_yoying - case 0x0dae: return 0x0e0e; // Thai_dochada - case 0x0daf: return 0x0e0f; // Thai_topatak - case 0x0db0: return 0x0e10; // Thai_thothan - case 0x0db1: return 0x0e11; // Thai_thonangmontho - case 0x0db2: return 0x0e12; // Thai_thophuthao - case 0x0db3: return 0x0e13; // Thai_nonen - case 0x0db4: return 0x0e14; // Thai_dodek - case 0x0db5: return 0x0e15; // Thai_totao - case 0x0db6: return 0x0e16; // Thai_thothung - case 0x0db7: return 0x0e17; // Thai_thothahan - case 0x0db8: return 0x0e18; // Thai_thothong - case 0x0db9: return 0x0e19; // Thai_nonu - case 0x0dba: return 0x0e1a; // Thai_bobaimai - case 0x0dbb: return 0x0e1b; // Thai_popla - case 0x0dbc: return 0x0e1c; // Thai_phophung - case 0x0dbd: return 0x0e1d; // Thai_fofa - case 0x0dbe: return 0x0e1e; // Thai_phophan - case 0x0dbf: return 0x0e1f; // Thai_fofan - case 0x0dc0: return 0x0e20; // Thai_phosamphao - case 0x0dc1: return 0x0e21; // Thai_moma - case 0x0dc2: return 0x0e22; // Thai_yoyak - case 0x0dc3: return 0x0e23; // Thai_rorua - case 0x0dc4: return 0x0e24; // Thai_ru - case 0x0dc5: return 0x0e25; // Thai_loling - case 0x0dc6: return 0x0e26; // Thai_lu - case 0x0dc7: return 0x0e27; // Thai_wowaen - case 0x0dc8: return 0x0e28; // Thai_sosala - case 0x0dc9: return 0x0e29; // Thai_sorusi - case 0x0dca: return 0x0e2a; // Thai_sosua - case 0x0dcb: return 0x0e2b; // Thai_hohip - case 0x0dcc: return 0x0e2c; // Thai_lochula - case 0x0dcd: return 0x0e2d; // Thai_oang - case 0x0dce: return 0x0e2e; // Thai_honokhuk - case 0x0dcf: return 0x0e2f; // Thai_paiyannoi - case 0x0dd0: return 0x0e30; // Thai_saraa - case 0x0dd1: return 0x0e31; // Thai_maihanakat - case 0x0dd2: return 0x0e32; // Thai_saraaa - case 0x0dd3: return 0x0e33; // Thai_saraam - case 0x0dd4: return 0x0e34; // Thai_sarai - case 0x0dd5: return 0x0e35; // Thai_saraii - case 0x0dd6: return 0x0e36; // Thai_saraue - case 0x0dd7: return 0x0e37; // Thai_sarauee - case 0x0dd8: return 0x0e38; // Thai_sarau - case 0x0dd9: return 0x0e39; // Thai_sarauu - case 0x0dda: return 0x0e3a; // Thai_phinthu - case 0x0ddf: return 0x0e3f; // Thai_baht - case 0x0de0: return 0x0e40; // Thai_sarae - case 0x0de1: return 0x0e41; // Thai_saraae - case 0x0de2: return 0x0e42; // Thai_sarao - case 0x0de3: return 0x0e43; // Thai_saraaimaimuan - case 0x0de4: return 0x0e44; // Thai_saraaimaimalai - case 0x0de5: return 0x0e45; // Thai_lakkhangyao - case 0x0de6: return 0x0e46; // Thai_maiyamok - case 0x0de7: return 0x0e47; // Thai_maitaikhu - case 0x0de8: return 0x0e48; // Thai_maiek - case 0x0de9: return 0x0e49; // Thai_maitho - case 0x0dea: return 0x0e4a; // Thai_maitri - case 0x0deb: return 0x0e4b; // Thai_maichattawa - case 0x0dec: return 0x0e4c; // Thai_thanthakhat - case 0x0ded: return 0x0e4d; // Thai_nikhahit - case 0x0df0: return 0x0e50; // Thai_leksun - case 0x0df1: return 0x0e51; // Thai_leknung - case 0x0df2: return 0x0e52; // Thai_leksong - case 0x0df3: return 0x0e53; // Thai_leksam - case 0x0df4: return 0x0e54; // Thai_leksi - case 0x0df5: return 0x0e55; // Thai_lekha - case 0x0df6: return 0x0e56; // Thai_lekhok - case 0x0df7: return 0x0e57; // Thai_lekchet - case 0x0df8: return 0x0e58; // Thai_lekpaet - case 0x0df9: return 0x0e59; // Thai_lekkao - case 0x15d0: return 0x10d0; // Georgian_an - case 0x15d1: return 0x10d1; // Georgian_ban - case 0x15d2: return 0x10d2; // Georgian_gan - case 0x15d3: return 0x10d3; // Georgian_don - case 0x15d4: return 0x10d4; // Georgian_en - case 0x15d5: return 0x10d5; // Georgian_vin - case 0x15d6: return 0x10d6; // Georgian_zen - case 0x15d7: return 0x10d7; // Georgian_tan - case 0x15d8: return 0x10d8; // Georgian_in - case 0x15d9: return 0x10d9; // Georgian_kan - case 0x15da: return 0x10da; // Georgian_las - case 0x15db: return 0x10db; // Georgian_man - case 0x15dc: return 0x10dc; // Georgian_nar - case 0x15dd: return 0x10dd; // Georgian_on - case 0x15de: return 0x10de; // Georgian_par - case 0x15df: return 0x10df; // Georgian_zhar - case 0x15e0: return 0x10e0; // Georgian_rae - case 0x15e1: return 0x10e1; // Georgian_san - case 0x15e2: return 0x10e2; // Georgian_tar - case 0x15e3: return 0x10e3; // Georgian_un - case 0x15e4: return 0x10e4; // Georgian_phar - case 0x15e5: return 0x10e5; // Georgian_khar - case 0x15e6: return 0x10e6; // Georgian_ghan - case 0x15e7: return 0x10e7; // Georgian_qar - case 0x15e8: return 0x10e8; // Georgian_shin - case 0x15e9: return 0x10e9; // Georgian_chin - case 0x15ea: return 0x10ea; // Georgian_can - case 0x15eb: return 0x10eb; // Georgian_jil - case 0x15ec: return 0x10ec; // Georgian_cil - case 0x15ed: return 0x10ed; // Georgian_char - case 0x15ee: return 0x10ee; // Georgian_xan - case 0x15ef: return 0x10ef; // Georgian_jhan - case 0x15f0: return 0x10f0; // Georgian_hae - case 0x15f1: return 0x10f1; // Georgian_he - case 0x15f2: return 0x10f2; // Georgian_hie - case 0x15f3: return 0x10f3; // Georgian_we - case 0x15f4: return 0x10f4; // Georgian_har - case 0x15f5: return 0x10f5; // Georgian_hoe - case 0x15f6: return 0x10f6; // Georgian_fi - case 0x0ed4: return 0x11a8; // Hangul_J_Kiyeog - case 0x0ed5: return 0x11a9; // Hangul_J_SsangKiyeog - case 0x0ed6: return 0x11aa; // Hangul_J_KiyeogSios - case 0x0ed7: return 0x11ab; // Hangul_J_Nieun - case 0x0ed8: return 0x11ac; // Hangul_J_NieunJieuj - case 0x0ed9: return 0x11ad; // Hangul_J_NieunHieuh - case 0x0eda: return 0x11ae; // Hangul_J_Dikeud - case 0x0edb: return 0x11af; // Hangul_J_Rieul - case 0x0edc: return 0x11b0; // Hangul_J_RieulKiyeog - case 0x0edd: return 0x11b1; // Hangul_J_RieulMieum - case 0x0ede: return 0x11b2; // Hangul_J_RieulPieub - case 0x0edf: return 0x11b3; // Hangul_J_RieulSios - case 0x0ee0: return 0x11b4; // Hangul_J_RieulTieut - case 0x0ee1: return 0x11b5; // Hangul_J_RieulPhieuf - case 0x0ee2: return 0x11b6; // Hangul_J_RieulHieuh - case 0x0ee3: return 0x11b7; // Hangul_J_Mieum - case 0x0ee4: return 0x11b8; // Hangul_J_Pieub - case 0x0ee5: return 0x11b9; // Hangul_J_PieubSios - case 0x0ee6: return 0x11ba; // Hangul_J_Sios - case 0x0ee7: return 0x11bb; // Hangul_J_SsangSios - case 0x0ee8: return 0x11bc; // Hangul_J_Ieung - case 0x0ee9: return 0x11bd; // Hangul_J_Jieuj - case 0x0eea: return 0x11be; // Hangul_J_Cieuc - case 0x0eeb: return 0x11bf; // Hangul_J_Khieuq - case 0x0eec: return 0x11c0; // Hangul_J_Tieut - case 0x0eed: return 0x11c1; // Hangul_J_Phieuf - case 0x0eee: return 0x11c2; // Hangul_J_Hieuh - case 0x0ef8: return 0x11eb; // Hangul_J_PanSios - case 0x0ef9: return 0x11f0; // Hangul_J_KkogjiDalrinIeung - case 0x0efa: return 0x11f9; // Hangul_J_YeorinHieuh - case 0x12a1: return 0x1e02; // Babovedot - case 0x12a2: return 0x1e03; // babovedot - case 0x12a6: return 0x1e0a; // Dabovedot - case 0x12ab: return 0x1e0b; // dabovedot - case 0x12b0: return 0x1e1e; // Fabovedot - case 0x12b1: return 0x1e1f; // fabovedot - case 0x16d1: return 0x1e36; // Lbelowdot - case 0x16e1: return 0x1e37; // lbelowdot - case 0x12b4: return 0x1e40; // Mabovedot - case 0x12b5: return 0x1e41; // mabovedot - case 0x12b7: return 0x1e56; // Pabovedot - case 0x12b9: return 0x1e57; // pabovedot - case 0x12bb: return 0x1e60; // Sabovedot - case 0x12bf: return 0x1e61; // sabovedot - case 0x12d7: return 0x1e6a; // Tabovedot - case 0x12f7: return 0x1e6b; // tabovedot - case 0x12a8: return 0x1e80; // Wgrave - case 0x12b8: return 0x1e81; // wgrave - case 0x12aa: return 0x1e82; // Wacute - case 0x12ba: return 0x1e83; // wacute - case 0x12bd: return 0x1e84; // Wdiaeresis - case 0x12be: return 0x1e85; // wdiaeresis - case 0x16a3: return 0x1e8a; // Xabovedot - case 0x16b3: return 0x1e8b; // xabovedot - case 0x1ea0: return 0x1ea0; // Abelowdot - case 0x1ea1: return 0x1ea1; // abelowdot - case 0x1ea2: return 0x1ea2; // Ahook - case 0x1ea3: return 0x1ea3; // ahook - case 0x1ea4: return 0x1ea4; // Acircumflexacute - case 0x1ea5: return 0x1ea5; // acircumflexacute - case 0x1ea6: return 0x1ea6; // Acircumflexgrave - case 0x1ea7: return 0x1ea7; // acircumflexgrave - case 0x1ea8: return 0x1ea8; // Acircumflexhook - case 0x1ea9: return 0x1ea9; // acircumflexhook - case 0x1eaa: return 0x1eaa; // Acircumflextilde - case 0x1eab: return 0x1eab; // acircumflextilde - case 0x1eac: return 0x1eac; // Acircumflexbelowdot - case 0x1ead: return 0x1ead; // acircumflexbelowdot - case 0x1eae: return 0x1eae; // Abreveacute - case 0x1eaf: return 0x1eaf; // abreveacute - case 0x1eb0: return 0x1eb0; // Abrevegrave - case 0x1eb1: return 0x1eb1; // abrevegrave - case 0x1eb2: return 0x1eb2; // Abrevehook - case 0x1eb3: return 0x1eb3; // abrevehook - case 0x1eb4: return 0x1eb4; // Abrevetilde - case 0x1eb5: return 0x1eb5; // abrevetilde - case 0x1eb6: return 0x1eb6; // Abrevebelowdot - case 0x1eb7: return 0x1eb7; // abrevebelowdot - case 0x1eb8: return 0x1eb8; // Ebelowdot - case 0x1eb9: return 0x1eb9; // ebelowdot - case 0x1eba: return 0x1eba; // Ehook - case 0x1ebb: return 0x1ebb; // ehook - case 0x1ebc: return 0x1ebc; // Etilde - case 0x1ebd: return 0x1ebd; // etilde - case 0x1ebe: return 0x1ebe; // Ecircumflexacute - case 0x1ebf: return 0x1ebf; // ecircumflexacute - case 0x1ec0: return 0x1ec0; // Ecircumflexgrave - case 0x1ec1: return 0x1ec1; // ecircumflexgrave - case 0x1ec2: return 0x1ec2; // Ecircumflexhook - case 0x1ec3: return 0x1ec3; // ecircumflexhook - case 0x1ec4: return 0x1ec4; // Ecircumflextilde - case 0x1ec5: return 0x1ec5; // ecircumflextilde - case 0x1ec6: return 0x1ec6; // Ecircumflexbelowdot - case 0x1ec7: return 0x1ec7; // ecircumflexbelowdot - case 0x1ec8: return 0x1ec8; // Ihook - case 0x1ec9: return 0x1ec9; // ihook - case 0x1eca: return 0x1eca; // Ibelowdot - case 0x1ecb: return 0x1ecb; // ibelowdot - case 0x1ecc: return 0x1ecc; // Obelowdot - case 0x1ecd: return 0x1ecd; // obelowdot - case 0x1ece: return 0x1ece; // Ohook - case 0x1ecf: return 0x1ecf; // ohook - case 0x1ed0: return 0x1ed0; // Ocircumflexacute - case 0x1ed1: return 0x1ed1; // ocircumflexacute - case 0x1ed2: return 0x1ed2; // Ocircumflexgrave - case 0x1ed3: return 0x1ed3; // ocircumflexgrave - case 0x1ed4: return 0x1ed4; // Ocircumflexhook - case 0x1ed5: return 0x1ed5; // ocircumflexhook - case 0x1ed6: return 0x1ed6; // Ocircumflextilde - case 0x1ed7: return 0x1ed7; // ocircumflextilde - case 0x1ed8: return 0x1ed8; // Ocircumflexbelowdot - case 0x1ed9: return 0x1ed9; // ocircumflexbelowdot - case 0x1eda: return 0x1eda; // Ohornacute - case 0x1edb: return 0x1edb; // ohornacute - case 0x1edc: return 0x1edc; // Ohorngrave - case 0x1edd: return 0x1edd; // ohorngrave - case 0x1ede: return 0x1ede; // Ohornhook - case 0x1edf: return 0x1edf; // ohornhook - case 0x1ee0: return 0x1ee0; // Ohorntilde - case 0x1ee1: return 0x1ee1; // ohorntilde - case 0x1ee2: return 0x1ee2; // Ohornbelowdot - case 0x1ee3: return 0x1ee3; // ohornbelowdot - case 0x1ee4: return 0x1ee4; // Ubelowdot - case 0x1ee5: return 0x1ee5; // ubelowdot - case 0x1ee6: return 0x1ee6; // Uhook - case 0x1ee7: return 0x1ee7; // uhook - case 0x1ee8: return 0x1ee8; // Uhornacute - case 0x1ee9: return 0x1ee9; // uhornacute - case 0x1eea: return 0x1eea; // Uhorngrave - case 0x1eeb: return 0x1eeb; // uhorngrave - case 0x1eec: return 0x1eec; // Uhornhook - case 0x1eed: return 0x1eed; // uhornhook - case 0x1eee: return 0x1eee; // Uhorntilde - case 0x1eef: return 0x1eef; // uhorntilde - case 0x1ef0: return 0x1ef0; // Uhornbelowdot - case 0x1ef1: return 0x1ef1; // uhornbelowdot - case 0x12ac: return 0x1ef2; // Ygrave - case 0x12bc: return 0x1ef3; // ygrave - case 0x1ef4: return 0x1ef4; // Ybelowdot - case 0x1ef5: return 0x1ef5; // ybelowdot - case 0x1ef6: return 0x1ef6; // Yhook - case 0x1ef7: return 0x1ef7; // yhook - case 0x1ef8: return 0x1ef8; // Ytilde - case 0x1ef9: return 0x1ef9; // ytilde - case 0x0aa2: return 0x2002; // enspace - case 0x0aa1: return 0x2003; // emspace - case 0x0aa3: return 0x2004; // em3space - case 0x0aa4: return 0x2005; // em4space - case 0x0aa5: return 0x2007; // digitspace - case 0x0aa6: return 0x2008; // punctspace - case 0x0aa7: return 0x2009; // thinspace - case 0x0aa8: return 0x200a; // hairspace - case 0x0abb: return 0x2012; // figdash - case 0x14ac: return 0x2013; // Armenian_en_dash - case 0x0aaa: return 0x2013; // endash - case 0x14a8: return 0x2014; // Armenian_em_dash - case 0x0aa9: return 0x2014; // emdash - case 0x07af: return 0x2015; // Greek_horizbar - case 0x0cdf: return 0x2017; // hebrew_doublelowline - case 0x0ad0: return 0x2018; // leftsinglequotemark - case 0x0ad1: return 0x2019; // rightsinglequotemark - case 0x0afd: return 0x201a; // singlelowquotemark - case 0x0ad2: return 0x201c; // leftdoublequotemark - case 0x0ad3: return 0x201d; // rightdoublequotemark - case 0x0afe: return 0x201e; // doublelowquotemark - case 0x0af1: return 0x2020; // dagger - case 0x0af2: return 0x2021; // doubledagger - case 0x0ae6: return 0x2022; // enfilledcircbullet - case 0x0aaf: return 0x2025; // doubbaselinedot - case 0x14ae: return 0x2026; // Armenian_ellipsis - case 0x0aae: return 0x2026; // ellipsis - case 0x0ad6: return 0x2032; // minutes - case 0x0ad7: return 0x2033; // seconds - case 0x0afc: return 0x2038; // caret - case 0x047e: return 0x203e; // overline - case 0x20a0: return 0x20a0; // EcuSign - case 0x20a1: return 0x20a1; // ColonSign - case 0x20a2: return 0x20a2; // CruzeiroSign - case 0x20a3: return 0x20a3; // FFrancSign - case 0x20a4: return 0x20a4; // LiraSign - case 0x20a5: return 0x20a5; // MillSign - case 0x20a6: return 0x20a6; // NairaSign - case 0x20a7: return 0x20a7; // PesetaSign - case 0x20a8: return 0x20a8; // RupeeSign - case 0x0eff: return 0x20a9; // Korean_Won - case 0x20a9: return 0x20a9; // WonSign - case 0x20aa: return 0x20aa; // NewSheqelSign - case 0x20ab: return 0x20ab; // DongSign - case 0x20ac: return 0x20ac; // EuroSign - case 0x0ab8: return 0x2105; // careof - case 0x06b0: return 0x2116; // numerosign - case 0x0afb: return 0x2117; // phonographcopyright - case 0x0ad4: return 0x211e; // prescription - case 0x0ac9: return 0x2122; // trademark - case 0x0ab0: return 0x2153; // onethird - case 0x0ab1: return 0x2154; // twothirds - case 0x0ab2: return 0x2155; // onefifth - case 0x0ab3: return 0x2156; // twofifths - case 0x0ab4: return 0x2157; // threefifths - case 0x0ab5: return 0x2158; // fourfifths - case 0x0ab6: return 0x2159; // onesixth - case 0x0ab7: return 0x215a; // fivesixths - case 0x0ac3: return 0x215b; // oneeighth - case 0x0ac4: return 0x215c; // threeeighths - case 0x0ac5: return 0x215d; // fiveeighths - case 0x0ac6: return 0x215e; // seveneighths - case 0x08fb: return 0x2190; // leftarrow - case 0x08fc: return 0x2191; // uparrow - case 0x08fd: return 0x2192; // rightarrow - case 0x08fe: return 0x2193; // downarrow - case 0x08ce: return 0x21d2; // implies - case 0x08cd: return 0x21d4; // ifonlyif - case 0x08ef: return 0x2202; // partialderivative - case 0x08c5: return 0x2207; // nabla - case 0x0bca: return 0x2218; // jot - case 0x08d6: return 0x221a; // radical - case 0x08c1: return 0x221d; // variation - case 0x08c2: return 0x221e; // infinity - case 0x08de: return 0x2227; // logicaland - case 0x0ba9: return 0x2227; // upcaret - case 0x0ba8: return 0x2228; // downcaret - case 0x08df: return 0x2228; // logicalor - case 0x08dc: return 0x2229; // intersection - case 0x0bc3: return 0x2229; // upshoe - case 0x0bd6: return 0x222a; // downshoe - case 0x08dd: return 0x222a; // union - case 0x08bf: return 0x222b; // integral - case 0x08c0: return 0x2234; // therefore - case 0x08c8: return 0x223c; // approximate - case 0x08c9: return 0x2243; // similarequal - case 0x08bd: return 0x2260; // notequal - case 0x08cf: return 0x2261; // identical - case 0x08bc: return 0x2264; // lessthanequal - case 0x08be: return 0x2265; // greaterthanequal - case 0x08da: return 0x2282; // includedin - case 0x0bda: return 0x2282; // leftshoe - case 0x08db: return 0x2283; // includes - case 0x0bd8: return 0x2283; // rightshoe - case 0x0bdc: return 0x22a2; // lefttack - case 0x0bfc: return 0x22a3; // righttack - case 0x0bce: return 0x22a4; // uptack - case 0x0bc2: return 0x22a5; // downtack - case 0x0bd3: return 0x2308; // upstile - case 0x0bc4: return 0x230a; // downstile - case 0x0afa: return 0x2315; // telephonerecorder - case 0x08a4: return 0x2320; // topintegral - case 0x08a5: return 0x2321; // botintegral - case 0x0bcc: return 0x2395; // quad - case 0x08ab: return 0x239b; // topleftparens - case 0x08ac: return 0x239d; // botleftparens - case 0x08ad: return 0x239e; // toprightparens - case 0x08ae: return 0x23a0; // botrightparens - case 0x08a7: return 0x23a1; // topleftsqbracket - case 0x08a8: return 0x23a3; // botleftsqbracket - case 0x08a9: return 0x23a4; // toprightsqbracket - case 0x08aa: return 0x23a6; // botrightsqbracket - case 0x08af: return 0x23a8; // leftmiddlecurlybrace - case 0x08b0: return 0x23ac; // rightmiddlecurlybrace - case 0x08a1: return 0x23b7; // leftradical - case 0x09ef: return 0x23ba; // horizlinescan1 - case 0x09f0: return 0x23bb; // horizlinescan3 - case 0x09f2: return 0x23bc; // horizlinescan7 - case 0x09f3: return 0x23bd; // horizlinescan9 - case 0x09e2: return 0x2409; // ht - case 0x09e5: return 0x240a; // lf - case 0x09e9: return 0x240b; // vt - case 0x09e3: return 0x240c; // ff - case 0x09e4: return 0x240d; // cr - case 0x0aac: return 0x2423; // signifblank - case 0x09e8: return 0x2424; // nl - case 0x08a3: return 0x2500; // horizconnector - case 0x09f1: return 0x2500; // horizlinescan5 - case 0x09f8: return 0x2502; // vertbar - case 0x08a6: return 0x2502; // vertconnector - case 0x08a2: return 0x250c; // topleftradical - case 0x09ec: return 0x250c; // upleftcorner - case 0x09eb: return 0x2510; // uprightcorner - case 0x09ed: return 0x2514; // lowleftcorner - case 0x09ea: return 0x2518; // lowrightcorner - case 0x09f4: return 0x251c; // leftt - case 0x09f5: return 0x2524; // rightt - case 0x09f7: return 0x252c; // topt - case 0x09f6: return 0x2534; // bott - case 0x09ee: return 0x253c; // crossinglines - case 0x09e1: return 0x2592; // checkerboard - case 0x0ae7: return 0x25aa; // enfilledsqbullet - case 0x0ae1: return 0x25ab; // enopensquarebullet - case 0x0adb: return 0x25ac; // filledrectbullet - case 0x0ae2: return 0x25ad; // openrectbullet - case 0x0adf: return 0x25ae; // emfilledrect - case 0x0acf: return 0x25af; // emopenrectangle - case 0x0ae8: return 0x25b2; // filledtribulletup - case 0x0ae3: return 0x25b3; // opentribulletup - case 0x0add: return 0x25b6; // filledrighttribullet - case 0x0acd: return 0x25b7; // rightopentriangle - case 0x0ae9: return 0x25bc; // filledtribulletdown - case 0x0ae4: return 0x25bd; // opentribulletdown - case 0x0adc: return 0x25c0; // filledlefttribullet - case 0x0acc: return 0x25c1; // leftopentriangle - case 0x09e0: return 0x25c6; // soliddiamond - case 0x0bcf: return 0x25cb; // circle - case 0x0ace: return 0x25cb; // emopencircle - case 0x0ade: return 0x25cf; // emfilledcircle - case 0x0ae0: return 0x25e6; // enopencircbullet - case 0x0ae5: return 0x2606; // openstar - case 0x0af9: return 0x260e; // telephone - case 0x0aca: return 0x2613; // signaturemark - case 0x0aea: return 0x261c; // leftpointer - case 0x0aeb: return 0x261e; // rightpointer - case 0x0af8: return 0x2640; // femalesymbol - case 0x0af7: return 0x2642; // malesymbol - case 0x0aec: return 0x2663; // club - case 0x0aee: return 0x2665; // heart - case 0x0aed: return 0x2666; // diamond - case 0x0af6: return 0x266d; // musicalflat - case 0x0af5: return 0x266f; // musicalsharp - case 0x0af3: return 0x2713; // checkmark - case 0x0af4: return 0x2717; // ballotcross - case 0x0ad9: return 0x271d; // latincross - case 0x0af0: return 0x2720; // maltesecross - case 0x0abc: return 0x27e8; // leftanglebracket - case 0x0abe: return 0x27e9; // rightanglebracket - case 0x04a4: return 0x3001; // kana_comma - case 0x04a1: return 0x3002; // kana_fullstop - case 0x04a2: return 0x300c; // kana_openingbracket - case 0x04a3: return 0x300d; // kana_closingbracket - case 0xfe5e: return 0x3099; // dead_voiced_sound - case 0xfe5f: return 0x309a; // dead_semivoiced_sound - case 0x04de: return 0x309b; // voicedsound - case 0x04df: return 0x309c; // semivoicedsound - case 0x04a7: return 0x30a1; // kana_a - case 0x04b1: return 0x30a2; // kana_A - case 0x04a8: return 0x30a3; // kana_i - case 0x04b2: return 0x30a4; // kana_I - case 0x04a9: return 0x30a5; // kana_u - case 0x04b3: return 0x30a6; // kana_U - case 0x04aa: return 0x30a7; // kana_e - case 0x04b4: return 0x30a8; // kana_E - case 0x04ab: return 0x30a9; // kana_o - case 0x04b5: return 0x30aa; // kana_O - case 0x04b6: return 0x30ab; // kana_KA - case 0x04b7: return 0x30ad; // kana_KI - case 0x04b8: return 0x30af; // kana_KU - case 0x04b9: return 0x30b1; // kana_KE - case 0x04ba: return 0x30b3; // kana_KO - case 0x04bb: return 0x30b5; // kana_SA - case 0x04bc: return 0x30b7; // kana_SHI - case 0x04bd: return 0x30b9; // kana_SU - case 0x04be: return 0x30bb; // kana_SE - case 0x04bf: return 0x30bd; // kana_SO - case 0x04c0: return 0x30bf; // kana_TA - case 0x04c1: return 0x30c1; // kana_CHI - case 0x04af: return 0x30c3; // kana_tsu - case 0x04c2: return 0x30c4; // kana_TSU - case 0x04c3: return 0x30c6; // kana_TE - case 0x04c4: return 0x30c8; // kana_TO - case 0x04c5: return 0x30ca; // kana_NA - case 0x04c6: return 0x30cb; // kana_NI - case 0x04c7: return 0x30cc; // kana_NU - case 0x04c8: return 0x30cd; // kana_NE - case 0x04c9: return 0x30ce; // kana_NO - case 0x04ca: return 0x30cf; // kana_HA - case 0x04cb: return 0x30d2; // kana_HI - case 0x04cc: return 0x30d5; // kana_FU - case 0x04cd: return 0x30d8; // kana_HE - case 0x04ce: return 0x30db; // kana_HO - case 0x04cf: return 0x30de; // kana_MA - case 0x04d0: return 0x30df; // kana_MI - case 0x04d1: return 0x30e0; // kana_MU - case 0x04d2: return 0x30e1; // kana_ME - case 0x04d3: return 0x30e2; // kana_MO - case 0x04ac: return 0x30e3; // kana_ya - case 0x04d4: return 0x30e4; // kana_YA - case 0x04ad: return 0x30e5; // kana_yu - case 0x04d5: return 0x30e6; // kana_YU - case 0x04ae: return 0x30e7; // kana_yo - case 0x04d6: return 0x30e8; // kana_YO - case 0x04d7: return 0x30e9; // kana_RA - case 0x04d8: return 0x30ea; // kana_RI - case 0x04d9: return 0x30eb; // kana_RU - case 0x04da: return 0x30ec; // kana_RE - case 0x04db: return 0x30ed; // kana_RO - case 0x04dc: return 0x30ef; // kana_WA - case 0x04a6: return 0x30f2; // kana_WO - case 0x04dd: return 0x30f3; // kana_N - case 0x04a5: return 0x30fb; // kana_conjunctive - case 0x04b0: return 0x30fc; // prolongedsound - case 0x0ea1: return 0x3131; // Hangul_Kiyeog - case 0x0ea2: return 0x3132; // Hangul_SsangKiyeog - case 0x0ea3: return 0x3133; // Hangul_KiyeogSios - case 0x0ea4: return 0x3134; // Hangul_Nieun - case 0x0ea5: return 0x3135; // Hangul_NieunJieuj - case 0x0ea6: return 0x3136; // Hangul_NieunHieuh - case 0x0ea7: return 0x3137; // Hangul_Dikeud - case 0x0ea8: return 0x3138; // Hangul_SsangDikeud - case 0x0ea9: return 0x3139; // Hangul_Rieul - case 0x0eaa: return 0x313a; // Hangul_RieulKiyeog - case 0x0eab: return 0x313b; // Hangul_RieulMieum - case 0x0eac: return 0x313c; // Hangul_RieulPieub - case 0x0ead: return 0x313d; // Hangul_RieulSios - case 0x0eae: return 0x313e; // Hangul_RieulTieut - case 0x0eaf: return 0x313f; // Hangul_RieulPhieuf - case 0x0eb0: return 0x3140; // Hangul_RieulHieuh - case 0x0eb1: return 0x3141; // Hangul_Mieum - case 0x0eb2: return 0x3142; // Hangul_Pieub - case 0x0eb3: return 0x3143; // Hangul_SsangPieub - case 0x0eb4: return 0x3144; // Hangul_PieubSios - case 0x0eb5: return 0x3145; // Hangul_Sios - case 0x0eb6: return 0x3146; // Hangul_SsangSios - case 0x0eb7: return 0x3147; // Hangul_Ieung - case 0x0eb8: return 0x3148; // Hangul_Jieuj - case 0x0eb9: return 0x3149; // Hangul_SsangJieuj - case 0x0eba: return 0x314a; // Hangul_Cieuc - case 0x0ebb: return 0x314b; // Hangul_Khieuq - case 0x0ebc: return 0x314c; // Hangul_Tieut - case 0x0ebd: return 0x314d; // Hangul_Phieuf - case 0x0ebe: return 0x314e; // Hangul_Hieuh - case 0x0ebf: return 0x314f; // Hangul_A - case 0x0ec0: return 0x3150; // Hangul_AE - case 0x0ec1: return 0x3151; // Hangul_YA - case 0x0ec2: return 0x3152; // Hangul_YAE - case 0x0ec3: return 0x3153; // Hangul_EO - case 0x0ec4: return 0x3154; // Hangul_E - case 0x0ec5: return 0x3155; // Hangul_YEO - case 0x0ec6: return 0x3156; // Hangul_YE - case 0x0ec7: return 0x3157; // Hangul_O - case 0x0ec8: return 0x3158; // Hangul_WA - case 0x0ec9: return 0x3159; // Hangul_WAE - case 0x0eca: return 0x315a; // Hangul_OE - case 0x0ecb: return 0x315b; // Hangul_YO - case 0x0ecc: return 0x315c; // Hangul_U - case 0x0ecd: return 0x315d; // Hangul_WEO - case 0x0ece: return 0x315e; // Hangul_WE - case 0x0ecf: return 0x315f; // Hangul_WI - case 0x0ed0: return 0x3160; // Hangul_YU - case 0x0ed1: return 0x3161; // Hangul_EU - case 0x0ed2: return 0x3162; // Hangul_YI - case 0x0ed3: return 0x3163; // Hangul_I - case 0x0eef: return 0x316d; // Hangul_RieulYeorinHieuh - case 0x0ef0: return 0x3171; // Hangul_SunkyeongeumMieum - case 0x0ef1: return 0x3178; // Hangul_SunkyeongeumPieub - case 0x0ef2: return 0x317f; // Hangul_PanSios - case 0x0ef3: return 0x3181; // Hangul_KkogjiDalrinIeung - case 0x0ef4: return 0x3184; // Hangul_SunkyeongeumPhieuf - case 0x0ef5: return 0x3186; // Hangul_YeorinHieuh - case 0x0ef6: return 0x318d; // Hangul_AraeA - case 0x0ef7: return 0x318e; // Hangul_AraeAE - } - return 0; -} - +Uint32 keysymToUnicode(KeySym keysym); } // namespace priv diff --git a/src/SFML/Window/Unix/KeyboardImpl.cpp b/src/SFML/Window/Unix/KeyboardImpl.cpp index a662e8e2..f2c9ac37 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.cpp +++ b/src/SFML/Window/Unix/KeyboardImpl.cpp @@ -26,16 +26,18 @@ // Headers //////////////////////////////////////////////////////////// #include -#include #include -#include +#include #include +#include +#include #include #include -#include -#include +#include +#include // strcmp -namespace { +namespace +{ const KeyCode NullKeyCode = 0; KeyCode scancodeToKeycode[sf::Keyboard::ScanCodeCount]; ///< Mapping of SFML scancode to X11 KeyCode @@ -49,6 +51,7 @@ bool isValidKeycode(KeyCode keycode) return keycode >= 8 || keycode <= 255; } + //////////////////////////////////////////////////////////// sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) { @@ -60,6 +63,7 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) // since the returned key code should correspond to a physical // location. KeySym keySym = XkbKeycodeToKeysym(display, keycode, 0, 1); + switch (keySym) { case XK_KP_0: return sf::Keyboard::ScanNumpad0; @@ -132,17 +136,7 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) case XK_F13: return sf::Keyboard::ScanF13; case XK_F14: return sf::Keyboard::ScanF14; case XK_F15: return sf::Keyboard::ScanF15; - // SFML doesn't currently have these scancodes - /* case XK_F16: return sf::Keyboard::ScanF16; - case XK_F17: return sf::Keyboard::ScanF17; - case XK_F18: return sf::Keyboard::ScanF18; - case XK_F19: return sf::Keyboard::ScanF19; - case XK_F20: return sf::Keyboard::ScanF20; - case XK_F21: return sf::Keyboard::ScanF21; - case XK_F22: return sf::Keyboard::ScanF22; - case XK_F23: return sf::Keyboard::ScanF23; - case XK_F24: return sf::Keyboard::ScanF24; - case XK_F25: return sf::Keyboard::ScanF25; */ + // TODO: add scancodes for F16-F25 when they're added in Scancode enum // Numeric keypad case XK_KP_Divide: return sf::Keyboard::ScanDivide; @@ -217,13 +211,12 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) case XK_period: return sf::Keyboard::ScanPeriod; case XK_slash: return sf::Keyboard::ScanForwardSlash; case XK_less: return sf::Keyboard::ScanReverseSolidus; - default: break; + default: return sf::Keyboard::ScanUnknown; } - - // No matching translation was found - return sf::Keyboard::ScanUnknown; } + +//////////////////////////////////////////////////////////// void initMapping() { for (int i = 0; i < 256; ++i) @@ -242,6 +235,7 @@ void initMapping() XkbGetNames(display, XkbKeyNamesMask, desc); sf::Keyboard::Scancode sc; + for (int keycode = desc->min_key_code; keycode <= desc->max_key_code; ++keycode) { std::memcpy(name, desc->names->keys[keycode].name, XkbKeyNameLength); @@ -296,7 +290,7 @@ void initMapping() else if (strcmp(name, "AB09") == 0) sc = sf::Keyboard::ScanPeriod; else if (strcmp(name, "AB10") == 0) sc = sf::Keyboard::ScanForwardSlash; else if (strcmp(name, "LSGT") == 0) sc = sf::Keyboard::ScanReverseSolidus; - else sc = sf::Keyboard::ScanUnknown; + else sc = sf::Keyboard::ScanUnknown; if (isValidKeycode(keycode)) { @@ -325,8 +319,9 @@ void initMapping() isMappingInitialized = true; } + //////////////////////////////////////////////////////////// -KeyCode SFScancodeToKeyCode(sf::Keyboard::Scancode code) +KeyCode scancodeToKeyCode(sf::Keyboard::Scancode code) { if (!isMappingInitialized) initMapping(); @@ -334,21 +329,25 @@ KeyCode SFScancodeToKeyCode(sf::Keyboard::Scancode code) return scancodeToKeycode[code]; } + //////////////////////////////////////////////////////////// -sf::Keyboard::Scancode keyCodeToSFScancode(KeyCode code) +sf::Keyboard::Scancode keyCodeToScancode(KeyCode code) { if (!isMappingInitialized) initMapping(); if (isValidKeycode(code)) return keycodeToScancode[code]; + return sf::Keyboard::ScanUnknown; } + //////////////////////////////////////////////////////////// -KeyCode SFKeyToKeyCode(sf::Keyboard::Key key) +KeyCode keyToKeyCode(sf::Keyboard::Key key) { - KeySym keysym = sf::priv::SFKeyToKeySym(key); + KeySym keysym = sf::priv::keyToKeySym(key); + if (keysym != NoSymbol) { Display* display = sf::priv::OpenDisplay(); @@ -356,21 +355,28 @@ KeyCode SFKeyToKeyCode(sf::Keyboard::Key key) sf::priv::CloseDisplay(display); return keycode; } + return NullKeyCode; } + //////////////////////////////////////////////////////////// -KeySym SFScancodeToKeySym(sf::Keyboard::Scancode code) +KeySym scancodeToKeySym(sf::Keyboard::Scancode code) { Display* display = sf::priv::OpenDisplay(); + KeySym keysym = NoSymbol; - KeyCode keycode = SFScancodeToKeyCode(code); + KeyCode keycode = scancodeToKeyCode(code); + if (keycode != NullKeyCode) // ensure that this Scancode is mapped to keycode keysym = XkbKeycodeToKeysym(display, keycode, 0, 0); + sf::priv::CloseDisplay(display); + return keysym; } + //////////////////////////////////////////////////////////// bool isKeyPressedImpl(KeyCode keycode) { @@ -387,6 +393,7 @@ bool isKeyPressedImpl(KeyCode keycode) // Check our keycode return (keys[keycode / 8] & (1 << (keycode % 8))) != 0; } + return false; } @@ -400,7 +407,7 @@ namespace priv //////////////////////////////////////////////////////////// bool KeyboardImpl::isKeyPressed(Keyboard::Key key) { - KeyCode keycode = SFKeyToKeyCode(key); + KeyCode keycode = keyToKeyCode(key); return isKeyPressedImpl(keycode); } @@ -408,7 +415,7 @@ bool KeyboardImpl::isKeyPressed(Keyboard::Key key) //////////////////////////////////////////////////////////// bool KeyboardImpl::isKeyPressed(Keyboard::Scancode code) { - KeyCode keycode = SFScancodeToKeyCode(code); + KeyCode keycode = scancodeToKeyCode(code); return isKeyPressedImpl(keycode); } @@ -416,18 +423,19 @@ bool KeyboardImpl::isKeyPressed(Keyboard::Scancode code) //////////////////////////////////////////////////////////// Keyboard::Scancode KeyboardImpl::unlocalize(Keyboard::Key key) { - KeyCode keycode = SFKeyToKeyCode(key); - return keyCodeToSFScancode(keycode); + KeyCode keycode = keyToKeyCode(key); + return keyCodeToScancode(keycode); } //////////////////////////////////////////////////////////// Keyboard::Key KeyboardImpl::localize(Keyboard::Scancode code) { - KeySym keysym = SFScancodeToKeySym(code); - return keySymToSFKey(keysym); + KeySym keysym = scancodeToKeySym(code); + return keySymToKey(keysym); } + //////////////////////////////////////////////////////////// String KeyboardImpl::getDescription(Keyboard::Scancode code) { @@ -435,7 +443,8 @@ String KeyboardImpl::getDescription(Keyboard::Scancode code) // these scancodes actually correspond to keys with input // but we want to return their description, not their behaviour - if (code == Keyboard::ScanEnter || + if (code == Keyboard::ScanEscape || + code == Keyboard::ScanEnter || code == Keyboard::ScanReturn || code == Keyboard::ScanTab || code == Keyboard::ScanDelete || @@ -447,7 +456,7 @@ String KeyboardImpl::getDescription(Keyboard::Scancode code) if (checkInput) { - KeySym keysym = SFScancodeToKeySym(code); + KeySym keysym = scancodeToKeySym(code); Uint32 unicode = keysymToUnicode(keysym); if (unicode != 0) @@ -540,9 +549,8 @@ String KeyboardImpl::getDescription(Keyboard::Scancode code) case Keyboard::ScanRShift: return "Shift (Right)"; case Keyboard::ScanRAlt: return "Meta (Right)"; case Keyboard::ScanRSystem: return "Super (Right)"; + default: return "Unknown Scancode"; // no guess good enough possible. } - - return "Unknown Scancode"; // no guess good enough possible. } @@ -556,11 +564,12 @@ Keyboard::Key KeyboardImpl::getKeyFromEvent(XKeyEvent& event) { // Get the SFML keyboard code from the keysym of the key that has been pressed KeySym keysym = XLookupKeysym(&event, i); - key = keySymToSFKey(keysym); + key = keySymToKey(keysym); if (key != Keyboard::Unknown) break; } + return key; } @@ -568,8 +577,9 @@ Keyboard::Key KeyboardImpl::getKeyFromEvent(XKeyEvent& event) //////////////////////////////////////////////////////////// Keyboard::Scancode KeyboardImpl::getScancodeFromEvent(XKeyEvent& event) { - return keyCodeToSFScancode(event.keycode); + return keyCodeToScancode(event.keycode); } } // namespace priv + } // namespace sf diff --git a/src/SFML/Window/Unix/KeyboardImpl.hpp b/src/SFML/Window/Unix/KeyboardImpl.hpp index 3b01e217..7dde5237 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.hpp +++ b/src/SFML/Window/Unix/KeyboardImpl.hpp @@ -28,21 +28,20 @@ //////////////////////////////////////////////////////////// // Headers //////////////////////////////////////////////////////////// -#include #include +#include // XKeyEvent -#include // Keycode -#include - -namespace sf { -namespace priv { +namespace sf +{ +namespace priv +{ //////////////////////////////////////////////////////////// -/// \brief sf::priv::InputImpl helper +/// \brief sf::priv::KeyboardImpl helper /// -/// This class manage as a singleton instance the keyboard state. +/// This class implements keyboard handling functions +/// to help sf::priv::InputImpl class. /// Its purpose is to help sf::priv::InputImpl class. -/// //////////////////////////////////////////////////////////// class KeyboardImpl { From 2e66791d528fc3f9b23d68f3ac47e46da2b4ebb7 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Tue, 10 Apr 2018 00:00:40 +0300 Subject: [PATCH 33/59] Removed duplication in a comment --- src/SFML/Window/Unix/KeyboardImpl.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/SFML/Window/Unix/KeyboardImpl.hpp b/src/SFML/Window/Unix/KeyboardImpl.hpp index 7dde5237..d1b83869 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.hpp +++ b/src/SFML/Window/Unix/KeyboardImpl.hpp @@ -41,7 +41,6 @@ namespace priv /// /// This class implements keyboard handling functions /// to help sf::priv::InputImpl class. -/// Its purpose is to help sf::priv::InputImpl class. //////////////////////////////////////////////////////////// class KeyboardImpl { From 6684ead5d67affb460193f26e937e13d763fb5ba Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Tue, 10 Apr 2018 00:04:27 +0300 Subject: [PATCH 34/59] Better descriptions for some keys (e.g. "Shift (Left)" -> "Left Shift") --- src/SFML/Window/Unix/KeyboardImpl.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/SFML/Window/Unix/KeyboardImpl.cpp b/src/SFML/Window/Unix/KeyboardImpl.cpp index f2c9ac37..571cc6c4 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.cpp +++ b/src/SFML/Window/Unix/KeyboardImpl.cpp @@ -487,6 +487,7 @@ String KeyboardImpl::getDescription(Keyboard::Scancode code) case Keyboard::ScanF13: return "F13"; case Keyboard::ScanF14: return "F14"; case Keyboard::ScanF15: return "F15"; + // TODO: add F16-F25 once they're added in Scancode enum case Keyboard::ScanCapsLock: return "CapsLock"; case Keyboard::ScanPrintScreen: return "PrintScreen"; @@ -541,14 +542,14 @@ String KeyboardImpl::getDescription(Keyboard::Scancode code) case Keyboard::ScanVolumeUp: return "Volume Up"; case Keyboard::ScanVolumeDown: return "Volume Down"; - case Keyboard::ScanLControl: return "Control (Left)"; - case Keyboard::ScanLShift: return "Shift (Left)"; - case Keyboard::ScanLAlt: return "Meta (Left)"; - case Keyboard::ScanLSystem: return "Super (Left)"; - case Keyboard::ScanRControl: return "Control (Right)"; - case Keyboard::ScanRShift: return "Shift (Right)"; - case Keyboard::ScanRAlt: return "Meta (Right)"; - case Keyboard::ScanRSystem: return "Super (Right)"; + case Keyboard::ScanLControl: return "Left Control"; + case Keyboard::ScanLShift: return "Left Shift"; + case Keyboard::ScanLAlt: return "Left Meta"; + case Keyboard::ScanLSystem: return "Left Super"; + case Keyboard::ScanRControl: return "Right Control"; + case Keyboard::ScanRShift: return "Right Shift"; + case Keyboard::ScanRAlt: return "Right Meta"; + case Keyboard::ScanRSystem: return "Right Super"; default: return "Unknown Scancode"; // no guess good enough possible. } } From 2dfdfc39309f41bd7254db4a89cdea481e651543 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Tue, 10 Apr 2018 01:53:02 +0300 Subject: [PATCH 35/59] Remove fallthrough in switch-case --- src/SFML/Window/Unix/KeyboardImpl.cpp | 256 +++++++++++++------------- 1 file changed, 128 insertions(+), 128 deletions(-) diff --git a/src/SFML/Window/Unix/KeyboardImpl.cpp b/src/SFML/Window/Unix/KeyboardImpl.cpp index 571cc6c4..9f5178fc 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.cpp +++ b/src/SFML/Window/Unix/KeyboardImpl.cpp @@ -66,21 +66,21 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) switch (keySym) { - case XK_KP_0: return sf::Keyboard::ScanNumpad0; - case XK_KP_1: return sf::Keyboard::ScanNumpad1; - case XK_KP_2: return sf::Keyboard::ScanNumpad2; - case XK_KP_3: return sf::Keyboard::ScanNumpad3; - case XK_KP_4: return sf::Keyboard::ScanNumpad4; - case XK_KP_5: return sf::Keyboard::ScanNumpad5; - case XK_KP_6: return sf::Keyboard::ScanNumpad6; - case XK_KP_7: return sf::Keyboard::ScanNumpad7; - case XK_KP_8: return sf::Keyboard::ScanNumpad8; - case XK_KP_9: return sf::Keyboard::ScanNumpad9; - case XK_KP_Separator: - case XK_KP_Decimal: return sf::Keyboard::ScanDecimal; - case XK_KP_Equal: return sf::Keyboard::ScanPadEquals; - case XK_KP_Enter: return sf::Keyboard::ScanReturn; - default: break; + case XK_KP_0: return sf::Keyboard::ScanNumpad0; + case XK_KP_1: return sf::Keyboard::ScanNumpad1; + case XK_KP_2: return sf::Keyboard::ScanNumpad2; + case XK_KP_3: return sf::Keyboard::ScanNumpad3; + case XK_KP_4: return sf::Keyboard::ScanNumpad4; + case XK_KP_5: return sf::Keyboard::ScanNumpad5; + case XK_KP_6: return sf::Keyboard::ScanNumpad6; + case XK_KP_7: return sf::Keyboard::ScanNumpad7; + case XK_KP_8: return sf::Keyboard::ScanNumpad8; + case XK_KP_9: return sf::Keyboard::ScanNumpad9; + case XK_KP_Separator: return sf::Keyboard::ScanDecimal; + case XK_KP_Decimal: return sf::Keyboard::ScanDecimal; + case XK_KP_Equal: return sf::Keyboard::ScanPadEquals; + case XK_KP_Enter: return sf::Keyboard::ScanReturn; + default: break; } // Now try primary keysym for function keys (non-printable keys) @@ -89,129 +89,129 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) switch (keySym) { - case XK_Escape: return sf::Keyboard::ScanEscape; - case XK_Tab: return sf::Keyboard::ScanTab; - case XK_Shift_L: return sf::Keyboard::ScanLShift; - case XK_Shift_R: return sf::Keyboard::ScanRShift; - case XK_Control_L: return sf::Keyboard::ScanLControl; - case XK_Control_R: return sf::Keyboard::ScanRControl; - case XK_Meta_L: - case XK_Alt_L: return sf::Keyboard::ScanLAlt; - case XK_Mode_switch: // Mapped to Alt_R on many keyboards - case XK_ISO_Level3_Shift: // AltGr on at least some machines - case XK_Meta_R: - case XK_Alt_R: return sf::Keyboard::ScanRAlt; - case XK_Super_L: return sf::Keyboard::ScanLSystem; - case XK_Super_R: return sf::Keyboard::ScanRSystem; - case XK_Menu: return sf::Keyboard::ScanMenu; - case XK_Num_Lock: return sf::Keyboard::ScanNumLock; - case XK_Caps_Lock: return sf::Keyboard::ScanCapsLock; - case XK_Print: return sf::Keyboard::ScanPrintScreen; - case XK_Scroll_Lock: return sf::Keyboard::ScanScrollLock; - case XK_Pause: return sf::Keyboard::ScanPause; - case XK_Delete: return sf::Keyboard::ScanDelete; - case XK_BackSpace: return sf::Keyboard::ScanBackspace; - case XK_Return: return sf::Keyboard::ScanEnter; - case XK_Home: return sf::Keyboard::ScanHome; - case XK_End: return sf::Keyboard::ScanEnd; - case XK_Page_Up: return sf::Keyboard::ScanPageUp; - case XK_Page_Down: return sf::Keyboard::ScanPageDown; - case XK_Insert: return sf::Keyboard::ScanInsert; - case XK_Left: return sf::Keyboard::ScanLeft; - case XK_Right: return sf::Keyboard::ScanRight; - case XK_Down: return sf::Keyboard::ScanDown; - case XK_Up: return sf::Keyboard::ScanUp; - case XK_F1: return sf::Keyboard::ScanF1; - case XK_F2: return sf::Keyboard::ScanF2; - case XK_F3: return sf::Keyboard::ScanF3; - case XK_F4: return sf::Keyboard::ScanF4; - case XK_F5: return sf::Keyboard::ScanF5; - case XK_F6: return sf::Keyboard::ScanF6; - case XK_F7: return sf::Keyboard::ScanF7; - case XK_F8: return sf::Keyboard::ScanF8; - case XK_F9: return sf::Keyboard::ScanF9; - case XK_F10: return sf::Keyboard::ScanF10; - case XK_F11: return sf::Keyboard::ScanF11; - case XK_F12: return sf::Keyboard::ScanF12; - case XK_F13: return sf::Keyboard::ScanF13; - case XK_F14: return sf::Keyboard::ScanF14; - case XK_F15: return sf::Keyboard::ScanF15; + case XK_Escape: return sf::Keyboard::ScanEscape; + case XK_Tab: return sf::Keyboard::ScanTab; + case XK_Shift_L: return sf::Keyboard::ScanLShift; + case XK_Shift_R: return sf::Keyboard::ScanRShift; + case XK_Control_L: return sf::Keyboard::ScanLControl; + case XK_Control_R: return sf::Keyboard::ScanRControl; + case XK_Meta_L: return sf::Keyboard::ScanLAlt; + case XK_Alt_L: return sf::Keyboard::ScanLAlt; + case XK_Mode_switch: return sf::Keyboard::ScanRAlt; // Mapped to Alt_R on many keyboards + case XK_ISO_Level3_Shift: return sf::Keyboard::ScanRAlt; // AltGr on at least some machines + case XK_Meta_R: return sf::Keyboard::ScanRAlt; + case XK_Alt_R: return sf::Keyboard::ScanRAlt; + case XK_Super_L: return sf::Keyboard::ScanLSystem; + case XK_Super_R: return sf::Keyboard::ScanRSystem; + case XK_Menu: return sf::Keyboard::ScanMenu; + case XK_Num_Lock: return sf::Keyboard::ScanNumLock; + case XK_Caps_Lock: return sf::Keyboard::ScanCapsLock; + case XK_Print: return sf::Keyboard::ScanPrintScreen; + case XK_Scroll_Lock: return sf::Keyboard::ScanScrollLock; + case XK_Pause: return sf::Keyboard::ScanPause; + case XK_Delete: return sf::Keyboard::ScanDelete; + case XK_BackSpace: return sf::Keyboard::ScanBackspace; + case XK_Return: return sf::Keyboard::ScanEnter; + case XK_Home: return sf::Keyboard::ScanHome; + case XK_End: return sf::Keyboard::ScanEnd; + case XK_Page_Up: return sf::Keyboard::ScanPageUp; + case XK_Page_Down: return sf::Keyboard::ScanPageDown; + case XK_Insert: return sf::Keyboard::ScanInsert; + case XK_Left: return sf::Keyboard::ScanLeft; + case XK_Right: return sf::Keyboard::ScanRight; + case XK_Down: return sf::Keyboard::ScanDown; + case XK_Up: return sf::Keyboard::ScanUp; + case XK_F1: return sf::Keyboard::ScanF1; + case XK_F2: return sf::Keyboard::ScanF2; + case XK_F3: return sf::Keyboard::ScanF3; + case XK_F4: return sf::Keyboard::ScanF4; + case XK_F5: return sf::Keyboard::ScanF5; + case XK_F6: return sf::Keyboard::ScanF6; + case XK_F7: return sf::Keyboard::ScanF7; + case XK_F8: return sf::Keyboard::ScanF8; + case XK_F9: return sf::Keyboard::ScanF9; + case XK_F10: return sf::Keyboard::ScanF10; + case XK_F11: return sf::Keyboard::ScanF11; + case XK_F12: return sf::Keyboard::ScanF12; + case XK_F13: return sf::Keyboard::ScanF13; + case XK_F14: return sf::Keyboard::ScanF14; + case XK_F15: return sf::Keyboard::ScanF15; // TODO: add scancodes for F16-F25 when they're added in Scancode enum // Numeric keypad - case XK_KP_Divide: return sf::Keyboard::ScanDivide; - case XK_KP_Multiply: return sf::Keyboard::ScanMultiply; - case XK_KP_Subtract: return sf::Keyboard::ScanMinus; - case XK_KP_Add: return sf::Keyboard::ScanPlus; + case XK_KP_Divide: return sf::Keyboard::ScanDivide; + case XK_KP_Multiply: return sf::Keyboard::ScanMultiply; + case XK_KP_Subtract: return sf::Keyboard::ScanMinus; + case XK_KP_Add: return sf::Keyboard::ScanPlus; // These should have been detected in secondary keysym test above! - case XK_KP_Insert: return sf::Keyboard::ScanNumpad0; - case XK_KP_End: return sf::Keyboard::ScanNumpad1; - case XK_KP_Down: return sf::Keyboard::ScanNumpad2; - case XK_KP_Page_Down: return sf::Keyboard::ScanNumpad3; - case XK_KP_Left: return sf::Keyboard::ScanNumpad4; - case XK_KP_Right: return sf::Keyboard::ScanNumpad6; - case XK_KP_Home: return sf::Keyboard::ScanNumpad7; - case XK_KP_Up: return sf::Keyboard::ScanNumpad8; - case XK_KP_Page_Up: return sf::Keyboard::ScanNumpad9; - case XK_KP_Delete: return sf::Keyboard::ScanDecimal; - case XK_KP_Equal: return sf::Keyboard::ScanPadEquals; - case XK_KP_Enter: return sf::Keyboard::ScanReturn; + case XK_KP_Insert: return sf::Keyboard::ScanNumpad0; + case XK_KP_End: return sf::Keyboard::ScanNumpad1; + case XK_KP_Down: return sf::Keyboard::ScanNumpad2; + case XK_KP_Page_Down: return sf::Keyboard::ScanNumpad3; + case XK_KP_Left: return sf::Keyboard::ScanNumpad4; + case XK_KP_Right: return sf::Keyboard::ScanNumpad6; + case XK_KP_Home: return sf::Keyboard::ScanNumpad7; + case XK_KP_Up: return sf::Keyboard::ScanNumpad8; + case XK_KP_Page_Up: return sf::Keyboard::ScanNumpad9; + case XK_KP_Delete: return sf::Keyboard::ScanDecimal; + case XK_KP_Equal: return sf::Keyboard::ScanPadEquals; + case XK_KP_Enter: return sf::Keyboard::ScanReturn; // Last resort: Check for printable keys (should not happen if the XKB // extension is available). This will give a layout dependent mapping // (which is wrong, and we may miss some keys, especially on non-US // keyboards), but it's better than nothing... - case XK_a: return sf::Keyboard::ScanA; - case XK_b: return sf::Keyboard::ScanB; - case XK_c: return sf::Keyboard::ScanC; - case XK_d: return sf::Keyboard::ScanD; - case XK_e: return sf::Keyboard::ScanE; - case XK_f: return sf::Keyboard::ScanF; - case XK_g: return sf::Keyboard::ScanG; - case XK_h: return sf::Keyboard::ScanH; - case XK_i: return sf::Keyboard::ScanI; - case XK_j: return sf::Keyboard::ScanJ; - case XK_k: return sf::Keyboard::ScanK; - case XK_l: return sf::Keyboard::ScanL; - case XK_m: return sf::Keyboard::ScanM; - case XK_n: return sf::Keyboard::ScanN; - case XK_o: return sf::Keyboard::ScanO; - case XK_p: return sf::Keyboard::ScanP; - case XK_q: return sf::Keyboard::ScanQ; - case XK_r: return sf::Keyboard::ScanR; - case XK_s: return sf::Keyboard::ScanS; - case XK_t: return sf::Keyboard::ScanT; - case XK_u: return sf::Keyboard::ScanU; - case XK_v: return sf::Keyboard::ScanV; - case XK_w: return sf::Keyboard::ScanW; - case XK_x: return sf::Keyboard::ScanX; - case XK_y: return sf::Keyboard::ScanY; - case XK_z: return sf::Keyboard::ScanZ; - case XK_1: return sf::Keyboard::ScanNum1; - case XK_2: return sf::Keyboard::ScanNum2; - case XK_3: return sf::Keyboard::ScanNum3; - case XK_4: return sf::Keyboard::ScanNum4; - case XK_5: return sf::Keyboard::ScanNum5; - case XK_6: return sf::Keyboard::ScanNum6; - case XK_7: return sf::Keyboard::ScanNum7; - case XK_8: return sf::Keyboard::ScanNum8; - case XK_9: return sf::Keyboard::ScanNum9; - case XK_0: return sf::Keyboard::ScanNum0; - case XK_space: return sf::Keyboard::ScanSpace; - case XK_minus: return sf::Keyboard::ScanHyphen; - case XK_equal: return sf::Keyboard::ScanEquals; - case XK_bracketleft: return sf::Keyboard::ScanLBracket; - case XK_bracketright: return sf::Keyboard::ScanRBracket; - case XK_backslash: return sf::Keyboard::ScanBackslash; - case XK_semicolon: return sf::Keyboard::ScanSemicolon; - case XK_apostrophe: return sf::Keyboard::ScanQuote; - case XK_grave: return sf::Keyboard::ScanGraveAccent; - case XK_comma: return sf::Keyboard::ScanComma; - case XK_period: return sf::Keyboard::ScanPeriod; - case XK_slash: return sf::Keyboard::ScanForwardSlash; - case XK_less: return sf::Keyboard::ScanReverseSolidus; - default: return sf::Keyboard::ScanUnknown; + case XK_a: return sf::Keyboard::ScanA; + case XK_b: return sf::Keyboard::ScanB; + case XK_c: return sf::Keyboard::ScanC; + case XK_d: return sf::Keyboard::ScanD; + case XK_e: return sf::Keyboard::ScanE; + case XK_f: return sf::Keyboard::ScanF; + case XK_g: return sf::Keyboard::ScanG; + case XK_h: return sf::Keyboard::ScanH; + case XK_i: return sf::Keyboard::ScanI; + case XK_j: return sf::Keyboard::ScanJ; + case XK_k: return sf::Keyboard::ScanK; + case XK_l: return sf::Keyboard::ScanL; + case XK_m: return sf::Keyboard::ScanM; + case XK_n: return sf::Keyboard::ScanN; + case XK_o: return sf::Keyboard::ScanO; + case XK_p: return sf::Keyboard::ScanP; + case XK_q: return sf::Keyboard::ScanQ; + case XK_r: return sf::Keyboard::ScanR; + case XK_s: return sf::Keyboard::ScanS; + case XK_t: return sf::Keyboard::ScanT; + case XK_u: return sf::Keyboard::ScanU; + case XK_v: return sf::Keyboard::ScanV; + case XK_w: return sf::Keyboard::ScanW; + case XK_x: return sf::Keyboard::ScanX; + case XK_y: return sf::Keyboard::ScanY; + case XK_z: return sf::Keyboard::ScanZ; + case XK_1: return sf::Keyboard::ScanNum1; + case XK_2: return sf::Keyboard::ScanNum2; + case XK_3: return sf::Keyboard::ScanNum3; + case XK_4: return sf::Keyboard::ScanNum4; + case XK_5: return sf::Keyboard::ScanNum5; + case XK_6: return sf::Keyboard::ScanNum6; + case XK_7: return sf::Keyboard::ScanNum7; + case XK_8: return sf::Keyboard::ScanNum8; + case XK_9: return sf::Keyboard::ScanNum9; + case XK_0: return sf::Keyboard::ScanNum0; + case XK_space: return sf::Keyboard::ScanSpace; + case XK_minus: return sf::Keyboard::ScanHyphen; + case XK_equal: return sf::Keyboard::ScanEquals; + case XK_bracketleft: return sf::Keyboard::ScanLBracket; + case XK_bracketright: return sf::Keyboard::ScanRBracket; + case XK_backslash: return sf::Keyboard::ScanBackslash; + case XK_semicolon: return sf::Keyboard::ScanSemicolon; + case XK_apostrophe: return sf::Keyboard::ScanQuote; + case XK_grave: return sf::Keyboard::ScanGraveAccent; + case XK_comma: return sf::Keyboard::ScanComma; + case XK_period: return sf::Keyboard::ScanPeriod; + case XK_slash: return sf::Keyboard::ScanForwardSlash; + case XK_less: return sf::Keyboard::ScanReverseSolidus; + default: return sf::Keyboard::ScanUnknown; } } From 00c10ad600b221754f99c7504563f8c1e8459789 Mon Sep 17 00:00:00 2001 From: Elias Daler Date: Wed, 16 May 2018 09:30:16 +0300 Subject: [PATCH 36/59] Code review small fixes --- src/SFML/Window/Unix/KeySymToUnicodeMapping.cpp | 2 +- src/SFML/Window/Unix/KeyboardImpl.cpp | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/SFML/Window/Unix/KeySymToUnicodeMapping.cpp b/src/SFML/Window/Unix/KeySymToUnicodeMapping.cpp index 0f122cc6..d6e0eeb6 100644 --- a/src/SFML/Window/Unix/KeySymToUnicodeMapping.cpp +++ b/src/SFML/Window/Unix/KeySymToUnicodeMapping.cpp @@ -1396,4 +1396,4 @@ Uint32 keysymToUnicode(KeySym keysym) } // namespace priv -} // namespace sf \ No newline at end of file +} // namespace sf diff --git a/src/SFML/Window/Unix/KeyboardImpl.cpp b/src/SFML/Window/Unix/KeyboardImpl.cpp index 9f5178fc..0dc827e2 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.cpp +++ b/src/SFML/Window/Unix/KeyboardImpl.cpp @@ -40,15 +40,15 @@ namespace { const KeyCode NullKeyCode = 0; -KeyCode scancodeToKeycode[sf::Keyboard::ScanCodeCount]; ///< Mapping of SFML scancode to X11 KeyCode -sf::Keyboard::Scancode keycodeToScancode[256]; ///< Mapping of X11 KeyCode to SFML scancode +KeyCode scancodeToKeycode[sf::Keyboard::ScanCodeCount]; ///< Mapping of SFML scancode to X11 KeyCode +sf::Keyboard::Scancode keycodeToScancode[256]; ///< Mapping of X11 KeyCode to SFML scancode bool isMappingInitialized = false; //////////////////////////////////////////////////////////// bool isValidKeycode(KeyCode keycode) { // Valid key code range is [8,255], according to the Xlib manual - return keycode >= 8 || keycode <= 255; + return (keycode >= 8) || (keycode <= 255); } @@ -241,7 +241,7 @@ void initMapping() std::memcpy(name, desc->names->keys[keycode].name, XkbKeyNameLength); name[XkbKeyNameLength] = '\0'; - if (strcmp(name, "TLDE") == 0) sc = sf::Keyboard::ScanGraveAccent; + if (strcmp(name, "TLDE") == 0) sc = sf::Keyboard::ScanGraveAccent; else if (strcmp(name, "AE01") == 0) sc = sf::Keyboard::ScanNum1; else if (strcmp(name, "AE02") == 0) sc = sf::Keyboard::ScanNum2; else if (strcmp(name, "AE03") == 0) sc = sf::Keyboard::ScanNum3; @@ -254,7 +254,7 @@ void initMapping() else if (strcmp(name, "AE10") == 0) sc = sf::Keyboard::ScanNum0; else if (strcmp(name, "AE11") == 0) sc = sf::Keyboard::ScanDash; else if (strcmp(name, "AE12") == 0) sc = sf::Keyboard::ScanEquals; - else if (strcmp(name, "TAB") == 0) sc = sf::Keyboard::ScanTab; + else if (strcmp(name, "TAB" ) == 0) sc = sf::Keyboard::ScanTab; else if (strcmp(name, "AD01") == 0) sc = sf::Keyboard::ScanQ; else if (strcmp(name, "AD02") == 0) sc = sf::Keyboard::ScanW; else if (strcmp(name, "AD03") == 0) sc = sf::Keyboard::ScanE; From e538240922b9d40f048e4bd634b6f714d608a6e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20D=C3=BCrrenberger?= Date: Wed, 15 Apr 2020 20:51:56 +0200 Subject: [PATCH 37/59] Fix compiler errors due to branch rebasing --- src/SFML/Window/Unix/InputImpl.cpp | 5 +- src/SFML/Window/Unix/KeyboardImpl.cpp | 176 +++++++++++++------------- 2 files changed, 89 insertions(+), 92 deletions(-) diff --git a/src/SFML/Window/Unix/InputImpl.cpp b/src/SFML/Window/Unix/InputImpl.cpp index 532a2103..59867d65 100644 --- a/src/SFML/Window/Unix/InputImpl.cpp +++ b/src/SFML/Window/Unix/InputImpl.cpp @@ -43,14 +43,13 @@ bool InputImpl::isKeyPressed(Keyboard::Key key) return KeyboardImpl::isKeyPressed(key); } + //////////////////////////////////////////////////////////// bool InputImpl::isKeyPressed(Keyboard::Scancode code) { return KeyboardImpl::isKeyPressed(code); } - // Open a connection with the X server - Display* display = OpenDisplay(); //////////////////////////////////////////////////////////// Keyboard::Key InputImpl::localize(Keyboard::Scancode code) @@ -58,8 +57,6 @@ Keyboard::Key InputImpl::localize(Keyboard::Scancode code) return KeyboardImpl::localize(code); } - // Close the connection with the X server - CloseDisplay(display); //////////////////////////////////////////////////////////// Keyboard::Scancode InputImpl::unlocalize(Keyboard::Key key) diff --git a/src/SFML/Window/Unix/KeyboardImpl.cpp b/src/SFML/Window/Unix/KeyboardImpl.cpp index 0dc827e2..ba430d8f 100644 --- a/src/SFML/Window/Unix/KeyboardImpl.cpp +++ b/src/SFML/Window/Unix/KeyboardImpl.cpp @@ -78,8 +78,8 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) case XK_KP_9: return sf::Keyboard::ScanNumpad9; case XK_KP_Separator: return sf::Keyboard::ScanDecimal; case XK_KP_Decimal: return sf::Keyboard::ScanDecimal; - case XK_KP_Equal: return sf::Keyboard::ScanPadEquals; - case XK_KP_Enter: return sf::Keyboard::ScanReturn; + case XK_KP_Equal: return sf::Keyboard::ScanNumpadEquals; + case XK_KP_Enter: return sf::Keyboard::ScanNumpadEnter; default: break; } @@ -155,8 +155,8 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) case XK_KP_Up: return sf::Keyboard::ScanNumpad8; case XK_KP_Page_Up: return sf::Keyboard::ScanNumpad9; case XK_KP_Delete: return sf::Keyboard::ScanDecimal; - case XK_KP_Equal: return sf::Keyboard::ScanPadEquals; - case XK_KP_Enter: return sf::Keyboard::ScanReturn; + case XK_KP_Equal: return sf::Keyboard::ScanNumpadEquals; + case XK_KP_Enter: return sf::Keyboard::ScanNumpadEnter; // Last resort: Check for printable keys (should not happen if the XKB // extension is available). This will give a layout dependent mapping @@ -209,7 +209,7 @@ sf::Keyboard::Scancode translateKeyCode(Display* display, KeyCode keycode) case XK_grave: return sf::Keyboard::ScanGraveAccent; case XK_comma: return sf::Keyboard::ScanComma; case XK_period: return sf::Keyboard::ScanPeriod; - case XK_slash: return sf::Keyboard::ScanForwardSlash; + case XK_slash: return sf::Keyboard::ScanSlash; case XK_less: return sf::Keyboard::ScanReverseSolidus; default: return sf::Keyboard::ScanUnknown; } @@ -288,7 +288,7 @@ void initMapping() else if (strcmp(name, "AB07") == 0) sc = sf::Keyboard::ScanM; else if (strcmp(name, "AB08") == 0) sc = sf::Keyboard::ScanComma; else if (strcmp(name, "AB09") == 0) sc = sf::Keyboard::ScanPeriod; - else if (strcmp(name, "AB10") == 0) sc = sf::Keyboard::ScanForwardSlash; + else if (strcmp(name, "AB10") == 0) sc = sf::Keyboard::ScanSlash; else if (strcmp(name, "LSGT") == 0) sc = sf::Keyboard::ScanReverseSolidus; else sc = sf::Keyboard::ScanUnknown; @@ -443,12 +443,12 @@ String KeyboardImpl::getDescription(Keyboard::Scancode code) // these scancodes actually correspond to keys with input // but we want to return their description, not their behaviour - if (code == Keyboard::ScanEscape || - code == Keyboard::ScanEnter || - code == Keyboard::ScanReturn || - code == Keyboard::ScanTab || - code == Keyboard::ScanDelete || - code == Keyboard::ScanBackspace || + if (code == Keyboard::ScanEscape || + code == Keyboard::ScanEnter || + code == Keyboard::ScanNumpadEnter || + code == Keyboard::ScanTab || + code == Keyboard::ScanDelete || + code == Keyboard::ScanBackspace || code == Keyboard::ScanSpace) { checkInput = false; @@ -466,91 +466,91 @@ String KeyboardImpl::getDescription(Keyboard::Scancode code) // Fallback to our best guess for the keys that are known to be independent of the layout. switch (code) { - case Keyboard::ScanEnter: return "Enter"; - case Keyboard::ScanEscape: return "Escape"; - case Keyboard::ScanBackspace: return "Backspace"; - case Keyboard::ScanTab: return "Tab"; - case Keyboard::ScanSpace: return "Space"; + case Keyboard::ScanEnter: return "Enter"; + case Keyboard::ScanEscape: return "Escape"; + case Keyboard::ScanBackspace: return "Backspace"; + case Keyboard::ScanTab: return "Tab"; + case Keyboard::ScanSpace: return "Space"; - case Keyboard::ScanF1: return "F1"; - case Keyboard::ScanF2: return "F2"; - case Keyboard::ScanF3: return "F3"; - case Keyboard::ScanF4: return "F4"; - case Keyboard::ScanF5: return "F5"; - case Keyboard::ScanF6: return "F6"; - case Keyboard::ScanF7: return "F7"; - case Keyboard::ScanF8: return "F8"; - case Keyboard::ScanF9: return "F9"; - case Keyboard::ScanF10: return "F10"; - case Keyboard::ScanF11: return "F11"; - case Keyboard::ScanF12: return "F12"; - case Keyboard::ScanF13: return "F13"; - case Keyboard::ScanF14: return "F14"; - case Keyboard::ScanF15: return "F15"; + case Keyboard::ScanF1: return "F1"; + case Keyboard::ScanF2: return "F2"; + case Keyboard::ScanF3: return "F3"; + case Keyboard::ScanF4: return "F4"; + case Keyboard::ScanF5: return "F5"; + case Keyboard::ScanF6: return "F6"; + case Keyboard::ScanF7: return "F7"; + case Keyboard::ScanF8: return "F8"; + case Keyboard::ScanF9: return "F9"; + case Keyboard::ScanF10: return "F10"; + case Keyboard::ScanF11: return "F11"; + case Keyboard::ScanF12: return "F12"; + case Keyboard::ScanF13: return "F13"; + case Keyboard::ScanF14: return "F14"; + case Keyboard::ScanF15: return "F15"; // TODO: add F16-F25 once they're added in Scancode enum - case Keyboard::ScanCapsLock: return "CapsLock"; - case Keyboard::ScanPrintScreen: return "PrintScreen"; - case Keyboard::ScanScrollLock: return "ScrollLock"; + case Keyboard::ScanCapsLock: return "CapsLock"; + case Keyboard::ScanPrintScreen: return "PrintScreen"; + case Keyboard::ScanScrollLock: return "ScrollLock"; - case Keyboard::ScanPause: return "Pause"; - case Keyboard::ScanInsert: return "Insert"; - case Keyboard::ScanHome: return "Home"; - case Keyboard::ScanPageUp: return "PageUp"; - case Keyboard::ScanDelete: return "Delete"; - case Keyboard::ScanEnd: return "End"; - case Keyboard::ScanPageDown: return "PageDown"; + case Keyboard::ScanPause: return "Pause"; + case Keyboard::ScanInsert: return "Insert"; + case Keyboard::ScanHome: return "Home"; + case Keyboard::ScanPageUp: return "PageUp"; + case Keyboard::ScanDelete: return "Delete"; + case Keyboard::ScanEnd: return "End"; + case Keyboard::ScanPageDown: return "PageDown"; - case Keyboard::ScanLeft: return "Left Arrow"; - case Keyboard::ScanRight: return "Right Arrow"; - case Keyboard::ScanDown: return "Down Arrow"; - case Keyboard::ScanUp: return "Up Arrow"; + case Keyboard::ScanLeft: return "Left Arrow"; + case Keyboard::ScanRight: return "Right Arrow"; + case Keyboard::ScanDown: return "Down Arrow"; + case Keyboard::ScanUp: return "Up Arrow"; - case Keyboard::ScanNumLock: return "NumLock"; - case Keyboard::ScanDivide: return "Divide (Numpad)"; - case Keyboard::ScanMultiply: return "Multiply (Numpad)"; - case Keyboard::ScanMinus: return "Minux (Numpad)"; - case Keyboard::ScanPlus: return "Plus (Numpad)"; - case Keyboard::ScanPadEquals: return "Equals (Numpad)"; - case Keyboard::ScanReturn: return "Enter (Numpad)"; - case Keyboard::ScanDecimal: return "Decimal (Numpad)"; + case Keyboard::ScanNumLock: return "NumLock"; + case Keyboard::ScanDivide: return "Divide (Numpad)"; + case Keyboard::ScanMultiply: return "Multiply (Numpad)"; + case Keyboard::ScanMinus: return "Minux (Numpad)"; + case Keyboard::ScanPlus: return "Plus (Numpad)"; + case Keyboard::ScanNumpadEquals: return "Equals (Numpad)"; + case Keyboard::ScanNumpadEnter: return "Enter (Numpad)"; + case Keyboard::ScanDecimal: return "Decimal (Numpad)"; - case Keyboard::ScanNumpad0: return "0 (Numpad)"; - case Keyboard::ScanNumpad1: return "1 (Numpad)"; - case Keyboard::ScanNumpad2: return "2 (Numpad)"; - case Keyboard::ScanNumpad3: return "3 (Numpad)"; - case Keyboard::ScanNumpad4: return "4 (Numpad)"; - case Keyboard::ScanNumpad5: return "5 (Numpad)"; - case Keyboard::ScanNumpad6: return "6 (Numpad)"; - case Keyboard::ScanNumpad7: return "7 (Numpad)"; - case Keyboard::ScanNumpad8: return "8 (Numpad)"; - case Keyboard::ScanNumpad9: return "9 (Numpad)"; + case Keyboard::ScanNumpad0: return "0 (Numpad)"; + case Keyboard::ScanNumpad1: return "1 (Numpad)"; + case Keyboard::ScanNumpad2: return "2 (Numpad)"; + case Keyboard::ScanNumpad3: return "3 (Numpad)"; + case Keyboard::ScanNumpad4: return "4 (Numpad)"; + case Keyboard::ScanNumpad5: return "5 (Numpad)"; + case Keyboard::ScanNumpad6: return "6 (Numpad)"; + case Keyboard::ScanNumpad7: return "7 (Numpad)"; + case Keyboard::ScanNumpad8: return "8 (Numpad)"; + case Keyboard::ScanNumpad9: return "9 (Numpad)"; - case Keyboard::ScanApplication: return "Application"; - case Keyboard::ScanExecute: return "Execute"; - case Keyboard::ScanHelp: return "Help"; - case Keyboard::ScanMenu: return "Menu"; - case Keyboard::ScanSelect: return "Select"; - case Keyboard::ScanStop: return "Stop"; - case Keyboard::ScanAgain: return "Again"; - case Keyboard::ScanUndo: return "Undo"; - case Keyboard::ScanCut: return "Cut"; - case Keyboard::ScanCopy: return "Copy"; - case Keyboard::ScanPaste: return "Paste"; - case Keyboard::ScanFind: return "Find"; - case Keyboard::ScanMute: return "Mute"; - case Keyboard::ScanVolumeUp: return "Volume Up"; - case Keyboard::ScanVolumeDown: return "Volume Down"; + case Keyboard::ScanApplication: return "Application"; + case Keyboard::ScanExecute: return "Execute"; + case Keyboard::ScanHelp: return "Help"; + case Keyboard::ScanMenu: return "Menu"; + case Keyboard::ScanSelect: return "Select"; + case Keyboard::ScanStop: return "Stop"; + case Keyboard::ScanAgain: return "Again"; + case Keyboard::ScanUndo: return "Undo"; + case Keyboard::ScanCut: return "Cut"; + case Keyboard::ScanCopy: return "Copy"; + case Keyboard::ScanPaste: return "Paste"; + case Keyboard::ScanFind: return "Find"; + case Keyboard::ScanMute: return "Mute"; + case Keyboard::ScanVolumeUp: return "Volume Up"; + case Keyboard::ScanVolumeDown: return "Volume Down"; - case Keyboard::ScanLControl: return "Left Control"; - case Keyboard::ScanLShift: return "Left Shift"; - case Keyboard::ScanLAlt: return "Left Meta"; - case Keyboard::ScanLSystem: return "Left Super"; - case Keyboard::ScanRControl: return "Right Control"; - case Keyboard::ScanRShift: return "Right Shift"; - case Keyboard::ScanRAlt: return "Right Meta"; - case Keyboard::ScanRSystem: return "Right Super"; - default: return "Unknown Scancode"; // no guess good enough possible. + case Keyboard::ScanLControl: return "Left Control"; + case Keyboard::ScanLShift: return "Left Shift"; + case Keyboard::ScanLAlt: return "Left Meta"; + case Keyboard::ScanLSystem: return "Left Super"; + case Keyboard::ScanRControl: return "Right Control"; + case Keyboard::ScanRShift: return "Right Shift"; + case Keyboard::ScanRAlt: return "Right Meta"; + case Keyboard::ScanRSystem: return "Right Super"; + default: return "Unknown Scancode"; // no guess good enough possible. } } From f57d4620abf5cc02a0ce8a7f93e88bb5aa66a745 Mon Sep 17 00:00:00 2001 From: Jonny Date: Thu, 14 May 2020 10:39:18 +0100 Subject: [PATCH 38/59] Update travis config for android SDK changes --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ebefd2c0..4ae82936 100644 --- a/.travis.yml +++ b/.travis.yml @@ -96,7 +96,6 @@ matrix: install: &androidInstall - echo y | sdkmanager "cmake;3.10.2.4988404" - - echo y | sdkmanager "lldb;3.1" - sudo ln -sf /usr/local/android-sdk/cmake/3.10.2.4988404/bin/cmake /usr/bin/cmake - wget https://dl.google.com/android/repository/android-ndk-r18b-linux-x86_64.zip - unzip -qq android-ndk-r18b-linux-x86_64.zip From f93372f98af72d68b7da1349bd3588a6e95c4bd0 Mon Sep 17 00:00:00 2001 From: Quentin Bazin Date: Mon, 11 May 2020 15:01:26 +0200 Subject: [PATCH 39/59] Added missing documentation about TcpListener::listen and Socket::AnyPort. --- include/SFML/Network/TcpListener.hpp | 4 ++++ include/SFML/Network/UdpSocket.hpp | 7 ++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/include/SFML/Network/TcpListener.hpp b/include/SFML/Network/TcpListener.hpp index 1f99f6d1..3cc4d2c7 100644 --- a/include/SFML/Network/TcpListener.hpp +++ b/include/SFML/Network/TcpListener.hpp @@ -74,6 +74,10 @@ public: /// function is called, it will stop listening on the old /// port before starting to listen on the new port. /// + /// When providing sf::Socket::AnyPort as port, the listener + /// will request an available port from the system. + /// The chosen port can be retrieved by calling getLocalPort(). + /// /// \param port Port to listen on for incoming connection attempts /// \param address Address of the interface to listen on /// diff --git a/include/SFML/Network/UdpSocket.hpp b/include/SFML/Network/UdpSocket.hpp index 826a156d..01645410 100644 --- a/include/SFML/Network/UdpSocket.hpp +++ b/include/SFML/Network/UdpSocket.hpp @@ -78,9 +78,10 @@ public: /// /// Binding the socket to a port is necessary for being /// able to receive data on that port. - /// You can use the special value Socket::AnyPort to tell the - /// system to automatically pick an available port, and then - /// call getLocalPort to retrieve the chosen port. + /// + /// When providing sf::Socket::AnyPort as port, the listener + /// will request an available port from the system. + /// The chosen port can be retrieved by calling getLocalPort(). /// /// Since the socket can only be bound to a single port at /// any given moment, if it is already bound when this From 43187455e407258cc4c304064777c59ceb0d13ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=B1=E9=A2=A8=E8=B0=B7=E6=97=A9=E8=8B=97=20=28?= =?UTF-8?q?=E3=81=93=E3=81=A1=E3=82=84=E3=81=95=E3=81=AA=E3=81=88=29?= Date: Wed, 26 Feb 2020 18:55:09 +0800 Subject: [PATCH 40/59] Added Font::hasGlyph() --- include/SFML/Graphics/Font.hpp | 22 ++++++++++++++++++++++ src/SFML/Graphics/Font.cpp | 7 +++++++ 2 files changed, 29 insertions(+) diff --git a/include/SFML/Graphics/Font.hpp b/include/SFML/Graphics/Font.hpp index 49a9f863..2e57c9b7 100644 --- a/include/SFML/Graphics/Font.hpp +++ b/include/SFML/Graphics/Font.hpp @@ -166,6 +166,10 @@ public: /// might be available. If the glyph is not available at the /// requested size, an empty glyph is returned. /// + /// You may want to use \ref hasGlyph to determine if the + /// glyph exists before requesting it. If the glyph does not + /// exist, a font specific default is returned. + /// /// Be aware that using a negative value for the outline /// thickness will cause distorted rendering. /// @@ -179,6 +183,24 @@ public: //////////////////////////////////////////////////////////// const Glyph& getGlyph(Uint32 codePoint, unsigned int characterSize, bool bold, float outlineThickness = 0) const; + //////////////////////////////////////////////////////////// + /// \brief Determine if this font has a glyph representing the requested code point + /// + /// Most fonts only include a very limited selection of glyphs from + /// specific Unicode subsets, like Latin, Cyrillic, or Asian characters. + /// + /// While code points without representation will return a font specific + /// default character, it might be useful to verify whether specific + /// code points are included to determine whether a font is suited + /// to display text in a specific language. + /// + /// \param codePoint Unicode code point to check + /// + /// \return True if the codepoint has a glyph representation, false otherwise + /// + //////////////////////////////////////////////////////////// + bool hasGlyph(Uint32 codePoint) const; + //////////////////////////////////////////////////////////// /// \brief Get the kerning offset of two glyphs /// diff --git a/src/SFML/Graphics/Font.cpp b/src/SFML/Graphics/Font.cpp index 4576987c..e5616ffe 100644 --- a/src/SFML/Graphics/Font.cpp +++ b/src/SFML/Graphics/Font.cpp @@ -365,6 +365,13 @@ const Glyph& Font::getGlyph(Uint32 codePoint, unsigned int characterSize, bool b } +//////////////////////////////////////////////////////////// +bool Font::hasGlyph(Uint32 codePoint) const +{ + return FT_Get_Char_Index(static_cast(m_face), codePoint) != 0; +} + + //////////////////////////////////////////////////////////// float Font::getKerning(Uint32 first, Uint32 second, unsigned int characterSize) const { From 0337568846584fffcee38036880f9f48888c8b7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20D=C3=BCrrenberger?= Date: Tue, 26 May 2020 23:37:00 +0200 Subject: [PATCH 41/59] Remove link in documentation main page For locally generated documentation the link should not point to a PHP page. The easiest solution is to remove it, given that the same link is available in the navigation. --- doc/mainpage.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/mainpage.hpp b/doc/mainpage.hpp index 16f2c43a..8f85f0cd 100644 --- a/doc/mainpage.hpp +++ b/doc/mainpage.hpp @@ -3,7 +3,7 @@ /// /// \section welcome Welcome /// Welcome to the official SFML documentation. Here you will find a detailed -/// view of all the SFML classes and functions.
+/// view of all the SFML classes and functions.
/// If you are looking for tutorials, you can visit the official website /// at www.sfml-dev.org. /// From 95c98093e9e4924f7978cc83c0126e5bc0b5e7f2 Mon Sep 17 00:00:00 2001 From: scotth Date: Thu, 28 May 2020 21:06:18 +0930 Subject: [PATCH 42/59] Adjustable processing interval in SoundStream #1517 Resurrection of previous PR with updated documentation. Added setter to adjust processing interval in SoundStream for low-latency streams. --- include/SFML/Audio/SoundStream.hpp | 17 ++++++++++++++++- src/SFML/Audio/SoundStream.cpp | 10 ++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/include/SFML/Audio/SoundStream.hpp b/include/SFML/Audio/SoundStream.hpp index f1c7f1f5..6fbaea4d 100644 --- a/include/SFML/Audio/SoundStream.hpp +++ b/include/SFML/Audio/SoundStream.hpp @@ -251,6 +251,20 @@ protected: //////////////////////////////////////////////////////////// virtual Int64 onLoop(); + //////////////////////////////////////////////////////////// + /// \brief Set the processing interval + /// + /// The processing interval controls the period at which the + /// audio buffers are filled by calls to onGetData. A smaller + /// interval may be useful for low-latency streams. Note that + /// the given period is only a hint and the actual period may + /// vary. The default processing interval is 10 ms. + /// + /// \param interval Processing interval + /// + //////////////////////////////////////////////////////////// + void setProcessingInterval(Time interval); + private: //////////////////////////////////////////////////////////// @@ -315,8 +329,9 @@ private: unsigned int m_sampleRate; //!< Frequency (samples / second) Uint32 m_format; //!< Format of the internal sound buffers bool m_loop; //!< Loop flag (true to loop, false to play once) - Uint64 m_samplesProcessed; //!< Number of buffers processed since beginning of the stream + Uint64 m_samplesProcessed; //!< Number of samples processed since beginning of the stream Int64 m_bufferSeeks[BufferCount]; //!< If buffer is an "end buffer", holds next seek position, else NoLoop. For play offset calculation. + Time m_processingInterval; //!< Interval for checking and filling the internal sound buffers. }; } // namespace sf diff --git a/src/SFML/Audio/SoundStream.cpp b/src/SFML/Audio/SoundStream.cpp index 5b6fff02..d8f5f785 100644 --- a/src/SFML/Audio/SoundStream.cpp +++ b/src/SFML/Audio/SoundStream.cpp @@ -51,7 +51,8 @@ m_sampleRate (0), m_format (0), m_loop (false), m_samplesProcessed(0), -m_bufferSeeks () +m_bufferSeeks (), +m_processingInterval(milliseconds(10)) { } @@ -264,6 +265,11 @@ Int64 SoundStream::onLoop() return 0; } +//////////////////////////////////////////////////////////// +void SoundStream::setProcessingInterval(Time interval) +{ + m_processingInterval = interval; +} //////////////////////////////////////////////////////////// void SoundStream::streamData() @@ -384,7 +390,7 @@ void SoundStream::streamData() // Leave some time for the other threads if the stream is still playing if (SoundSource::getStatus() != Stopped) - sleep(milliseconds(10)); + sleep(m_processingInterval); } // Stop the playback From 3557c46ae65a32ac6fc49d81ec026d6a0787564d Mon Sep 17 00:00:00 2001 From: binary1248 Date: Sat, 4 Jan 2020 02:51:18 +0100 Subject: [PATCH 43/59] Add support for buffered DirectInput data to reduce polling load when it is supported. Only attempt setting a DirectInput device's axis mode if the device reports having axes and its axis mode is not already set to absolute. If the axis mode still can't be set to absolute, blacklist the device so that any future attempts will abort early. This should help when dealing with broken device drivers that report being game controllers and not fully supporting game controller functionality. --- src/SFML/Window/Win32/JoystickImpl.cpp | 417 ++++++++++++++++++++----- src/SFML/Window/Win32/JoystickImpl.hpp | 14 +- 2 files changed, 349 insertions(+), 82 deletions(-) diff --git a/src/SFML/Window/Win32/JoystickImpl.cpp b/src/SFML/Window/Win32/JoystickImpl.cpp index 2e925a57..9f8339d5 100644 --- a/src/SFML/Window/Win32/JoystickImpl.cpp +++ b/src/SFML/Window/Win32/JoystickImpl.cpp @@ -80,6 +80,17 @@ namespace typedef std::vector JoystickList; JoystickList joystickList; + + struct JoystickBlacklistEntry + { + unsigned int vendorId; + unsigned int productId; + }; + + typedef std::vector JoystickBlacklist; + JoystickBlacklist joystickBlacklist; + + const DWORD directInputEventBufferSize = 32; } @@ -330,7 +341,16 @@ Joystick::Identification JoystickImpl::getIdentification() const JoystickState JoystickImpl::update() { if (directInput) - return updateDInput(); + { + if (m_buffered) + { + return updateDInputBuffered(); + } + else + { + return updateDInputPolled(); + } + } JoystickState state; @@ -391,7 +411,7 @@ void JoystickImpl::initializeDInput() // Try to acquire a DirectInput 8.x interface HRESULT result = directInput8Create(GetModuleHandleW(NULL), 0x0800, guids::IID_IDirectInput8W, reinterpret_cast(&directInput), NULL); - if (result) + if (FAILED(result)) { // De-initialize everything directInput = NULL; @@ -460,7 +480,7 @@ void JoystickImpl::updateConnectionsDInput() ++i; } - if (result) + if (FAILED(result)) { err() << "Failed to enumerate DirectInput devices: " << result << std::endl; @@ -499,6 +519,8 @@ bool JoystickImpl::openDInput(unsigned int index) std::memset(&m_deviceCaps, 0, sizeof(DIDEVCAPS)); m_deviceCaps.dwSize = sizeof(DIDEVCAPS); + m_state = JoystickState(); + m_buffered = false; // Search for a joystick with the given index in the connected list for (std::vector::iterator i = joystickList.begin(); i != joystickList.end(); ++i) @@ -508,13 +530,54 @@ bool JoystickImpl::openDInput(unsigned int index) // Create device HRESULT result = directInput->CreateDevice(i->guid, &m_device, NULL); - if (result) + if (FAILED(result)) { err() << "Failed to create DirectInput device: " << result << std::endl; return false; } + // Get vendor and product id of the device + DIPROPDWORD property; + std::memset(&property, 0, sizeof(property)); + property.diph.dwSize = sizeof(property); + property.diph.dwHeaderSize = sizeof(property.diph); + property.diph.dwHow = DIPH_DEVICE; + + if (SUCCEEDED(m_device->GetProperty(DIPROP_VIDPID, &property.diph))) + { + m_identification.productId = HIWORD(property.dwData); + m_identification.vendorId = LOWORD(property.dwData); + + // Check if device is already blacklisted + if (m_identification.productId && m_identification.vendorId) + { + for (JoystickBlacklist::const_iterator iter = joystickBlacklist.begin(); iter != joystickBlacklist.end(); ++iter) + { + if ((m_identification.productId == iter->productId) && + (m_identification.vendorId == iter->vendorId)) + { + // Device is blacklisted + m_device->Release(); + m_device = NULL; + + return false; + } + } + } + } + + // Get friendly product name of the device + DIPROPSTRING stringProperty; + std::memset(&stringProperty, 0, sizeof(stringProperty)); + stringProperty.diph.dwSize = sizeof(stringProperty); + stringProperty.diph.dwHeaderSize = sizeof(stringProperty.diph); + stringProperty.diph.dwHow = DIPH_DEVICE; + stringProperty.diph.dwObj = 0; + + if (SUCCEEDED(m_device->GetProperty(DIPROP_PRODUCTNAME, &stringProperty.diph))) + m_identification.name = stringProperty.wsz; + static bool formatInitialized = false; static DIDATAFORMAT format; @@ -524,59 +587,80 @@ bool JoystickImpl::openDInput(unsigned int index) const DWORD povType = DIDFT_POV | DIDFT_OPTIONAL | DIDFT_ANYINSTANCE; const DWORD buttonType = DIDFT_BUTTON | DIDFT_OPTIONAL | DIDFT_ANYINSTANCE; - static DIOBJECTDATAFORMAT data[8 + 4 + sf::Joystick::ButtonCount]; + static DIOBJECTDATAFORMAT data[8 * 4 + 4 + sf::Joystick::ButtonCount]; - data[0].pguid = &guids::GUID_XAxis; - data[0].dwOfs = DIJOFS_X; + for (int i = 0; i < 4; ++i) + { + data[8 * i + 0].pguid = &guids::GUID_XAxis; + data[8 * i + 1].pguid = &guids::GUID_YAxis; + data[8 * i + 2].pguid = &guids::GUID_ZAxis; + data[8 * i + 3].pguid = &guids::GUID_RxAxis; + data[8 * i + 4].pguid = &guids::GUID_RyAxis; + data[8 * i + 5].pguid = &guids::GUID_RzAxis; + data[8 * i + 6].pguid = &guids::GUID_Slider; + data[8 * i + 7].pguid = &guids::GUID_Slider; + } - data[1].pguid = &guids::GUID_YAxis; - data[1].dwOfs = DIJOFS_Y; + data[ 0].dwOfs = DIJOFS_X; + data[ 1].dwOfs = DIJOFS_Y; + data[ 2].dwOfs = DIJOFS_Z; + data[ 3].dwOfs = DIJOFS_RX; + data[ 4].dwOfs = DIJOFS_RY; + data[ 5].dwOfs = DIJOFS_RZ; + data[ 6].dwOfs = DIJOFS_SLIDER(0); + data[ 7].dwOfs = DIJOFS_SLIDER(1); + data[ 8].dwOfs = FIELD_OFFSET(DIJOYSTATE2, lVX); + data[ 9].dwOfs = FIELD_OFFSET(DIJOYSTATE2, lVY); + data[10].dwOfs = FIELD_OFFSET(DIJOYSTATE2, lVZ); + data[11].dwOfs = FIELD_OFFSET(DIJOYSTATE2, lVRx); + data[12].dwOfs = FIELD_OFFSET(DIJOYSTATE2, lVRy); + data[13].dwOfs = FIELD_OFFSET(DIJOYSTATE2, lVRz); + data[14].dwOfs = FIELD_OFFSET(DIJOYSTATE2, rglVSlider[0]); + data[15].dwOfs = FIELD_OFFSET(DIJOYSTATE2, rglVSlider[1]); + data[16].dwOfs = FIELD_OFFSET(DIJOYSTATE2, lAX); + data[17].dwOfs = FIELD_OFFSET(DIJOYSTATE2, lAY); + data[18].dwOfs = FIELD_OFFSET(DIJOYSTATE2, lAZ); + data[19].dwOfs = FIELD_OFFSET(DIJOYSTATE2, lARx); + data[20].dwOfs = FIELD_OFFSET(DIJOYSTATE2, lARy); + data[21].dwOfs = FIELD_OFFSET(DIJOYSTATE2, lARz); + data[22].dwOfs = FIELD_OFFSET(DIJOYSTATE2, rglASlider[0]); + data[23].dwOfs = FIELD_OFFSET(DIJOYSTATE2, rglASlider[1]); + data[24].dwOfs = FIELD_OFFSET(DIJOYSTATE2, lFX); + data[25].dwOfs = FIELD_OFFSET(DIJOYSTATE2, lFY); + data[26].dwOfs = FIELD_OFFSET(DIJOYSTATE2, lFZ); + data[27].dwOfs = FIELD_OFFSET(DIJOYSTATE2, lFRx); + data[28].dwOfs = FIELD_OFFSET(DIJOYSTATE2, lFRy); + data[29].dwOfs = FIELD_OFFSET(DIJOYSTATE2, lFRz); + data[30].dwOfs = FIELD_OFFSET(DIJOYSTATE2, rglFSlider[0]); + data[31].dwOfs = FIELD_OFFSET(DIJOYSTATE2, rglFSlider[1]); - data[2].pguid = &guids::GUID_ZAxis; - data[2].dwOfs = DIJOFS_Z; - - data[3].pguid = &guids::GUID_RxAxis; - data[3].dwOfs = DIJOFS_RX; - - data[4].pguid = &guids::GUID_RyAxis; - data[4].dwOfs = DIJOFS_RY; - - data[5].pguid = &guids::GUID_RzAxis; - data[5].dwOfs = DIJOFS_RZ; - - data[6].pguid = &guids::GUID_Slider; - data[6].dwOfs = DIJOFS_SLIDER(0); - - data[7].pguid = &guids::GUID_Slider; - data[7].dwOfs = DIJOFS_SLIDER(1); - - for (int i = 0; i < 8; ++i) + for (int i = 0; i < 8 * 4; ++i) { data[i].dwType = axisType; - data[i].dwFlags = DIDOI_ASPECTPOSITION; + data[i].dwFlags = 0; } for (int i = 0; i < 4; ++i) { - data[8 + i].pguid = &guids::GUID_POV; - data[8 + i].dwOfs = static_cast(DIJOFS_POV(i)); - data[8 + i].dwType = povType; - data[8 + i].dwFlags = 0; + data[8 * 4 + i].pguid = &guids::GUID_POV; + data[8 * 4 + i].dwOfs = static_cast(DIJOFS_POV(i)); + data[8 * 4 + i].dwType = povType; + data[8 * 4 + i].dwFlags = 0; } for (int i = 0; i < sf::Joystick::ButtonCount; ++i) { - data[8 + 4 + i].pguid = NULL; - data[8 + 4 + i].dwOfs = static_cast(DIJOFS_BUTTON(i)); - data[8 + 4 + i].dwType = buttonType; - data[8 + 4 + i].dwFlags = 0; + data[8 * 4 + 4 + i].pguid = NULL; + data[8 * 4 + 4 + i].dwOfs = static_cast(DIJOFS_BUTTON(i)); + data[8 * 4 + 4 + i].dwType = buttonType; + data[8 * 4 + 4 + i].dwFlags = 0; } format.dwSize = sizeof(DIDATAFORMAT); format.dwObjSize = sizeof(DIOBJECTDATAFORMAT); format.dwFlags = DIDFT_ABSAXIS; - format.dwDataSize = sizeof(DIJOYSTATE); - format.dwNumObjs = 8 + 4 + sf::Joystick::ButtonCount; + format.dwDataSize = sizeof(DIJOYSTATE2); + format.dwNumObjs = 8 * 4 + 4 + sf::Joystick::ButtonCount; format.rgodf = data; formatInitialized = true; @@ -585,7 +669,7 @@ bool JoystickImpl::openDInput(unsigned int index) // Set device data format result = m_device->SetDataFormat(&format); - if (result) + if (FAILED(result)) { err() << "Failed to set DirectInput device data format: " << result << std::endl; @@ -598,7 +682,7 @@ bool JoystickImpl::openDInput(unsigned int index) // Get device capabilities result = m_device->GetCapabilities(&m_deviceCaps); - if (result) + if (FAILED(result)) { err() << "Failed to get DirectInput device capabilities: " << result << std::endl; @@ -608,30 +692,10 @@ bool JoystickImpl::openDInput(unsigned int index) return false; } - // Set axis mode to absolute - DIPROPDWORD property; - std::memset(&property, 0, sizeof(property)); - property.diph.dwSize = sizeof(property); - property.diph.dwHeaderSize = sizeof(property.diph); - property.diph.dwHow = DIPH_DEVICE; - property.dwData = DIPROPAXISMODE_ABS; - - result = m_device->SetProperty(DIPROP_AXISMODE, &property.diph); - - if (result) - { - err() << "Failed to set DirectInput device axis mode: " << result << std::endl; - - m_device->Release(); - m_device = NULL; - - return false; - } - // Enumerate device objects (axes/povs/buttons) result = m_device->EnumObjects(&JoystickImpl::deviceObjectEnumerationCallback, this, DIDFT_AXIS | DIDFT_BUTTON | DIDFT_POV); - if (result) + if (FAILED(result)) { err() << "Failed to enumerate DirectInput device objects: " << result << std::endl; @@ -641,29 +705,116 @@ bool JoystickImpl::openDInput(unsigned int index) return false; } - // Get friendly product name of the device - DIPROPSTRING stringProperty; - std::memset(&stringProperty, 0, sizeof(stringProperty)); - stringProperty.diph.dwSize = sizeof(stringProperty); - stringProperty.diph.dwHeaderSize = sizeof(stringProperty.diph); - stringProperty.diph.dwHow = DIPH_DEVICE; - stringProperty.diph.dwObj = 0; - - if (!m_device->GetProperty(DIPROP_PRODUCTNAME, &stringProperty.diph)) + // Set device's axis mode to absolute if the device reports having at least one axis + for (int i = 0; i < Joystick::AxisCount; ++i) { - m_identification.name = stringProperty.wsz; + if (m_axes[i] != -1) + { + std::memset(&property, 0, sizeof(property)); + property.diph.dwSize = sizeof(property); + property.diph.dwHeaderSize = sizeof(property.diph); + property.diph.dwHow = DIPH_DEVICE; + property.diph.dwObj = 0; + + result = m_device->GetProperty(DIPROP_AXISMODE, &property.diph); + + if (FAILED(result)) + { + err() << "Failed to get DirectInput device axis mode for device \"" + << m_identification.name.toAnsiString() << "\": " << result << std::endl; + + m_device->Release(); + m_device = NULL; + + return false; + } + + // If the axis mode is already set to absolute we don't need to set it again ourselves + if (property.dwData == DIPROPAXISMODE_ABS) + break; + + std::memset(&property, 0, sizeof(property)); + property.diph.dwSize = sizeof(property); + property.diph.dwHeaderSize = sizeof(property.diph); + property.diph.dwHow = DIPH_DEVICE; + property.dwData = DIPROPAXISMODE_ABS; + + m_device->SetProperty(DIPROP_AXISMODE, &property.diph); + + // Check if the axis mode has been set to absolute + std::memset(&property, 0, sizeof(property)); + property.diph.dwSize = sizeof(property); + property.diph.dwHeaderSize = sizeof(property.diph); + property.diph.dwHow = DIPH_DEVICE; + property.diph.dwObj = 0; + + result = m_device->GetProperty(DIPROP_AXISMODE, &property.diph); + + if (FAILED(result)) + { + err() << "Failed to verify DirectInput device axis mode for device \"" + << m_identification.name.toAnsiString() << "\": " << result << std::endl; + + m_device->Release(); + m_device = NULL; + + return false; + } + + // If the axis mode hasn't been set to absolute fail here and blacklist the device + if (property.dwData != DIPROPAXISMODE_ABS) + { + if (m_identification.vendorId && m_identification.productId) + { + JoystickBlacklistEntry entry; + + entry.vendorId = m_identification.vendorId; + entry.productId = m_identification.productId; + + joystickBlacklist.push_back(entry); + + // Pre-C++11 shrink_to_fit() + JoystickBlacklist(joystickBlacklist.begin(), joystickBlacklist.end()).swap(joystickBlacklist); + } + + m_device->Release(); + m_device = NULL; + + return false; + } + + break; + } } - // Get vendor and produce id of the device + // Try to enable buffering by setting the buffer size std::memset(&property, 0, sizeof(property)); property.diph.dwSize = sizeof(property); property.diph.dwHeaderSize = sizeof(property.diph); property.diph.dwHow = DIPH_DEVICE; + property.dwData = directInputEventBufferSize; - if (!m_device->GetProperty(DIPROP_VIDPID, &property.diph)) + result = m_device->SetProperty(DIPROP_BUFFERSIZE, &property.diph); + + if (result == DI_OK) { - m_identification.productId = HIWORD(property.dwData); - m_identification.vendorId = LOWORD(property.dwData); + // Buffering supported + m_buffered = true; + } + else if (result == DI_POLLEDDEVICE) + { + // Only polling supported + m_buffered = false; + } + else + { + err() << "Failed to set DirectInput device buffer size for device \"" + << m_identification.name.toAnsiString() << "\": " << result << std::endl; + + m_device->Release(); + m_device = NULL; + + return false; } return true; @@ -709,7 +860,113 @@ JoystickCaps JoystickImpl::getCapabilitiesDInput() const //////////////////////////////////////////////////////////// -JoystickState JoystickImpl::updateDInput() +JoystickState JoystickImpl::updateDInputBuffered() +{ + // If we don't make it to the end of this function, mark the device as disconnected + m_state.connected = false; + + if (!m_device) + return m_state; + + DIDEVICEOBJECTDATA events[directInputEventBufferSize]; + DWORD eventCount = directInputEventBufferSize; + + // Try to get the device data + HRESULT result = m_device->GetDeviceData(sizeof(DIDEVICEOBJECTDATA), events, &eventCount, 0); + + // If we have not acquired or have lost the device, attempt to (re-)acquire it and get the device data again + if ((result == DIERR_NOTACQUIRED) || (result == DIERR_INPUTLOST)) + { + m_device->Acquire(); + result = m_device->GetDeviceData(sizeof(DIDEVICEOBJECTDATA), events, &eventCount, 0); + } + + // If we still can't get the device data, assume it has been disconnected + if ((result == DIERR_NOTACQUIRED) || (result == DIERR_INPUTLOST)) + { + m_device->Release(); + m_device = NULL; + + return m_state; + } + + if (FAILED(result)) + { + err() << "Failed to get DirectInput device data: " << result << std::endl; + + return m_state; + } + + // Iterate through all buffered events + for (DWORD i = 0; i < eventCount; ++i) + { + bool eventHandled = false; + + // Get the current state of each axis + for (int j = 0; j < Joystick::AxisCount; ++j) + { + if (m_axes[j] == events[i].dwOfs) + { + if (j == Joystick::PovX) + { + unsigned short value = LOWORD(events[i].dwData); + + if (value != 0xFFFF) + { + float angle = (static_cast(value)) * 3.141592654f / DI_DEGREES / 180.f; + + m_state.axes[j] = std::sin(angle) * 100.f; + } + else + { + m_state.axes[j] = 0; + } + } + else if (j == Joystick::PovY) + { + unsigned short value = LOWORD(events[i].dwData); + + if (value != 0xFFFF) + { + float angle = (static_cast(value)) * 3.141592654f / DI_DEGREES / 180.f; + + m_state.axes[j] = std::cos(angle) * 100.f; + } + else + { + m_state.axes[j] = 0.f; + } + } + else + { + m_state.axes[j] = (static_cast(static_cast(events[i].dwData)) + 0.5f) * 100.f / 32767.5f; + } + + eventHandled = true; + + break; + } + } + + if (eventHandled) + continue; + + // Get the current state of each button + for (int j = 0; j < Joystick::ButtonCount; ++j) + { + if (m_buttons[j] == events[i].dwOfs) + m_state.buttons[j] = (events[i].dwData != 0); + } + } + + m_state.connected = true; + + return m_state; +} + + +//////////////////////////////////////////////////////////// +JoystickState JoystickImpl::updateDInputPolled() { JoystickState state; @@ -718,7 +975,7 @@ JoystickState JoystickImpl::updateDInput() // Poll the device m_device->Poll(); - DIJOYSTATE joystate; + DIJOYSTATE2 joystate; // Try to get the device state HRESULT result = m_device->GetDeviceState(sizeof(joystate), &joystate); @@ -740,7 +997,7 @@ JoystickState JoystickImpl::updateDInput() return state; } - if (result) + if (FAILED(result)) { err() << "Failed to get DirectInput device state: " << result << std::endl; @@ -878,7 +1135,7 @@ BOOL CALLBACK JoystickImpl::deviceObjectEnumerationCallback(const DIDEVICEOBJECT HRESULT result = joystick.m_device->SetProperty(DIPROP_RANGE, &propertyRange.diph); - if (result) + if (result != DI_OK) err() << "Failed to set DirectInput device axis property range: " << result << std::endl; return DIENUM_CONTINUE; diff --git a/src/SFML/Window/Win32/JoystickImpl.hpp b/src/SFML/Window/Win32/JoystickImpl.hpp index 66175058..ffff8c33 100644 --- a/src/SFML/Window/Win32/JoystickImpl.hpp +++ b/src/SFML/Window/Win32/JoystickImpl.hpp @@ -186,12 +186,20 @@ public: JoystickCaps getCapabilitiesDInput() const; //////////////////////////////////////////////////////////// - /// \brief Update the joystick and get its new state (DInput) + /// \brief Update the joystick and get its new state (DInput, Buffered) /// /// \return Joystick state /// //////////////////////////////////////////////////////////// - JoystickState updateDInput(); + JoystickState updateDInputBuffered(); + + //////////////////////////////////////////////////////////// + /// \brief Update the joystick and get its new state (DInput, Polled) + /// + /// \return Joystick state + /// + //////////////////////////////////////////////////////////// + JoystickState updateDInputPolled(); private: @@ -227,6 +235,8 @@ private: int m_axes[Joystick::AxisCount]; //!< Offsets to the bytes containing the axes states, -1 if not available int m_buttons[Joystick::ButtonCount]; //!< Offsets to the bytes containing the button states, -1 if not available Joystick::Identification m_identification; //!< Joystick identification + JoystickState m_state; //!< Buffered joystick state + bool m_buffered; //!< true if the device uses buffering, false if the device uses polling }; } // namespace priv From 241b542ca30751e9283230288b4d704fe3e80981 Mon Sep 17 00:00:00 2001 From: Bruno Van de Velde Date: Sat, 18 Jul 2020 10:13:49 +0200 Subject: [PATCH 44/59] Added XFlush call to WindowImplX11::setMouseCursor --- src/SFML/Window/Unix/WindowImplX11.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/SFML/Window/Unix/WindowImplX11.cpp b/src/SFML/Window/Unix/WindowImplX11.cpp index fa0cfc43..1b2e78b9 100644 --- a/src/SFML/Window/Unix/WindowImplX11.cpp +++ b/src/SFML/Window/Unix/WindowImplX11.cpp @@ -1112,6 +1112,7 @@ void WindowImplX11::setMouseCursor(const CursorImpl& cursor) { m_lastCursor = cursor.m_cursor; XDefineCursor(m_display, m_window, m_lastCursor); + XFlush(m_display); } From 5eea8032dbc0d7f6030a3104e886975bf96f6c9e Mon Sep 17 00:00:00 2001 From: mcz <57645227+czateusz@users.noreply.github.com> Date: Mon, 31 Aug 2020 20:48:35 +0200 Subject: [PATCH 45/59] replace dead link in Config.hpp file replace dead link with working link containing information about predefined macros --- include/SFML/Config.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/SFML/Config.hpp b/include/SFML/Config.hpp index 70b4a92d..c4e2f497 100644 --- a/include/SFML/Config.hpp +++ b/include/SFML/Config.hpp @@ -36,7 +36,7 @@ //////////////////////////////////////////////////////////// // Identify the operating system -// see http://nadeausoftware.com/articles/2012/01/c_c_tip_how_use_compiler_predefined_macros_detect_operating_system +// see https://sourceforge.net/p/predef/wiki/Home/ //////////////////////////////////////////////////////////// #if defined(_WIN32) From d4ebba3aafa00e74a39872325281799637413825 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20D=C3=BCrrenberger?= Date: Sat, 12 Sep 2020 13:24:18 +0200 Subject: [PATCH 46/59] Add Visual Studio 2019 builds to Travis --- .travis.yml | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4ae82936..5d6d646b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,7 +14,7 @@ addons: before_script: - mkdir build && cd build -- cmake .. $CMAKE_FLAGS -DCMAKE_INSTALL_PREFIX=../install -DSFML_BUILD_EXAMPLES=TRUE +- cmake .. $CMAKE_FLAGS -DCMAKE_INSTALL_PREFIX=../install -DSFML_BUILD_EXAMPLES=TRUE -DCMAKE_VERBOSE_MAKEFILE=ON script: - cmake --build . --target install @@ -74,16 +74,38 @@ matrix: env: - CMAKE_FLAGS="-GXcode -DSFML_BUILD_TEST_SUITE=TRUE -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/iOS.toolchain.cmake -DIOS_PLATFORM=SIMULATOR" - - name: "Visual studio 15 2017 Dynamic" + - name: "Visual Studio 15 2017 Dynamic" os: windows env: - CMAKE_FLAGS="-DSFML_BUILD_TEST_SUITE=FALSE" - - name: "Visual studio 15 2017 Static" + - name: "Visual Studio 15 2017 Static" os: windows env: - CMAKE_FLAGS="-DBUILD_SHARED_LIBS=FALSE -DSFML_BUILD_TEST_SUITE=TRUE" + - name: "Visual Studio 16 2019 Dynamic" + os: windows + env: + - CMAKE_FLAGS="-DSFML_BUILD_TEST_SUITE=FALSE" + - MSBUILD_PATH="C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin" + - VS160COMNTOOLS="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools" + - PATH=$MSBUILD_PATH:$PATH + install: + - choco install visualstudio2019buildtools --package-parameters "--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64" + - choco install visualstudio2019-workload-nativedesktop + + - name: "Visual Studio 16 2019 Static" + os: windows + env: + - CMAKE_FLAGS="-DBUILD_SHARED_LIBS=FALSE -DSFML_BUILD_TEST_SUITE=TRUE" + - MSBUILD_PATH="C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin" + - VS160COMNTOOLS="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools" + - PATH=$MSBUILD_PATH:$PATH + install: + - choco install visualstudio2019buildtools --package-parameters "--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64" + - choco install visualstudio2019-workload-nativedesktop + - name: "Android armeabi-v7a" language: android android: &androidComponents From 9b596cc8d9240b240c391abb8c784fddbec4e0df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20D=C3=BCrrenberger?= Date: Sat, 12 Sep 2020 15:27:45 +0200 Subject: [PATCH 47/59] Update the copyright year to 2020 --- examples/cocoa/CocoaAppDelegate.h | 2 +- examples/cocoa/CocoaAppDelegate.mm | 2 +- examples/cocoa/NSString+stdstring.h | 2 +- examples/cocoa/NSString+stdstring.mm | 2 +- examples/cocoa/main.m | 2 +- examples/cocoa/resources/Cocoa-Info.plist | 2 +- include/SFML/Audio.hpp | 2 +- include/SFML/Audio/AlResource.hpp | 2 +- include/SFML/Audio/Export.hpp | 2 +- include/SFML/Audio/InputSoundFile.hpp | 2 +- include/SFML/Audio/Listener.hpp | 2 +- include/SFML/Audio/Music.hpp | 2 +- include/SFML/Audio/OutputSoundFile.hpp | 2 +- include/SFML/Audio/Sound.hpp | 2 +- include/SFML/Audio/SoundBuffer.hpp | 2 +- include/SFML/Audio/SoundBufferRecorder.hpp | 2 +- include/SFML/Audio/SoundFileFactory.hpp | 2 +- include/SFML/Audio/SoundFileFactory.inl | 2 +- include/SFML/Audio/SoundFileReader.hpp | 2 +- include/SFML/Audio/SoundFileWriter.hpp | 2 +- include/SFML/Audio/SoundRecorder.hpp | 2 +- include/SFML/Audio/SoundSource.hpp | 2 +- include/SFML/Audio/SoundStream.hpp | 2 +- include/SFML/Config.hpp | 2 +- include/SFML/GpuPreference.hpp | 2 +- include/SFML/Graphics.hpp | 2 +- include/SFML/Graphics/BlendMode.hpp | 2 +- include/SFML/Graphics/CircleShape.hpp | 2 +- include/SFML/Graphics/Color.hpp | 2 +- include/SFML/Graphics/ConvexShape.hpp | 2 +- include/SFML/Graphics/Drawable.hpp | 2 +- include/SFML/Graphics/Export.hpp | 2 +- include/SFML/Graphics/Font.hpp | 2 +- include/SFML/Graphics/Glsl.hpp | 2 +- include/SFML/Graphics/Glsl.inl | 2 +- include/SFML/Graphics/Glyph.hpp | 2 +- include/SFML/Graphics/Image.hpp | 2 +- include/SFML/Graphics/PrimitiveType.hpp | 2 +- include/SFML/Graphics/Rect.hpp | 2 +- include/SFML/Graphics/Rect.inl | 2 +- include/SFML/Graphics/RectangleShape.hpp | 2 +- include/SFML/Graphics/RenderStates.hpp | 2 +- include/SFML/Graphics/RenderTarget.hpp | 2 +- include/SFML/Graphics/RenderTexture.hpp | 2 +- include/SFML/Graphics/RenderWindow.hpp | 2 +- include/SFML/Graphics/Shader.hpp | 2 +- include/SFML/Graphics/Shape.hpp | 2 +- include/SFML/Graphics/Sprite.hpp | 2 +- include/SFML/Graphics/Text.hpp | 2 +- include/SFML/Graphics/Texture.hpp | 2 +- include/SFML/Graphics/Transform.hpp | 2 +- include/SFML/Graphics/Transformable.hpp | 2 +- include/SFML/Graphics/Vertex.hpp | 2 +- include/SFML/Graphics/VertexArray.hpp | 2 +- include/SFML/Graphics/VertexBuffer.hpp | 2 +- include/SFML/Graphics/View.hpp | 2 +- include/SFML/Main.hpp | 2 +- include/SFML/Network.hpp | 2 +- include/SFML/Network/Export.hpp | 2 +- include/SFML/Network/Ftp.hpp | 2 +- include/SFML/Network/Http.hpp | 2 +- include/SFML/Network/IpAddress.hpp | 2 +- include/SFML/Network/Packet.hpp | 2 +- include/SFML/Network/Socket.hpp | 2 +- include/SFML/Network/SocketHandle.hpp | 2 +- include/SFML/Network/SocketSelector.hpp | 2 +- include/SFML/Network/TcpListener.hpp | 2 +- include/SFML/Network/TcpSocket.hpp | 2 +- include/SFML/Network/UdpSocket.hpp | 2 +- include/SFML/OpenGL.hpp | 2 +- include/SFML/System.hpp | 2 +- include/SFML/System/Clock.hpp | 2 +- include/SFML/System/Err.hpp | 2 +- include/SFML/System/Export.hpp | 2 +- include/SFML/System/FileInputStream.hpp | 2 +- include/SFML/System/InputStream.hpp | 2 +- include/SFML/System/Lock.hpp | 2 +- include/SFML/System/MemoryInputStream.hpp | 2 +- include/SFML/System/Mutex.hpp | 2 +- include/SFML/System/NativeActivity.hpp | 2 +- include/SFML/System/NonCopyable.hpp | 2 +- include/SFML/System/Sleep.hpp | 2 +- include/SFML/System/String.hpp | 2 +- include/SFML/System/String.inl | 2 +- include/SFML/System/Thread.hpp | 2 +- include/SFML/System/Thread.inl | 2 +- include/SFML/System/ThreadLocal.hpp | 2 +- include/SFML/System/ThreadLocalPtr.hpp | 2 +- include/SFML/System/ThreadLocalPtr.inl | 2 +- include/SFML/System/Time.hpp | 2 +- include/SFML/System/Utf.hpp | 2 +- include/SFML/System/Utf.inl | 2 +- include/SFML/System/Vector2.hpp | 2 +- include/SFML/System/Vector2.inl | 2 +- include/SFML/System/Vector3.hpp | 2 +- include/SFML/System/Vector3.inl | 2 +- include/SFML/Window.hpp | 2 +- include/SFML/Window/Clipboard.hpp | 2 +- include/SFML/Window/Context.hpp | 2 +- include/SFML/Window/ContextSettings.hpp | 2 +- include/SFML/Window/Cursor.hpp | 2 +- include/SFML/Window/Event.hpp | 2 +- include/SFML/Window/Export.hpp | 2 +- include/SFML/Window/GlResource.hpp | 2 +- include/SFML/Window/Joystick.hpp | 2 +- include/SFML/Window/Keyboard.hpp | 2 +- include/SFML/Window/Mouse.hpp | 2 +- include/SFML/Window/Sensor.hpp | 2 +- include/SFML/Window/Touch.hpp | 2 +- include/SFML/Window/VideoMode.hpp | 2 +- include/SFML/Window/Vulkan.hpp | 2 +- include/SFML/Window/Window.hpp | 2 +- include/SFML/Window/WindowBase.hpp | 2 +- include/SFML/Window/WindowHandle.hpp | 2 +- include/SFML/Window/WindowStyle.hpp | 2 +- license.md | 2 +- src/SFML/Audio/ALCheck.cpp | 2 +- src/SFML/Audio/ALCheck.hpp | 2 +- src/SFML/Audio/AlResource.cpp | 2 +- src/SFML/Audio/AudioDevice.cpp | 2 +- src/SFML/Audio/AudioDevice.hpp | 2 +- src/SFML/Audio/InputSoundFile.cpp | 2 +- src/SFML/Audio/Listener.cpp | 2 +- src/SFML/Audio/Music.cpp | 2 +- src/SFML/Audio/OutputSoundFile.cpp | 2 +- src/SFML/Audio/Sound.cpp | 2 +- src/SFML/Audio/SoundBuffer.cpp | 2 +- src/SFML/Audio/SoundBufferRecorder.cpp | 2 +- src/SFML/Audio/SoundFileFactory.cpp | 2 +- src/SFML/Audio/SoundFileReaderFlac.cpp | 2 +- src/SFML/Audio/SoundFileReaderFlac.hpp | 2 +- src/SFML/Audio/SoundFileReaderOgg.cpp | 2 +- src/SFML/Audio/SoundFileReaderOgg.hpp | 2 +- src/SFML/Audio/SoundFileReaderWav.cpp | 2 +- src/SFML/Audio/SoundFileReaderWav.hpp | 2 +- src/SFML/Audio/SoundFileWriterFlac.cpp | 2 +- src/SFML/Audio/SoundFileWriterFlac.hpp | 2 +- src/SFML/Audio/SoundFileWriterOgg.cpp | 2 +- src/SFML/Audio/SoundFileWriterOgg.hpp | 2 +- src/SFML/Audio/SoundFileWriterWav.cpp | 2 +- src/SFML/Audio/SoundFileWriterWav.hpp | 2 +- src/SFML/Audio/SoundRecorder.cpp | 2 +- src/SFML/Audio/SoundSource.cpp | 2 +- src/SFML/Audio/SoundStream.cpp | 2 +- src/SFML/Graphics/BlendMode.cpp | 2 +- src/SFML/Graphics/CircleShape.cpp | 2 +- src/SFML/Graphics/Color.cpp | 2 +- src/SFML/Graphics/ConvexShape.cpp | 2 +- src/SFML/Graphics/Font.cpp | 2 +- src/SFML/Graphics/GLCheck.cpp | 2 +- src/SFML/Graphics/GLCheck.hpp | 2 +- src/SFML/Graphics/GLExtensions.cpp | 2 +- src/SFML/Graphics/GLExtensions.hpp | 2 +- src/SFML/Graphics/Glsl.cpp | 2 +- src/SFML/Graphics/Image.cpp | 2 +- src/SFML/Graphics/ImageLoader.cpp | 2 +- src/SFML/Graphics/ImageLoader.hpp | 2 +- src/SFML/Graphics/RectangleShape.cpp | 2 +- src/SFML/Graphics/RenderStates.cpp | 2 +- src/SFML/Graphics/RenderTarget.cpp | 2 +- src/SFML/Graphics/RenderTexture.cpp | 2 +- src/SFML/Graphics/RenderTextureImpl.cpp | 2 +- src/SFML/Graphics/RenderTextureImpl.hpp | 2 +- src/SFML/Graphics/RenderTextureImplDefault.cpp | 2 +- src/SFML/Graphics/RenderTextureImplDefault.hpp | 2 +- src/SFML/Graphics/RenderTextureImplFBO.cpp | 2 +- src/SFML/Graphics/RenderTextureImplFBO.hpp | 2 +- src/SFML/Graphics/RenderWindow.cpp | 2 +- src/SFML/Graphics/Shader.cpp | 2 +- src/SFML/Graphics/Shape.cpp | 2 +- src/SFML/Graphics/Sprite.cpp | 2 +- src/SFML/Graphics/Text.cpp | 2 +- src/SFML/Graphics/Texture.cpp | 2 +- src/SFML/Graphics/TextureSaver.cpp | 2 +- src/SFML/Graphics/TextureSaver.hpp | 2 +- src/SFML/Graphics/Transform.cpp | 2 +- src/SFML/Graphics/Transformable.cpp | 2 +- src/SFML/Graphics/Vertex.cpp | 2 +- src/SFML/Graphics/VertexArray.cpp | 2 +- src/SFML/Graphics/VertexBuffer.cpp | 2 +- src/SFML/Graphics/View.cpp | 2 +- src/SFML/Main/MainAndroid.cpp | 2 +- src/SFML/Main/MainWin32.cpp | 2 +- src/SFML/Main/MainiOS.mm | 2 +- src/SFML/Network/Ftp.cpp | 2 +- src/SFML/Network/Http.cpp | 2 +- src/SFML/Network/IpAddress.cpp | 2 +- src/SFML/Network/Packet.cpp | 2 +- src/SFML/Network/Socket.cpp | 2 +- src/SFML/Network/SocketImpl.hpp | 2 +- src/SFML/Network/SocketSelector.cpp | 2 +- src/SFML/Network/TcpListener.cpp | 2 +- src/SFML/Network/TcpSocket.cpp | 2 +- src/SFML/Network/UdpSocket.cpp | 2 +- src/SFML/Network/Unix/SocketImpl.cpp | 2 +- src/SFML/Network/Unix/SocketImpl.hpp | 2 +- src/SFML/Network/Win32/SocketImpl.cpp | 2 +- src/SFML/Network/Win32/SocketImpl.hpp | 2 +- src/SFML/System/Android/Activity.cpp | 2 +- src/SFML/System/Android/NativeActivity.cpp | 2 +- src/SFML/System/Clock.cpp | 2 +- src/SFML/System/Err.cpp | 2 +- src/SFML/System/FileInputStream.cpp | 2 +- src/SFML/System/Lock.cpp | 2 +- src/SFML/System/MemoryInputStream.cpp | 2 +- src/SFML/System/Mutex.cpp | 2 +- src/SFML/System/Sleep.cpp | 2 +- src/SFML/System/String.cpp | 2 +- src/SFML/System/Thread.cpp | 2 +- src/SFML/System/ThreadLocal.cpp | 2 +- src/SFML/System/Time.cpp | 2 +- src/SFML/System/Unix/ClockImpl.cpp | 2 +- src/SFML/System/Unix/ClockImpl.hpp | 2 +- src/SFML/System/Unix/MutexImpl.cpp | 2 +- src/SFML/System/Unix/MutexImpl.hpp | 2 +- src/SFML/System/Unix/SleepImpl.cpp | 2 +- src/SFML/System/Unix/SleepImpl.hpp | 2 +- src/SFML/System/Unix/ThreadImpl.cpp | 2 +- src/SFML/System/Unix/ThreadImpl.hpp | 2 +- src/SFML/System/Unix/ThreadLocalImpl.cpp | 2 +- src/SFML/System/Unix/ThreadLocalImpl.hpp | 2 +- src/SFML/System/Win32/ClockImpl.cpp | 2 +- src/SFML/System/Win32/ClockImpl.hpp | 2 +- src/SFML/System/Win32/MutexImpl.cpp | 2 +- src/SFML/System/Win32/MutexImpl.hpp | 2 +- src/SFML/System/Win32/SleepImpl.cpp | 2 +- src/SFML/System/Win32/SleepImpl.hpp | 2 +- src/SFML/System/Win32/ThreadImpl.cpp | 2 +- src/SFML/System/Win32/ThreadImpl.hpp | 2 +- src/SFML/System/Win32/ThreadLocalImpl.cpp | 2 +- src/SFML/System/Win32/ThreadLocalImpl.hpp | 2 +- src/SFML/Window/Android/ClipboardImpl.cpp | 2 +- src/SFML/Window/Android/ClipboardImpl.hpp | 2 +- src/SFML/Window/Android/CursorImpl.cpp | 2 +- src/SFML/Window/Android/CursorImpl.hpp | 2 +- src/SFML/Window/Android/SensorImpl.cpp | 2 +- src/SFML/Window/Android/SensorImpl.hpp | 2 +- src/SFML/Window/Clipboard.cpp | 2 +- src/SFML/Window/ClipboardImpl.hpp | 2 +- src/SFML/Window/Context.cpp | 2 +- src/SFML/Window/Cursor.cpp | 2 +- src/SFML/Window/CursorImpl.hpp | 2 +- src/SFML/Window/FreeBSD/JoystickImpl.cpp | 2 +- src/SFML/Window/FreeBSD/JoystickImpl.hpp | 2 +- src/SFML/Window/GlContext.cpp | 2 +- src/SFML/Window/GlContext.hpp | 2 +- src/SFML/Window/GlResource.cpp | 2 +- src/SFML/Window/InputImpl.hpp | 2 +- src/SFML/Window/Joystick.cpp | 2 +- src/SFML/Window/JoystickImpl.hpp | 2 +- src/SFML/Window/JoystickManager.cpp | 2 +- src/SFML/Window/JoystickManager.hpp | 2 +- src/SFML/Window/Keyboard.cpp | 2 +- src/SFML/Window/Mouse.cpp | 2 +- src/SFML/Window/OSX/AutoreleasePoolWrapper.h | 2 +- src/SFML/Window/OSX/AutoreleasePoolWrapper.mm | 2 +- src/SFML/Window/OSX/ClipboardImpl.hpp | 2 +- src/SFML/Window/OSX/ClipboardImpl.mm | 2 +- src/SFML/Window/OSX/CursorImpl.hpp | 2 +- src/SFML/Window/OSX/CursorImpl.mm | 2 +- src/SFML/Window/OSX/HIDInputManager.hpp | 2 +- src/SFML/Window/OSX/HIDInputManager.mm | 2 +- src/SFML/Window/OSX/HIDJoystickManager.cpp | 2 +- src/SFML/Window/OSX/HIDJoystickManager.hpp | 2 +- src/SFML/Window/OSX/InputImpl.hpp | 2 +- src/SFML/Window/OSX/InputImpl.mm | 2 +- src/SFML/Window/OSX/JoystickImpl.cpp | 2 +- src/SFML/Window/OSX/JoystickImpl.hpp | 2 +- src/SFML/Window/OSX/NSImage+raw.h | 2 +- src/SFML/Window/OSX/NSImage+raw.mm | 2 +- src/SFML/Window/OSX/SFApplication.h | 2 +- src/SFML/Window/OSX/SFApplication.m | 2 +- src/SFML/Window/OSX/SFApplicationDelegate.h | 2 +- src/SFML/Window/OSX/SFApplicationDelegate.m | 2 +- src/SFML/Window/OSX/SFContext.hpp | 2 +- src/SFML/Window/OSX/SFContext.mm | 2 +- src/SFML/Window/OSX/SFKeyboardModifiersHelper.h | 2 +- src/SFML/Window/OSX/SFKeyboardModifiersHelper.mm | 2 +- src/SFML/Window/OSX/SFOpenGLView+keyboard.mm | 2 +- src/SFML/Window/OSX/SFOpenGLView+keyboard_priv.h | 2 +- src/SFML/Window/OSX/SFOpenGLView+mouse.mm | 2 +- src/SFML/Window/OSX/SFOpenGLView+mouse_priv.h | 2 +- src/SFML/Window/OSX/SFOpenGLView.h | 2 +- src/SFML/Window/OSX/SFOpenGLView.mm | 2 +- src/SFML/Window/OSX/SFSilentResponder.h | 2 +- src/SFML/Window/OSX/SFSilentResponder.m | 2 +- src/SFML/Window/OSX/SFViewController.h | 2 +- src/SFML/Window/OSX/SFViewController.mm | 2 +- src/SFML/Window/OSX/SFWindow.h | 2 +- src/SFML/Window/OSX/SFWindow.m | 2 +- src/SFML/Window/OSX/SFWindowController.h | 2 +- src/SFML/Window/OSX/SFWindowController.mm | 2 +- src/SFML/Window/OSX/Scaling.h | 2 +- src/SFML/Window/OSX/SensorImpl.cpp | 2 +- src/SFML/Window/OSX/SensorImpl.hpp | 2 +- src/SFML/Window/OSX/VideoModeImpl.cpp | 2 +- src/SFML/Window/OSX/WindowImplCocoa.hpp | 2 +- src/SFML/Window/OSX/WindowImplCocoa.mm | 2 +- src/SFML/Window/OSX/WindowImplDelegateProtocol.h | 2 +- src/SFML/Window/OSX/cg_sf_conversion.hpp | 2 +- src/SFML/Window/OSX/cg_sf_conversion.mm | 2 +- src/SFML/Window/OSX/cpp_objc_conversion.h | 2 +- src/SFML/Window/OSX/cpp_objc_conversion.mm | 2 +- src/SFML/Window/Sensor.cpp | 2 +- src/SFML/Window/SensorImpl.hpp | 2 +- src/SFML/Window/SensorManager.cpp | 2 +- src/SFML/Window/SensorManager.hpp | 2 +- src/SFML/Window/Touch.cpp | 2 +- src/SFML/Window/Unix/ClipboardImpl.cpp | 2 +- src/SFML/Window/Unix/ClipboardImpl.hpp | 2 +- src/SFML/Window/Unix/CursorImpl.cpp | 2 +- src/SFML/Window/Unix/CursorImpl.hpp | 2 +- src/SFML/Window/Unix/Display.cpp | 2 +- src/SFML/Window/Unix/Display.hpp | 2 +- src/SFML/Window/Unix/GlxContext.cpp | 2 +- src/SFML/Window/Unix/GlxContext.hpp | 2 +- src/SFML/Window/Unix/InputImpl.cpp | 2 +- src/SFML/Window/Unix/InputImpl.hpp | 2 +- src/SFML/Window/Unix/JoystickImpl.cpp | 2 +- src/SFML/Window/Unix/JoystickImpl.hpp | 2 +- src/SFML/Window/Unix/SensorImpl.cpp | 2 +- src/SFML/Window/Unix/SensorImpl.hpp | 2 +- src/SFML/Window/Unix/VideoModeImpl.cpp | 2 +- src/SFML/Window/Unix/VulkanImplX11.cpp | 2 +- src/SFML/Window/Unix/VulkanImplX11.hpp | 2 +- src/SFML/Window/Unix/WindowImplX11.cpp | 2 +- src/SFML/Window/Unix/WindowImplX11.hpp | 2 +- src/SFML/Window/VideoMode.cpp | 2 +- src/SFML/Window/VideoModeImpl.hpp | 2 +- src/SFML/Window/Vulkan.cpp | 2 +- src/SFML/Window/Win32/ClipboardImpl.cpp | 2 +- src/SFML/Window/Win32/ClipboardImpl.hpp | 2 +- src/SFML/Window/Win32/CursorImpl.cpp | 2 +- src/SFML/Window/Win32/CursorImpl.hpp | 2 +- src/SFML/Window/Win32/InputImpl.cpp | 2 +- src/SFML/Window/Win32/InputImpl.hpp | 2 +- src/SFML/Window/Win32/JoystickImpl.cpp | 2 +- src/SFML/Window/Win32/JoystickImpl.hpp | 2 +- src/SFML/Window/Win32/SensorImpl.cpp | 2 +- src/SFML/Window/Win32/SensorImpl.hpp | 2 +- src/SFML/Window/Win32/VideoModeImpl.cpp | 2 +- src/SFML/Window/Win32/VulkanImplWin32.cpp | 2 +- src/SFML/Window/Win32/VulkanImplWin32.hpp | 2 +- src/SFML/Window/Win32/WglContext.cpp | 2 +- src/SFML/Window/Win32/WglContext.hpp | 2 +- src/SFML/Window/Win32/WindowImplWin32.cpp | 2 +- src/SFML/Window/Win32/WindowImplWin32.hpp | 2 +- src/SFML/Window/Window.cpp | 2 +- src/SFML/Window/WindowBase.cpp | 2 +- src/SFML/Window/WindowImpl.cpp | 2 +- src/SFML/Window/WindowImpl.hpp | 2 +- src/SFML/Window/iOS/ClipboardImpl.hpp | 2 +- src/SFML/Window/iOS/ClipboardImpl.mm | 2 +- src/SFML/Window/iOS/CursorImpl.cpp | 2 +- src/SFML/Window/iOS/CursorImpl.hpp | 2 +- src/SFML/Window/iOS/EaglContext.hpp | 2 +- src/SFML/Window/iOS/EaglContext.mm | 2 +- src/SFML/Window/iOS/InputImpl.hpp | 2 +- src/SFML/Window/iOS/InputImpl.mm | 2 +- src/SFML/Window/iOS/JoystickImpl.hpp | 2 +- src/SFML/Window/iOS/JoystickImpl.mm | 2 +- src/SFML/Window/iOS/ObjCType.hpp | 2 +- src/SFML/Window/iOS/SFAppDelegate.hpp | 2 +- src/SFML/Window/iOS/SFAppDelegate.mm | 2 +- src/SFML/Window/iOS/SFMain.hpp | 2 +- src/SFML/Window/iOS/SFMain.mm | 2 +- src/SFML/Window/iOS/SFView.hpp | 2 +- src/SFML/Window/iOS/SFView.mm | 2 +- src/SFML/Window/iOS/SFViewController.hpp | 2 +- src/SFML/Window/iOS/SFViewController.mm | 2 +- src/SFML/Window/iOS/SensorImpl.hpp | 2 +- src/SFML/Window/iOS/SensorImpl.mm | 2 +- src/SFML/Window/iOS/VideoModeImpl.mm | 2 +- src/SFML/Window/iOS/WindowImplUIKit.hpp | 2 +- src/SFML/Window/iOS/WindowImplUIKit.mm | 2 +- tools/xcode/templates/SFML/SFML App.xctemplate/ResourcePath.hpp | 2 +- tools/xcode/templates/SFML/SFML App.xctemplate/ResourcePath.mm | 2 +- .../templates/SFML/SFML App.xctemplate/TemplateInfo.plist.in | 2 +- .../templates/SFML/SFML Base.xctemplate/TemplateInfo.plist | 2 +- .../templates/SFML/SFML Bundle.xctemplate/TemplateInfo.plist | 2 +- .../xcode/templates/SFML/SFML CLT.xctemplate/TemplateInfo.plist | 2 +- .../SFML/SFML Compiler.xctemplate/TemplateInfo.plist.in | 2 +- .../templates/SFML/SFML Linker.xctemplate/TemplateInfo.plist | 2 +- 383 files changed, 383 insertions(+), 383 deletions(-) diff --git a/examples/cocoa/CocoaAppDelegate.h b/examples/cocoa/CocoaAppDelegate.h index 1a21572f..389e94b7 100644 --- a/examples/cocoa/CocoaAppDelegate.h +++ b/examples/cocoa/CocoaAppDelegate.h @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/examples/cocoa/CocoaAppDelegate.mm b/examples/cocoa/CocoaAppDelegate.mm index d264000c..bfb0dff1 100644 --- a/examples/cocoa/CocoaAppDelegate.mm +++ b/examples/cocoa/CocoaAppDelegate.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/examples/cocoa/NSString+stdstring.h b/examples/cocoa/NSString+stdstring.h index fa3df095..4d1d2f5a 100644 --- a/examples/cocoa/NSString+stdstring.h +++ b/examples/cocoa/NSString+stdstring.h @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/examples/cocoa/NSString+stdstring.mm b/examples/cocoa/NSString+stdstring.mm index 4958ae7d..59d147d0 100644 --- a/examples/cocoa/NSString+stdstring.mm +++ b/examples/cocoa/NSString+stdstring.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/examples/cocoa/main.m b/examples/cocoa/main.m index 209a86bf..03da8ce5 100644 --- a/examples/cocoa/main.m +++ b/examples/cocoa/main.m @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/examples/cocoa/resources/Cocoa-Info.plist b/examples/cocoa/resources/Cocoa-Info.plist index 7a7da9b9..1a937c30 100644 --- a/examples/cocoa/resources/Cocoa-Info.plist +++ b/examples/cocoa/resources/Cocoa-Info.plist @@ -25,7 +25,7 @@ LSMinimumSystemVersion 10.6 NSHumanReadableCopyright - Copyright © 2007-2019 Marco Antognini and Laurent Gomila. Shared under zlib/libpng License. + Copyright © 2007-2020 Marco Antognini and Laurent Gomila. Shared under zlib/libpng License. NSMainNibFile MainMenu NSPrincipalClass diff --git a/include/SFML/Audio.hpp b/include/SFML/Audio.hpp index f0b5b30a..68fe1a69 100644 --- a/include/SFML/Audio.hpp +++ b/include/SFML/Audio.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Audio/AlResource.hpp b/include/SFML/Audio/AlResource.hpp index 9f0f4dcd..f670c139 100644 --- a/include/SFML/Audio/AlResource.hpp +++ b/include/SFML/Audio/AlResource.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Audio/Export.hpp b/include/SFML/Audio/Export.hpp index bba990d9..c21ffb6e 100644 --- a/include/SFML/Audio/Export.hpp +++ b/include/SFML/Audio/Export.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Audio/InputSoundFile.hpp b/include/SFML/Audio/InputSoundFile.hpp index f4000d4c..4c9eb951 100644 --- a/include/SFML/Audio/InputSoundFile.hpp +++ b/include/SFML/Audio/InputSoundFile.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Audio/Listener.hpp b/include/SFML/Audio/Listener.hpp index f14beda2..569eb912 100644 --- a/include/SFML/Audio/Listener.hpp +++ b/include/SFML/Audio/Listener.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Audio/Music.hpp b/include/SFML/Audio/Music.hpp index 732eb42b..bbe84c89 100644 --- a/include/SFML/Audio/Music.hpp +++ b/include/SFML/Audio/Music.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Audio/OutputSoundFile.hpp b/include/SFML/Audio/OutputSoundFile.hpp index c8f06260..6247ef0e 100644 --- a/include/SFML/Audio/OutputSoundFile.hpp +++ b/include/SFML/Audio/OutputSoundFile.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Audio/Sound.hpp b/include/SFML/Audio/Sound.hpp index a4a49835..909f4c16 100644 --- a/include/SFML/Audio/Sound.hpp +++ b/include/SFML/Audio/Sound.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Audio/SoundBuffer.hpp b/include/SFML/Audio/SoundBuffer.hpp index 8b965b6d..8b8391a5 100644 --- a/include/SFML/Audio/SoundBuffer.hpp +++ b/include/SFML/Audio/SoundBuffer.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Audio/SoundBufferRecorder.hpp b/include/SFML/Audio/SoundBufferRecorder.hpp index e14c4880..9e100d15 100644 --- a/include/SFML/Audio/SoundBufferRecorder.hpp +++ b/include/SFML/Audio/SoundBufferRecorder.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Audio/SoundFileFactory.hpp b/include/SFML/Audio/SoundFileFactory.hpp index b7d7c877..cae1f692 100644 --- a/include/SFML/Audio/SoundFileFactory.hpp +++ b/include/SFML/Audio/SoundFileFactory.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Audio/SoundFileFactory.inl b/include/SFML/Audio/SoundFileFactory.inl index e9794153..bbfa91f1 100644 --- a/include/SFML/Audio/SoundFileFactory.inl +++ b/include/SFML/Audio/SoundFileFactory.inl @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Audio/SoundFileReader.hpp b/include/SFML/Audio/SoundFileReader.hpp index 04fd5ff6..61dd998f 100644 --- a/include/SFML/Audio/SoundFileReader.hpp +++ b/include/SFML/Audio/SoundFileReader.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Audio/SoundFileWriter.hpp b/include/SFML/Audio/SoundFileWriter.hpp index 5e7ae016..ff90bab2 100644 --- a/include/SFML/Audio/SoundFileWriter.hpp +++ b/include/SFML/Audio/SoundFileWriter.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Audio/SoundRecorder.hpp b/include/SFML/Audio/SoundRecorder.hpp index ccbdca12..53cf73ad 100644 --- a/include/SFML/Audio/SoundRecorder.hpp +++ b/include/SFML/Audio/SoundRecorder.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Audio/SoundSource.hpp b/include/SFML/Audio/SoundSource.hpp index 02a3f5d5..ce795d67 100644 --- a/include/SFML/Audio/SoundSource.hpp +++ b/include/SFML/Audio/SoundSource.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Audio/SoundStream.hpp b/include/SFML/Audio/SoundStream.hpp index 6fbaea4d..31c6b9f3 100644 --- a/include/SFML/Audio/SoundStream.hpp +++ b/include/SFML/Audio/SoundStream.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Config.hpp b/include/SFML/Config.hpp index c4e2f497..3f282f2a 100644 --- a/include/SFML/Config.hpp +++ b/include/SFML/Config.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/GpuPreference.hpp b/include/SFML/GpuPreference.hpp index a05c5a1d..d0cd9adf 100644 --- a/include/SFML/GpuPreference.hpp +++ b/include/SFML/GpuPreference.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics.hpp b/include/SFML/Graphics.hpp index d0e0c8ff..191c83fc 100644 --- a/include/SFML/Graphics.hpp +++ b/include/SFML/Graphics.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/BlendMode.hpp b/include/SFML/Graphics/BlendMode.hpp index c2613cba..4f8462b8 100644 --- a/include/SFML/Graphics/BlendMode.hpp +++ b/include/SFML/Graphics/BlendMode.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/CircleShape.hpp b/include/SFML/Graphics/CircleShape.hpp index eba29c58..6f01c8d1 100644 --- a/include/SFML/Graphics/CircleShape.hpp +++ b/include/SFML/Graphics/CircleShape.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/Color.hpp b/include/SFML/Graphics/Color.hpp index 6771da13..6152b8c4 100644 --- a/include/SFML/Graphics/Color.hpp +++ b/include/SFML/Graphics/Color.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/ConvexShape.hpp b/include/SFML/Graphics/ConvexShape.hpp index 28b6f22b..45925651 100644 --- a/include/SFML/Graphics/ConvexShape.hpp +++ b/include/SFML/Graphics/ConvexShape.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/Drawable.hpp b/include/SFML/Graphics/Drawable.hpp index f03e5e0e..612a8203 100644 --- a/include/SFML/Graphics/Drawable.hpp +++ b/include/SFML/Graphics/Drawable.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/Export.hpp b/include/SFML/Graphics/Export.hpp index 1d9d6083..88e4358b 100644 --- a/include/SFML/Graphics/Export.hpp +++ b/include/SFML/Graphics/Export.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/Font.hpp b/include/SFML/Graphics/Font.hpp index 2e57c9b7..11ed5d87 100644 --- a/include/SFML/Graphics/Font.hpp +++ b/include/SFML/Graphics/Font.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/Glsl.hpp b/include/SFML/Graphics/Glsl.hpp index c395344e..6ea8694f 100644 --- a/include/SFML/Graphics/Glsl.hpp +++ b/include/SFML/Graphics/Glsl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/Glsl.inl b/include/SFML/Graphics/Glsl.inl index 610b41b0..4a839fdc 100644 --- a/include/SFML/Graphics/Glsl.inl +++ b/include/SFML/Graphics/Glsl.inl @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/Glyph.hpp b/include/SFML/Graphics/Glyph.hpp index f0b4deb1..9ee00175 100644 --- a/include/SFML/Graphics/Glyph.hpp +++ b/include/SFML/Graphics/Glyph.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/Image.hpp b/include/SFML/Graphics/Image.hpp index 570d4f11..f2a7518b 100644 --- a/include/SFML/Graphics/Image.hpp +++ b/include/SFML/Graphics/Image.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/PrimitiveType.hpp b/include/SFML/Graphics/PrimitiveType.hpp index 74e3c416..08b675e3 100644 --- a/include/SFML/Graphics/PrimitiveType.hpp +++ b/include/SFML/Graphics/PrimitiveType.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/Rect.hpp b/include/SFML/Graphics/Rect.hpp index 0342e5f3..d6cba3dd 100644 --- a/include/SFML/Graphics/Rect.hpp +++ b/include/SFML/Graphics/Rect.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/Rect.inl b/include/SFML/Graphics/Rect.inl index 1aa073dc..d996c604 100644 --- a/include/SFML/Graphics/Rect.inl +++ b/include/SFML/Graphics/Rect.inl @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/RectangleShape.hpp b/include/SFML/Graphics/RectangleShape.hpp index f2151768..b3375794 100644 --- a/include/SFML/Graphics/RectangleShape.hpp +++ b/include/SFML/Graphics/RectangleShape.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/RenderStates.hpp b/include/SFML/Graphics/RenderStates.hpp index 08ff6324..ed6c9131 100644 --- a/include/SFML/Graphics/RenderStates.hpp +++ b/include/SFML/Graphics/RenderStates.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/RenderTarget.hpp b/include/SFML/Graphics/RenderTarget.hpp index 29f411c3..58bb8c33 100644 --- a/include/SFML/Graphics/RenderTarget.hpp +++ b/include/SFML/Graphics/RenderTarget.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/RenderTexture.hpp b/include/SFML/Graphics/RenderTexture.hpp index 7d5f612f..0931ee7b 100644 --- a/include/SFML/Graphics/RenderTexture.hpp +++ b/include/SFML/Graphics/RenderTexture.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/RenderWindow.hpp b/include/SFML/Graphics/RenderWindow.hpp index 969cbf12..bf32e356 100644 --- a/include/SFML/Graphics/RenderWindow.hpp +++ b/include/SFML/Graphics/RenderWindow.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/Shader.hpp b/include/SFML/Graphics/Shader.hpp index 60fb7777..9ac485a4 100644 --- a/include/SFML/Graphics/Shader.hpp +++ b/include/SFML/Graphics/Shader.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/Shape.hpp b/include/SFML/Graphics/Shape.hpp index 087ef94e..44893cb5 100644 --- a/include/SFML/Graphics/Shape.hpp +++ b/include/SFML/Graphics/Shape.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/Sprite.hpp b/include/SFML/Graphics/Sprite.hpp index 56bea3e5..9581192e 100644 --- a/include/SFML/Graphics/Sprite.hpp +++ b/include/SFML/Graphics/Sprite.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/Text.hpp b/include/SFML/Graphics/Text.hpp index 25c6b462..8b1a093f 100644 --- a/include/SFML/Graphics/Text.hpp +++ b/include/SFML/Graphics/Text.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/Texture.hpp b/include/SFML/Graphics/Texture.hpp index 66035b45..0fbb0f9c 100644 --- a/include/SFML/Graphics/Texture.hpp +++ b/include/SFML/Graphics/Texture.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/Transform.hpp b/include/SFML/Graphics/Transform.hpp index e26c01cd..d46aeebb 100644 --- a/include/SFML/Graphics/Transform.hpp +++ b/include/SFML/Graphics/Transform.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/Transformable.hpp b/include/SFML/Graphics/Transformable.hpp index 7d653f1e..c1560e2a 100644 --- a/include/SFML/Graphics/Transformable.hpp +++ b/include/SFML/Graphics/Transformable.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/Vertex.hpp b/include/SFML/Graphics/Vertex.hpp index 16d0512b..6755479e 100644 --- a/include/SFML/Graphics/Vertex.hpp +++ b/include/SFML/Graphics/Vertex.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/VertexArray.hpp b/include/SFML/Graphics/VertexArray.hpp index 1cf8e7f9..1645f65f 100644 --- a/include/SFML/Graphics/VertexArray.hpp +++ b/include/SFML/Graphics/VertexArray.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/VertexBuffer.hpp b/include/SFML/Graphics/VertexBuffer.hpp index 76dfe761..7daaf014 100644 --- a/include/SFML/Graphics/VertexBuffer.hpp +++ b/include/SFML/Graphics/VertexBuffer.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Graphics/View.hpp b/include/SFML/Graphics/View.hpp index 0c1691a7..6712c944 100644 --- a/include/SFML/Graphics/View.hpp +++ b/include/SFML/Graphics/View.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Main.hpp b/include/SFML/Main.hpp index 9cc93623..27e3296e 100644 --- a/include/SFML/Main.hpp +++ b/include/SFML/Main.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Network.hpp b/include/SFML/Network.hpp index fc2c626b..f3f98c30 100644 --- a/include/SFML/Network.hpp +++ b/include/SFML/Network.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Network/Export.hpp b/include/SFML/Network/Export.hpp index b3c52218..516a9d08 100644 --- a/include/SFML/Network/Export.hpp +++ b/include/SFML/Network/Export.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Network/Ftp.hpp b/include/SFML/Network/Ftp.hpp index 3cac70f9..ddc3a9c8 100644 --- a/include/SFML/Network/Ftp.hpp +++ b/include/SFML/Network/Ftp.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Network/Http.hpp b/include/SFML/Network/Http.hpp index 067f2f4a..61754729 100644 --- a/include/SFML/Network/Http.hpp +++ b/include/SFML/Network/Http.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Network/IpAddress.hpp b/include/SFML/Network/IpAddress.hpp index 4ed5ea0d..b497b245 100644 --- a/include/SFML/Network/IpAddress.hpp +++ b/include/SFML/Network/IpAddress.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Network/Packet.hpp b/include/SFML/Network/Packet.hpp index 9728276c..db9a797e 100644 --- a/include/SFML/Network/Packet.hpp +++ b/include/SFML/Network/Packet.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Network/Socket.hpp b/include/SFML/Network/Socket.hpp index d5f7319e..9ebb930b 100644 --- a/include/SFML/Network/Socket.hpp +++ b/include/SFML/Network/Socket.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Network/SocketHandle.hpp b/include/SFML/Network/SocketHandle.hpp index 1dd13095..688ea0bf 100644 --- a/include/SFML/Network/SocketHandle.hpp +++ b/include/SFML/Network/SocketHandle.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Network/SocketSelector.hpp b/include/SFML/Network/SocketSelector.hpp index d8e2b965..332f0724 100644 --- a/include/SFML/Network/SocketSelector.hpp +++ b/include/SFML/Network/SocketSelector.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Network/TcpListener.hpp b/include/SFML/Network/TcpListener.hpp index 3cc4d2c7..d0bdad40 100644 --- a/include/SFML/Network/TcpListener.hpp +++ b/include/SFML/Network/TcpListener.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Network/TcpSocket.hpp b/include/SFML/Network/TcpSocket.hpp index 52b84e1c..5778068a 100644 --- a/include/SFML/Network/TcpSocket.hpp +++ b/include/SFML/Network/TcpSocket.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Network/UdpSocket.hpp b/include/SFML/Network/UdpSocket.hpp index 01645410..14176f8e 100644 --- a/include/SFML/Network/UdpSocket.hpp +++ b/include/SFML/Network/UdpSocket.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/OpenGL.hpp b/include/SFML/OpenGL.hpp index cc48a483..45a3ac3d 100644 --- a/include/SFML/OpenGL.hpp +++ b/include/SFML/OpenGL.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System.hpp b/include/SFML/System.hpp index 37dff6bb..3c82226b 100644 --- a/include/SFML/System.hpp +++ b/include/SFML/System.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/Clock.hpp b/include/SFML/System/Clock.hpp index 6e40c001..21503477 100644 --- a/include/SFML/System/Clock.hpp +++ b/include/SFML/System/Clock.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/Err.hpp b/include/SFML/System/Err.hpp index 37bf1388..9ad1b29c 100644 --- a/include/SFML/System/Err.hpp +++ b/include/SFML/System/Err.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/Export.hpp b/include/SFML/System/Export.hpp index 39dfd20b..b9691eec 100644 --- a/include/SFML/System/Export.hpp +++ b/include/SFML/System/Export.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/FileInputStream.hpp b/include/SFML/System/FileInputStream.hpp index bc051c44..d46be628 100644 --- a/include/SFML/System/FileInputStream.hpp +++ b/include/SFML/System/FileInputStream.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/InputStream.hpp b/include/SFML/System/InputStream.hpp index a4cb52ee..28022eca 100644 --- a/include/SFML/System/InputStream.hpp +++ b/include/SFML/System/InputStream.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/Lock.hpp b/include/SFML/System/Lock.hpp index e4d33a88..8667d144 100644 --- a/include/SFML/System/Lock.hpp +++ b/include/SFML/System/Lock.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/MemoryInputStream.hpp b/include/SFML/System/MemoryInputStream.hpp index e97df71f..15cf38d9 100644 --- a/include/SFML/System/MemoryInputStream.hpp +++ b/include/SFML/System/MemoryInputStream.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/Mutex.hpp b/include/SFML/System/Mutex.hpp index c7b1f9e3..34610c30 100644 --- a/include/SFML/System/Mutex.hpp +++ b/include/SFML/System/Mutex.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/NativeActivity.hpp b/include/SFML/System/NativeActivity.hpp index 6f5437eb..25609b5c 100644 --- a/include/SFML/System/NativeActivity.hpp +++ b/include/SFML/System/NativeActivity.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/NonCopyable.hpp b/include/SFML/System/NonCopyable.hpp index 1115ce2c..c5b42c8c 100644 --- a/include/SFML/System/NonCopyable.hpp +++ b/include/SFML/System/NonCopyable.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/Sleep.hpp b/include/SFML/System/Sleep.hpp index aa3bc3a7..98668651 100644 --- a/include/SFML/System/Sleep.hpp +++ b/include/SFML/System/Sleep.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/String.hpp b/include/SFML/System/String.hpp index 46a87e42..970105dc 100644 --- a/include/SFML/System/String.hpp +++ b/include/SFML/System/String.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/String.inl b/include/SFML/System/String.inl index 85915d82..0f3a890b 100644 --- a/include/SFML/System/String.inl +++ b/include/SFML/System/String.inl @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/Thread.hpp b/include/SFML/System/Thread.hpp index 16701b7b..ead09e84 100644 --- a/include/SFML/System/Thread.hpp +++ b/include/SFML/System/Thread.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/Thread.inl b/include/SFML/System/Thread.inl index 1d40c54d..55976e86 100644 --- a/include/SFML/System/Thread.inl +++ b/include/SFML/System/Thread.inl @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/ThreadLocal.hpp b/include/SFML/System/ThreadLocal.hpp index 1eb442b5..065f29c2 100644 --- a/include/SFML/System/ThreadLocal.hpp +++ b/include/SFML/System/ThreadLocal.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/ThreadLocalPtr.hpp b/include/SFML/System/ThreadLocalPtr.hpp index 549ffb0d..a6ecd9de 100644 --- a/include/SFML/System/ThreadLocalPtr.hpp +++ b/include/SFML/System/ThreadLocalPtr.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/ThreadLocalPtr.inl b/include/SFML/System/ThreadLocalPtr.inl index 14e453e9..f76c77f8 100644 --- a/include/SFML/System/ThreadLocalPtr.inl +++ b/include/SFML/System/ThreadLocalPtr.inl @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/Time.hpp b/include/SFML/System/Time.hpp index 4541afbc..1478730c 100644 --- a/include/SFML/System/Time.hpp +++ b/include/SFML/System/Time.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/Utf.hpp b/include/SFML/System/Utf.hpp index 1452d3d5..af567531 100644 --- a/include/SFML/System/Utf.hpp +++ b/include/SFML/System/Utf.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/Utf.inl b/include/SFML/System/Utf.inl index 1fed3a00..d1ea73de 100644 --- a/include/SFML/System/Utf.inl +++ b/include/SFML/System/Utf.inl @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/Vector2.hpp b/include/SFML/System/Vector2.hpp index 3335944c..429e649f 100644 --- a/include/SFML/System/Vector2.hpp +++ b/include/SFML/System/Vector2.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/Vector2.inl b/include/SFML/System/Vector2.inl index 2faee862..848395b3 100644 --- a/include/SFML/System/Vector2.inl +++ b/include/SFML/System/Vector2.inl @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/Vector3.hpp b/include/SFML/System/Vector3.hpp index 4aced322..08220c9f 100644 --- a/include/SFML/System/Vector3.hpp +++ b/include/SFML/System/Vector3.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/System/Vector3.inl b/include/SFML/System/Vector3.inl index f139dcde..852c6dbb 100644 --- a/include/SFML/System/Vector3.inl +++ b/include/SFML/System/Vector3.inl @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window.hpp b/include/SFML/Window.hpp index da70c3ce..e3667b01 100644 --- a/include/SFML/Window.hpp +++ b/include/SFML/Window.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window/Clipboard.hpp b/include/SFML/Window/Clipboard.hpp index b7c1cd06..68a37973 100644 --- a/include/SFML/Window/Clipboard.hpp +++ b/include/SFML/Window/Clipboard.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window/Context.hpp b/include/SFML/Window/Context.hpp index 01590834..7ef9b9a1 100644 --- a/include/SFML/Window/Context.hpp +++ b/include/SFML/Window/Context.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window/ContextSettings.hpp b/include/SFML/Window/ContextSettings.hpp index 1acd60e9..d2d84385 100644 --- a/include/SFML/Window/ContextSettings.hpp +++ b/include/SFML/Window/ContextSettings.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window/Cursor.hpp b/include/SFML/Window/Cursor.hpp index f13840f6..c5d90d95 100644 --- a/include/SFML/Window/Cursor.hpp +++ b/include/SFML/Window/Cursor.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window/Event.hpp b/include/SFML/Window/Event.hpp index 53b37d95..2b7c8dcb 100644 --- a/include/SFML/Window/Event.hpp +++ b/include/SFML/Window/Event.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window/Export.hpp b/include/SFML/Window/Export.hpp index 5b198410..11f27b36 100644 --- a/include/SFML/Window/Export.hpp +++ b/include/SFML/Window/Export.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window/GlResource.hpp b/include/SFML/Window/GlResource.hpp index 3d007fc5..223707e8 100644 --- a/include/SFML/Window/GlResource.hpp +++ b/include/SFML/Window/GlResource.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window/Joystick.hpp b/include/SFML/Window/Joystick.hpp index ad61587e..dd5454c3 100644 --- a/include/SFML/Window/Joystick.hpp +++ b/include/SFML/Window/Joystick.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window/Keyboard.hpp b/include/SFML/Window/Keyboard.hpp index 92ea8df8..0bbcd8ab 100644 --- a/include/SFML/Window/Keyboard.hpp +++ b/include/SFML/Window/Keyboard.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window/Mouse.hpp b/include/SFML/Window/Mouse.hpp index 7506282d..d2b7fefa 100644 --- a/include/SFML/Window/Mouse.hpp +++ b/include/SFML/Window/Mouse.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window/Sensor.hpp b/include/SFML/Window/Sensor.hpp index 2bce8676..337bc7f4 100644 --- a/include/SFML/Window/Sensor.hpp +++ b/include/SFML/Window/Sensor.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window/Touch.hpp b/include/SFML/Window/Touch.hpp index fa64f390..bc9f72e1 100644 --- a/include/SFML/Window/Touch.hpp +++ b/include/SFML/Window/Touch.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window/VideoMode.hpp b/include/SFML/Window/VideoMode.hpp index 24c4ec61..d95ea49a 100644 --- a/include/SFML/Window/VideoMode.hpp +++ b/include/SFML/Window/VideoMode.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window/Vulkan.hpp b/include/SFML/Window/Vulkan.hpp index cd501a12..00ee911a 100644 --- a/include/SFML/Window/Vulkan.hpp +++ b/include/SFML/Window/Vulkan.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window/Window.hpp b/include/SFML/Window/Window.hpp index f89fc353..bcbe8725 100644 --- a/include/SFML/Window/Window.hpp +++ b/include/SFML/Window/Window.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window/WindowBase.hpp b/include/SFML/Window/WindowBase.hpp index b3073cbf..d1d4ff98 100644 --- a/include/SFML/Window/WindowBase.hpp +++ b/include/SFML/Window/WindowBase.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window/WindowHandle.hpp b/include/SFML/Window/WindowHandle.hpp index c05d50be..624ca737 100644 --- a/include/SFML/Window/WindowHandle.hpp +++ b/include/SFML/Window/WindowHandle.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/include/SFML/Window/WindowStyle.hpp b/include/SFML/Window/WindowStyle.hpp index 5edf76ce..ab611d29 100644 --- a/include/SFML/Window/WindowStyle.hpp +++ b/include/SFML/Window/WindowStyle.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/license.md b/license.md index 9f6db1a9..1ae961a7 100644 --- a/license.md +++ b/license.md @@ -1,6 +1,6 @@ # SFML -SFML - Copyright (C) 2007-2019 Laurent Gomila - laurent@sfml-dev.org +SFML - Copyright (C) 2007-2020 Laurent Gomila - laurent@sfml-dev.org This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/ALCheck.cpp b/src/SFML/Audio/ALCheck.cpp index 8514cc98..a7873a0a 100644 --- a/src/SFML/Audio/ALCheck.cpp +++ b/src/SFML/Audio/ALCheck.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/ALCheck.hpp b/src/SFML/Audio/ALCheck.hpp index 963d271a..95259fb7 100644 --- a/src/SFML/Audio/ALCheck.hpp +++ b/src/SFML/Audio/ALCheck.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/AlResource.cpp b/src/SFML/Audio/AlResource.cpp index f59d36b4..42a4945f 100644 --- a/src/SFML/Audio/AlResource.cpp +++ b/src/SFML/Audio/AlResource.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/AudioDevice.cpp b/src/SFML/Audio/AudioDevice.cpp index e4ebc4b9..b9246dfd 100644 --- a/src/SFML/Audio/AudioDevice.cpp +++ b/src/SFML/Audio/AudioDevice.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/AudioDevice.hpp b/src/SFML/Audio/AudioDevice.hpp index af940217..a8bac26e 100644 --- a/src/SFML/Audio/AudioDevice.hpp +++ b/src/SFML/Audio/AudioDevice.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/InputSoundFile.cpp b/src/SFML/Audio/InputSoundFile.cpp index 6d9da57c..cb8bed04 100644 --- a/src/SFML/Audio/InputSoundFile.cpp +++ b/src/SFML/Audio/InputSoundFile.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/Listener.cpp b/src/SFML/Audio/Listener.cpp index bbbece5e..477f0931 100644 --- a/src/SFML/Audio/Listener.cpp +++ b/src/SFML/Audio/Listener.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/Music.cpp b/src/SFML/Audio/Music.cpp index b8829d02..d711eff1 100644 --- a/src/SFML/Audio/Music.cpp +++ b/src/SFML/Audio/Music.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/OutputSoundFile.cpp b/src/SFML/Audio/OutputSoundFile.cpp index c6584352..ddaafcf0 100644 --- a/src/SFML/Audio/OutputSoundFile.cpp +++ b/src/SFML/Audio/OutputSoundFile.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/Sound.cpp b/src/SFML/Audio/Sound.cpp index 36e65849..505e9588 100644 --- a/src/SFML/Audio/Sound.cpp +++ b/src/SFML/Audio/Sound.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/SoundBuffer.cpp b/src/SFML/Audio/SoundBuffer.cpp index dfd137ff..3c23920e 100644 --- a/src/SFML/Audio/SoundBuffer.cpp +++ b/src/SFML/Audio/SoundBuffer.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/SoundBufferRecorder.cpp b/src/SFML/Audio/SoundBufferRecorder.cpp index 12694354..2d8b63c7 100644 --- a/src/SFML/Audio/SoundBufferRecorder.cpp +++ b/src/SFML/Audio/SoundBufferRecorder.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/SoundFileFactory.cpp b/src/SFML/Audio/SoundFileFactory.cpp index a0caf7a1..2f7ddfc2 100644 --- a/src/SFML/Audio/SoundFileFactory.cpp +++ b/src/SFML/Audio/SoundFileFactory.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/SoundFileReaderFlac.cpp b/src/SFML/Audio/SoundFileReaderFlac.cpp index c9a8cb97..88600e30 100644 --- a/src/SFML/Audio/SoundFileReaderFlac.cpp +++ b/src/SFML/Audio/SoundFileReaderFlac.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/SoundFileReaderFlac.hpp b/src/SFML/Audio/SoundFileReaderFlac.hpp index 23ec12db..53cf0c4f 100644 --- a/src/SFML/Audio/SoundFileReaderFlac.hpp +++ b/src/SFML/Audio/SoundFileReaderFlac.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/SoundFileReaderOgg.cpp b/src/SFML/Audio/SoundFileReaderOgg.cpp index 0621cad0..5585ab38 100644 --- a/src/SFML/Audio/SoundFileReaderOgg.cpp +++ b/src/SFML/Audio/SoundFileReaderOgg.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/SoundFileReaderOgg.hpp b/src/SFML/Audio/SoundFileReaderOgg.hpp index 67b03f47..7942bec6 100644 --- a/src/SFML/Audio/SoundFileReaderOgg.hpp +++ b/src/SFML/Audio/SoundFileReaderOgg.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/SoundFileReaderWav.cpp b/src/SFML/Audio/SoundFileReaderWav.cpp index e498dd55..df9dab94 100644 --- a/src/SFML/Audio/SoundFileReaderWav.cpp +++ b/src/SFML/Audio/SoundFileReaderWav.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/SoundFileReaderWav.hpp b/src/SFML/Audio/SoundFileReaderWav.hpp index f2f89479..04e3a10d 100644 --- a/src/SFML/Audio/SoundFileReaderWav.hpp +++ b/src/SFML/Audio/SoundFileReaderWav.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/SoundFileWriterFlac.cpp b/src/SFML/Audio/SoundFileWriterFlac.cpp index f30c2fec..ddd3c20a 100644 --- a/src/SFML/Audio/SoundFileWriterFlac.cpp +++ b/src/SFML/Audio/SoundFileWriterFlac.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/SoundFileWriterFlac.hpp b/src/SFML/Audio/SoundFileWriterFlac.hpp index 7eef2e4a..d54975e9 100644 --- a/src/SFML/Audio/SoundFileWriterFlac.hpp +++ b/src/SFML/Audio/SoundFileWriterFlac.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/SoundFileWriterOgg.cpp b/src/SFML/Audio/SoundFileWriterOgg.cpp index 9791ef36..c56847e5 100644 --- a/src/SFML/Audio/SoundFileWriterOgg.cpp +++ b/src/SFML/Audio/SoundFileWriterOgg.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/SoundFileWriterOgg.hpp b/src/SFML/Audio/SoundFileWriterOgg.hpp index 19bb6cca..7a482d1c 100644 --- a/src/SFML/Audio/SoundFileWriterOgg.hpp +++ b/src/SFML/Audio/SoundFileWriterOgg.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/SoundFileWriterWav.cpp b/src/SFML/Audio/SoundFileWriterWav.cpp index 3353d236..4f82d5ef 100644 --- a/src/SFML/Audio/SoundFileWriterWav.cpp +++ b/src/SFML/Audio/SoundFileWriterWav.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/SoundFileWriterWav.hpp b/src/SFML/Audio/SoundFileWriterWav.hpp index f1b07e7e..58d16845 100644 --- a/src/SFML/Audio/SoundFileWriterWav.hpp +++ b/src/SFML/Audio/SoundFileWriterWav.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/SoundRecorder.cpp b/src/SFML/Audio/SoundRecorder.cpp index 8b0b6901..1066b452 100644 --- a/src/SFML/Audio/SoundRecorder.cpp +++ b/src/SFML/Audio/SoundRecorder.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/SoundSource.cpp b/src/SFML/Audio/SoundSource.cpp index f4bc4b20..7bc6b3a0 100644 --- a/src/SFML/Audio/SoundSource.cpp +++ b/src/SFML/Audio/SoundSource.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Audio/SoundStream.cpp b/src/SFML/Audio/SoundStream.cpp index d8f5f785..b4172a2b 100644 --- a/src/SFML/Audio/SoundStream.cpp +++ b/src/SFML/Audio/SoundStream.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/BlendMode.cpp b/src/SFML/Graphics/BlendMode.cpp index 7f0901af..7897247f 100644 --- a/src/SFML/Graphics/BlendMode.cpp +++ b/src/SFML/Graphics/BlendMode.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/CircleShape.cpp b/src/SFML/Graphics/CircleShape.cpp index 730353fc..8c70f626 100644 --- a/src/SFML/Graphics/CircleShape.cpp +++ b/src/SFML/Graphics/CircleShape.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/Color.cpp b/src/SFML/Graphics/Color.cpp index 02b8581f..b0bb6876 100644 --- a/src/SFML/Graphics/Color.cpp +++ b/src/SFML/Graphics/Color.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/ConvexShape.cpp b/src/SFML/Graphics/ConvexShape.cpp index 9346e3d9..fa5da832 100644 --- a/src/SFML/Graphics/ConvexShape.cpp +++ b/src/SFML/Graphics/ConvexShape.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/Font.cpp b/src/SFML/Graphics/Font.cpp index e5616ffe..76c4d2e3 100644 --- a/src/SFML/Graphics/Font.cpp +++ b/src/SFML/Graphics/Font.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/GLCheck.cpp b/src/SFML/Graphics/GLCheck.cpp index 5bb140c1..e908eaae 100644 --- a/src/SFML/Graphics/GLCheck.cpp +++ b/src/SFML/Graphics/GLCheck.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/GLCheck.hpp b/src/SFML/Graphics/GLCheck.hpp index 19ab3b1e..c1bcaea3 100644 --- a/src/SFML/Graphics/GLCheck.hpp +++ b/src/SFML/Graphics/GLCheck.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/GLExtensions.cpp b/src/SFML/Graphics/GLExtensions.cpp index 60d25847..109fe3a9 100644 --- a/src/SFML/Graphics/GLExtensions.cpp +++ b/src/SFML/Graphics/GLExtensions.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/GLExtensions.hpp b/src/SFML/Graphics/GLExtensions.hpp index 829155fa..ec0391d4 100644 --- a/src/SFML/Graphics/GLExtensions.hpp +++ b/src/SFML/Graphics/GLExtensions.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/Glsl.cpp b/src/SFML/Graphics/Glsl.cpp index 3a1e5593..557dc9bd 100644 --- a/src/SFML/Graphics/Glsl.cpp +++ b/src/SFML/Graphics/Glsl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/Image.cpp b/src/SFML/Graphics/Image.cpp index 1ef43269..bb791d66 100644 --- a/src/SFML/Graphics/Image.cpp +++ b/src/SFML/Graphics/Image.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/ImageLoader.cpp b/src/SFML/Graphics/ImageLoader.cpp index 3c26e49c..d0e7ac9e 100644 --- a/src/SFML/Graphics/ImageLoader.cpp +++ b/src/SFML/Graphics/ImageLoader.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/ImageLoader.hpp b/src/SFML/Graphics/ImageLoader.hpp index ce437b43..c178cb7a 100644 --- a/src/SFML/Graphics/ImageLoader.hpp +++ b/src/SFML/Graphics/ImageLoader.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/RectangleShape.cpp b/src/SFML/Graphics/RectangleShape.cpp index 58777fd5..66569ba8 100644 --- a/src/SFML/Graphics/RectangleShape.cpp +++ b/src/SFML/Graphics/RectangleShape.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/RenderStates.cpp b/src/SFML/Graphics/RenderStates.cpp index adaceb34..fff6f08e 100644 --- a/src/SFML/Graphics/RenderStates.cpp +++ b/src/SFML/Graphics/RenderStates.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/RenderTarget.cpp b/src/SFML/Graphics/RenderTarget.cpp index a9c0ecac..5b0dbd3a 100644 --- a/src/SFML/Graphics/RenderTarget.cpp +++ b/src/SFML/Graphics/RenderTarget.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/RenderTexture.cpp b/src/SFML/Graphics/RenderTexture.cpp index bd0566a0..9daad7af 100644 --- a/src/SFML/Graphics/RenderTexture.cpp +++ b/src/SFML/Graphics/RenderTexture.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/RenderTextureImpl.cpp b/src/SFML/Graphics/RenderTextureImpl.cpp index 63d55f0b..e766dd9f 100644 --- a/src/SFML/Graphics/RenderTextureImpl.cpp +++ b/src/SFML/Graphics/RenderTextureImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/RenderTextureImpl.hpp b/src/SFML/Graphics/RenderTextureImpl.hpp index 5ed3733c..22b1c54e 100644 --- a/src/SFML/Graphics/RenderTextureImpl.hpp +++ b/src/SFML/Graphics/RenderTextureImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/RenderTextureImplDefault.cpp b/src/SFML/Graphics/RenderTextureImplDefault.cpp index dabc938e..a0cac97f 100644 --- a/src/SFML/Graphics/RenderTextureImplDefault.cpp +++ b/src/SFML/Graphics/RenderTextureImplDefault.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/RenderTextureImplDefault.hpp b/src/SFML/Graphics/RenderTextureImplDefault.hpp index f7ab219e..97e3b299 100644 --- a/src/SFML/Graphics/RenderTextureImplDefault.hpp +++ b/src/SFML/Graphics/RenderTextureImplDefault.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/RenderTextureImplFBO.cpp b/src/SFML/Graphics/RenderTextureImplFBO.cpp index c2afc8b0..45eb2a9c 100644 --- a/src/SFML/Graphics/RenderTextureImplFBO.cpp +++ b/src/SFML/Graphics/RenderTextureImplFBO.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/RenderTextureImplFBO.hpp b/src/SFML/Graphics/RenderTextureImplFBO.hpp index 8cddd109..7fcf6eff 100644 --- a/src/SFML/Graphics/RenderTextureImplFBO.hpp +++ b/src/SFML/Graphics/RenderTextureImplFBO.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/RenderWindow.cpp b/src/SFML/Graphics/RenderWindow.cpp index 38ec2a7c..d26a5f37 100644 --- a/src/SFML/Graphics/RenderWindow.cpp +++ b/src/SFML/Graphics/RenderWindow.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/Shader.cpp b/src/SFML/Graphics/Shader.cpp index 9d0cfba4..cbfc4d20 100644 --- a/src/SFML/Graphics/Shader.cpp +++ b/src/SFML/Graphics/Shader.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/Shape.cpp b/src/SFML/Graphics/Shape.cpp index d0245d5d..57670307 100644 --- a/src/SFML/Graphics/Shape.cpp +++ b/src/SFML/Graphics/Shape.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/Sprite.cpp b/src/SFML/Graphics/Sprite.cpp index 1fdfc5d5..f32dc486 100644 --- a/src/SFML/Graphics/Sprite.cpp +++ b/src/SFML/Graphics/Sprite.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/Text.cpp b/src/SFML/Graphics/Text.cpp index 7cb4f889..2ba7d466 100644 --- a/src/SFML/Graphics/Text.cpp +++ b/src/SFML/Graphics/Text.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/Texture.cpp b/src/SFML/Graphics/Texture.cpp index a139115d..ef731a65 100644 --- a/src/SFML/Graphics/Texture.cpp +++ b/src/SFML/Graphics/Texture.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/TextureSaver.cpp b/src/SFML/Graphics/TextureSaver.cpp index 1a71c089..7ffbc0bb 100644 --- a/src/SFML/Graphics/TextureSaver.cpp +++ b/src/SFML/Graphics/TextureSaver.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/TextureSaver.hpp b/src/SFML/Graphics/TextureSaver.hpp index 68109456..560c2fce 100644 --- a/src/SFML/Graphics/TextureSaver.hpp +++ b/src/SFML/Graphics/TextureSaver.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/Transform.cpp b/src/SFML/Graphics/Transform.cpp index 68d3e3be..9a6706ce 100644 --- a/src/SFML/Graphics/Transform.cpp +++ b/src/SFML/Graphics/Transform.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/Transformable.cpp b/src/SFML/Graphics/Transformable.cpp index a47b2ee0..6a8f0735 100644 --- a/src/SFML/Graphics/Transformable.cpp +++ b/src/SFML/Graphics/Transformable.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/Vertex.cpp b/src/SFML/Graphics/Vertex.cpp index e389b68a..801af444 100644 --- a/src/SFML/Graphics/Vertex.cpp +++ b/src/SFML/Graphics/Vertex.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/VertexArray.cpp b/src/SFML/Graphics/VertexArray.cpp index accf7e79..9be9d7d9 100644 --- a/src/SFML/Graphics/VertexArray.cpp +++ b/src/SFML/Graphics/VertexArray.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/VertexBuffer.cpp b/src/SFML/Graphics/VertexBuffer.cpp index 4d5497c8..2b3166a2 100644 --- a/src/SFML/Graphics/VertexBuffer.cpp +++ b/src/SFML/Graphics/VertexBuffer.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Graphics/View.cpp b/src/SFML/Graphics/View.cpp index 4d1fb2f3..048f3136 100644 --- a/src/SFML/Graphics/View.cpp +++ b/src/SFML/Graphics/View.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Main/MainAndroid.cpp b/src/SFML/Main/MainAndroid.cpp index 38fd99b8..daf6dac1 100644 --- a/src/SFML/Main/MainAndroid.cpp +++ b/src/SFML/Main/MainAndroid.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Main/MainWin32.cpp b/src/SFML/Main/MainWin32.cpp index a8aa19d4..6a382024 100644 --- a/src/SFML/Main/MainWin32.cpp +++ b/src/SFML/Main/MainWin32.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // Copyright (C) 2013 Jonathan De Wachter (dewachter.jonathan@gmail.com) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Main/MainiOS.mm b/src/SFML/Main/MainiOS.mm index 901248a1..534db334 100644 --- a/src/SFML/Main/MainiOS.mm +++ b/src/SFML/Main/MainiOS.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.prg) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.prg) // Copyright (C) 2013 Jonathan De Wachter (dewachter.jonathan@gmail.com) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Network/Ftp.cpp b/src/SFML/Network/Ftp.cpp index 4eb13bcb..6b5ebce8 100644 --- a/src/SFML/Network/Ftp.cpp +++ b/src/SFML/Network/Ftp.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Network/Http.cpp b/src/SFML/Network/Http.cpp index 251b8125..40a5167f 100644 --- a/src/SFML/Network/Http.cpp +++ b/src/SFML/Network/Http.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Network/IpAddress.cpp b/src/SFML/Network/IpAddress.cpp index 8cc145f6..067c7ae5 100644 --- a/src/SFML/Network/IpAddress.cpp +++ b/src/SFML/Network/IpAddress.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Network/Packet.cpp b/src/SFML/Network/Packet.cpp index 2cb85bdb..951c4bdb 100644 --- a/src/SFML/Network/Packet.cpp +++ b/src/SFML/Network/Packet.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Network/Socket.cpp b/src/SFML/Network/Socket.cpp index 7a92a473..622f9d4b 100644 --- a/src/SFML/Network/Socket.cpp +++ b/src/SFML/Network/Socket.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Network/SocketImpl.hpp b/src/SFML/Network/SocketImpl.hpp index 1f6803da..c958099c 100644 --- a/src/SFML/Network/SocketImpl.hpp +++ b/src/SFML/Network/SocketImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Network/SocketSelector.cpp b/src/SFML/Network/SocketSelector.cpp index c180736a..465e0a72 100644 --- a/src/SFML/Network/SocketSelector.cpp +++ b/src/SFML/Network/SocketSelector.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Network/TcpListener.cpp b/src/SFML/Network/TcpListener.cpp index 8a79b99b..38749d56 100644 --- a/src/SFML/Network/TcpListener.cpp +++ b/src/SFML/Network/TcpListener.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Network/TcpSocket.cpp b/src/SFML/Network/TcpSocket.cpp index 7a8e9183..8333b952 100644 --- a/src/SFML/Network/TcpSocket.cpp +++ b/src/SFML/Network/TcpSocket.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Network/UdpSocket.cpp b/src/SFML/Network/UdpSocket.cpp index 373b6842..3e193914 100644 --- a/src/SFML/Network/UdpSocket.cpp +++ b/src/SFML/Network/UdpSocket.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Network/Unix/SocketImpl.cpp b/src/SFML/Network/Unix/SocketImpl.cpp index e565a482..5f59171b 100644 --- a/src/SFML/Network/Unix/SocketImpl.cpp +++ b/src/SFML/Network/Unix/SocketImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Network/Unix/SocketImpl.hpp b/src/SFML/Network/Unix/SocketImpl.hpp index 9b816baa..3de92334 100644 --- a/src/SFML/Network/Unix/SocketImpl.hpp +++ b/src/SFML/Network/Unix/SocketImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Network/Win32/SocketImpl.cpp b/src/SFML/Network/Win32/SocketImpl.cpp index 9bff3d7a..b369e182 100644 --- a/src/SFML/Network/Win32/SocketImpl.cpp +++ b/src/SFML/Network/Win32/SocketImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Network/Win32/SocketImpl.hpp b/src/SFML/Network/Win32/SocketImpl.hpp index 7fdfa52e..82557546 100644 --- a/src/SFML/Network/Win32/SocketImpl.hpp +++ b/src/SFML/Network/Win32/SocketImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Android/Activity.cpp b/src/SFML/System/Android/Activity.cpp index b52921aa..11dfaeb1 100644 --- a/src/SFML/System/Android/Activity.cpp +++ b/src/SFML/System/Android/Activity.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // Copyright (C) 2013 Jonathan De Wachter (dewachter.jonathan@gmail.com) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/System/Android/NativeActivity.cpp b/src/SFML/System/Android/NativeActivity.cpp index 39a2fbce..ee01eedc 100644 --- a/src/SFML/System/Android/NativeActivity.cpp +++ b/src/SFML/System/Android/NativeActivity.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Clock.cpp b/src/SFML/System/Clock.cpp index dc3a2544..8e4aca01 100644 --- a/src/SFML/System/Clock.cpp +++ b/src/SFML/System/Clock.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Err.cpp b/src/SFML/System/Err.cpp index 0a593e3a..1e8a8465 100644 --- a/src/SFML/System/Err.cpp +++ b/src/SFML/System/Err.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/FileInputStream.cpp b/src/SFML/System/FileInputStream.cpp index 41c91176..bab93f52 100644 --- a/src/SFML/System/FileInputStream.cpp +++ b/src/SFML/System/FileInputStream.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Lock.cpp b/src/SFML/System/Lock.cpp index 0fbb404d..b4084b00 100644 --- a/src/SFML/System/Lock.cpp +++ b/src/SFML/System/Lock.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/MemoryInputStream.cpp b/src/SFML/System/MemoryInputStream.cpp index d6334acd..6b849a97 100644 --- a/src/SFML/System/MemoryInputStream.cpp +++ b/src/SFML/System/MemoryInputStream.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Mutex.cpp b/src/SFML/System/Mutex.cpp index 2f6726f3..21a86e45 100644 --- a/src/SFML/System/Mutex.cpp +++ b/src/SFML/System/Mutex.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Sleep.cpp b/src/SFML/System/Sleep.cpp index fc036c48..3d1beca3 100644 --- a/src/SFML/System/Sleep.cpp +++ b/src/SFML/System/Sleep.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/String.cpp b/src/SFML/System/String.cpp index c33cb948..92d8ec21 100644 --- a/src/SFML/System/String.cpp +++ b/src/SFML/System/String.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Thread.cpp b/src/SFML/System/Thread.cpp index bd250a90..6576f104 100644 --- a/src/SFML/System/Thread.cpp +++ b/src/SFML/System/Thread.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/ThreadLocal.cpp b/src/SFML/System/ThreadLocal.cpp index 812a99b7..5917cf33 100644 --- a/src/SFML/System/ThreadLocal.cpp +++ b/src/SFML/System/ThreadLocal.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Time.cpp b/src/SFML/System/Time.cpp index 09abf45f..b7963e7c 100644 --- a/src/SFML/System/Time.cpp +++ b/src/SFML/System/Time.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Unix/ClockImpl.cpp b/src/SFML/System/Unix/ClockImpl.cpp index 2a70fbd7..5a6e4682 100644 --- a/src/SFML/System/Unix/ClockImpl.cpp +++ b/src/SFML/System/Unix/ClockImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Unix/ClockImpl.hpp b/src/SFML/System/Unix/ClockImpl.hpp index 942ee9c4..c966b3e8 100644 --- a/src/SFML/System/Unix/ClockImpl.hpp +++ b/src/SFML/System/Unix/ClockImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Unix/MutexImpl.cpp b/src/SFML/System/Unix/MutexImpl.cpp index b9c46749..8c000598 100644 --- a/src/SFML/System/Unix/MutexImpl.cpp +++ b/src/SFML/System/Unix/MutexImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Unix/MutexImpl.hpp b/src/SFML/System/Unix/MutexImpl.hpp index dead79d0..83c4f42c 100644 --- a/src/SFML/System/Unix/MutexImpl.hpp +++ b/src/SFML/System/Unix/MutexImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Unix/SleepImpl.cpp b/src/SFML/System/Unix/SleepImpl.cpp index 1da9b8db..6aabaf41 100644 --- a/src/SFML/System/Unix/SleepImpl.cpp +++ b/src/SFML/System/Unix/SleepImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Unix/SleepImpl.hpp b/src/SFML/System/Unix/SleepImpl.hpp index 0fb634e9..57843cc1 100644 --- a/src/SFML/System/Unix/SleepImpl.hpp +++ b/src/SFML/System/Unix/SleepImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Unix/ThreadImpl.cpp b/src/SFML/System/Unix/ThreadImpl.cpp index d8d4d9ad..aaf906e1 100644 --- a/src/SFML/System/Unix/ThreadImpl.cpp +++ b/src/SFML/System/Unix/ThreadImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Unix/ThreadImpl.hpp b/src/SFML/System/Unix/ThreadImpl.hpp index e538514d..4906326d 100644 --- a/src/SFML/System/Unix/ThreadImpl.hpp +++ b/src/SFML/System/Unix/ThreadImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Unix/ThreadLocalImpl.cpp b/src/SFML/System/Unix/ThreadLocalImpl.cpp index 45d08fb4..33c6889e 100644 --- a/src/SFML/System/Unix/ThreadLocalImpl.cpp +++ b/src/SFML/System/Unix/ThreadLocalImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Unix/ThreadLocalImpl.hpp b/src/SFML/System/Unix/ThreadLocalImpl.hpp index db71e0b9..a1d5e713 100644 --- a/src/SFML/System/Unix/ThreadLocalImpl.hpp +++ b/src/SFML/System/Unix/ThreadLocalImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Win32/ClockImpl.cpp b/src/SFML/System/Win32/ClockImpl.cpp index 603426d8..37ecc9ca 100644 --- a/src/SFML/System/Win32/ClockImpl.cpp +++ b/src/SFML/System/Win32/ClockImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Win32/ClockImpl.hpp b/src/SFML/System/Win32/ClockImpl.hpp index cbca5c24..0af60834 100644 --- a/src/SFML/System/Win32/ClockImpl.hpp +++ b/src/SFML/System/Win32/ClockImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Win32/MutexImpl.cpp b/src/SFML/System/Win32/MutexImpl.cpp index 7d562a38..3c3452ea 100644 --- a/src/SFML/System/Win32/MutexImpl.cpp +++ b/src/SFML/System/Win32/MutexImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Win32/MutexImpl.hpp b/src/SFML/System/Win32/MutexImpl.hpp index 1a36a6d5..2947e3b1 100644 --- a/src/SFML/System/Win32/MutexImpl.hpp +++ b/src/SFML/System/Win32/MutexImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Win32/SleepImpl.cpp b/src/SFML/System/Win32/SleepImpl.cpp index 172a8a88..f61353e4 100644 --- a/src/SFML/System/Win32/SleepImpl.cpp +++ b/src/SFML/System/Win32/SleepImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Win32/SleepImpl.hpp b/src/SFML/System/Win32/SleepImpl.hpp index 37005ab7..5c356414 100644 --- a/src/SFML/System/Win32/SleepImpl.hpp +++ b/src/SFML/System/Win32/SleepImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Win32/ThreadImpl.cpp b/src/SFML/System/Win32/ThreadImpl.cpp index e1c84993..94bc7f8a 100644 --- a/src/SFML/System/Win32/ThreadImpl.cpp +++ b/src/SFML/System/Win32/ThreadImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Win32/ThreadImpl.hpp b/src/SFML/System/Win32/ThreadImpl.hpp index f4dc9534..afdfc9f3 100644 --- a/src/SFML/System/Win32/ThreadImpl.hpp +++ b/src/SFML/System/Win32/ThreadImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Win32/ThreadLocalImpl.cpp b/src/SFML/System/Win32/ThreadLocalImpl.cpp index eef6106a..49d95e00 100644 --- a/src/SFML/System/Win32/ThreadLocalImpl.cpp +++ b/src/SFML/System/Win32/ThreadLocalImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/System/Win32/ThreadLocalImpl.hpp b/src/SFML/System/Win32/ThreadLocalImpl.hpp index d87db142..3a2b0238 100644 --- a/src/SFML/System/Win32/ThreadLocalImpl.hpp +++ b/src/SFML/System/Win32/ThreadLocalImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Android/ClipboardImpl.cpp b/src/SFML/Window/Android/ClipboardImpl.cpp index c7d3728e..ef9af6c4 100644 --- a/src/SFML/Window/Android/ClipboardImpl.cpp +++ b/src/SFML/Window/Android/ClipboardImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Android/ClipboardImpl.hpp b/src/SFML/Window/Android/ClipboardImpl.hpp index c243999c..22dda649 100644 --- a/src/SFML/Window/Android/ClipboardImpl.hpp +++ b/src/SFML/Window/Android/ClipboardImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Android/CursorImpl.cpp b/src/SFML/Window/Android/CursorImpl.cpp index faf0b631..3913b295 100644 --- a/src/SFML/Window/Android/CursorImpl.cpp +++ b/src/SFML/Window/Android/CursorImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Android/CursorImpl.hpp b/src/SFML/Window/Android/CursorImpl.hpp index 096902d5..57cffbd4 100644 --- a/src/SFML/Window/Android/CursorImpl.hpp +++ b/src/SFML/Window/Android/CursorImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Android/SensorImpl.cpp b/src/SFML/Window/Android/SensorImpl.cpp index 9497d9d6..ed89e4d7 100644 --- a/src/SFML/Window/Android/SensorImpl.cpp +++ b/src/SFML/Window/Android/SensorImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Android/SensorImpl.hpp b/src/SFML/Window/Android/SensorImpl.hpp index ce6865ee..bdfdfcc3 100644 --- a/src/SFML/Window/Android/SensorImpl.hpp +++ b/src/SFML/Window/Android/SensorImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Clipboard.cpp b/src/SFML/Window/Clipboard.cpp index 230789e3..78284446 100644 --- a/src/SFML/Window/Clipboard.cpp +++ b/src/SFML/Window/Clipboard.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/ClipboardImpl.hpp b/src/SFML/Window/ClipboardImpl.hpp index 7efd448f..d0d2c324 100644 --- a/src/SFML/Window/ClipboardImpl.hpp +++ b/src/SFML/Window/ClipboardImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Context.cpp b/src/SFML/Window/Context.cpp index 2b174aa0..76cd0c59 100644 --- a/src/SFML/Window/Context.cpp +++ b/src/SFML/Window/Context.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Cursor.cpp b/src/SFML/Window/Cursor.cpp index 91b08686..b7be0acd 100644 --- a/src/SFML/Window/Cursor.cpp +++ b/src/SFML/Window/Cursor.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/CursorImpl.hpp b/src/SFML/Window/CursorImpl.hpp index afb22ddb..bf507b2c 100644 --- a/src/SFML/Window/CursorImpl.hpp +++ b/src/SFML/Window/CursorImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/FreeBSD/JoystickImpl.cpp b/src/SFML/Window/FreeBSD/JoystickImpl.cpp index 9e5677b6..472ae2af 100644 --- a/src/SFML/Window/FreeBSD/JoystickImpl.cpp +++ b/src/SFML/Window/FreeBSD/JoystickImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // 2013-2013 David Demelier (demelier.david@gmail.com) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/FreeBSD/JoystickImpl.hpp b/src/SFML/Window/FreeBSD/JoystickImpl.hpp index f16672cd..3a24df78 100644 --- a/src/SFML/Window/FreeBSD/JoystickImpl.hpp +++ b/src/SFML/Window/FreeBSD/JoystickImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/GlContext.cpp b/src/SFML/Window/GlContext.cpp index 32ef89d3..00d4a200 100644 --- a/src/SFML/Window/GlContext.cpp +++ b/src/SFML/Window/GlContext.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/GlContext.hpp b/src/SFML/Window/GlContext.hpp index fb76a029..1f447622 100644 --- a/src/SFML/Window/GlContext.hpp +++ b/src/SFML/Window/GlContext.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/GlResource.cpp b/src/SFML/Window/GlResource.cpp index 64c7f602..538fa3bf 100644 --- a/src/SFML/Window/GlResource.cpp +++ b/src/SFML/Window/GlResource.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/InputImpl.hpp b/src/SFML/Window/InputImpl.hpp index 61982965..4294bdb4 100644 --- a/src/SFML/Window/InputImpl.hpp +++ b/src/SFML/Window/InputImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Joystick.cpp b/src/SFML/Window/Joystick.cpp index 13faa2cd..29fb4dd2 100644 --- a/src/SFML/Window/Joystick.cpp +++ b/src/SFML/Window/Joystick.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/JoystickImpl.hpp b/src/SFML/Window/JoystickImpl.hpp index d469ff0c..e6835526 100644 --- a/src/SFML/Window/JoystickImpl.hpp +++ b/src/SFML/Window/JoystickImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/JoystickManager.cpp b/src/SFML/Window/JoystickManager.cpp index 0741fdf7..12eaa590 100644 --- a/src/SFML/Window/JoystickManager.cpp +++ b/src/SFML/Window/JoystickManager.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/JoystickManager.hpp b/src/SFML/Window/JoystickManager.hpp index 10ba6a20..7289af76 100644 --- a/src/SFML/Window/JoystickManager.hpp +++ b/src/SFML/Window/JoystickManager.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Keyboard.cpp b/src/SFML/Window/Keyboard.cpp index d37e3f87..4cf43202 100644 --- a/src/SFML/Window/Keyboard.cpp +++ b/src/SFML/Window/Keyboard.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Mouse.cpp b/src/SFML/Window/Mouse.cpp index a64bb9a7..2009413e 100644 --- a/src/SFML/Window/Mouse.cpp +++ b/src/SFML/Window/Mouse.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/OSX/AutoreleasePoolWrapper.h b/src/SFML/Window/OSX/AutoreleasePoolWrapper.h index bf3125eb..04097fe8 100644 --- a/src/SFML/Window/OSX/AutoreleasePoolWrapper.h +++ b/src/SFML/Window/OSX/AutoreleasePoolWrapper.h @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/AutoreleasePoolWrapper.mm b/src/SFML/Window/OSX/AutoreleasePoolWrapper.mm index b8f5c1a4..3ec0a09f 100644 --- a/src/SFML/Window/OSX/AutoreleasePoolWrapper.mm +++ b/src/SFML/Window/OSX/AutoreleasePoolWrapper.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/ClipboardImpl.hpp b/src/SFML/Window/OSX/ClipboardImpl.hpp index a59de40d..28adae1a 100644 --- a/src/SFML/Window/OSX/ClipboardImpl.hpp +++ b/src/SFML/Window/OSX/ClipboardImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/OSX/ClipboardImpl.mm b/src/SFML/Window/OSX/ClipboardImpl.mm index 6f051b5b..5a8438c7 100644 --- a/src/SFML/Window/OSX/ClipboardImpl.mm +++ b/src/SFML/Window/OSX/ClipboardImpl.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/OSX/CursorImpl.hpp b/src/SFML/Window/OSX/CursorImpl.hpp index f12b94b0..f0bd1850 100644 --- a/src/SFML/Window/OSX/CursorImpl.hpp +++ b/src/SFML/Window/OSX/CursorImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/CursorImpl.mm b/src/SFML/Window/OSX/CursorImpl.mm index 1ca93607..a3539137 100644 --- a/src/SFML/Window/OSX/CursorImpl.mm +++ b/src/SFML/Window/OSX/CursorImpl.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/HIDInputManager.hpp b/src/SFML/Window/OSX/HIDInputManager.hpp index 3e143c8a..e6f8c493 100644 --- a/src/SFML/Window/OSX/HIDInputManager.hpp +++ b/src/SFML/Window/OSX/HIDInputManager.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/HIDInputManager.mm b/src/SFML/Window/OSX/HIDInputManager.mm index 7fd40ecb..3c44eab6 100644 --- a/src/SFML/Window/OSX/HIDInputManager.mm +++ b/src/SFML/Window/OSX/HIDInputManager.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/HIDJoystickManager.cpp b/src/SFML/Window/OSX/HIDJoystickManager.cpp index 0a7cb7c8..d1727bf0 100644 --- a/src/SFML/Window/OSX/HIDJoystickManager.cpp +++ b/src/SFML/Window/OSX/HIDJoystickManager.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/HIDJoystickManager.hpp b/src/SFML/Window/OSX/HIDJoystickManager.hpp index 32e79c80..f87c7a32 100644 --- a/src/SFML/Window/OSX/HIDJoystickManager.hpp +++ b/src/SFML/Window/OSX/HIDJoystickManager.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/InputImpl.hpp b/src/SFML/Window/OSX/InputImpl.hpp index 30943407..202b2a73 100644 --- a/src/SFML/Window/OSX/InputImpl.hpp +++ b/src/SFML/Window/OSX/InputImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/InputImpl.mm b/src/SFML/Window/OSX/InputImpl.mm index 0397237a..b3c7d11c 100644 --- a/src/SFML/Window/OSX/InputImpl.mm +++ b/src/SFML/Window/OSX/InputImpl.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/JoystickImpl.cpp b/src/SFML/Window/OSX/JoystickImpl.cpp index 333cf462..4f4ee114 100644 --- a/src/SFML/Window/OSX/JoystickImpl.cpp +++ b/src/SFML/Window/OSX/JoystickImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/JoystickImpl.hpp b/src/SFML/Window/OSX/JoystickImpl.hpp index cdcd741d..96304094 100644 --- a/src/SFML/Window/OSX/JoystickImpl.hpp +++ b/src/SFML/Window/OSX/JoystickImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/NSImage+raw.h b/src/SFML/Window/OSX/NSImage+raw.h index 4530c136..f65363d9 100644 --- a/src/SFML/Window/OSX/NSImage+raw.h +++ b/src/SFML/Window/OSX/NSImage+raw.h @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/NSImage+raw.mm b/src/SFML/Window/OSX/NSImage+raw.mm index 03bd6d9e..ac0e7771 100644 --- a/src/SFML/Window/OSX/NSImage+raw.mm +++ b/src/SFML/Window/OSX/NSImage+raw.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFApplication.h b/src/SFML/Window/OSX/SFApplication.h index b2a97531..3ee0e8fe 100644 --- a/src/SFML/Window/OSX/SFApplication.h +++ b/src/SFML/Window/OSX/SFApplication.h @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFApplication.m b/src/SFML/Window/OSX/SFApplication.m index a438c7a1..311ec24b 100644 --- a/src/SFML/Window/OSX/SFApplication.m +++ b/src/SFML/Window/OSX/SFApplication.m @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFApplicationDelegate.h b/src/SFML/Window/OSX/SFApplicationDelegate.h index 9f39e923..9ebbedcc 100644 --- a/src/SFML/Window/OSX/SFApplicationDelegate.h +++ b/src/SFML/Window/OSX/SFApplicationDelegate.h @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFApplicationDelegate.m b/src/SFML/Window/OSX/SFApplicationDelegate.m index a6fff904..381e4126 100644 --- a/src/SFML/Window/OSX/SFApplicationDelegate.m +++ b/src/SFML/Window/OSX/SFApplicationDelegate.m @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFContext.hpp b/src/SFML/Window/OSX/SFContext.hpp index 87473a58..2fedc803 100644 --- a/src/SFML/Window/OSX/SFContext.hpp +++ b/src/SFML/Window/OSX/SFContext.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFContext.mm b/src/SFML/Window/OSX/SFContext.mm index 4bd3c3eb..02ffe36d 100644 --- a/src/SFML/Window/OSX/SFContext.mm +++ b/src/SFML/Window/OSX/SFContext.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFKeyboardModifiersHelper.h b/src/SFML/Window/OSX/SFKeyboardModifiersHelper.h index ea2d5a17..b2cf0b1c 100644 --- a/src/SFML/Window/OSX/SFKeyboardModifiersHelper.h +++ b/src/SFML/Window/OSX/SFKeyboardModifiersHelper.h @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFKeyboardModifiersHelper.mm b/src/SFML/Window/OSX/SFKeyboardModifiersHelper.mm index 105e9110..fd6dfe37 100644 --- a/src/SFML/Window/OSX/SFKeyboardModifiersHelper.mm +++ b/src/SFML/Window/OSX/SFKeyboardModifiersHelper.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFOpenGLView+keyboard.mm b/src/SFML/Window/OSX/SFOpenGLView+keyboard.mm index eb3e1231..e9a6fac6 100644 --- a/src/SFML/Window/OSX/SFOpenGLView+keyboard.mm +++ b/src/SFML/Window/OSX/SFOpenGLView+keyboard.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFOpenGLView+keyboard_priv.h b/src/SFML/Window/OSX/SFOpenGLView+keyboard_priv.h index 8496affa..31e6a659 100644 --- a/src/SFML/Window/OSX/SFOpenGLView+keyboard_priv.h +++ b/src/SFML/Window/OSX/SFOpenGLView+keyboard_priv.h @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFOpenGLView+mouse.mm b/src/SFML/Window/OSX/SFOpenGLView+mouse.mm index 99acef0b..b812dd2f 100644 --- a/src/SFML/Window/OSX/SFOpenGLView+mouse.mm +++ b/src/SFML/Window/OSX/SFOpenGLView+mouse.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFOpenGLView+mouse_priv.h b/src/SFML/Window/OSX/SFOpenGLView+mouse_priv.h index fb64368a..05eba4df 100644 --- a/src/SFML/Window/OSX/SFOpenGLView+mouse_priv.h +++ b/src/SFML/Window/OSX/SFOpenGLView+mouse_priv.h @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFOpenGLView.h b/src/SFML/Window/OSX/SFOpenGLView.h index b2a66896..641eab28 100644 --- a/src/SFML/Window/OSX/SFOpenGLView.h +++ b/src/SFML/Window/OSX/SFOpenGLView.h @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFOpenGLView.mm b/src/SFML/Window/OSX/SFOpenGLView.mm index 85d5cd8d..b6eb0d2f 100644 --- a/src/SFML/Window/OSX/SFOpenGLView.mm +++ b/src/SFML/Window/OSX/SFOpenGLView.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFSilentResponder.h b/src/SFML/Window/OSX/SFSilentResponder.h index de0471c7..da94d129 100644 --- a/src/SFML/Window/OSX/SFSilentResponder.h +++ b/src/SFML/Window/OSX/SFSilentResponder.h @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFSilentResponder.m b/src/SFML/Window/OSX/SFSilentResponder.m index 55c0fb84..8aa63ab1 100644 --- a/src/SFML/Window/OSX/SFSilentResponder.m +++ b/src/SFML/Window/OSX/SFSilentResponder.m @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFViewController.h b/src/SFML/Window/OSX/SFViewController.h index f0e59f47..cc5108a9 100644 --- a/src/SFML/Window/OSX/SFViewController.h +++ b/src/SFML/Window/OSX/SFViewController.h @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFViewController.mm b/src/SFML/Window/OSX/SFViewController.mm index c8266be0..8d5cb34a 100644 --- a/src/SFML/Window/OSX/SFViewController.mm +++ b/src/SFML/Window/OSX/SFViewController.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFWindow.h b/src/SFML/Window/OSX/SFWindow.h index 9e9a9e38..58875a6e 100644 --- a/src/SFML/Window/OSX/SFWindow.h +++ b/src/SFML/Window/OSX/SFWindow.h @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFWindow.m b/src/SFML/Window/OSX/SFWindow.m index 77bc637f..ae348dce 100644 --- a/src/SFML/Window/OSX/SFWindow.m +++ b/src/SFML/Window/OSX/SFWindow.m @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFWindowController.h b/src/SFML/Window/OSX/SFWindowController.h index 62e346a4..cba2b304 100644 --- a/src/SFML/Window/OSX/SFWindowController.h +++ b/src/SFML/Window/OSX/SFWindowController.h @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SFWindowController.mm b/src/SFML/Window/OSX/SFWindowController.mm index 190af4df..bc368c73 100644 --- a/src/SFML/Window/OSX/SFWindowController.mm +++ b/src/SFML/Window/OSX/SFWindowController.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/Scaling.h b/src/SFML/Window/OSX/Scaling.h index a71f62d9..f44c77e0 100644 --- a/src/SFML/Window/OSX/Scaling.h +++ b/src/SFML/Window/OSX/Scaling.h @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/SensorImpl.cpp b/src/SFML/Window/OSX/SensorImpl.cpp index a0c83977..e91d5cdf 100644 --- a/src/SFML/Window/OSX/SensorImpl.cpp +++ b/src/SFML/Window/OSX/SensorImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/OSX/SensorImpl.hpp b/src/SFML/Window/OSX/SensorImpl.hpp index 3da61189..c7555279 100644 --- a/src/SFML/Window/OSX/SensorImpl.hpp +++ b/src/SFML/Window/OSX/SensorImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/OSX/VideoModeImpl.cpp b/src/SFML/Window/OSX/VideoModeImpl.cpp index 4370926e..741c4bd2 100644 --- a/src/SFML/Window/OSX/VideoModeImpl.cpp +++ b/src/SFML/Window/OSX/VideoModeImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/WindowImplCocoa.hpp b/src/SFML/Window/OSX/WindowImplCocoa.hpp index 0035fe94..efa0f667 100644 --- a/src/SFML/Window/OSX/WindowImplCocoa.hpp +++ b/src/SFML/Window/OSX/WindowImplCocoa.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/WindowImplCocoa.mm b/src/SFML/Window/OSX/WindowImplCocoa.mm index eaa67bfe..e68f42e6 100644 --- a/src/SFML/Window/OSX/WindowImplCocoa.mm +++ b/src/SFML/Window/OSX/WindowImplCocoa.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/WindowImplDelegateProtocol.h b/src/SFML/Window/OSX/WindowImplDelegateProtocol.h index 29d8410c..925c9e51 100644 --- a/src/SFML/Window/OSX/WindowImplDelegateProtocol.h +++ b/src/SFML/Window/OSX/WindowImplDelegateProtocol.h @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/cg_sf_conversion.hpp b/src/SFML/Window/OSX/cg_sf_conversion.hpp index 099e0c5a..41c3835c 100644 --- a/src/SFML/Window/OSX/cg_sf_conversion.hpp +++ b/src/SFML/Window/OSX/cg_sf_conversion.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/cg_sf_conversion.mm b/src/SFML/Window/OSX/cg_sf_conversion.mm index dfc8f394..06d0fe51 100644 --- a/src/SFML/Window/OSX/cg_sf_conversion.mm +++ b/src/SFML/Window/OSX/cg_sf_conversion.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/cpp_objc_conversion.h b/src/SFML/Window/OSX/cpp_objc_conversion.h index 572829f6..9ecd9df0 100644 --- a/src/SFML/Window/OSX/cpp_objc_conversion.h +++ b/src/SFML/Window/OSX/cpp_objc_conversion.h @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/OSX/cpp_objc_conversion.mm b/src/SFML/Window/OSX/cpp_objc_conversion.mm index d3534069..d9422701 100644 --- a/src/SFML/Window/OSX/cpp_objc_conversion.mm +++ b/src/SFML/Window/OSX/cpp_objc_conversion.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/src/SFML/Window/Sensor.cpp b/src/SFML/Window/Sensor.cpp index 3caf78fc..316b8d5f 100644 --- a/src/SFML/Window/Sensor.cpp +++ b/src/SFML/Window/Sensor.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/SensorImpl.hpp b/src/SFML/Window/SensorImpl.hpp index bc42532a..cd50911a 100644 --- a/src/SFML/Window/SensorImpl.hpp +++ b/src/SFML/Window/SensorImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/SensorManager.cpp b/src/SFML/Window/SensorManager.cpp index 1c14e0e7..73304bee 100644 --- a/src/SFML/Window/SensorManager.cpp +++ b/src/SFML/Window/SensorManager.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/SensorManager.hpp b/src/SFML/Window/SensorManager.hpp index 85c433a7..41b31729 100644 --- a/src/SFML/Window/SensorManager.hpp +++ b/src/SFML/Window/SensorManager.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Touch.cpp b/src/SFML/Window/Touch.cpp index bac6a93e..67c60da1 100644 --- a/src/SFML/Window/Touch.cpp +++ b/src/SFML/Window/Touch.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/ClipboardImpl.cpp b/src/SFML/Window/Unix/ClipboardImpl.cpp index a01ca932..32ea47e8 100644 --- a/src/SFML/Window/Unix/ClipboardImpl.cpp +++ b/src/SFML/Window/Unix/ClipboardImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/ClipboardImpl.hpp b/src/SFML/Window/Unix/ClipboardImpl.hpp index ab9e1548..a61593bc 100644 --- a/src/SFML/Window/Unix/ClipboardImpl.hpp +++ b/src/SFML/Window/Unix/ClipboardImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/CursorImpl.cpp b/src/SFML/Window/Unix/CursorImpl.cpp index 2b566b7f..d088e482 100644 --- a/src/SFML/Window/Unix/CursorImpl.cpp +++ b/src/SFML/Window/Unix/CursorImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/CursorImpl.hpp b/src/SFML/Window/Unix/CursorImpl.hpp index 6740f220..ca39b782 100644 --- a/src/SFML/Window/Unix/CursorImpl.hpp +++ b/src/SFML/Window/Unix/CursorImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/Display.cpp b/src/SFML/Window/Unix/Display.cpp index f9157e97..3ebbf365 100644 --- a/src/SFML/Window/Unix/Display.cpp +++ b/src/SFML/Window/Unix/Display.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/Display.hpp b/src/SFML/Window/Unix/Display.hpp index c8a6687c..3a7c4035 100644 --- a/src/SFML/Window/Unix/Display.hpp +++ b/src/SFML/Window/Unix/Display.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/GlxContext.cpp b/src/SFML/Window/Unix/GlxContext.cpp index 0cc1b953..d6525eb5 100644 --- a/src/SFML/Window/Unix/GlxContext.cpp +++ b/src/SFML/Window/Unix/GlxContext.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/GlxContext.hpp b/src/SFML/Window/Unix/GlxContext.hpp index d8a80a0e..f5e4b879 100644 --- a/src/SFML/Window/Unix/GlxContext.hpp +++ b/src/SFML/Window/Unix/GlxContext.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/InputImpl.cpp b/src/SFML/Window/Unix/InputImpl.cpp index 3818805e..3f3b6d72 100644 --- a/src/SFML/Window/Unix/InputImpl.cpp +++ b/src/SFML/Window/Unix/InputImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/InputImpl.hpp b/src/SFML/Window/Unix/InputImpl.hpp index 741a92e5..99d1c718 100644 --- a/src/SFML/Window/Unix/InputImpl.hpp +++ b/src/SFML/Window/Unix/InputImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/JoystickImpl.cpp b/src/SFML/Window/Unix/JoystickImpl.cpp index a6fe1afc..483a0545 100644 --- a/src/SFML/Window/Unix/JoystickImpl.cpp +++ b/src/SFML/Window/Unix/JoystickImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/JoystickImpl.hpp b/src/SFML/Window/Unix/JoystickImpl.hpp index 946b9fd3..7f905271 100644 --- a/src/SFML/Window/Unix/JoystickImpl.hpp +++ b/src/SFML/Window/Unix/JoystickImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/SensorImpl.cpp b/src/SFML/Window/Unix/SensorImpl.cpp index a0c83977..e91d5cdf 100644 --- a/src/SFML/Window/Unix/SensorImpl.cpp +++ b/src/SFML/Window/Unix/SensorImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/SensorImpl.hpp b/src/SFML/Window/Unix/SensorImpl.hpp index 67a9277b..4ef84573 100644 --- a/src/SFML/Window/Unix/SensorImpl.hpp +++ b/src/SFML/Window/Unix/SensorImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/VideoModeImpl.cpp b/src/SFML/Window/Unix/VideoModeImpl.cpp index 9107e9c5..6cc04657 100644 --- a/src/SFML/Window/Unix/VideoModeImpl.cpp +++ b/src/SFML/Window/Unix/VideoModeImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/VulkanImplX11.cpp b/src/SFML/Window/Unix/VulkanImplX11.cpp index 5b57e298..1ec6e341 100644 --- a/src/SFML/Window/Unix/VulkanImplX11.cpp +++ b/src/SFML/Window/Unix/VulkanImplX11.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/VulkanImplX11.hpp b/src/SFML/Window/Unix/VulkanImplX11.hpp index 1c86c76d..ded47e92 100644 --- a/src/SFML/Window/Unix/VulkanImplX11.hpp +++ b/src/SFML/Window/Unix/VulkanImplX11.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/WindowImplX11.cpp b/src/SFML/Window/Unix/WindowImplX11.cpp index 1b2e78b9..726eef4f 100644 --- a/src/SFML/Window/Unix/WindowImplX11.cpp +++ b/src/SFML/Window/Unix/WindowImplX11.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Unix/WindowImplX11.hpp b/src/SFML/Window/Unix/WindowImplX11.hpp index 2a107ab7..0237dd36 100644 --- a/src/SFML/Window/Unix/WindowImplX11.hpp +++ b/src/SFML/Window/Unix/WindowImplX11.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/VideoMode.cpp b/src/SFML/Window/VideoMode.cpp index d1f9e46e..a8ca72cc 100644 --- a/src/SFML/Window/VideoMode.cpp +++ b/src/SFML/Window/VideoMode.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/VideoModeImpl.hpp b/src/SFML/Window/VideoModeImpl.hpp index d5dbed2a..3be196d6 100644 --- a/src/SFML/Window/VideoModeImpl.hpp +++ b/src/SFML/Window/VideoModeImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Vulkan.cpp b/src/SFML/Window/Vulkan.cpp index f7b2be15..1a13beeb 100644 --- a/src/SFML/Window/Vulkan.cpp +++ b/src/SFML/Window/Vulkan.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Win32/ClipboardImpl.cpp b/src/SFML/Window/Win32/ClipboardImpl.cpp index 17c02f13..8b88e1f3 100644 --- a/src/SFML/Window/Win32/ClipboardImpl.cpp +++ b/src/SFML/Window/Win32/ClipboardImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Win32/ClipboardImpl.hpp b/src/SFML/Window/Win32/ClipboardImpl.hpp index 6d627509..43b1202a 100644 --- a/src/SFML/Window/Win32/ClipboardImpl.hpp +++ b/src/SFML/Window/Win32/ClipboardImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Win32/CursorImpl.cpp b/src/SFML/Window/Win32/CursorImpl.cpp index 9d275b7a..cfe36f59 100755 --- a/src/SFML/Window/Win32/CursorImpl.cpp +++ b/src/SFML/Window/Win32/CursorImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Win32/CursorImpl.hpp b/src/SFML/Window/Win32/CursorImpl.hpp index 18dd3952..945a2680 100755 --- a/src/SFML/Window/Win32/CursorImpl.hpp +++ b/src/SFML/Window/Win32/CursorImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Win32/InputImpl.cpp b/src/SFML/Window/Win32/InputImpl.cpp index 5f4e993c..4ad03682 100644 --- a/src/SFML/Window/Win32/InputImpl.cpp +++ b/src/SFML/Window/Win32/InputImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Win32/InputImpl.hpp b/src/SFML/Window/Win32/InputImpl.hpp index 87e21209..483062a0 100644 --- a/src/SFML/Window/Win32/InputImpl.hpp +++ b/src/SFML/Window/Win32/InputImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Win32/JoystickImpl.cpp b/src/SFML/Window/Win32/JoystickImpl.cpp index 9f8339d5..49f85da3 100644 --- a/src/SFML/Window/Win32/JoystickImpl.cpp +++ b/src/SFML/Window/Win32/JoystickImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Win32/JoystickImpl.hpp b/src/SFML/Window/Win32/JoystickImpl.hpp index ffff8c33..0ed1d819 100644 --- a/src/SFML/Window/Win32/JoystickImpl.hpp +++ b/src/SFML/Window/Win32/JoystickImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Win32/SensorImpl.cpp b/src/SFML/Window/Win32/SensorImpl.cpp index a0c83977..e91d5cdf 100644 --- a/src/SFML/Window/Win32/SensorImpl.cpp +++ b/src/SFML/Window/Win32/SensorImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Win32/SensorImpl.hpp b/src/SFML/Window/Win32/SensorImpl.hpp index 1c50fa63..91265745 100644 --- a/src/SFML/Window/Win32/SensorImpl.hpp +++ b/src/SFML/Window/Win32/SensorImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Win32/VideoModeImpl.cpp b/src/SFML/Window/Win32/VideoModeImpl.cpp index 1f77be3f..3e305d01 100644 --- a/src/SFML/Window/Win32/VideoModeImpl.cpp +++ b/src/SFML/Window/Win32/VideoModeImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Win32/VulkanImplWin32.cpp b/src/SFML/Window/Win32/VulkanImplWin32.cpp index 6b68e9d2..a843b0b3 100644 --- a/src/SFML/Window/Win32/VulkanImplWin32.cpp +++ b/src/SFML/Window/Win32/VulkanImplWin32.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Win32/VulkanImplWin32.hpp b/src/SFML/Window/Win32/VulkanImplWin32.hpp index 11bf9a37..f3de5e66 100644 --- a/src/SFML/Window/Win32/VulkanImplWin32.hpp +++ b/src/SFML/Window/Win32/VulkanImplWin32.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Win32/WglContext.cpp b/src/SFML/Window/Win32/WglContext.cpp index 6252be02..62ca37fe 100644 --- a/src/SFML/Window/Win32/WglContext.cpp +++ b/src/SFML/Window/Win32/WglContext.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Win32/WglContext.hpp b/src/SFML/Window/Win32/WglContext.hpp index 47fb9328..184e06df 100644 --- a/src/SFML/Window/Win32/WglContext.hpp +++ b/src/SFML/Window/Win32/WglContext.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Win32/WindowImplWin32.cpp b/src/SFML/Window/Win32/WindowImplWin32.cpp index e9d1c18b..ed56f026 100755 --- a/src/SFML/Window/Win32/WindowImplWin32.cpp +++ b/src/SFML/Window/Win32/WindowImplWin32.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Win32/WindowImplWin32.hpp b/src/SFML/Window/Win32/WindowImplWin32.hpp index ba2f662d..c58d77d7 100755 --- a/src/SFML/Window/Win32/WindowImplWin32.hpp +++ b/src/SFML/Window/Win32/WindowImplWin32.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/Window.cpp b/src/SFML/Window/Window.cpp index 2ece6701..415b136c 100644 --- a/src/SFML/Window/Window.cpp +++ b/src/SFML/Window/Window.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/WindowBase.cpp b/src/SFML/Window/WindowBase.cpp index cfb6446e..5c18eefe 100644 --- a/src/SFML/Window/WindowBase.cpp +++ b/src/SFML/Window/WindowBase.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/WindowImpl.cpp b/src/SFML/Window/WindowImpl.cpp index cb5d026b..afbfddf8 100644 --- a/src/SFML/Window/WindowImpl.cpp +++ b/src/SFML/Window/WindowImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/WindowImpl.hpp b/src/SFML/Window/WindowImpl.hpp index abcf8ba6..f8d079c0 100644 --- a/src/SFML/Window/WindowImpl.hpp +++ b/src/SFML/Window/WindowImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/ClipboardImpl.hpp b/src/SFML/Window/iOS/ClipboardImpl.hpp index 2e26069d..ff555ac5 100644 --- a/src/SFML/Window/iOS/ClipboardImpl.hpp +++ b/src/SFML/Window/iOS/ClipboardImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/ClipboardImpl.mm b/src/SFML/Window/iOS/ClipboardImpl.mm index d241b508..48d95df5 100644 --- a/src/SFML/Window/iOS/ClipboardImpl.mm +++ b/src/SFML/Window/iOS/ClipboardImpl.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/CursorImpl.cpp b/src/SFML/Window/iOS/CursorImpl.cpp index d83fb64a..8a511a6c 100644 --- a/src/SFML/Window/iOS/CursorImpl.cpp +++ b/src/SFML/Window/iOS/CursorImpl.cpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/CursorImpl.hpp b/src/SFML/Window/iOS/CursorImpl.hpp index f64191dd..c7cb02dd 100644 --- a/src/SFML/Window/iOS/CursorImpl.hpp +++ b/src/SFML/Window/iOS/CursorImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/EaglContext.hpp b/src/SFML/Window/iOS/EaglContext.hpp index cef0c2ef..9c01c909 100644 --- a/src/SFML/Window/iOS/EaglContext.hpp +++ b/src/SFML/Window/iOS/EaglContext.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/EaglContext.mm b/src/SFML/Window/iOS/EaglContext.mm index 4d4da2d0..71514248 100644 --- a/src/SFML/Window/iOS/EaglContext.mm +++ b/src/SFML/Window/iOS/EaglContext.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/InputImpl.hpp b/src/SFML/Window/iOS/InputImpl.hpp index 6bde166a..c17c40b3 100644 --- a/src/SFML/Window/iOS/InputImpl.hpp +++ b/src/SFML/Window/iOS/InputImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/InputImpl.mm b/src/SFML/Window/iOS/InputImpl.mm index 6d14f313..c254eb3f 100644 --- a/src/SFML/Window/iOS/InputImpl.mm +++ b/src/SFML/Window/iOS/InputImpl.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/JoystickImpl.hpp b/src/SFML/Window/iOS/JoystickImpl.hpp index f09429a9..78047162 100644 --- a/src/SFML/Window/iOS/JoystickImpl.hpp +++ b/src/SFML/Window/iOS/JoystickImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/JoystickImpl.mm b/src/SFML/Window/iOS/JoystickImpl.mm index dea4b043..6f4ab141 100644 --- a/src/SFML/Window/iOS/JoystickImpl.mm +++ b/src/SFML/Window/iOS/JoystickImpl.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/ObjCType.hpp b/src/SFML/Window/iOS/ObjCType.hpp index 736b3ab9..5d90ed78 100644 --- a/src/SFML/Window/iOS/ObjCType.hpp +++ b/src/SFML/Window/iOS/ObjCType.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/SFAppDelegate.hpp b/src/SFML/Window/iOS/SFAppDelegate.hpp index da8e059c..d651d0c8 100644 --- a/src/SFML/Window/iOS/SFAppDelegate.hpp +++ b/src/SFML/Window/iOS/SFAppDelegate.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/SFAppDelegate.mm b/src/SFML/Window/iOS/SFAppDelegate.mm index a57b7aa4..4618199a 100644 --- a/src/SFML/Window/iOS/SFAppDelegate.mm +++ b/src/SFML/Window/iOS/SFAppDelegate.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/SFMain.hpp b/src/SFML/Window/iOS/SFMain.hpp index dbb8e6a5..815c3ccd 100644 --- a/src/SFML/Window/iOS/SFMain.hpp +++ b/src/SFML/Window/iOS/SFMain.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/SFMain.mm b/src/SFML/Window/iOS/SFMain.mm index 4a3aec30..f51cdac4 100644 --- a/src/SFML/Window/iOS/SFMain.mm +++ b/src/SFML/Window/iOS/SFMain.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/SFView.hpp b/src/SFML/Window/iOS/SFView.hpp index 470760c6..ef11530a 100644 --- a/src/SFML/Window/iOS/SFView.hpp +++ b/src/SFML/Window/iOS/SFView.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/SFView.mm b/src/SFML/Window/iOS/SFView.mm index a832f933..1cb06061 100644 --- a/src/SFML/Window/iOS/SFView.mm +++ b/src/SFML/Window/iOS/SFView.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/SFViewController.hpp b/src/SFML/Window/iOS/SFViewController.hpp index a2ff188d..3db3ea29 100644 --- a/src/SFML/Window/iOS/SFViewController.hpp +++ b/src/SFML/Window/iOS/SFViewController.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/SFViewController.mm b/src/SFML/Window/iOS/SFViewController.mm index 79451258..2a00cd42 100644 --- a/src/SFML/Window/iOS/SFViewController.mm +++ b/src/SFML/Window/iOS/SFViewController.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/SensorImpl.hpp b/src/SFML/Window/iOS/SensorImpl.hpp index 14f3fca2..8bd1bd60 100644 --- a/src/SFML/Window/iOS/SensorImpl.hpp +++ b/src/SFML/Window/iOS/SensorImpl.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/SensorImpl.mm b/src/SFML/Window/iOS/SensorImpl.mm index 9c6f2ea2..60d65b33 100644 --- a/src/SFML/Window/iOS/SensorImpl.mm +++ b/src/SFML/Window/iOS/SensorImpl.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/VideoModeImpl.mm b/src/SFML/Window/iOS/VideoModeImpl.mm index 8f9dce0b..2887a42e 100644 --- a/src/SFML/Window/iOS/VideoModeImpl.mm +++ b/src/SFML/Window/iOS/VideoModeImpl.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/WindowImplUIKit.hpp b/src/SFML/Window/iOS/WindowImplUIKit.hpp index 9b340f64..c590c7c1 100644 --- a/src/SFML/Window/iOS/WindowImplUIKit.hpp +++ b/src/SFML/Window/iOS/WindowImplUIKit.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/src/SFML/Window/iOS/WindowImplUIKit.mm b/src/SFML/Window/iOS/WindowImplUIKit.mm index 7caeb063..d53ac89e 100644 --- a/src/SFML/Window/iOS/WindowImplUIKit.mm +++ b/src/SFML/Window/iOS/WindowImplUIKit.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Laurent Gomila (laurent@sfml-dev.org) +// Copyright (C) 2007-2020 Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/tools/xcode/templates/SFML/SFML App.xctemplate/ResourcePath.hpp b/tools/xcode/templates/SFML/SFML App.xctemplate/ResourcePath.hpp index f6b2550d..e3c15e69 100644 --- a/tools/xcode/templates/SFML/SFML App.xctemplate/ResourcePath.hpp +++ b/tools/xcode/templates/SFML/SFML App.xctemplate/ResourcePath.hpp @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/tools/xcode/templates/SFML/SFML App.xctemplate/ResourcePath.mm b/tools/xcode/templates/SFML/SFML App.xctemplate/ResourcePath.mm index d16426a4..f4be3508 100644 --- a/tools/xcode/templates/SFML/SFML App.xctemplate/ResourcePath.mm +++ b/tools/xcode/templates/SFML/SFML App.xctemplate/ResourcePath.mm @@ -1,7 +1,7 @@ //////////////////////////////////////////////////////////// // // SFML - Simple and Fast Multimedia Library -// Copyright (C) 2007-2019 Marco Antognini (antognini.marco@gmail.com), +// Copyright (C) 2007-2020 Marco Antognini (antognini.marco@gmail.com), // Laurent Gomila (laurent@sfml-dev.org) // // This software is provided 'as-is', without any express or implied warranty. diff --git a/tools/xcode/templates/SFML/SFML App.xctemplate/TemplateInfo.plist.in b/tools/xcode/templates/SFML/SFML App.xctemplate/TemplateInfo.plist.in index f7cc802c..51858431 100644 --- a/tools/xcode/templates/SFML/SFML App.xctemplate/TemplateInfo.plist.in +++ b/tools/xcode/templates/SFML/SFML App.xctemplate/TemplateInfo.plist.in @@ -3,7 +3,7 @@