diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 00000000..cd0ee3d0
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,55 @@
+name: CI
+
+on: [push, pull_request]
+
+jobs:
+ build:
+ name: ${{ matrix.platform.name }} ${{ matrix.config.name }}
+ runs-on: ${{ matrix.platform.os }}
+
+ strategy:
+ matrix:
+ platform:
+ - { name: Windows VS2017, os: windows-2016 }
+ - { name: Windows VS2019, os: windows-latest }
+ - { name: Linux GCC, os: ubuntu-latest }
+ - { name: Linux Clang, os: ubuntu-latest, flags: -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ }
+ - { name: MacOS XCode, os: macos-latest }
+ config:
+ - { name: Shared, flags: -DBUILD_SHARED_LIBS=TRUE }
+ - { name: Static, flags: -DBUILD_SHARED_LIBS=FALSE }
+
+ include:
+ - platform: { name: MacOS XCode, os: macos-latest }
+ config: { name: Frameworks, flags: -DSFML_BUILD_FRAMEWORKS=TRUE }
+ - platform: { name: MacOS XCode, os: macos-latest }
+ config: { name: iOS, flags: -DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/cmake/toolchains/iOS.toolchain.cmake -DIOS_PLATFORM=SIMULATOR }
+ - platform: { name: Android, os: ubuntu-latest }
+ config: { name: x86, flags: -DCMAKE_ANDROID_ARCH_ABI=x86 -DCMAKE_SYSTEM_NAME=Android -DSFML_BUILD_TEST_SUITE=FALSE -DCMAKE_ANDROID_NDK=$GITHUB_WORKSPACE/android-ndk-r18b -DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang -DCMAKE_ANDROID_STL_TYPE=c++_shared -DCMAKE_ANDROID_API=26 }
+ - platform: { name: Android, os: ubuntu-latest }
+ config: { name: armeabi-v7a, flags: -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a -DCMAKE_SYSTEM_NAME=Android -DSFML_BUILD_TEST_SUITE=FALSE -DCMAKE_ANDROID_NDK=$GITHUB_WORKSPACE/android-ndk-r18b -DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang -DCMAKE_ANDROID_STL_TYPE=c++_shared -DCMAKE_ANDROID_API=26 }
+ steps:
+ - name: Checkout Code
+ uses: actions/checkout@v2
+
+ - name: Install Linux Dependencies
+ if: runner.os == 'Linux'
+ run: sudo apt-get install libxrandr-dev libxcursor-dev libudev-dev libopenal-dev libflac-dev libvorbis-dev libgl1-mesa-dev libegl1-mesa-dev
+
+
+ - name: Install Android Components
+ if: matrix.platform.name == 'Android'
+ run: |
+ echo "y" | /usr/local/lib/android/sdk/tools/bin/sdkmanager --install "cmake;3.10.2.4988404" --sdk_root=ANDROID_SDK_ROOT
+ sudo ln -sf /usr/local/lib/android/sdk/cmake/3.10.2.4988404/bin/cmake /usr/bin/cmake
+ wget -nv https://dl.google.com/android/repository/android-ndk-r18b-linux-x86_64.zip -P $GITHUB_WORKSPACE
+ unzip -qq -d $GITHUB_WORKSPACE android-ndk-r18b-linux-x86_64.zip
+
+
+ - name: Configure CMake
+ shell: bash
+ run: cmake -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build -DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install -DSFML_BUILD_EXAMPLES=TRUE -DCMAKE_VERBOSE_MAKEFILE=ON -DSFML_BUILD_TEST_SUITE=TRUE ${{matrix.platform.flags}} ${{matrix.config.flags}}
+
+ - name: Build
+ shell: bash
+ run: cmake --build $GITHUB_WORKSPACE/build --config Release --target install
diff --git a/.travis.yml b/.travis.yml
index ebefd2c0..953ae090 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,6 +4,7 @@ addons:
apt_packages:
- cmake
- libxrandr-dev
+ - libxcursor-dev
- libudev-dev
- libopenal-dev
- libflac-dev
@@ -14,7 +15,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 +75,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
@@ -96,7 +119,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
diff --git a/cmake/SFMLConfigDependencies.cmake.in b/cmake/SFMLConfigDependencies.cmake.in
index 459577cb..c5813bd6 100644
--- a/cmake/SFMLConfigDependencies.cmake.in
+++ b/cmake/SFMLConfigDependencies.cmake.in
@@ -47,6 +47,7 @@ if(SFML_STATIC_LIBRARIES)
if(FIND_SFML_OS_LINUX OR FIND_SFML_OS_FREEBSD)
sfml_bind_dependency(TARGET X11 FRIENDLY_NAME "X11" SEARCH_NAMES "X11")
sfml_bind_dependency(TARGET X11 FRIENDLY_NAME "Xrandr" SEARCH_NAMES "Xrandr")
+ sfml_bind_dependency(TARGET X11 FRIENDLY_NAME "Xcursor" SEARCH_NAMES "Xcursor")
endif()
if(FIND_SFML_OS_LINUX)
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.
///
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 f1c7f1f5..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.
@@ -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/include/SFML/Config.hpp b/include/SFML/Config.hpp
index 70b4a92d..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.
@@ -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)
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 49a9f863..b8e5d925 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.
@@ -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
///
@@ -253,6 +275,32 @@ public:
////////////////////////////////////////////////////////////
const Texture& getTexture(unsigned int characterSize) const;
+ ////////////////////////////////////////////////////////////
+ /// \brief Enable or disable the smooth filter
+ ///
+ /// When the filter is activated, the font appears smoother
+ /// so that pixels are less noticeable. However if you want
+ /// the font to look exactly the same as its source file,
+ /// you should disable it.
+ /// The smooth filter is enabled by default.
+ ///
+ /// \param smooth True to enable smoothing, false to disable it
+ ///
+ /// \see isSmooth
+ ///
+ ////////////////////////////////////////////////////////////
+ void setSmooth(bool smooth);
+
+ ////////////////////////////////////////////////////////////
+ /// \brief Tell whether the smooth filter is enabled or not
+ ///
+ /// \return True if smoothing is enabled, false if it is disabled
+ ///
+ /// \see setSmooth
+ ///
+ ////////////////////////////////////////////////////////////
+ bool isSmooth() const;
+
////////////////////////////////////////////////////////////
/// \brief Overload of assignment operator
///
@@ -351,6 +399,7 @@ private:
void* m_streamRec; //!< Pointer to the stream rec instance (it is typeless to avoid exposing implementation details)
void* m_stroker; //!< Pointer to the stroker (it is typeless to avoid exposing implementation details)
int* m_refCount; //!< Reference counter used by implicit sharing
+ bool m_isSmooth; //!< Status of the smooth filter
Info m_info; //!< Information about the font
mutable PageTable m_pages; //!< Table containing the glyphs pages by character size
mutable std::vector m_pixelBuffer; //!< Pixel buffer holding a glyph's pixels before being written to the texture
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 1f99f6d1..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.
@@ -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/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 826a156d..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.
@@ -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
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..ea29c504 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.
@@ -129,7 +129,8 @@ public:
/// position is. Any mouse actions that are performed will
/// return the window/screen location of the hotspot.
///
- /// \warning On Unix, the pixels are mapped into a monochrome
+ /// \warning On Unix platforms which do not support colored
+ /// cursors, the pixels are mapped into a monochrome
/// bitmap: pixels with an alpha channel to 0 are
/// transparent, black if the RGB channel are close
/// to zero, and white otherwise.
diff --git a/include/SFML/Window/Event.hpp b/include/SFML/Window/Event.hpp
index 84d8df3b..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.
@@ -61,12 +61,11 @@ public:
////////////////////////////////////////////////////////////
struct KeyEvent
{
- Keyboard::Key code; //!< Code of the key that has been pressed
- Keyboard::Scancode scancode; //!< Physical code of the key that has been pressed
- bool alt; //!< Is the Alt key pressed?
- bool control; //!< Is the Control key pressed?
- bool shift; //!< Is the Shift key pressed?
- bool system; //!< Is the System key pressed?
+ Keyboard::Key code; //!< Code of the key that has been pressed
+ 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/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 9c3fec7f..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.
@@ -33,8 +33,6 @@
namespace sf
{
-class String;
-
////////////////////////////////////////////////////////////
/// \brief Give access to the real-time state of the keyboard
///
@@ -46,10 +44,6 @@ 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
{
@@ -167,156 +161,6 @@ 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 `Scan` 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 Enter/Return key
- ScanEscape, ///< Keyboard Escape key
- ScanBackspace, ///< Keyboard Backspace 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
- ScanDash, ///< Keyboard Non-US # and ~
- // TODO hyphen vs minus vs dash
- ScanSemicolon, ///< Keyboard ; and : key
- ScanQuote, ///< Keyboard ' and " key
- ScanGraveAccent, ///< Keyboard ` and ~ key
- ScanComma, ///< Keyboard , and < key
- ScanPeriod, ///< Keyboard . and > key
- ScanSlash, ///< 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
- 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
- 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
///
@@ -327,73 +171,12 @@ 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::ScanUnknown 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::ScanLSystem
- /// 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 getDescription(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/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 5b6fff02..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.
@@ -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
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 4576987c..ddc9d361 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.
@@ -88,6 +88,7 @@ m_face (NULL),
m_streamRec(NULL),
m_stroker (NULL),
m_refCount (NULL),
+m_isSmooth (true),
m_info ()
{
#ifdef SFML_SYSTEM_ANDROID
@@ -105,7 +106,8 @@ m_stroker (copy.m_stroker),
m_refCount (copy.m_refCount),
m_info (copy.m_info),
m_pages (copy.m_pages),
-m_pixelBuffer(copy.m_pixelBuffer)
+m_pixelBuffer(copy.m_pixelBuffer),
+m_isSmooth (copy.m_isSmooth)
{
#ifdef SFML_SYSTEM_ANDROID
m_stream = NULL;
@@ -365,6 +367,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
{
@@ -461,6 +470,26 @@ const Texture& Font::getTexture(unsigned int characterSize) const
return m_pages[characterSize].texture;
}
+////////////////////////////////////////////////////////////
+void Font::setSmooth(bool smooth)
+{
+ if (smooth != m_isSmooth)
+ {
+ m_isSmooth = smooth;
+
+ for (sf::Font::PageTable::iterator page = m_pages.begin(); page != m_pages.end(); ++page)
+ {
+ page->second.texture.setSmooth(m_isSmooth);
+ }
+ }
+}
+
+////////////////////////////////////////////////////////////
+bool Font::isSmooth() const
+{
+ return m_isSmooth;
+}
+
////////////////////////////////////////////////////////////
Font& Font::operator =(const Font& right)
@@ -475,6 +504,7 @@ Font& Font::operator =(const Font& right)
std::swap(m_info, temp.m_info);
std::swap(m_pages, temp.m_pages);
std::swap(m_pixelBuffer, temp.m_pixelBuffer);
+ std::swap(m_isSmooth, temp.m_isSmooth);
#ifdef SFML_SYSTEM_ANDROID
std::swap(m_stream, temp.m_stream);
@@ -727,7 +757,7 @@ IntRect Font::findGlyphRect(Page& page, unsigned int width, unsigned int height)
// Make the texture 2 times bigger
Texture newTexture;
newTexture.create(textureWidth * 2, textureHeight * 2);
- newTexture.setSmooth(true);
+ newTexture.setSmooth(m_isSmooth);
newTexture.update(page.texture);
page.texture.swap(newTexture);
}
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/InputImpl.hpp b/src/SFML/Window/Android/InputImpl.hpp
index 139a5bbd..d2783e15 100644
--- a/src/SFML/Window/Android/InputImpl.hpp
+++ b/src/SFML/Window/Android/InputImpl.hpp
@@ -45,37 +45,19 @@ class InputImpl
public:
////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::isKeyPressed(Key)
+ /// \brief Check if a key is pressed
+ ///
+ /// \param key Key to check
+ ///
+ /// \return True if the key is pressed, false otherwise
///
////////////////////////////////////////////////////////////
static bool isKeyPressed(Keyboard::Key key);
////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::isKeyPressed(Scancode)
+ /// \brief Show or hide the virtual keyboard
///
- ////////////////////////////////////////////////////////////
- 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 getDescription(Keyboard::Scancode code);
-
- ////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::setVirtualKeyboardVisible
+ /// \param visible True to show, false to hide
///
////////////////////////////////////////////////////////////
static void setVirtualKeyboardVisible(bool visible);
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/CMakeLists.txt b/src/SFML/Window/CMakeLists.txt
index b176563e..982f4c40 100644
--- a/src/SFML/Window/CMakeLists.txt
+++ b/src/SFML/Window/CMakeLists.txt
@@ -91,12 +91,6 @@ 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/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
@@ -250,7 +244,7 @@ target_include_directories(sfml-window PRIVATE "${PROJECT_SOURCE_DIR}/extlibs/he
# find and setup usage for external libraries
if(SFML_OS_LINUX OR SFML_OS_FREEBSD OR SFML_OPENBSD)
- sfml_find_package(X11 INCLUDE "X11_INCLUDE_DIR" LINK "X11_X11_LIB" "X11_Xrandr_LIB")
+ sfml_find_package(X11 INCLUDE "X11_INCLUDE_DIR" LINK "X11_X11_LIB" "X11_Xrandr_LIB" "X11_Xcursor_LIB")
target_link_libraries(sfml-window PRIVATE X11)
endif()
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 0be3347d..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.
@@ -27,7 +27,6 @@
////////////////////////////////////////////////////////////
#include
#include
-#include
namespace sf
@@ -38,29 +37,6 @@ 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::getDescription(Scancode code)
-{
- return priv::InputImpl::getDescription(code);
-}
////////////////////////////////////////////////////////////
void Keyboard::setVirtualKeyboardVisible(bool visible)
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 e6c538dc..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.
@@ -65,6 +65,16 @@ 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:
////////////////////////////////////////////////////////////
@@ -93,64 +103,21 @@ public:
///
/// Return sf::Keyboard::Unknown if it doesn't match any 'localized' keys.
///
- /// 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
+ /// 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
/// US keyboard layouts.)
///
////////////////////////////////////////////////////////////
- static Keyboard::Key localizedKey(UniChar ch);
+ static Keyboard::Key localizedKeys(UniChar ch);
////////////////////////////////////////////////////////////
- /// Opposite transformation as localizedKeys
+ /// Try to convert a virtual keycode into a SFML key code.
///
- /// Return 0x00 (NULL) for non-convertible keys/numpad numbers.
- /// For letters, uppercase codes are returned.
- /// Some returned value are specific to macOS.
+ /// Return sf::Keyboard::Unknown if the keycode is unknown.
///
////////////////////////////////////////////////////////////
- static UniChar toUnicode(Keyboard::Key key);
-
- ////////////////////////////////////////////////////////////
- /// Try to convert a virtual keycode (HID level) into a
- /// SFML scancode.
- ///
- /// Return sf::Keyboard::ScanUnknown 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);
+ static Keyboard::Key nonLocalizedKeys(UniChar virtualKeycode);
private:
@@ -169,13 +136,7 @@ private:
////////////////////////////////////////////////////////////
/// \brief Initialize the keyboard part of this class
///
- /// 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
+ /// If something went wrong freeUp is called
///
////////////////////////////////////////////////////////////
void initializeKeyboard();
@@ -184,44 +145,28 @@ private:
/// \brief Load the given keyboard into m_keys
///
/// If the given keyboard has no key this function simply
- /// returns without calling freeUp because this is not fatal.
+ /// returns. freeUp is _not_ called because this is not fatal.
///
/// \param keyboard Keyboard to load
///
- /// \see initializeKeyboard
- ///
////////////////////////////////////////////////////////////
void loadKeyboard(IOHIDDeviceRef keyboard);
////////////////////////////////////////////////////////////
/// \brief Load the given key into m_keys
///
- /// On error, freeUp is _not_ called by this function.
+ /// 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.
- ///
- /// It is public to allow regular callback to forward the
- /// information to the manager.
- ///
- ////////////////////////////////////////////////////////////
-public:
- void buildMappings();
-private:
-
////////////////////////////////////////////////////////////
/// \brief Release all resources
///
- /// Close all connections to any devices.
- ///
- /// \see initializeKeyboard
+ /// Close all connections to any devices, if required
+ /// Set m_isValid to false
///
////////////////////////////////////////////////////////////
void freeUp();
@@ -229,11 +174,11 @@ private:
////////////////////////////////////////////////////////////
/// \brief Filter the devices and return them
///
- /// On error, freeUp is _not_ called by this function.
+ /// 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, non-emtpy CFSetRef of IOHIDDeviceRef or NULL
+ /// \return a retained CFSetRef of IOHIDDeviceRef or NULL
///
////////////////////////////////////////////////////////////
CFSetRef copyDevices(UInt32 page, UInt32 usage);
@@ -251,48 +196,36 @@ private:
bool isPressed(IOHIDElements& elements);
////////////////////////////////////////////////////////////
- /// \brief Convert a HID key usage to its corresponding scancode
+ /// \brief Convert a HID key usage to its corresponding virtual code
+ ///
+ /// See IOHIDUsageTables.h
///
/// \param usage Any kHIDUsage_Keyboard* usage
- /// \return the scancode associate with the given HID key usage
- /// or sUnknown if it is associate with no scancode.
+ /// \return the virtual code associate with the given HID key usage
+ /// or 0xff if it is associate with no virtual code
///
////////////////////////////////////////////////////////////
- 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);
+ static UInt8 usageToVirtualCode(UInt32 usage);
private:
////////////////////////////////////////////////////////////
// Member data
////////////////////////////////////////////////////////////
- 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
+ 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
////////////////////////////////////////////////////////////
- /// 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
+ /// 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
/// 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 19d4ec27..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.
@@ -30,15 +30,6 @@
#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
@@ -51,6 +42,13 @@ HIDInputManager& HIDInputManager::getInstance()
}
+////////////////////////////////////////////////////////////
+bool HIDInputManager::isKeyPressed(Keyboard::Key key)
+{
+ return isPressed(m_keys[key]);
+}
+
+
////////////////////////////////////////////////////////////
long HIDInputManager::getLocationID(IOHIDDeviceRef device)
{
@@ -93,141 +91,36 @@ 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::ScanUnknown) && isPressed(m_keys[code]);
-}
-
-
-////////////////////////////////////////////////////////////
-Keyboard::Key HIDInputManager::localize(Keyboard::Scancode code)
-{
- // TODO ensure mapping is still valid
- return m_scancodeToKeyMapping[code];
-}
-
-
-////////////////////////////////////////////////////////////
-Keyboard::Scancode HIDInputManager::unlocalize(Keyboard::Key key)
-{
- // TODO ensure mapping is still valid
- return m_keyToScancodeMapping[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::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::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::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)";
-
- 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)
@@ -237,19 +130,8 @@ m_manager(0)
return;
}
- // Build up our knownledge of the hardware
+ // Initialize the keyboard
initializeKeyboard();
- buildMappings();
-
- // Register for notification on keyboard layout changes
- CFNotificationCenterAddObserver(
- CFNotificationCenterGetDistributedCenter(),
- this,
- keyboardChanged, // callback
- kTISNotifySelectedKeyboardInputSourceChanged,
- NULL, // use callback
- CFNotificationSuspensionBehaviorDeliverImmediately
- );
}
@@ -257,8 +139,6 @@ m_manager(0)
HIDInputManager::~HIDInputManager()
{
freeUp();
-
- CFNotificationCenterRemoveEveryObserver(CFNotificationCenterGetDistributedCenter(), this);
}
@@ -266,23 +146,31 @@ void HIDInputManager::initializeKeyboard()
{
////////////////////////////////////////////////////////////
// The purpose of this function is to initialize m_keys so we can get
- // the associate IOHIDElementRef with a sf::Keyboard::Scancode
- // in approximately constant time.
+ // the associate IOHIDElementRef with a sf::Keyboard::Key in ~constant~ time.
// Get only keyboards
- CFSetRef underlying = copyDevices(kHIDPage_GenericDesktop, kHIDUsage_GD_Keyboard);
- if (underlying == NULL)
+ CFSetRef keyboards = copyDevices(kHIDPage_GenericDesktop, kHIDUsage_GD_Keyboard);
+ if (keyboards == NULL)
{
sf::err() << "No keyboard detected by the HID manager!" << std::endl;
freeUp();
return;
}
- NSSet* keyboards = static_cast(underlying); // Toll-Free Bridge
- for (id keyboard in keyboards)
- loadKeyboard(static_cast(keyboard));
+ CFIndex keyboardCount = CFSetGetCount(keyboards); // >= 1 (asserted by copyDevices)
- CFRelease(underlying);
+ // 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);
////////////////////////////////////////////////////////////
// At this point m_keys is filled with as many IOHIDElementRef as possible
@@ -292,105 +180,142 @@ void HIDInputManager::initializeKeyboard()
////////////////////////////////////////////////////////////
void HIDInputManager::loadKeyboard(IOHIDDeviceRef keyboard)
{
- CFArrayRef underlying = IOHIDDeviceCopyMatchingElements(keyboard, NULL, kIOHIDOptionsTypeNone);
- if ((underlying == NULL) || (CFArrayGetCount(underlying) == 0))
+ CFArrayRef keys = IOHIDDeviceCopyMatchingElements(keyboard,
+ NULL,
+ kIOHIDOptionsTypeNone);
+ if (keys == NULL)
{
- sf::err() << "We got a keyboard without any keys." << std::endl;
+ sf::err() << "We got a keyboard without any keys (1)" << std::endl;
return;
}
- NSArray* keys = static_cast(underlying); // Toll-Free Bridge
- for (id key in keys)
+ // How many elements are there?
+ CFIndex keysCount = CFArrayGetCount(keys);
+
+ if (keysCount == 0)
{
- IOHIDElementRef elem = static_cast(key);
- if (IOHIDElementGetUsagePage(elem) == kHIDPage_KeyboardOrKeypad)
- loadKey(elem);
+ sf::err() << "We got a keyboard without any keys (2)" << std::endl;
+ CFRelease(keys);
+ return;
}
- CFRelease(underlying);
+ // 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);
}
////////////////////////////////////////////////////////////
void HIDInputManager::loadKey(IOHIDElementRef key)
{
- UInt32 usage = IOHIDElementGetUsage(key);
- sf::Keyboard::Scancode code = usageToScancode(usage);
- if (code != Keyboard::ScanUnknown)
+ // 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)
{
- CFRetain(key);
- m_keys[code].push_back(key);
- }
-}
+ // Translation went fine
+ // The corresponding SFML key code
+ Keyboard::Key code = Keyboard::Unknown; // KeyCound means 'none'
-////////////////////////////////////////////////////////////
-void HIDInputManager::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;
+ // 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]);
- // Get the current keyboard layout
- TISInputSourceRef tis = TISCopyCurrentKeyboardLayoutInputSource();
- CFDataRef layoutData = (CFDataRef)TISGetInputSourceProperty(tis, kTISPropertyUnicodeKeyLayoutData);
+ // 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);
- 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::ScanCodeCount; ++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)
+ // A code was found, wonderful!
+ if (code != Keyboard::Unknown)
{
- sf::err() << "Cannot translate the virtual key code, error: " << error << "\n";
- continue;
+ // 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());
}
- Keyboard::Key code = (length > 0) ? localizedKey(string[0]) : Keyboard::Unknown;
- if (code == Keyboard::Unknown) code = localizedKeyFallback(scan);
+ ////////////////////////////////////////////////////////////
+ // 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
- if (code == Keyboard::Unknown) continue;
+ //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;
+ //}
- // Register the bi-mapping
- m_keyToScancodeMapping[code] = scan;
- m_scancodeToKeyMapping[scan] = code;
+ } /* if (error == noErr) */
+ else
+ {
+ sf::err() << "Cannot translate the virtual key code, error: "
+ << error
+ << std::endl;
}
-
- 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;
@@ -414,28 +339,32 @@ CFSetRef HIDInputManager::copyDevices(UInt32 page, UInt32 usage)
IOHIDManagerSetDeviceMatching(m_manager, mask);
CFRelease(mask);
- mask = NULL;
+ mask = 0;
CFSetRef devices = IOHIDManagerCopyDevices(m_manager);
if (devices == NULL)
return NULL;
// Is there at least one device?
- if (CFSetGetCount(devices) < 1)
+ CFIndex deviceCount = CFSetGetCount(devices);
+ if (deviceCount < 1)
{
CFRelease(devices);
return NULL;
}
-
+
return devices;
}
-
-////////////////////////////////////////////////////////////
bool HIDInputManager::isPressed(IOHIDElements& elements)
{
- bool pressed = false;
- for (IOHIDElements::iterator it = elements.begin(); it != elements.end() && !pressed; /* noop */)
+ 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 */)
{
IOHIDValueRef value = 0;
@@ -444,886 +373,493 @@ bool HIDInputManager::isPressed(IOHIDElements& elements)
if (!value)
{
- // This means some kind of error / disconnection so we remove this element from our database.
+ // This means some kind of error / disconnection so we remove this
+ // element from our buttons
CFRelease(*it);
it = elements.erase(it);
}
+ else if (IOHIDValueGetIntegerValue(value) == 1)
+ {
+ // This means the button is pressed
+ state = true;
+ break; // Stop here
+ }
else
{
- pressed = (IOHIDValueGetIntegerValue(value) == 1);
+ // This means the button is released
++it;
}
-
}
- return pressed;
+ return state;
}
////////////////////////////////////////////////////////////
-sf::Keyboard::Scancode HIDInputManager::usageToScancode(UInt32 usage)
+UInt8 HIDInputManager::usageToVirtualCode(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 sf::Keyboard::ScanUnknown;
- case kHIDUsage_KeyboardPOSTFail: return sf::Keyboard::ScanUnknown;
- case kHIDUsage_KeyboardErrorUndefined: return sf::Keyboard::ScanUnknown;
+ case kHIDUsage_KeyboardErrorRollOver: return 0xff;
+ case kHIDUsage_KeyboardPOSTFail: return 0xff;
+ case kHIDUsage_KeyboardErrorUndefined: return 0xff;
- 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 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_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 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_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::ScanSlash;
- case kHIDUsage_KeyboardCapsLock: return sf::Keyboard::ScanCapsLock;
+ 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_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 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_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 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_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 0x7c;
+ case kHIDUsage_KeyboardLeftArrow: return 0x7b;
+ case kHIDUsage_KeyboardDownArrow: return 0x7d;
+ case kHIDUsage_KeyboardUpArrow: return 0x7e;
- 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_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_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 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_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_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_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 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_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 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_KeyboardMute: return sf::Keyboard::ScanMute;
- case kHIDUsage_KeyboardVolumeUp: return sf::Keyboard::ScanVolumeUp;
- case kHIDUsage_KeyboardVolumeDown: return sf::Keyboard::ScanVolumeDown;
+ case kHIDUsage_KeyboardMute: return 0xff;
+ case kHIDUsage_KeyboardVolumeUp: return 0xff;
+ case kHIDUsage_KeyboardVolumeDown: return 0xff;
- 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 0xff;
+ case kHIDUsage_KeyboardLockingNumLock: return 0xff;
+ case kHIDUsage_KeyboardLockingScrollLock: return 0xff;
- 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 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_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 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_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 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;
/* 0xa5-0xdf Reserved */
- 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;
+ 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;
/* 0xe8-0xffff Reserved */
- case kHIDUsage_Keyboard_Reserved: return sf::Keyboard::ScanUnknown;
- default: return sf::Keyboard::ScanUnknown;
+ case kHIDUsage_Keyboard_Reserved: return 0xff;
+ default: return 0xff;
}
}
////////////////////////////////////////////////////////
-Keyboard::Key HIDInputManager::localizedKey(UniChar ch)
+Keyboard::Key HIDInputManager::localizedKeys(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 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 'a':
+ case 'A': return sf::Keyboard::A;
- 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 'b':
+ case 'B': return sf::Keyboard::B;
- 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 'c':
+ case 'C': return sf::Keyboard::C;
- case 0x1b: return sf::Keyboard::Escape;
+ case 'd':
+ case 'D': return sf::Keyboard::D;
- /* 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 'e':
+ case 'E': return sf::Keyboard::E;
- case NSMenuFunctionKey: return sf::Keyboard::Menu;
+ case 'f':
+ case 'F': return sf::Keyboard::F;
- 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 'g':
+ case 'G': return sf::Keyboard::G;
- 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 'h':
+ case 'H': return sf::Keyboard::H;
- 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 'i':
+ case 'I': return sf::Keyboard::I;
- 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 'j':
+ case 'J': return sf::Keyboard::J;
- /* 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 'k':
+ case 'K': return sf::Keyboard::K;
- 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 'l':
+ case 'L': return sf::Keyboard::L;
- case NSPauseFunctionKey: return sf::Keyboard::Pause;
+ case 'm':
+ case 'M': return sf::Keyboard::M;
- default: return sf::Keyboard::Unknown;
+ 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;
}
}
////////////////////////////////////////////////////////
-UniChar HIDInputManager::toUnicode(Keyboard::Key key)
+Keyboard::Key HIDInputManager::nonLocalizedKeys(UniChar virtualKeycode)
{
- 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
+ // (Some) 0x code based on https://forums.macrumors.com/showthread.php?t=780577
+ // Some sf::Keyboard::Key are present twice.
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;
+ // 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 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;
+ // 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 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 0x35: return sf::Keyboard::Escape;
- 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;
+ // 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 0x39: return sf::Keyboard::ScanCapsLock;
+ case 0x7f: return sf::Keyboard::Menu;
+ case NSMenuFunctionKey: return sf::Keyboard::Menu;
- /* TODO Those are missing:
- * case 0x: return sf::Keyboard::ScanPrintScreen;
- * case 0x: return sf::Keyboard::ScanScrollLock;
- * case 0x: return sf::Keyboard::ScanPause;
- */
+ 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;
- 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;
+ // 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 0x7c: return sf::Keyboard::ScanRight;
- case 0x7b: return sf::Keyboard::ScanLeft;
- case 0x7d: return sf::Keyboard::ScanDown;
- case 0x7e: return sf::Keyboard::ScanUp;
+ 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 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;
+ // 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 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 NSPageUpFunctionKey: return sf::Keyboard::PageUp;
+ case NSPageDownFunctionKey: return sf::Keyboard::PageDown;
+ case NSEndFunctionKey: return sf::Keyboard::End;
+ case NSHomeFunctionKey: return sf::Keyboard::Home;
- /* 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 0x72: return sf::Keyboard::Insert;
+ case NSInsertFunctionKey: return sf::Keyboard::Insert;
+ case 0x75: return sf::Keyboard::Delete;
+ case NSDeleteFunctionKey: return sf::Keyboard::Delete;
- case 0x4a: return sf::Keyboard::ScanMute;
- case 0x48: return sf::Keyboard::ScanVolumeUp;
- case 0x49: return sf::Keyboard::ScanVolumeDown;
+ case 0x45: return sf::Keyboard::Add;
+ case 0x4e: return sf::Keyboard::Subtract;
+ case 0x43: return sf::Keyboard::Multiply;
+ case 0x4b: return sf::Keyboard::Divide;
- /* 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;
- */
+ // 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;
- default: return sf::Keyboard::ScanUnknown;
- }
-}
+ case NSLeftArrowFunctionKey: return sf::Keyboard::Left;
+ case NSRightArrowFunctionKey: return sf::Keyboard::Right;
+ case NSUpArrowFunctionKey: return sf::Keyboard::Up;
+ case NSDownArrowFunctionKey: return sf::Keyboard::Down;
+ case 0x52: return sf::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;
-////////////////////////////////////////////////////////
-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;
+ // 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;
- 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 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::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 NSPauseFunctionKey: return sf::Keyboard::Pause;
- // case sf::Keyboard::ScanHyphen: return 0; // 0x27 is for Quote
+ // keycode 0x1b is not bound to any key.
+ // This key is ' on CH-FR, ) on FR and - on US layouts.
- 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::ScanCapsLock: return 0x39;
-
- /* TODO Those are missing:
- * case sf::Keyboard::ScanPrintScreen: return 0;
- * case sf::Keyboard::ScanScrollLock: return 0;
- * case sf::Keyboard::ScanPause: return 0;
- */
- 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::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::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;
-
- /* TODO Those are missing:
- * 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::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;
-
- default: return 0x00;
- }
-}
-
-
-////////////////////////////////////////////////////////
-Keyboard::Key HIDInputManager::localizedKeyFallback(Keyboard::Scancode code)
-{
- switch (code)
- {
- 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::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::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::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::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::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::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;
+ // An unknown key.
+ default: return sf::Keyboard::Unknown;
}
}
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 bcf73b3b..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.
@@ -46,37 +46,19 @@ class InputImpl
public:
////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::isKeyPressed(Key)
+ /// \brief Check if a key is pressed
+ ///
+ /// \param key Key to check
+ ///
+ /// \return True if the key is pressed, false otherwise
///
////////////////////////////////////////////////////////////
static bool isKeyPressed(Keyboard::Key key);
////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::isKeyPressed(Scancode)
+ /// \brief Show or hide the virtual keyboard
///
- ////////////////////////////////////////////////////////////
- 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 getDescription(Keyboard::Scancode code);
-
- ////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::setVirtualKeyboardVisible
+ /// \param visible True to show, false to hide
///
////////////////////////////////////////////////////////////
static void setVirtualKeyboardVisible(bool visible);
diff --git a/src/SFML/Window/OSX/InputImpl.mm b/src/SFML/Window/OSX/InputImpl.mm
index a1377c50..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.
@@ -39,6 +39,9 @@
/// 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
@@ -119,7 +122,6 @@ SFOpenGLView* getSFOpenGLViewFromSFMLWindow(const WindowBase& window)
return view;
}
-
////////////////////////////////////////////////////////////
bool InputImpl::isKeyPressed(Keyboard::Key key)
{
@@ -127,34 +129,6 @@ 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::getDescription(Keyboard::Scancode code)
-{
- return HIDInputManager::getInstance().localizedRepresentation(code);
-}
-
-
////////////////////////////////////////////////////////////
void InputImpl::setVirtualKeyboardVisible(bool /*visible*/)
{
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 03d6c093..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.
@@ -56,8 +56,7 @@ 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::Keyboard::Scancode code);
+sf::Event::KeyEvent keyEventWithModifiers(NSUInteger modifiers, sf::Keyboard::Key key);
////////////////////////////////////////////////////////////
diff --git a/src/SFML/Window/OSX/SFKeyboardModifiersHelper.mm b/src/SFML/Window/OSX/SFKeyboardModifiersHelper.mm
index 1105ae08..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.
@@ -92,7 +92,6 @@ 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);
@@ -106,7 +105,6 @@ 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);
@@ -138,15 +136,14 @@ void initialiseKeyboardHelper(void)
////////////////////////////////////////////////////////
-sf::Event::KeyEvent keyEventWithModifiers(NSUInteger modifiers, sf::Keyboard::Key key, sf::Keyboard::Scancode code)
+sf::Event::KeyEvent keyEventWithModifiers(NSUInteger modifiers, sf::Keyboard::Key key)
{
sf::Event::KeyEvent event;
- event.code = key;
- event.scancode = code;
- event.alt = modifiers & NSAlternateKeyMask;
- event.control = modifiers & NSControlKeyMask;
- event.shift = modifiers & NSShiftKeyMask;
- event.system = modifiers & NSCommandKeyMask;
+ event.code = key;
+ event.alt = modifiers & NSAlternateKeyMask;
+ event.control = modifiers & NSControlKeyMask;
+ event.shift = modifiers & NSShiftKeyMask;
+ event.system = modifiers & NSCommandKeyMask;
return event;
}
@@ -161,7 +158,6 @@ void handleModifiersChanged(NSUInteger modifiers, sf::priv::WindowImplCocoa& req
NSLeftShiftKeyMask, NSRightShiftKeyMask,
state.leftShiftWasDown, state.rightShiftWasDown,
sf::Keyboard::LShift, sf::Keyboard::RShift,
- sf::Keyboard::ScanLShift, sf::Keyboard::ScanRShift,
requester
);
@@ -171,7 +167,6 @@ void handleModifiersChanged(NSUInteger modifiers, sf::priv::WindowImplCocoa& req
NSLeftCommandKeyMask, NSRightCommandKeyMask,
state.leftCommandWasDown, state.rightCommandWasDown,
sf::Keyboard::LSystem, sf::Keyboard::RSystem,
- sf::Keyboard::ScanLSystem, sf::Keyboard::ScanRSystem,
requester
);
@@ -181,7 +176,6 @@ void handleModifiersChanged(NSUInteger modifiers, sf::priv::WindowImplCocoa& req
NSLeftAlternateKeyMask, NSRightAlternateKeyMask,
state.leftAlternateWasDown, state.rightAlternateWasDown,
sf::Keyboard::LAlt, sf::Keyboard::RAlt,
- sf::Keyboard::ScanLAlt, sf::Keyboard::ScanRAlt,
requester
);
@@ -191,7 +185,6 @@ void handleModifiersChanged(NSUInteger modifiers, sf::priv::WindowImplCocoa& req
NSLeftControlKeyMask, NSRightControlKeyMask,
state.leftControlWasDown, state.rightControlWasDown,
sf::Keyboard::LControl, sf::Keyboard::RControl,
- sf::Keyboard::ScanLControl, sf::Keyboard::ScanRControl,
requester
);
}
@@ -210,11 +203,10 @@ 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, code);
+ sf::Event::KeyEvent event = keyEventWithModifiers(modifiers, key);
// State
BOOL isDown = isKeyMaskActive(modifiers, mask);
@@ -239,11 +231,10 @@ 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, leftCode, requester);
- processOneModifier(modifiers, rightMask, rightWasDown, rightKey, rightCode, requester);
+ processOneModifier(modifiers, leftMask, leftWasDown, leftKey, requester);
+ processOneModifier(modifiers, rightMask, rightWasDown, rightKey, requester);
}
diff --git a/src/SFML/Window/OSX/SFOpenGLView+keyboard.mm b/src/SFML/Window/OSX/SFOpenGLView+keyboard.mm
index 9162e58f..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.
@@ -86,7 +86,7 @@
{
sf::Event::KeyEvent key = [SFOpenGLView convertNSKeyEventToSFMLEvent:theEvent];
- if ((key.code != sf::Keyboard::Unknown) || (key.scancode != sf::Keyboard::ScanUnknown))
+ if (key.code != sf::Keyboard::Unknown) // The key is recognized.
m_requester->keyDown(key);
}
@@ -180,17 +180,21 @@
////////////////////////////////////////////////////////
+(sf::Event::KeyEvent)convertNSKeyEventToSFMLEvent:(NSEvent*)event
{
- // We look for the key in a list of characters that depend on keyboard localization,
- // if the key is not "dead".
+ // 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.
NSString* string = [event charactersIgnoringModifiers];
- sf::Keyboard::Key key = ([string length] > 0)
- ? sf::priv::HIDInputManager::localizedKey([string characterAtIndex:0])
- : sf::Keyboard::Unknown;
+ if ([string length] > 0)
+ key = sf::priv::HIDInputManager::localizedKeys([string characterAtIndex:0]);
- // The scancode always depends on the hardware keyboard, not some OS setting.
- sf::Keyboard::Scancode code = sf::priv::HIDInputManager::nonLocalizedKey([event keyCode]);
+ // 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]);
- return keyEventWithModifiers([event modifierFlags], key, code);
+ return keyEventWithModifiers([event modifierFlags], key);
}
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..4aabffa0 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.
@@ -29,6 +29,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -61,17 +62,59 @@ bool CursorImpl::loadFromPixels(const Uint8* pixels, Vector2u size, Vector2u hot
{
release();
+ if (isColorCursorSupported())
+ return loadFromPixelsARGB(pixels, size, hotspot);
+ else
+ return loadFromPixelsMonochrome(pixels, size, hotspot);
+}
+
+
+////////////////////////////////////////////////////////////
+bool CursorImpl::loadFromPixelsARGB(const Uint8* pixels, Vector2u size, Vector2u hotspot)
+{
+ // Create cursor image, convert from RGBA to ARGB.
+ XcursorImage* cursorImage = XcursorImageCreate(size.x, size.y);
+ cursorImage->xhot = hotspot.x;
+ cursorImage->yhot = hotspot.y;
+
+ const std::size_t numPixels = size.x * size.y;
+ for (std::size_t pixelIndex = 0; pixelIndex < numPixels; ++pixelIndex)
+ {
+ cursorImage->pixels[pixelIndex] = pixels[pixelIndex * 4 + 2] +
+ (pixels[pixelIndex * 4 + 1] << 8) +
+ (pixels[pixelIndex * 4 + 0] << 16) +
+ (pixels[pixelIndex * 4 + 3] << 24);
+ }
+
+ // Create the cursor.
+ m_cursor = XcursorImageLoadCursor(m_display, cursorImage);
+
+ // Free the resources
+ XcursorImageDestroy(cursorImage);
+
+ // We assume everything went fine...
+ return true;
+}
+
+
+////////////////////////////////////////////////////////////
+bool CursorImpl::loadFromPixelsMonochrome(const Uint8* pixels, Vector2u size, Vector2u hotspot)
+{
// Convert the image into a bitmap (monochrome!).
- std::size_t bytes = (size.x + 7) / 8 * size.y;
- std::vector mask(bytes, 0); // Defines which pixel is transparent.
- std::vector data(bytes, 1); // Defines which pixel is white/black.
+ // The bit data is stored packed into bytes. If the number of pixels on each row of the image
+ // does not fit exactly into (width/8) bytes, one extra byte is allocated at the end of each
+ // row to store the extra pixels.
+ std::size_t packedWidth = (size.x + 7) / 8;
+ std::size_t bytes = packedWidth * size.y;
+ std::vector mask(bytes, 0); // Defines which pixel is opaque (1) or transparent (0).
+ std::vector data(bytes, 0); // Defines which pixel is white (1) or black (0).
for (std::size_t j = 0; j < size.y; ++j)
{
for (std::size_t i = 0; i < size.x; ++i)
{
std::size_t pixelIndex = i + j * size.x;
- std::size_t byteIndex = pixelIndex / 8;
+ std::size_t byteIndex = i / 8 + j * packedWidth;
std::size_t bitIndex = i % 8;
// Turn on pixel that are not transparent
@@ -80,9 +123,9 @@ bool CursorImpl::loadFromPixels(const Uint8* pixels, Vector2u size, Vector2u hot
// Choose between black/background & white/foreground color for each pixel,
// based on the pixel color intensity: on average, if a channel is "active"
- // at 25%, the bit is white.
- int intensity = pixels[pixelIndex * 4 + 0] + pixels[pixelIndex * 4 + 1] + pixels[pixelIndex * 4 + 2];
- Uint8 bit = intensity > 64 ? 1 : 0;
+ // at 50%, the bit is white.
+ int intensity = (pixels[pixelIndex * 4 + 0] + pixels[pixelIndex * 4 + 1] + pixels[pixelIndex * 4 + 2]) / 3;
+ Uint8 bit = intensity > 128 ? 1 : 0;
data[byteIndex] |= bit << bitIndex;
}
}
@@ -139,6 +182,13 @@ bool CursorImpl::loadFromSystem(Cursor::Type type)
}
+////////////////////////////////////////////////////////////
+bool CursorImpl::isColorCursorSupported()
+{
+ return XcursorSupportsARGB(m_display);
+}
+
+
////////////////////////////////////////////////////////////
void CursorImpl::release()
{
diff --git a/src/SFML/Window/Unix/CursorImpl.hpp b/src/SFML/Window/Unix/CursorImpl.hpp
index 6740f220..cfd3c305 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.
@@ -83,6 +83,28 @@ private:
friend class WindowImplX11;
+ ////////////////////////////////////////////////////////////
+ /// \brief Checks if colored cursors are supported for this display.
+ ///
+ ////////////////////////////////////////////////////////////
+ bool isColorCursorSupported();
+
+ ////////////////////////////////////////////////////////////
+ /// \brief Create a cursor with the provided image (ARGB support)
+ ///
+ /// Refer to sf::Cursor::loadFromPixels().
+ ///
+ ////////////////////////////////////////////////////////////
+ bool loadFromPixelsARGB(const Uint8* pixels, Vector2u size, Vector2u hotspot);
+
+ ////////////////////////////////////////////////////////////
+ /// \brief Create a cursor with the provided image (monochrome)
+ ///
+ /// Refer to sf::Cursor::loadFromPixels().
+ ///
+ ////////////////////////////////////////////////////////////
+ bool loadFromPixelsMonochrome(const Uint8* pixels, Vector2u size, Vector2u hotspot);
+
////////////////////////////////////////////////////////////
/// \brief Release the cursor, if we have loaded one.
///
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 59867d65..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.
@@ -28,11 +28,11 @@
#include // important to be included first (conflict with None)
#include
#include
-#include
#include
#include
#include
+
namespace sf
{
namespace priv
@@ -40,35 +40,142 @@ namespace priv
////////////////////////////////////////////////////////////
bool InputImpl::isKeyPressed(Keyboard::Key key)
{
- return KeyboardImpl::isKeyPressed(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;
+ }
+ // Sanity checks
+ if (key < 0 || key >= sf::Keyboard::KeyCount)
+ return false;
-////////////////////////////////////////////////////////////
-bool InputImpl::isKeyPressed(Keyboard::Scancode code)
-{
- return KeyboardImpl::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 KeyboardImpl::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 KeyboardImpl::unlocalize(key);
-}
-
-
-////////////////////////////////////////////////////////////
-String InputImpl::getDescription(Keyboard::Scancode code)
-{
- return KeyboardImpl::getDescription(code);
+ return false;
+ }
}
diff --git a/src/SFML/Window/Unix/InputImpl.hpp b/src/SFML/Window/Unix/InputImpl.hpp
index bea33375..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.
@@ -45,37 +45,19 @@ class InputImpl
public:
////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::isKeyPressed(Key)
+ /// \brief Check if a key is pressed
+ ///
+ /// \param key Key to check
+ ///
+ /// \return True if the key is pressed, false otherwise
///
////////////////////////////////////////////////////////////
static bool isKeyPressed(Keyboard::Key key);
////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::isKeyPressed(Scancode)
+ /// \brief Show or hide the virtual keyboard
///
- ////////////////////////////////////////////////////////////
- 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 getDescription(Keyboard::Scancode code);
-
- ////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::setVirtualKeyboardVisible
+ /// \param visible True to show, false to hide
///
////////////////////////////////////////////////////////////
static void setVirtualKeyboardVisible(bool visible);
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/KeySymToKeyMapping.cpp b/src/SFML/Window/Unix/KeySymToKeyMapping.cpp
deleted file mode 100644
index e2fbba62..00000000
--- a/src/SFML/Window/Unix/KeySymToKeyMapping.cpp
+++ /dev/null
@@ -1,261 +0,0 @@
-////////////////////////////////////////////////////////////
-//
-// 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
deleted file mode 100644
index 638fb71e..00000000
--- a/src/SFML/Window/Unix/KeySymToKeyMapping.hpp
+++ /dev/null
@@ -1,63 +0,0 @@
-////////////////////////////////////////////////////////////
-//
-// 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/KeySymToUnicodeMapping.cpp b/src/SFML/Window/Unix/KeySymToUnicodeMapping.cpp
deleted file mode 100644
index d6e0eeb6..00000000
--- a/src/SFML/Window/Unix/KeySymToUnicodeMapping.cpp
+++ /dev/null
@@ -1,1399 +0,0 @@
-////////////////////////////////////////////////////////////
-//
-// 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
diff --git a/src/SFML/Window/Unix/KeySymToUnicodeMapping.hpp b/src/SFML/Window/Unix/KeySymToUnicodeMapping.hpp
deleted file mode 100644
index fbd088bf..00000000
--- a/src/SFML/Window/Unix/KeySymToUnicodeMapping.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-////////////////////////////////////////////////////////////
-//
-// 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_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
-///
-////////////////////////////////////////////////////////////
-Uint32 keysymToUnicode(KeySym keysym);
-
-} // namespace priv
-
-} // namespace sf
-
-#endif // SFML_KEYSYMTOUNICODEMAPPING_HPP
diff --git a/src/SFML/Window/Unix/KeyboardImpl.cpp b/src/SFML/Window/Unix/KeyboardImpl.cpp
deleted file mode 100644
index ba430d8f..00000000
--- a/src/SFML/Window/Unix/KeyboardImpl.cpp
+++ /dev/null
@@ -1,586 +0,0 @@
-////////////////////////////////////////////////////////////
-//
-// 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
-#include
-#include
-#include
-#include // strcmp
-
-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
-bool isMappingInitialized = false;
-
-////////////////////////////////////////////////////////////
-bool isValidKeycode(KeyCode keycode)
-{
- // Valid key code range is [8,255], according to the Xlib manual
- 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
- // Note: This way we always force "NumLock = ON", which is intentional
- // 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;
- 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::ScanNumpadEquals;
- case XK_KP_Enter: return sf::Keyboard::ScanNumpadEnter;
- 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: 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;
-
- // 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::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
- // (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::ScanSlash;
- case XK_less: return sf::Keyboard::ScanReverseSolidus;
- default: return sf::Keyboard::ScanUnknown;
- }
-}
-
-
-////////////////////////////////////////////////////////////
-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
- // This code was inspired by GLFW implementation
-
- char name[XkbKeyNameLength + 1];
- 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)
- {
- 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::ScanSlash;
- else if (strcmp(name, "LSGT") == 0) sc = sf::Keyboard::ScanReverseSolidus;
- else sc = sf::Keyboard::ScanUnknown;
-
- if (isValidKeycode(keycode))
- {
- scancodeToKeycode[sc] = keycode;
- keycodeToScancode[keycode] = sc;
- }
- }
-
- XkbFreeNames(desc, XkbKeyNamesMask, True);
- XkbFreeKeyboard(desc, 0, True);
-
- // Translate un-translated keycodes using traditional X11 KeySym lookups
- // Valid keycodes are [8;255], so we only initialize them
- for (int keycode = 8; keycode < 256; ++keycode)
- {
- if (keycodeToScancode[keycode] == sf::Keyboard::ScanUnknown)
- {
- sf::Keyboard::Scancode sc = translateKeyCode(display, keycode);
- scancodeToKeycode[sc] = keycode;
- keycodeToScancode[keycode] = sc;
- }
- }
-
- sf::priv::CloseDisplay(display);
-
- isMappingInitialized = true;
-}
-
-
-////////////////////////////////////////////////////////////
-KeyCode scancodeToKeyCode(sf::Keyboard::Scancode code)
-{
- if (!isMappingInitialized)
- initMapping();
-
- return scancodeToKeycode[code];
-}
-
-
-////////////////////////////////////////////////////////////
-sf::Keyboard::Scancode keyCodeToScancode(KeyCode code)
-{
- if (!isMappingInitialized)
- initMapping();
-
- if (isValidKeycode(code))
- return keycodeToScancode[code];
-
- return sf::Keyboard::ScanUnknown;
-}
-
-
-////////////////////////////////////////////////////////////
-KeyCode keyToKeyCode(sf::Keyboard::Key key)
-{
- KeySym keysym = sf::priv::keyToKeySym(key);
-
- if (keysym != NoSymbol)
- {
- Display* display = sf::priv::OpenDisplay();
- KeyCode keycode = XKeysymToKeycode(display, keysym);
- sf::priv::CloseDisplay(display);
- return keycode;
- }
-
- return NullKeyCode;
-}
-
-
-////////////////////////////////////////////////////////////
-KeySym scancodeToKeySym(sf::Keyboard::Scancode code)
-{
- Display* display = sf::priv::OpenDisplay();
-
- KeySym keysym = NoSymbol;
- 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)
-{
- if (keycode != NullKeyCode)
- {
- Display* display = sf::priv::OpenDisplay();
-
- // Get the whole keyboard state
- char keys[32];
- XQueryKeymap(display, keys);
-
- sf::priv::CloseDisplay(display);
-
- // Check our keycode
- return (keys[keycode / 8] & (1 << (keycode % 8))) != 0;
- }
-
- return false;
-}
-
-} // anonymous namespace
-
-namespace sf
-{
-namespace priv
-{
-
-////////////////////////////////////////////////////////////
-bool KeyboardImpl::isKeyPressed(Keyboard::Key key)
-{
- KeyCode keycode = keyToKeyCode(key);
- return isKeyPressedImpl(keycode);
-}
-
-
-////////////////////////////////////////////////////////////
-bool KeyboardImpl::isKeyPressed(Keyboard::Scancode code)
-{
- KeyCode keycode = scancodeToKeyCode(code);
- return isKeyPressedImpl(keycode);
-}
-
-
-////////////////////////////////////////////////////////////
-Keyboard::Scancode KeyboardImpl::unlocalize(Keyboard::Key key)
-{
- KeyCode keycode = keyToKeyCode(key);
- return keyCodeToScancode(keycode);
-}
-
-
-////////////////////////////////////////////////////////////
-Keyboard::Key KeyboardImpl::localize(Keyboard::Scancode code)
-{
- KeySym keysym = scancodeToKeySym(code);
- return keySymToKey(keysym);
-}
-
-
-////////////////////////////////////////////////////////////
-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 == Keyboard::ScanEscape ||
- code == Keyboard::ScanEnter ||
- code == Keyboard::ScanNumpadEnter ||
- code == Keyboard::ScanTab ||
- code == Keyboard::ScanDelete ||
- code == Keyboard::ScanBackspace ||
- code == Keyboard::ScanSpace)
- {
- checkInput = false;
- }
-
- if (checkInput)
- {
- KeySym keysym = scancodeToKeySym(code);
- Uint32 unicode = keysymToUnicode(keysym);
-
- if (unicode != 0)
- return String(unicode);
- }
-
- // 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::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::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::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::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.
- }
-}
-
-
-////////////////////////////////////////////////////////////
-Keyboard::Key KeyboardImpl::getKeyFromEvent(XKeyEvent& event)
-{
- 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 = keySymToKey(keysym);
-
- if (key != Keyboard::Unknown)
- break;
- }
-
- return key;
-}
-
-
-////////////////////////////////////////////////////////////
-Keyboard::Scancode KeyboardImpl::getScancodeFromEvent(XKeyEvent& event)
-{
- return keyCodeToScancode(event.keycode);
-}
-
-} // namespace priv
-
-} // namespace sf
diff --git a/src/SFML/Window/Unix/KeyboardImpl.hpp b/src/SFML/Window/Unix/KeyboardImpl.hpp
deleted file mode 100644
index d1b83869..00000000
--- a/src/SFML/Window/Unix/KeyboardImpl.hpp
+++ /dev/null
@@ -1,104 +0,0 @@
-////////////////////////////////////////////////////////////
-//
-// 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_KEYBOARD_IMPL_HPP
-#define SFML_KEYBOARD_IMPL_HPP
-
-////////////////////////////////////////////////////////////
-// Headers
-////////////////////////////////////////////////////////////
-#include
-#include // XKeyEvent
-
-
-namespace sf
-{
-namespace priv
-{
-////////////////////////////////////////////////////////////
-/// \brief sf::priv::KeyboardImpl helper
-///
-/// This class implements keyboard handling functions
-/// to help sf::priv::InputImpl class.
-////////////////////////////////////////////////////////////
-class KeyboardImpl
-{
-public:
-
- ////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::isKeyPressed(Key)
- ///
- ////////////////////////////////////////////////////////////
- static bool isKeyPressed(Keyboard::Key key);
-
- ////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::isKeyPressed(Scancode)
- ///
- ////////////////////////////////////////////////////////////
- static bool isKeyPressed(Keyboard::Scancode code);
-
- ////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::localize
- ///
- ////////////////////////////////////////////////////////////
- static Keyboard::Scancode unlocalize(Keyboard::Key key);
-
- ////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::unlocalize
- ///
- ////////////////////////////////////////////////////////////
- static Keyboard::Key localize(Keyboard::Scancode code);
-
- ////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::getDescription
- ///
- ////////////////////////////////////////////////////////////
- static String getDescription(Keyboard::Scancode code);
-
- ////////////////////////////////////////////////////////////
- /// \brief Get the sf::Keyboard::Key from XKeyEvent
- ///
- /// \param event Event from which key is gotten
- ///
- /// \return A key being pressed or released
- ///
- ////////////////////////////////////////////////////////////
- static Keyboard::Key getKeyFromEvent(XKeyEvent& event);
-
- ////////////////////////////////////////////////////////////
- /// \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
- ///
- ////////////////////////////////////////////////////////////
- static Keyboard::Scancode getScancodeFromEvent(XKeyEvent& event);
-};
-
-} // namespace priv
-
-} // namespace sf
-
-#endif // SFML_KEYBOARD_IMPL_HPP
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 2adfa7d6..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.
@@ -29,7 +29,6 @@
#include
#include
#include
-#include
#include
#include
#include
@@ -1113,6 +1112,7 @@ void WindowImplX11::setMouseCursor(const CursorImpl& cursor)
{
m_lastCursor = cursor.m_cursor;
XDefineCursor(m_display, m_window, m_lastCursor);
+ XFlush(m_display);
}
@@ -1827,16 +1827,27 @@ 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 = 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;
- event.key.system = windowEvent.xkey.state & Mod4Mask;
+ 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;
pushEvent(event);
// Generate a TextEntered event
@@ -1893,15 +1904,26 @@ 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 = 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;
- event.key.system = windowEvent.xkey.state & Mod4Mask;
+ 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;
pushEvent(event);
break;
@@ -2172,4 +2194,5 @@ Vector2i WindowImplX11::getPrimaryMonitorPosition()
}
} // namespace priv
+
} // namespace sf
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 f119b2d5..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.
@@ -43,122 +43,7 @@ namespace sf
namespace priv
{
////////////////////////////////////////////////////////////
-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)
+bool InputImpl::isKeyPressed(Keyboard::Key key)
{
int vkey = 0;
switch (key)
@@ -266,217 +151,10 @@ int sfKeyToWin(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 bd357284..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.
@@ -31,6 +31,7 @@
#include
#include
+
namespace sf
{
namespace priv
@@ -42,44 +43,21 @@ namespace priv
class InputImpl
{
public:
- ////////////////////////////////////////////////////////////
- /// \brief Default constructor
- ///
- ////////////////////////////////////////////////////////////
- InputImpl();
////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::isKeyPressed(Key)
+ /// \brief Check if a key is pressed
+ ///
+ /// \param key Key to check
+ ///
+ /// \return True if the key is pressed, false otherwise
///
////////////////////////////////////////////////////////////
static bool isKeyPressed(Keyboard::Key key);
////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::isKeyPressed(Scancode)
+ /// \brief Show or hide the virtual keyboard
///
- ////////////////////////////////////////////////////////////
- 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::getDescription
- ///
- ////////////////////////////////////////////////////////////
- static String getDescription(Keyboard::Scancode code);
-
- ////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::setVirtualKeyboardVisible
+ /// \param visible True to show, false to hide
///
////////////////////////////////////////////////////////////
static void setVirtualKeyboardVisible(bool visible);
@@ -180,20 +158,6 @@ 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/JoystickImpl.cpp b/src/SFML/Window/Win32/JoystickImpl.cpp
index 2e925a57..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.
@@ -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..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.
@@ -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
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 38ca3b57..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.
@@ -557,107 +557,6 @@ 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 a5ae5e08..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.
@@ -269,16 +269,6 @@ 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
////////////////////////////////////////////////////////////
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 a06c7dff..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.
@@ -45,37 +45,19 @@ class InputImpl
public:
////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::isKeyPressed(Key)
+ /// \brief Check if a key is pressed
+ ///
+ /// \param key Key to check
+ ///
+ /// \return True if the key is pressed, false otherwise
///
////////////////////////////////////////////////////////////
static bool isKeyPressed(Keyboard::Key key);
////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::isKeyPressed(Scancode)
+ /// \brief Show or hide the virtual keyboard
///
- ////////////////////////////////////////////////////////////
- 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 getDescription(Keyboard::Scancode code);
-
- ////////////////////////////////////////////////////////////
- /// \copydoc sf::Keyboard::setVirtualKeyboardVisible
+ /// \param visible True to show, false to hide
///
////////////////////////////////////////////////////////////
static void setVirtualKeyboardVisible(bool visible);
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 @@