├── .appveyor.yml ├── .clang-format ├── .gitignore ├── .travis.yml ├── CMakeLists.txt ├── LICENSE ├── README.md ├── Test ├── CMakeLists.txt └── main.cpp ├── include ├── InputManager.h └── Input_Lite.h └── src ├── CMakeLists.txt ├── InputManager.cpp ├── Input_Lite.cpp ├── ios └── Input.cpp ├── linux └── Input.cpp └── windows └── Input.cpp /.appveyor.yml: -------------------------------------------------------------------------------- 1 | image: Visual Studio 2017 2 | 3 | configuration: 4 | - Debug 5 | - Relase 6 | 7 | clone_folder: c:\projects\sc 8 | 9 | platform: 10 | - x86 11 | - x64 12 | 13 | install: 14 | - cd c:\projects\sc 15 | - mkdir build 16 | - cd build 17 | - cmake -G "Visual Studio 15 2017" .. 18 | 19 | build_script: 20 | - cmake -DBUILD_SHARED_LIBS=ON . 21 | - cmake --build . 22 | - cmake -DBUILD_SHARED_LIBS=OFF . 23 | - cmake --build . -------------------------------------------------------------------------------- /.clang-format: -------------------------------------------------------------------------------- 1 | BasedOnStyle: LLVM 2 | Language: Cpp 3 | IndentWidth: 4 4 | TabWidth: 8 5 | UseTab: Never 6 | BreakBeforeBraces: Stroustrup 7 | NamespaceIndentation: Inner 8 | ColumnLimit: 150 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.suo 8 | *.user 9 | *.userosscache 10 | *.sln.docstates 11 | 12 | # User-specific files (MonoDevelop/Xamarin Studio) 13 | *.userprefs 14 | 15 | # Build results 16 | [Dd]ebug/ 17 | [Dd]ebugPublic/ 18 | [Rr]elease/ 19 | [Rr]eleases/ 20 | x64/ 21 | x86/ 22 | bld/ 23 | [Bb]in/ 24 | [Oo]bj/ 25 | [Ll]og/ 26 | build/ 27 | 28 | # Visual Studio 2015 cache/options directory 29 | .vs/ 30 | # Uncomment if you have tasks that create the project's static files in wwwroot 31 | #wwwroot/ 32 | 33 | # MSTest test Results 34 | [Tt]est[Rr]esult*/ 35 | [Bb]uild[Ll]og.* 36 | 37 | # NUNIT 38 | *.VisualState.xml 39 | TestResult.xml 40 | 41 | # Build Results of an ATL Project 42 | [Dd]ebugPS/ 43 | [Rr]eleasePS/ 44 | dlldata.c 45 | 46 | # .NET Core 47 | project.lock.json 48 | project.fragment.lock.json 49 | artifacts/ 50 | **/Properties/launchSettings.json 51 | 52 | *_i.c 53 | *_p.c 54 | *_i.h 55 | *.ilk 56 | *.meta 57 | *.obj 58 | *.pch 59 | *.pdb 60 | *.pgc 61 | *.pgd 62 | *.rsp 63 | *.sbr 64 | *.tlb 65 | *.tli 66 | *.tlh 67 | *.tmp 68 | *.tmp_proj 69 | *.log 70 | *.vspscc 71 | *.vssscc 72 | .builds 73 | *.pidb 74 | *.svclog 75 | *.scc 76 | 77 | # Chutzpah Test files 78 | _Chutzpah* 79 | 80 | # Visual C++ cache files 81 | ipch/ 82 | *.aps 83 | *.ncb 84 | *.opendb 85 | *.opensdf 86 | *.sdf 87 | *.cachefile 88 | *.VC.db 89 | *.VC.VC.opendb 90 | 91 | # Visual Studio profiler 92 | *.psess 93 | *.vsp 94 | *.vspx 95 | *.sap 96 | 97 | # TFS 2012 Local Workspace 98 | $tf/ 99 | 100 | # Guidance Automation Toolkit 101 | *.gpState 102 | 103 | # ReSharper is a .NET coding add-in 104 | _ReSharper*/ 105 | *.[Rr]e[Ss]harper 106 | *.DotSettings.user 107 | 108 | # JustCode is a .NET coding add-in 109 | .JustCode 110 | 111 | # TeamCity is a build add-in 112 | _TeamCity* 113 | 114 | # DotCover is a Code Coverage Tool 115 | *.dotCover 116 | 117 | # Visual Studio code coverage results 118 | *.coverage 119 | *.coveragexml 120 | 121 | # NCrunch 122 | _NCrunch_* 123 | .*crunch*.local.xml 124 | nCrunchTemp_* 125 | 126 | # MightyMoose 127 | *.mm.* 128 | AutoTest.Net/ 129 | 130 | # Web workbench (sass) 131 | .sass-cache/ 132 | 133 | # Installshield output folder 134 | [Ee]xpress/ 135 | 136 | # DocProject is a documentation generator add-in 137 | DocProject/buildhelp/ 138 | DocProject/Help/*.HxT 139 | DocProject/Help/*.HxC 140 | DocProject/Help/*.hhc 141 | DocProject/Help/*.hhk 142 | DocProject/Help/*.hhp 143 | DocProject/Help/Html2 144 | DocProject/Help/html 145 | 146 | # Click-Once directory 147 | publish/ 148 | 149 | # Publish Web Output 150 | *.[Pp]ublish.xml 151 | *.azurePubxml 152 | # TODO: Comment the next line if you want to checkin your web deploy settings 153 | # but database connection strings (with potential passwords) will be unencrypted 154 | *.pubxml 155 | *.publishproj 156 | 157 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 158 | # checkin your Azure Web App publish settings, but sensitive information contained 159 | # in these scripts will be unencrypted 160 | PublishScripts/ 161 | 162 | # NuGet Packages 163 | *.nupkg 164 | # The packages folder can be ignored because of Package Restore 165 | **/packages/* 166 | # except build/, which is used as an MSBuild target. 167 | !**/packages/build/ 168 | # Uncomment if necessary however generally it will be regenerated when needed 169 | #!**/packages/repositories.config 170 | # NuGet v3's project.json files produces more ignorable files 171 | *.nuget.props 172 | *.nuget.targets 173 | 174 | # Microsoft Azure Build Output 175 | csx/ 176 | *.build.csdef 177 | 178 | # Microsoft Azure Emulator 179 | ecf/ 180 | rcf/ 181 | 182 | # Windows Store app package directories and files 183 | AppPackages/ 184 | BundleArtifacts/ 185 | Package.StoreAssociation.xml 186 | _pkginfo.txt 187 | 188 | # Visual Studio cache files 189 | # files ending in .cache can be ignored 190 | *.[Cc]ache 191 | # but keep track of directories ending in .cache 192 | !*.[Cc]ache/ 193 | 194 | # Others 195 | ClientBin/ 196 | ~$* 197 | *~ 198 | *.dbmdl 199 | *.dbproj.schemaview 200 | *.jfm 201 | *.pfx 202 | *.publishsettings 203 | orleans.codegen.cs 204 | 205 | # Since there are multiple workflows, uncomment next line to ignore bower_components 206 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 207 | #bower_components/ 208 | 209 | # RIA/Silverlight projects 210 | Generated_Code/ 211 | 212 | # Backup & report files from converting an old project file 213 | # to a newer Visual Studio version. Backup files are not needed, 214 | # because we have git ;-) 215 | _UpgradeReport_Files/ 216 | Backup*/ 217 | UpgradeLog*.XML 218 | UpgradeLog*.htm 219 | 220 | # SQL Server files 221 | *.mdf 222 | *.ldf 223 | *.ndf 224 | 225 | # Business Intelligence projects 226 | *.rdl.data 227 | *.bim.layout 228 | *.bim_*.settings 229 | 230 | # Microsoft Fakes 231 | FakesAssemblies/ 232 | 233 | # GhostDoc plugin setting file 234 | *.GhostDoc.xml 235 | 236 | # Node.js Tools for Visual Studio 237 | .ntvs_analysis.dat 238 | node_modules/ 239 | 240 | # Typescript v1 declaration files 241 | typings/ 242 | 243 | # Visual Studio 6 build log 244 | *.plg 245 | 246 | # Visual Studio 6 workspace options file 247 | *.opt 248 | 249 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 250 | *.vbw 251 | 252 | # Visual Studio LightSwitch build output 253 | **/*.HTMLClient/GeneratedArtifacts 254 | **/*.DesktopClient/GeneratedArtifacts 255 | **/*.DesktopClient/ModelManifest.xml 256 | **/*.Server/GeneratedArtifacts 257 | **/*.Server/ModelManifest.xml 258 | _Pvt_Extensions 259 | 260 | # Paket dependency manager 261 | .paket/paket.exe 262 | paket-files/ 263 | 264 | # FAKE - F# Make 265 | .fake/ 266 | 267 | # JetBrains Rider 268 | .idea/ 269 | *.sln.iml 270 | 271 | # CodeRush 272 | .cr/ 273 | 274 | # Python Tools for Visual Studio (PTVS) 275 | __pycache__/ 276 | *.pyc 277 | 278 | # Cake - Uncomment if you are using it 279 | # tools/** 280 | # !tools/packages.config 281 | 282 | # Telerik's JustMock configuration file 283 | *.jmconfig 284 | 285 | # BizTalk build output 286 | *.btp.cs 287 | *.btm.cs 288 | *.odx.cs 289 | *.xsd.cs 290 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language : cpp 2 | 3 | matrix: 4 | include: 5 | - os: osx 6 | osx_image: xcode8 7 | compiler: clang 8 | - os: linux 9 | env: CLANG_VERSION=5.0 BUILD_TYPE=Release 10 | addons: &clang5 11 | apt: 12 | packages: 13 | - g++-6 14 | - clang-5.0 15 | - libx11-dev 16 | - libxfixes-dev 17 | - libxtst-dev 18 | sources: 19 | - ubuntu-toolchain-r-test 20 | - llvm-toolchain-precise 21 | 22 | before_install: 23 | - if [[ -n "$CLANG_VERSION" ]]; then export CXX=clang++-$CLANG_VERSION CC=clang-$CLANG_VERSION; fi 24 | - | 25 | if [ "${TRAVIS_OS_NAME}" == "linux" ]; then 26 | CMAKE_URL="https://cmake.org/files/v3.8/cmake-3.8.2-Linux-x86_64.tar.gz" 27 | mkdir -p ${TRAVIS_BUILD_DIR}/deps/cmake && travis_retry wget --no-check-certificate --quiet -O - "${CMAKE_URL}" | tar --strip-components=1 -xz -C ${TRAVIS_BUILD_DIR}/deps/cmake 28 | export PATH="${TRAVIS_BUILD_DIR}/deps/cmake/bin:${PATH}"; 29 | else 30 | brew update && brew upgrade cmake || brew install cmake; 31 | brew install gcc 32 | fi 33 | 34 | script: 35 | - cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_COMPILER="$CXX" -DCMAKE_C_COMPILER="$CC" . && make; 36 | - cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_SHARED_LIBS=ON -DCMAKE_CXX_COMPILER="$CXX" -DCMAKE_C_COMPILER="$CC" . && make; 37 | 38 | notifications: 39 | email: false 40 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.8) 2 | project(input_lite) 3 | 4 | set(CMAKE_CXX_STANDARD 14) 5 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 6 | set(CMAKE_CXX_EXTENSIONS OFF) 7 | option(BUILD_EXAMPLE "Build example" ON) 8 | option(BUILD_SHARED_LIBS "Build shared library" OFF) 9 | 10 | if(MSVC) 11 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") 12 | else() 13 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic") 14 | endif() 15 | 16 | if(WIN32) 17 | set(INPUT_LITE_PLATFORM_SRC 18 | src/windows/Input.cpp 19 | ) 20 | set(INPUT_LITE_PLATFORM_INC 21 | include/windows 22 | ) 23 | 24 | elseif(APPLE) 25 | 26 | set(INPUT_LITE_PLATFORM_SRC 27 | src/ios/Input.cpp 28 | ) 29 | set(INPUT_LITE_PLATFORM_INC 30 | include/ios 31 | ) 32 | else() 33 | set(INPUT_LITE_PLATFORM_SRC 34 | src/linux/Input.cpp 35 | ) 36 | find_package(X11 REQUIRED) 37 | set(INPUT_LITE_PLATFORM_INC 38 | include/linux 39 | ${X11_INCLUDE_DIR} 40 | ) 41 | endif() 42 | 43 | include_directories( 44 | include 45 | ${INPUT_LITE_PLATFORM_INC} 46 | ) 47 | add_library(${PROJECT_NAME} 48 | include/Input_Lite.h 49 | src/InputManager.cpp 50 | src/Input_Lite.cpp 51 | ${INPUT_LITE_PLATFORM_SRC} 52 | ) 53 | 54 | if(${BUILD_SHARED_LIBS}) 55 | set_target_properties(${PROJECT_NAME} PROPERTIES DEFINE_SYMBOL INPUT_LITE_DLL) 56 | if(APPLE) 57 | find_package(Threads REQUIRED) 58 | find_library(corefoundation_lib CoreFoundation) 59 | find_library(cocoa_lib Cocoa) 60 | target_link_libraries(${PROJECT_NAME} ${CMAKE_THREAD_LIBS_INIT} ${corefoundation_lib} ${cocoa_lib}) 61 | else() 62 | find_package(X11 REQUIRED) 63 | if(!X11_XTest_FOUND) 64 | message(FATAL_ERROR "X11 extensions are required, but not found!") 65 | endif() 66 | if(!X11_Xfixes_LIB) 67 | message(FATAL_ERROR "X11 fixes extension is required, but not found!") 68 | endif() 69 | find_package(Threads REQUIRED) 70 | target_link_libraries(${PROJECT_NAME} 71 | ${X11_LIBRARIES} 72 | ${X11_Xfixes_LIB} 73 | ${X11_XTest_LIB} 74 | ${CMAKE_THREAD_LIBS_INIT} 75 | ) 76 | endif() 77 | endif() 78 | 79 | install (TARGETS ${PROJECT_NAME} 80 | RUNTIME DESTINATION bin 81 | ARCHIVE DESTINATION lib 82 | LIBRARY DESTINATION lib 83 | ) 84 | 85 | 86 | install (FILES 87 | include/Input_Lite.h 88 | DESTINATION include 89 | ) 90 | 91 | if(BUILD_EXAMPLE) 92 | add_subdirectory(Test) 93 | endif() 94 | 95 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Scott 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Input_lite 2 |

Linux/Mac

3 |

Windows

4 |

cross platform input library

5 | 6 |

USAGE

7 | https://github.com/smasherprog/input_lite/blob/master/Test/main.cpp 8 | 9 | ```c++ 10 | 11 | std::cout << "Simulating the A key on keyboard is being pressed " << std::endl; 12 | SL::Input_Lite::SendInput(SL::Input_Lite::KeyEvent{true, SL::Input_Lite::KeyCodes::KEY_A}); 13 | SL::Input_Lite::SendInput(SL::Input_Lite::KeyEvent{false, SL::Input_Lite::KeyCodes::KEY_A}); 14 | 15 | std::cout << "Starting Mouse move tests by Offset" << std::endl; 16 | SL::Input_Lite::SendInput(SL::Input_Lite::MousePositionAbsoluteEvent{100, 100}); 17 | for (auto x = 0; x < 500; x++) { 18 | SL::Input_Lite::SendInput(SL::Input_Lite::MousePositionOffsetEvent{1, 0}); 19 | std::this_thread::sleep_for(10ms); 20 | } 21 | for (auto y = 0; y < 500; y++) { 22 | SL::Input_Lite::SendInput(SL::Input_Lite::MousePositionOffsetEvent{0, 1}); 23 | std::this_thread::sleep_for(10ms); 24 | } 25 | std::cout << "Starting Mouse move tests by Absolute" << std::endl; 26 | for (auto x = 0; x < 500; x++) { 27 | SL::Input_Lite::SendInput(SL::Input_Lite::MousePositionAbsoluteEvent{x, 300}); 28 | std::this_thread::sleep_for(10ms); 29 | } 30 | for (auto y = 0; y < 500; y++) { 31 | SL::Input_Lite::SendInput(SL::Input_Lite::MousePositionAbsoluteEvent{500, y}); 32 | std::this_thread::sleep_for(10ms); 33 | } 34 | std::cout << "Starting Mouse Click tests right down up" << std::endl; 35 | SL::Input_Lite::SendInput(SL::Input_Lite::MouseButtonEvent{true, SL::Input_Lite::MouseButtons::RIGHT}); 36 | SL::Input_Lite::SendInput(SL::Input_Lite::MouseButtonEvent{false, SL::Input_Lite::MouseButtons::RIGHT}); 37 | 38 | std::cout << "Starting Mouse Click tests left down up" << std::endl; 39 | SL::Input_Lite::SendInput(SL::Input_Lite::MouseButtonEvent{true, SL::Input_Lite::MouseButtons::LEFT}); 40 | SL::Input_Lite::SendInput(SL::Input_Lite::MouseButtonEvent{false, SL::Input_Lite::MouseButtons::LEFT}); 41 | 42 | std::cout << "Starting Mouse wheel tests " << std::endl; 43 | for (auto y = 0; y < 500; y++) { 44 | SL::Input_Lite::SendInput(SL::Input_Lite::MouseScrollEvent{1}); 45 | std::this_thread::sleep_for(10ms); 46 | } 47 | for (auto y = 0; y < 500; y++) { 48 | SL::Input_Lite::SendInput(SL::Input_Lite::MouseScrollEvent{-1}); 49 | std::this_thread::sleep_for(10ms); 50 | } 51 | 52 | ``` 53 | -------------------------------------------------------------------------------- /Test/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(input_lite_test) 2 | 3 | if(APPLE) 4 | find_library(corefoundation_lib CoreFoundation) 5 | find_library(cocoa_lib Cocoa) 6 | set(INPUT_LITE_PLATFORM_LIBS ${corefoundation_lib} ${cocoa_lib}) 7 | else() 8 | find_package(X11 REQUIRED) 9 | if(!X11_XTest_FOUND) 10 | message(FATAL_ERROR "X11 extensions are required, but not found!") 11 | endif() 12 | if(!X11_Xfixes_LIB) 13 | message(FATAL_ERROR "X11 fixes extension is required, but not found!") 14 | endif() 15 | find_package(Threads REQUIRED) 16 | set(INPUT_LITE_PLATFORM_LIBS 17 | ${X11_LIBRARIES} 18 | ${X11_Xfixes_LIB} 19 | ${X11_XTest_LIB} 20 | ${CMAKE_THREAD_LIBS_INIT} 21 | ) 22 | 23 | endif() 24 | 25 | add_executable(${PROJECT_NAME} main.cpp) 26 | target_link_libraries(${PROJECT_NAME} input_lite ${INPUT_LITE_PLATFORM_LIBS}) 27 | 28 | add_test (NAME ${PROJECT_NAME} COMMAND ${PROJECT_NAME}) 29 | -------------------------------------------------------------------------------- /Test/main.cpp: -------------------------------------------------------------------------------- 1 | #include "Input_Lite.h" 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | using namespace std::chrono_literals; 9 | 10 | #ifdef WIN32 11 | #define WIN32_LEAN_AND_MEAN 12 | #include 13 | #elif __APPLE__ 14 | #include 15 | #elif __linux__ 16 | #include 17 | #else 18 | #error "Unknown Operating System!" 19 | #endif 20 | 21 | int main(int argc, char *argv[]) 22 | { 23 | std::this_thread::sleep_for(4s); 24 | 25 | #ifdef WIN32 26 | // windows ascii codes are the char representations 27 | assert(SL::Input_Lite::ConvertToKeyCode('0') == SL::Input_Lite::KeyCodes::KEY_0); 28 | assert(SL::Input_Lite::ConvertToKeyCode('1') == SL::Input_Lite::KeyCodes::KEY_1); 29 | assert(SL::Input_Lite::ConvertToKeyCode('2') == SL::Input_Lite::KeyCodes::KEY_2); 30 | assert(SL::Input_Lite::ConvertToKeyCode('3') == SL::Input_Lite::KeyCodes::KEY_3); 31 | assert(SL::Input_Lite::ConvertToKeyCode('4') == SL::Input_Lite::KeyCodes::KEY_4); 32 | assert(SL::Input_Lite::ConvertToKeyCode('5') == SL::Input_Lite::KeyCodes::KEY_5); 33 | assert(SL::Input_Lite::ConvertToKeyCode('6') == SL::Input_Lite::KeyCodes::KEY_6); 34 | assert(SL::Input_Lite::ConvertToKeyCode('7') == SL::Input_Lite::KeyCodes::KEY_7); 35 | assert(SL::Input_Lite::ConvertToKeyCode('8') == SL::Input_Lite::KeyCodes::KEY_8); 36 | assert(SL::Input_Lite::ConvertToKeyCode('9') == SL::Input_Lite::KeyCodes::KEY_9); 37 | 38 | assert(SL::Input_Lite::ConvertToKeyCode('A') == SL::Input_Lite::KeyCodes::KEY_A); 39 | assert(SL::Input_Lite::ConvertToKeyCode('B') == SL::Input_Lite::KeyCodes::KEY_B); 40 | assert(SL::Input_Lite::ConvertToKeyCode('C') == SL::Input_Lite::KeyCodes::KEY_C); 41 | assert(SL::Input_Lite::ConvertToKeyCode('D') == SL::Input_Lite::KeyCodes::KEY_D); 42 | assert(SL::Input_Lite::ConvertToKeyCode('E') == SL::Input_Lite::KeyCodes::KEY_E); 43 | assert(SL::Input_Lite::ConvertToKeyCode('F') == SL::Input_Lite::KeyCodes::KEY_F); 44 | assert(SL::Input_Lite::ConvertToKeyCode('G') == SL::Input_Lite::KeyCodes::KEY_G); 45 | assert(SL::Input_Lite::ConvertToKeyCode('H') == SL::Input_Lite::KeyCodes::KEY_H); 46 | assert(SL::Input_Lite::ConvertToKeyCode('I') == SL::Input_Lite::KeyCodes::KEY_I); 47 | assert(SL::Input_Lite::ConvertToKeyCode('J') == SL::Input_Lite::KeyCodes::KEY_J); 48 | assert(SL::Input_Lite::ConvertToKeyCode('K') == SL::Input_Lite::KeyCodes::KEY_K); 49 | assert(SL::Input_Lite::ConvertToKeyCode('L') == SL::Input_Lite::KeyCodes::KEY_L); 50 | assert(SL::Input_Lite::ConvertToKeyCode('M') == SL::Input_Lite::KeyCodes::KEY_M); 51 | assert(SL::Input_Lite::ConvertToKeyCode('N') == SL::Input_Lite::KeyCodes::KEY_N); 52 | assert(SL::Input_Lite::ConvertToKeyCode('O') == SL::Input_Lite::KeyCodes::KEY_O); 53 | assert(SL::Input_Lite::ConvertToKeyCode('P') == SL::Input_Lite::KeyCodes::KEY_P); 54 | assert(SL::Input_Lite::ConvertToKeyCode('Q') == SL::Input_Lite::KeyCodes::KEY_Q); 55 | assert(SL::Input_Lite::ConvertToKeyCode('R') == SL::Input_Lite::KeyCodes::KEY_R); 56 | assert(SL::Input_Lite::ConvertToKeyCode('S') == SL::Input_Lite::KeyCodes::KEY_S); 57 | assert(SL::Input_Lite::ConvertToKeyCode('T') == SL::Input_Lite::KeyCodes::KEY_T); 58 | assert(SL::Input_Lite::ConvertToKeyCode('U') == SL::Input_Lite::KeyCodes::KEY_U); 59 | assert(SL::Input_Lite::ConvertToKeyCode('V') == SL::Input_Lite::KeyCodes::KEY_V); 60 | assert(SL::Input_Lite::ConvertToKeyCode('W') == SL::Input_Lite::KeyCodes::KEY_W); 61 | assert(SL::Input_Lite::ConvertToKeyCode('X') == SL::Input_Lite::KeyCodes::KEY_X); 62 | assert(SL::Input_Lite::ConvertToKeyCode('Y') == SL::Input_Lite::KeyCodes::KEY_Y); 63 | assert(SL::Input_Lite::ConvertToKeyCode('Z') == SL::Input_Lite::KeyCodes::KEY_Z); 64 | 65 | assert(SL::Input_Lite::ConvertToKeyCode(VK_RETURN) == SL::Input_Lite::KeyCodes::KEY_Enter); 66 | assert(SL::Input_Lite::ConvertToKeyCode(VK_ESCAPE) == SL::Input_Lite::KeyCodes::KEY_Escape); 67 | assert(SL::Input_Lite::ConvertToKeyCode(VK_BACK) == SL::Input_Lite::KeyCodes::KEY_Backspace); 68 | assert(SL::Input_Lite::ConvertToKeyCode(VK_TAB) == SL::Input_Lite::KeyCodes::KEY_Tab); 69 | assert(SL::Input_Lite::ConvertToKeyCode(VK_SPACE) == SL::Input_Lite::KeyCodes::KEY_Space); 70 | assert(SL::Input_Lite::ConvertToKeyCode(VK_OEM_MINUS) == SL::Input_Lite::KeyCodes::KEY_Minus); 71 | assert(SL::Input_Lite::ConvertToKeyCode(VK_OEM_PLUS) == SL::Input_Lite::KeyCodes::KEY_Equals); // this is correct and not a mistype 72 | 73 | assert(SL::Input_Lite::ConvertToKeyCode(VK_OEM_4) == SL::Input_Lite::KeyCodes::KEY_LeftBracket); 74 | assert(SL::Input_Lite::ConvertToKeyCode(VK_OEM_6) == SL::Input_Lite::KeyCodes::KEY_RightBracket); 75 | assert(SL::Input_Lite::ConvertToKeyCode(VK_OEM_5) == SL::Input_Lite::KeyCodes::KEY_Backslash); 76 | assert(SL::Input_Lite::ConvertToKeyCode(VK_OEM_1) == SL::Input_Lite::KeyCodes::KEY_Semicolon); 77 | assert(SL::Input_Lite::ConvertToKeyCode(VK_OEM_7) == SL::Input_Lite::KeyCodes::KEY_Quote); 78 | 79 | assert(SL::Input_Lite::ConvertToKeyCode(VK_OEM_3) == SL::Input_Lite::KeyCodes::KEY_Grave); 80 | assert(SL::Input_Lite::ConvertToKeyCode(VK_OEM_COMMA) == SL::Input_Lite::KeyCodes::KEY_Comma); 81 | assert(SL::Input_Lite::ConvertToKeyCode(VK_OEM_PERIOD) == SL::Input_Lite::KeyCodes::KEY_Period); 82 | assert(SL::Input_Lite::ConvertToKeyCode(VK_OEM_2) == SL::Input_Lite::KeyCodes::KEY_Slash); 83 | assert(SL::Input_Lite::ConvertToKeyCode(VK_CAPITAL) == SL::Input_Lite::KeyCodes::KEY_CapsLock); 84 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F1) == SL::Input_Lite::KeyCodes::KEY_F1); 85 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F2) == SL::Input_Lite::KeyCodes::KEY_F2); 86 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F3) == SL::Input_Lite::KeyCodes::KEY_F3); 87 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F4) == SL::Input_Lite::KeyCodes::KEY_F4); 88 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F5) == SL::Input_Lite::KeyCodes::KEY_F5); 89 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F6) == SL::Input_Lite::KeyCodes::KEY_F6); 90 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F7) == SL::Input_Lite::KeyCodes::KEY_F7); 91 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F8) == SL::Input_Lite::KeyCodes::KEY_F8); 92 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F9) == SL::Input_Lite::KeyCodes::KEY_F9); 93 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F10) == SL::Input_Lite::KeyCodes::KEY_F10); 94 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F11) == SL::Input_Lite::KeyCodes::KEY_F11); 95 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F12) == SL::Input_Lite::KeyCodes::KEY_F12); 96 | 97 | assert(SL::Input_Lite::ConvertToKeyCode(VK_SNAPSHOT) == SL::Input_Lite::KeyCodes::KEY_PrintScreen); 98 | assert(SL::Input_Lite::ConvertToKeyCode(VK_SCROLL) == SL::Input_Lite::KeyCodes::KEY_ScrollLock); 99 | assert(SL::Input_Lite::ConvertToKeyCode(VK_PAUSE) == SL::Input_Lite::KeyCodes::KEY_Pause); 100 | assert(SL::Input_Lite::ConvertToKeyCode(VK_INSERT) == SL::Input_Lite::KeyCodes::KEY_Insert); 101 | assert(SL::Input_Lite::ConvertToKeyCode(VK_HOME) == SL::Input_Lite::KeyCodes::KEY_Home); 102 | 103 | assert(SL::Input_Lite::ConvertToKeyCode(VK_PRIOR) == SL::Input_Lite::KeyCodes::KEY_PageUp); 104 | assert(SL::Input_Lite::ConvertToKeyCode(VK_DELETE) == SL::Input_Lite::KeyCodes::KEY_Delete); 105 | assert(SL::Input_Lite::ConvertToKeyCode(VK_END) == SL::Input_Lite::KeyCodes::KEY_End); 106 | assert(SL::Input_Lite::ConvertToKeyCode(VK_NEXT) == SL::Input_Lite::KeyCodes::KEY_PageDown); 107 | assert(SL::Input_Lite::ConvertToKeyCode(VK_RIGHT) == SL::Input_Lite::KeyCodes::KEY_Right); 108 | 109 | assert(SL::Input_Lite::ConvertToKeyCode(VK_LEFT) == SL::Input_Lite::KeyCodes::KEY_Left); 110 | assert(SL::Input_Lite::ConvertToKeyCode(VK_DOWN) == SL::Input_Lite::KeyCodes::KEY_Down); 111 | assert(SL::Input_Lite::ConvertToKeyCode(VK_UP) == SL::Input_Lite::KeyCodes::KEY_Up); 112 | assert(SL::Input_Lite::ConvertToKeyCode(VK_NUMLOCK) == SL::Input_Lite::KeyCodes::KP_NumLock); 113 | assert(SL::Input_Lite::ConvertToKeyCode(VK_DIVIDE) == SL::Input_Lite::KeyCodes::KP_Divide); 114 | 115 | assert(SL::Input_Lite::ConvertToKeyCode(VK_MULTIPLY) == SL::Input_Lite::KeyCodes::KP_Multiply); 116 | assert(SL::Input_Lite::ConvertToKeyCode(VK_SUBTRACT) == SL::Input_Lite::KeyCodes::KP_Subtract); 117 | assert(SL::Input_Lite::ConvertToKeyCode(VK_ADD) == SL::Input_Lite::KeyCodes::KP_Add); 118 | // assert(SL::Input_Lite::ConvertToKeyCode(VK_RETURN) == SL::Input_Lite::KeyCodes::KP_Enter); 119 | 120 | assert(SL::Input_Lite::ConvertToKeyCode(VK_NUMPAD1) == SL::Input_Lite::KeyCodes::KP_1); 121 | assert(SL::Input_Lite::ConvertToKeyCode(VK_NUMPAD2) == SL::Input_Lite::KeyCodes::KP_2); 122 | assert(SL::Input_Lite::ConvertToKeyCode(VK_NUMPAD3) == SL::Input_Lite::KeyCodes::KP_3); 123 | assert(SL::Input_Lite::ConvertToKeyCode(VK_NUMPAD4) == SL::Input_Lite::KeyCodes::KP_4); 124 | assert(SL::Input_Lite::ConvertToKeyCode(VK_NUMPAD5) == SL::Input_Lite::KeyCodes::KP_5); 125 | assert(SL::Input_Lite::ConvertToKeyCode(VK_NUMPAD6) == SL::Input_Lite::KeyCodes::KP_6); 126 | assert(SL::Input_Lite::ConvertToKeyCode(VK_NUMPAD7) == SL::Input_Lite::KeyCodes::KP_7); 127 | assert(SL::Input_Lite::ConvertToKeyCode(VK_NUMPAD8) == SL::Input_Lite::KeyCodes::KP_8); 128 | assert(SL::Input_Lite::ConvertToKeyCode(VK_NUMPAD9) == SL::Input_Lite::KeyCodes::KP_9); 129 | assert(SL::Input_Lite::ConvertToKeyCode(VK_NUMPAD0) == SL::Input_Lite::KeyCodes::KP_0); 130 | assert(SL::Input_Lite::ConvertToKeyCode(VK_DECIMAL) == SL::Input_Lite::KeyCodes::KP_Point); 131 | 132 | // assert(SL::Input_Lite::ConvertToKeyCode(255) == SL::Input_Lite::KeyCodes::KEY_NonUSBackslash); 133 | // assert(SL::Input_Lite::ConvertToKeyCode(255) == SL::Input_Lite::KeyCodes::KP_Equals); 134 | 135 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F13) == SL::Input_Lite::KeyCodes::KEY_F13); 136 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F14) == SL::Input_Lite::KeyCodes::KEY_F14); 137 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F15) == SL::Input_Lite::KeyCodes::KEY_F15); 138 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F16) == SL::Input_Lite::KeyCodes::KEY_F16); 139 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F17) == SL::Input_Lite::KeyCodes::KEY_F17); 140 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F18) == SL::Input_Lite::KeyCodes::KEY_F18); 141 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F19) == SL::Input_Lite::KeyCodes::KEY_F19); 142 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F20) == SL::Input_Lite::KeyCodes::KEY_F20); 143 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F21) == SL::Input_Lite::KeyCodes::KEY_F21); 144 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F22) == SL::Input_Lite::KeyCodes::KEY_F22); 145 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F23) == SL::Input_Lite::KeyCodes::KEY_F23); 146 | assert(SL::Input_Lite::ConvertToKeyCode(VK_F24) == SL::Input_Lite::KeyCodes::KEY_F24); 147 | 148 | assert(SL::Input_Lite::ConvertToKeyCode(VK_HELP) == SL::Input_Lite::KeyCodes::KEY_Help); 149 | assert(SL::Input_Lite::ConvertToKeyCode(VK_MENU) == SL::Input_Lite::KeyCodes::KEY_Menu); 150 | 151 | assert(SL::Input_Lite::ConvertToKeyCode(VK_CONTROL) == SL::Input_Lite::KeyCodes::KEY_LeftControl); 152 | assert(SL::Input_Lite::ConvertToKeyCode(VK_SHIFT) == SL::Input_Lite::KeyCodes::KEY_LeftShift); 153 | assert(SL::Input_Lite::ConvertToKeyCode(VK_MENU) == SL::Input_Lite::KeyCodes::KEY_Menu); 154 | assert(SL::Input_Lite::ConvertToKeyCode(VK_LWIN) == SL::Input_Lite::KeyCodes::KEY_LeftMeta); 155 | 156 | // assert(SL::Input_Lite::ConvertToKeyCode(VK_CONTROL) == SL::Input_Lite::KeyCodes::KEY_RightControl); 157 | // assert(SL::Input_Lite::ConvertToKeyCode(VK_SHIFT) == SL::Input_Lite::KeyCodes::KEY_RightShift); 158 | // assert(SL::Input_Lite::ConvertToKeyCode(VK_MENU) == SL::Input_Lite::KeyCodes::KEY_RightAlt); 159 | assert(SL::Input_Lite::ConvertToKeyCode(VK_RWIN) == SL::Input_Lite::KeyCodes::KEY_RightMeta); 160 | 161 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_0) == '0'); 162 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_1) == '1'); 163 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_2) == '2'); 164 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_3) == '3'); 165 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_4) == '4'); 166 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_5) == '5'); 167 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_6) == '6'); 168 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_7) == '7'); 169 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_8) == '8'); 170 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_9) == '9'); 171 | 172 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_A) == 'A'); 173 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_B) == 'B'); 174 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_C) == 'C'); 175 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_D) == 'D'); 176 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_E) == 'E'); 177 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F) == 'F'); 178 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_G) == 'G'); 179 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_H) == 'H'); 180 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_I) == 'I'); 181 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_J) == 'J'); 182 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_K) == 'K'); 183 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_L) == 'L'); 184 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_M) == 'M'); 185 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_N) == 'N'); 186 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_O) == 'O'); 187 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_P) == 'P'); 188 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Q) == 'Q'); 189 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_R) == 'R'); 190 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_S) == 'S'); 191 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_T) == 'T'); 192 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_U) == 'U'); 193 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_V) == 'V'); 194 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_W) == 'W'); 195 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_X) == 'X'); 196 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Y) == 'Y'); 197 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Z) == 'Z'); 198 | 199 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Enter) == VK_RETURN); 200 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Escape) == VK_ESCAPE); 201 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Backspace) == VK_BACK); 202 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Tab) == VK_TAB); 203 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Space) == VK_SPACE); 204 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Minus) == VK_OEM_MINUS); 205 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Equals) == VK_OEM_PLUS); // this is correct and not a mistype 206 | 207 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_LeftBracket) == VK_OEM_4); 208 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_RightBracket) == VK_OEM_6); 209 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Backslash) == VK_OEM_5); 210 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Semicolon) == VK_OEM_1); 211 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Quote) == VK_OEM_7); 212 | 213 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Grave) == VK_OEM_3); 214 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Comma) == VK_OEM_COMMA); 215 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Period) == VK_OEM_PERIOD); 216 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Slash) == VK_OEM_2); 217 | 218 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_CapsLock) == VK_CAPITAL); 219 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F1) == VK_F1); 220 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F2) == VK_F2); 221 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F3) == VK_F3); 222 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F4) == VK_F4); 223 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F5) == VK_F5); 224 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F6) == VK_F6); 225 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F7) == VK_F7); 226 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F8) == VK_F8); 227 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F9) == VK_F9); 228 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F10) == VK_F10); 229 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F11) == VK_F11); 230 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F12) == VK_F12); 231 | 232 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_PrintScreen) == VK_SNAPSHOT); 233 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_ScrollLock) == VK_SCROLL); 234 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Pause) == VK_PAUSE); 235 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Insert) == VK_INSERT); 236 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Home) == VK_HOME); 237 | 238 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_PageUp) == VK_PRIOR); 239 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Delete) == VK_DELETE); 240 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_End) == VK_END); 241 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_PageDown) == VK_NEXT); 242 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Right) == VK_RIGHT); 243 | 244 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Left) == VK_LEFT); 245 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Down) == VK_DOWN); 246 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Up) == VK_UP); 247 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_NumLock) == VK_NUMLOCK); 248 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Divide) == VK_DIVIDE); 249 | 250 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Multiply) == VK_MULTIPLY); 251 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Subtract) == VK_SUBTRACT); 252 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Add) == VK_ADD); 253 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Enter) == VK_RETURN); 254 | 255 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_1) == VK_NUMPAD1); 256 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_2) == VK_NUMPAD2); 257 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_3) == VK_NUMPAD3); 258 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_4) == VK_NUMPAD4); 259 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_5) == VK_NUMPAD5); 260 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_6) == VK_NUMPAD6); 261 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_7) == VK_NUMPAD7); 262 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_8) == VK_NUMPAD8); 263 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_9) == VK_NUMPAD9); 264 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_0) == VK_NUMPAD0); 265 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Point) == VK_DECIMAL); 266 | 267 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_NonUSBackslash) == 255); 268 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Equals) == 255); 269 | 270 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F13) == VK_F13); 271 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F14) == VK_F14); 272 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F15) == VK_F15); 273 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F16) == VK_F16); 274 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F17) == VK_F17); 275 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F18) == VK_F18); 276 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F19) == VK_F19); 277 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F20) == VK_F20); 278 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F21) == VK_F21); 279 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F22) == VK_F22); 280 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F23) == VK_F23); 281 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F24) == VK_F24); 282 | 283 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Help) == VK_HELP); 284 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Menu) == VK_MENU); 285 | 286 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_LeftControl) == VK_CONTROL); 287 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_LeftShift) == VK_SHIFT); 288 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_LeftAlt) == VK_MENU); 289 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_LeftMeta) == VK_LWIN); 290 | 291 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_RightControl) == VK_CONTROL); 292 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_RightShift) == VK_SHIFT); 293 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_RightAlt) == VK_MENU); 294 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_RightMeta) == VK_RWIN); 295 | 296 | #elif __APPLE__ 297 | 298 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_0) == SL::Input_Lite::KeyCodes::KEY_0); 299 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_1) == SL::Input_Lite::KeyCodes::KEY_1); 300 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_2) == SL::Input_Lite::KeyCodes::KEY_2); 301 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_3) == SL::Input_Lite::KeyCodes::KEY_3); 302 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_4) == SL::Input_Lite::KeyCodes::KEY_4); 303 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_5) == SL::Input_Lite::KeyCodes::KEY_5); 304 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_6) == SL::Input_Lite::KeyCodes::KEY_6); 305 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_7) == SL::Input_Lite::KeyCodes::KEY_7); 306 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_8) == SL::Input_Lite::KeyCodes::KEY_8); 307 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_9) == SL::Input_Lite::KeyCodes::KEY_9); 308 | 309 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_A) == SL::Input_Lite::KeyCodes::KEY_A); 310 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_B) == SL::Input_Lite::KeyCodes::KEY_B); 311 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_C) == SL::Input_Lite::KeyCodes::KEY_C); 312 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_D) == SL::Input_Lite::KeyCodes::KEY_D); 313 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_E) == SL::Input_Lite::KeyCodes::KEY_E); 314 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_F) == SL::Input_Lite::KeyCodes::KEY_F); 315 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_G) == SL::Input_Lite::KeyCodes::KEY_G); 316 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_H) == SL::Input_Lite::KeyCodes::KEY_H); 317 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_I) == SL::Input_Lite::KeyCodes::KEY_I); 318 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_J) == SL::Input_Lite::KeyCodes::KEY_J); 319 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_K) == SL::Input_Lite::KeyCodes::KEY_K); 320 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_L) == SL::Input_Lite::KeyCodes::KEY_L); 321 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_M) == SL::Input_Lite::KeyCodes::KEY_M); 322 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_N) == SL::Input_Lite::KeyCodes::KEY_N); 323 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_O) == SL::Input_Lite::KeyCodes::KEY_O); 324 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_P) == SL::Input_Lite::KeyCodes::KEY_P); 325 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Q) == SL::Input_Lite::KeyCodes::KEY_Q); 326 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_R) == SL::Input_Lite::KeyCodes::KEY_R); 327 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_S) == SL::Input_Lite::KeyCodes::KEY_S); 328 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_T) == SL::Input_Lite::KeyCodes::KEY_T); 329 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_U) == SL::Input_Lite::KeyCodes::KEY_U); 330 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_V) == SL::Input_Lite::KeyCodes::KEY_V); 331 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_W) == SL::Input_Lite::KeyCodes::KEY_W); 332 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_X) == SL::Input_Lite::KeyCodes::KEY_X); 333 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Y) == SL::Input_Lite::KeyCodes::KEY_Y); 334 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Z) == SL::Input_Lite::KeyCodes::KEY_Z); 335 | 336 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_Return) == SL::Input_Lite::KeyCodes::KEY_Enter); 337 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_Escape) == SL::Input_Lite::KeyCodes::KEY_Escape); 338 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_Delete) == SL::Input_Lite::KeyCodes::KEY_Backspace); // not a type 339 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_Tab) == SL::Input_Lite::KeyCodes::KEY_Tab); 340 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_Space) == SL::Input_Lite::KeyCodes::KEY_Space); 341 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Minus) == SL::Input_Lite::KeyCodes::KEY_Minus); 342 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Equal) == SL::Input_Lite::KeyCodes::KEY_Equals); // this is correct and not a mistype 343 | 344 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_LeftBracket) == SL::Input_Lite::KeyCodes::KEY_LeftBracket); 345 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_RightBracket) == SL::Input_Lite::KeyCodes::KEY_RightBracket); 346 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Backslash) == SL::Input_Lite::KeyCodes::KEY_Backslash); 347 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Semicolon) == SL::Input_Lite::KeyCodes::KEY_Semicolon); 348 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Quote) == SL::Input_Lite::KeyCodes::KEY_Quote); 349 | 350 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Grave) == SL::Input_Lite::KeyCodes::KEY_Grave); 351 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Comma) == SL::Input_Lite::KeyCodes::KEY_Comma); 352 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Period) == SL::Input_Lite::KeyCodes::KEY_Period); 353 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Slash) == SL::Input_Lite::KeyCodes::KEY_Slash); 354 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_CapsLock) == SL::Input_Lite::KeyCodes::KEY_CapsLock); 355 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F1) == SL::Input_Lite::KeyCodes::KEY_F1); 356 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F2) == SL::Input_Lite::KeyCodes::KEY_F2); 357 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F3) == SL::Input_Lite::KeyCodes::KEY_F3); 358 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F4) == SL::Input_Lite::KeyCodes::KEY_F4); 359 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F5) == SL::Input_Lite::KeyCodes::KEY_F5); 360 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F6) == SL::Input_Lite::KeyCodes::KEY_F6); 361 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F7) == SL::Input_Lite::KeyCodes::KEY_F7); 362 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F8) == SL::Input_Lite::KeyCodes::KEY_F8); 363 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F9) == SL::Input_Lite::KeyCodes::KEY_F9); 364 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F10) == SL::Input_Lite::KeyCodes::KEY_F10); 365 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F11) == SL::Input_Lite::KeyCodes::KEY_F11); 366 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F12) == SL::Input_Lite::KeyCodes::KEY_F12); 367 | 368 | // assert(SL::Input_Lite::ConvertToKeyCode(VK_SNAPSHOT) == SL::Input_Lite::KeyCodes::KEY_PrintScreen); 369 | // assert(SL::Input_Lite::ConvertToKeyCode(VK_SCROLL) == SL::Input_Lite::KeyCodes::KEY_ScrollLock); 370 | // assert(SL::Input_Lite::ConvertToKeyCode(VK_PAUSE) == SL::Input_Lite::KeyCodes::KEY_Pause); 371 | // assert(SL::Input_Lite::ConvertToKeyCode(VK_INSERT) == SL::Input_Lite::KeyCodes::KEY_Insert); 372 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_Home) == SL::Input_Lite::KeyCodes::KEY_Home); 373 | 374 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_PageUp) == SL::Input_Lite::KeyCodes::KEY_PageUp); 375 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ForwardDelete) == SL::Input_Lite::KeyCodes::KEY_Delete); 376 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_End) == SL::Input_Lite::KeyCodes::KEY_End); 377 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_PageDown) == SL::Input_Lite::KeyCodes::KEY_PageDown); 378 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_RightArrow) == SL::Input_Lite::KeyCodes::KEY_Right); 379 | 380 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_LeftArrow) == SL::Input_Lite::KeyCodes::KEY_Left); 381 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_DownArrow) == SL::Input_Lite::KeyCodes::KEY_Down); 382 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_UpArrow) == SL::Input_Lite::KeyCodes::KEY_Up); 383 | // assert(SL::Input_Lite::ConvertToKeyCode(VK_NUMLOCK) == SL::Input_Lite::KeyCodes::KP_NumLock); 384 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_KeypadDivide) == SL::Input_Lite::KeyCodes::KP_Divide); 385 | 386 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_KeypadMultiply) == SL::Input_Lite::KeyCodes::KP_Multiply); 387 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_KeypadMinus) == SL::Input_Lite::KeyCodes::KP_Subtract); 388 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_KeypadPlus) == SL::Input_Lite::KeyCodes::KP_Add); 389 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_KeypadEnter) == SL::Input_Lite::KeyCodes::KP_Enter); 390 | 391 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Keypad0) == SL::Input_Lite::KeyCodes::KP_0); 392 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Keypad1) == SL::Input_Lite::KeyCodes::KP_1); 393 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Keypad2) == SL::Input_Lite::KeyCodes::KP_2); 394 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Keypad3) == SL::Input_Lite::KeyCodes::KP_3); 395 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Keypad4) == SL::Input_Lite::KeyCodes::KP_4); 396 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Keypad5) == SL::Input_Lite::KeyCodes::KP_5); 397 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Keypad6) == SL::Input_Lite::KeyCodes::KP_6); 398 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Keypad7) == SL::Input_Lite::KeyCodes::KP_7); 399 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Keypad8) == SL::Input_Lite::KeyCodes::KP_8); 400 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_Keypad9) == SL::Input_Lite::KeyCodes::KP_9); 401 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_KeypadDecimal) == SL::Input_Lite::KeyCodes::KP_Point); 402 | 403 | // assert(SL::Input_Lite::ConvertToKeyCode(255) == SL::Input_Lite::KeyCodes::KEY_NonUSBackslash); 404 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_ANSI_KeypadEquals) == SL::Input_Lite::KeyCodes::KP_Equals); 405 | 406 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F13) == SL::Input_Lite::KeyCodes::KEY_F13); 407 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F14) == SL::Input_Lite::KeyCodes::KEY_F14); 408 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F15) == SL::Input_Lite::KeyCodes::KEY_F15); 409 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F16) == SL::Input_Lite::KeyCodes::KEY_F16); 410 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F17) == SL::Input_Lite::KeyCodes::KEY_F17); 411 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F18) == SL::Input_Lite::KeyCodes::KEY_F18); 412 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F19) == SL::Input_Lite::KeyCodes::KEY_F19); 413 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_F20) == SL::Input_Lite::KeyCodes::KEY_F20); 414 | // assert(SL::Input_Lite::ConvertToKeyCode(VK_F21) == SL::Input_Lite::KeyCodes::KEY_F21); 415 | // assert(SL::Input_Lite::ConvertToKeyCode(VK_F22) == SL::Input_Lite::KeyCodes::KEY_F22); 416 | // assert(SL::Input_Lite::ConvertToKeyCode(VK_F23) == SL::Input_Lite::KeyCodes::KEY_F23); 417 | // assert(SL::Input_Lite::ConvertToKeyCode(VK_F24) == SL::Input_Lite::KeyCodes::KEY_F24); 418 | 419 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_Help) == SL::Input_Lite::KeyCodes::KEY_Help); 420 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_Option) == SL::Input_Lite::KeyCodes::KEY_Menu); 421 | 422 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_Control) == SL::Input_Lite::KeyCodes::KEY_LeftControl); 423 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_Shift) == SL::Input_Lite::KeyCodes::KEY_LeftShift); 424 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_Option) == SL::Input_Lite::KeyCodes::KEY_LeftMeta); 425 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_Command) == SL::Input_Lite::KeyCodes::KEY_LeftAlt); 426 | 427 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_RightControl) == SL::Input_Lite::KeyCodes::KEY_RightControl); 428 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_RightShift) == SL::Input_Lite::KeyCodes::KEY_RightShift); 429 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_RightOption) == SL::Input_Lite::KeyCodes::KEY_RightMeta); 430 | assert(SL::Input_Lite::ConvertToKeyCode(kVK_RightControl) == SL::Input_Lite::KeyCodes::KEY_RightMeta); 431 | 432 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_0) == kVK_ANSI_0); 433 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_1) == kVK_ANSI_1); 434 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_2) == kVK_ANSI_2); 435 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_3) == kVK_ANSI_3); 436 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_4) == kVK_ANSI_4); 437 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_5) == kVK_ANSI_5); 438 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_6) == kVK_ANSI_6); 439 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_7) == kVK_ANSI_7); 440 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_8) == kVK_ANSI_8); 441 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_9) == kVK_ANSI_9); 442 | 443 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_A) == kVK_ANSI_A); 444 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_B) == kVK_ANSI_B); 445 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_C) == kVK_ANSI_C); 446 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_D) == kVK_ANSI_D); 447 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_E) == kVK_ANSI_E); 448 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F) == kVK_ANSI_F); 449 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_G) == kVK_ANSI_G); 450 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_H) == kVK_ANSI_H); 451 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_I) == kVK_ANSI_I); 452 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_J) == kVK_ANSI_J); 453 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_K) == kVK_ANSI_K); 454 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_L) == kVK_ANSI_L); 455 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_M) == kVK_ANSI_M); 456 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_N) == kVK_ANSI_N); 457 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_O) == kVK_ANSI_O); 458 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_P) == kVK_ANSI_P); 459 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Q) == kVK_ANSI_Q); 460 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_R) == kVK_ANSI_R); 461 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_S) == kVK_ANSI_S); 462 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_T) == kVK_ANSI_T); 463 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_U) == kVK_ANSI_U); 464 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_V) == kVK_ANSI_V); 465 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_W) == kVK_ANSI_W); 466 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_X) == kVK_ANSI_X); 467 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Y) == kVK_ANSI_Y); 468 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Z) == kVK_ANSI_Z); 469 | 470 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Enter) == kVK_Return); 471 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Escape) == kVK_Escape); 472 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Backspace) == kVK_Delete); 473 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Tab) == kVK_Tab); 474 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Space) == kVK_Space); 475 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Minus) == kVK_ANSI_Minus); 476 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Equals) == kVK_ANSI_Equal); 477 | 478 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_LeftBracket) == kVK_ANSI_LeftBracket); 479 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_RightBracket) == kVK_ANSI_RightBracket); 480 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Backslash) == kVK_ANSI_Backslash); 481 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Semicolon) == kVK_ANSI_Semicolon); 482 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Quote) == kVK_ANSI_Quote); 483 | 484 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Grave) == kVK_ANSI_Grave); 485 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Comma) == kVK_ANSI_Comma); 486 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Period) == kVK_ANSI_Period); 487 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Slash) == kVK_ANSI_Slash); 488 | 489 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_CapsLock) == kVK_CapsLock); 490 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F1) == kVK_F1); 491 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F2) == kVK_F2); 492 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F3) == kVK_F3); 493 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F4) == kVK_F4); 494 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F5) == kVK_F5); 495 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F6) == kVK_F6); 496 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F7) == kVK_F7); 497 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F8) == kVK_F8); 498 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F9) == kVK_F9); 499 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F10) == kVK_F10); 500 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F11) == kVK_F11); 501 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F12) == kVK_F12); 502 | 503 | /* assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_PrintScreen) == VK_SNAPSHOT); 504 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_ScrollLock) == VK_SCROLL); 505 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Pause) == VK_PAUSE); 506 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Insert) == VK_INSERT);*/ 507 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Home) == kVK_Home); 508 | 509 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_PageUp) == kVK_PageUp); 510 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Delete) == kVK_ForwardDelete); 511 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_End) == kVK_End); 512 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_PageDown) == kVK_PageDown); 513 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Right) == kVK_RightArrow); 514 | 515 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Left) == kVK_LeftArrow); 516 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Down) == kVK_PageDown); 517 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Up) == kVK_UpArrow); 518 | // assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_NumLock) == VK_NUMLOCK); 519 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Divide) == kVK_ANSI_KeypadDivide); 520 | 521 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Multiply) == kVK_ANSI_KeypadMultiply); 522 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Subtract) == kVK_ANSI_KeypadMinus); 523 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Add) == kVK_ANSI_KeypadPlus); 524 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Enter) == kVK_ANSI_KeypadEnter); 525 | 526 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_1) == kVK_ANSI_Keypad1); 527 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_2) == kVK_ANSI_Keypad2); 528 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_3) == kVK_ANSI_Keypad3); 529 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_4) == kVK_ANSI_Keypad4); 530 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_5) == kVK_ANSI_Keypad5); 531 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_6) == kVK_ANSI_Keypad6); 532 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_7) == kVK_ANSI_Keypad7); 533 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_8) == kVK_ANSI_Keypad8); 534 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_9) == kVK_ANSI_Keypad9); 535 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_0) == kVK_ANSI_Keypad0); 536 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Point) == kVK_ANSI_KeypadDecimal); 537 | 538 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_NonUSBackslash) == 255); 539 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Equals) == kVK_ANSI_KeypadEquals); 540 | 541 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F13) == kVK_F13); 542 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F14) == kVK_F14); 543 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F15) == kVK_F15); 544 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F16) == kVK_F16); 545 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F17) == kVK_F17); 546 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F18) == kVK_F18); 547 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F19) == kVK_F19); 548 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F20) == kVK_F20); 549 | /* 550 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F21) == VK_F21); 551 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F22) == VK_F22); 552 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F23) == VK_F23); 553 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F24) == VK_F24); 554 | */ 555 | 556 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Help) == kVK_Help); 557 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Menu) == kVK_Option); 558 | 559 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_LeftControl) == kVK_Control); 560 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_LeftShift) == kVK_Shift); 561 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_LeftAlt) == kVK_Option); 562 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_LeftMeta) == kVK_Command); 563 | 564 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_RightControl) == kVK_RightControl); 565 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_RightShift) == kVK_RightShift); 566 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_RightAlt) == kVK_RightOption); 567 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_RightMeta) == kVK_RightControl); 568 | 569 | #elif __linux__ 570 | 571 | assert(SL::Input_Lite::ConvertToKeyCode(19) == SL::Input_Lite::KeyCodes::KEY_0); 572 | assert(SL::Input_Lite::ConvertToKeyCode(10) == SL::Input_Lite::KeyCodes::KEY_1); 573 | assert(SL::Input_Lite::ConvertToKeyCode(11) == SL::Input_Lite::KeyCodes::KEY_2); 574 | assert(SL::Input_Lite::ConvertToKeyCode(12) == SL::Input_Lite::KeyCodes::KEY_3); 575 | assert(SL::Input_Lite::ConvertToKeyCode(13) == SL::Input_Lite::KeyCodes::KEY_4); 576 | assert(SL::Input_Lite::ConvertToKeyCode(14) == SL::Input_Lite::KeyCodes::KEY_5); 577 | assert(SL::Input_Lite::ConvertToKeyCode(15) == SL::Input_Lite::KeyCodes::KEY_6); 578 | assert(SL::Input_Lite::ConvertToKeyCode(16) == SL::Input_Lite::KeyCodes::KEY_7); 579 | assert(SL::Input_Lite::ConvertToKeyCode(17) == SL::Input_Lite::KeyCodes::KEY_8); 580 | assert(SL::Input_Lite::ConvertToKeyCode(18) == SL::Input_Lite::KeyCodes::KEY_9); 581 | 582 | assert(SL::Input_Lite::ConvertToKeyCode(38) == SL::Input_Lite::KeyCodes::KEY_A); 583 | assert(SL::Input_Lite::ConvertToKeyCode(56) == SL::Input_Lite::KeyCodes::KEY_B); 584 | assert(SL::Input_Lite::ConvertToKeyCode(54) == SL::Input_Lite::KeyCodes::KEY_C); 585 | assert(SL::Input_Lite::ConvertToKeyCode(40) == SL::Input_Lite::KeyCodes::KEY_D); 586 | assert(SL::Input_Lite::ConvertToKeyCode(26) == SL::Input_Lite::KeyCodes::KEY_E); 587 | assert(SL::Input_Lite::ConvertToKeyCode(41) == SL::Input_Lite::KeyCodes::KEY_F); 588 | assert(SL::Input_Lite::ConvertToKeyCode(42) == SL::Input_Lite::KeyCodes::KEY_G); 589 | assert(SL::Input_Lite::ConvertToKeyCode(43) == SL::Input_Lite::KeyCodes::KEY_H); 590 | assert(SL::Input_Lite::ConvertToKeyCode(31) == SL::Input_Lite::KeyCodes::KEY_I); 591 | assert(SL::Input_Lite::ConvertToKeyCode(44) == SL::Input_Lite::KeyCodes::KEY_J); 592 | assert(SL::Input_Lite::ConvertToKeyCode(45) == SL::Input_Lite::KeyCodes::KEY_K); 593 | assert(SL::Input_Lite::ConvertToKeyCode(46) == SL::Input_Lite::KeyCodes::KEY_L); 594 | assert(SL::Input_Lite::ConvertToKeyCode(58) == SL::Input_Lite::KeyCodes::KEY_M); 595 | assert(SL::Input_Lite::ConvertToKeyCode(57) == SL::Input_Lite::KeyCodes::KEY_N); 596 | assert(SL::Input_Lite::ConvertToKeyCode(32) == SL::Input_Lite::KeyCodes::KEY_O); 597 | assert(SL::Input_Lite::ConvertToKeyCode(33) == SL::Input_Lite::KeyCodes::KEY_P); 598 | assert(SL::Input_Lite::ConvertToKeyCode(24) == SL::Input_Lite::KeyCodes::KEY_Q); 599 | assert(SL::Input_Lite::ConvertToKeyCode(27) == SL::Input_Lite::KeyCodes::KEY_R); 600 | assert(SL::Input_Lite::ConvertToKeyCode(39) == SL::Input_Lite::KeyCodes::KEY_S); 601 | assert(SL::Input_Lite::ConvertToKeyCode(28) == SL::Input_Lite::KeyCodes::KEY_T); 602 | assert(SL::Input_Lite::ConvertToKeyCode(30) == SL::Input_Lite::KeyCodes::KEY_U); 603 | assert(SL::Input_Lite::ConvertToKeyCode(55) == SL::Input_Lite::KeyCodes::KEY_V); 604 | assert(SL::Input_Lite::ConvertToKeyCode(25) == SL::Input_Lite::KeyCodes::KEY_W); 605 | assert(SL::Input_Lite::ConvertToKeyCode(53) == SL::Input_Lite::KeyCodes::KEY_X); 606 | assert(SL::Input_Lite::ConvertToKeyCode(29) == SL::Input_Lite::KeyCodes::KEY_Y); 607 | assert(SL::Input_Lite::ConvertToKeyCode(52) == SL::Input_Lite::KeyCodes::KEY_Z); 608 | 609 | assert(SL::Input_Lite::ConvertToKeyCode(36) == SL::Input_Lite::KeyCodes::KEY_Enter); 610 | assert(SL::Input_Lite::ConvertToKeyCode(9) == SL::Input_Lite::KeyCodes::KEY_Escape); 611 | assert(SL::Input_Lite::ConvertToKeyCode(22) == SL::Input_Lite::KeyCodes::KEY_Backspace); 612 | assert(SL::Input_Lite::ConvertToKeyCode(23) == SL::Input_Lite::KeyCodes::KEY_Tab); 613 | assert(SL::Input_Lite::ConvertToKeyCode(65) == SL::Input_Lite::KeyCodes::KEY_Space); 614 | assert(SL::Input_Lite::ConvertToKeyCode(20) == SL::Input_Lite::KeyCodes::KEY_Minus); 615 | assert(SL::Input_Lite::ConvertToKeyCode(21) == SL::Input_Lite::KeyCodes::KEY_Equals); // this is correct and not a mistype 616 | 617 | assert(SL::Input_Lite::ConvertToKeyCode(34) == SL::Input_Lite::KeyCodes::KEY_LeftBracket); 618 | assert(SL::Input_Lite::ConvertToKeyCode(35) == SL::Input_Lite::KeyCodes::KEY_RightBracket); 619 | assert(SL::Input_Lite::ConvertToKeyCode(51) == SL::Input_Lite::KeyCodes::KEY_Backslash); 620 | assert(SL::Input_Lite::ConvertToKeyCode(47) == SL::Input_Lite::KeyCodes::KEY_Semicolon); 621 | assert(SL::Input_Lite::ConvertToKeyCode(48) == SL::Input_Lite::KeyCodes::KEY_Quote); 622 | 623 | assert(SL::Input_Lite::ConvertToKeyCode(49) == SL::Input_Lite::KeyCodes::KEY_Grave); 624 | assert(SL::Input_Lite::ConvertToKeyCode(59) == SL::Input_Lite::KeyCodes::KEY_Comma); 625 | assert(SL::Input_Lite::ConvertToKeyCode(60) == SL::Input_Lite::KeyCodes::KEY_Period); 626 | assert(SL::Input_Lite::ConvertToKeyCode(61) == SL::Input_Lite::KeyCodes::KEY_Slash); 627 | assert(SL::Input_Lite::ConvertToKeyCode(66) == SL::Input_Lite::KeyCodes::KEY_CapsLock); 628 | assert(SL::Input_Lite::ConvertToKeyCode(67) == SL::Input_Lite::KeyCodes::KEY_F1); 629 | assert(SL::Input_Lite::ConvertToKeyCode(68) == SL::Input_Lite::KeyCodes::KEY_F2); 630 | assert(SL::Input_Lite::ConvertToKeyCode(69) == SL::Input_Lite::KeyCodes::KEY_F3); 631 | assert(SL::Input_Lite::ConvertToKeyCode(70) == SL::Input_Lite::KeyCodes::KEY_F4); 632 | assert(SL::Input_Lite::ConvertToKeyCode(71) == SL::Input_Lite::KeyCodes::KEY_F5); 633 | assert(SL::Input_Lite::ConvertToKeyCode(72) == SL::Input_Lite::KeyCodes::KEY_F6); 634 | assert(SL::Input_Lite::ConvertToKeyCode(73) == SL::Input_Lite::KeyCodes::KEY_F7); 635 | assert(SL::Input_Lite::ConvertToKeyCode(74) == SL::Input_Lite::KeyCodes::KEY_F8); 636 | assert(SL::Input_Lite::ConvertToKeyCode(75) == SL::Input_Lite::KeyCodes::KEY_F9); 637 | assert(SL::Input_Lite::ConvertToKeyCode(76) == SL::Input_Lite::KeyCodes::KEY_F10); 638 | assert(SL::Input_Lite::ConvertToKeyCode(95) == SL::Input_Lite::KeyCodes::KEY_F11); 639 | assert(SL::Input_Lite::ConvertToKeyCode(96) == SL::Input_Lite::KeyCodes::KEY_F12); 640 | 641 | assert(SL::Input_Lite::ConvertToKeyCode(107) == SL::Input_Lite::KeyCodes::KEY_PrintScreen); 642 | assert(SL::Input_Lite::ConvertToKeyCode(78) == SL::Input_Lite::KeyCodes::KEY_ScrollLock); 643 | assert(SL::Input_Lite::ConvertToKeyCode(127) == SL::Input_Lite::KeyCodes::KEY_Pause); 644 | assert(SL::Input_Lite::ConvertToKeyCode(118) == SL::Input_Lite::KeyCodes::KEY_Insert); 645 | assert(SL::Input_Lite::ConvertToKeyCode(110) == SL::Input_Lite::KeyCodes::KEY_Home); 646 | assert(SL::Input_Lite::ConvertToKeyCode(125) == SL::Input_Lite::KeyCodes::KP_Equals); 647 | 648 | assert(SL::Input_Lite::ConvertToKeyCode(112) == SL::Input_Lite::KeyCodes::KEY_PageUp); 649 | assert(SL::Input_Lite::ConvertToKeyCode(119) == SL::Input_Lite::KeyCodes::KEY_Delete); 650 | assert(SL::Input_Lite::ConvertToKeyCode(115) == SL::Input_Lite::KeyCodes::KEY_End); 651 | assert(SL::Input_Lite::ConvertToKeyCode(117) == SL::Input_Lite::KeyCodes::KEY_PageDown); 652 | assert(SL::Input_Lite::ConvertToKeyCode(114) == SL::Input_Lite::KeyCodes::KEY_Right); 653 | 654 | assert(SL::Input_Lite::ConvertToKeyCode(113) == SL::Input_Lite::KeyCodes::KEY_Left); 655 | assert(SL::Input_Lite::ConvertToKeyCode(116) == SL::Input_Lite::KeyCodes::KEY_Down); 656 | assert(SL::Input_Lite::ConvertToKeyCode(111) == SL::Input_Lite::KeyCodes::KEY_Up); 657 | assert(SL::Input_Lite::ConvertToKeyCode(77) == SL::Input_Lite::KeyCodes::KP_NumLock); 658 | assert(SL::Input_Lite::ConvertToKeyCode(106) == SL::Input_Lite::KeyCodes::KP_Divide); 659 | 660 | assert(SL::Input_Lite::ConvertToKeyCode(63) == SL::Input_Lite::KeyCodes::KP_Multiply); 661 | assert(SL::Input_Lite::ConvertToKeyCode(82) == SL::Input_Lite::KeyCodes::KP_Subtract); 662 | assert(SL::Input_Lite::ConvertToKeyCode(86) == SL::Input_Lite::KeyCodes::KP_Add); 663 | assert(SL::Input_Lite::ConvertToKeyCode(104) == SL::Input_Lite::KeyCodes::KP_Enter); 664 | 665 | assert(SL::Input_Lite::ConvertToKeyCode(87) == SL::Input_Lite::KeyCodes::KP_1); 666 | assert(SL::Input_Lite::ConvertToKeyCode(88) == SL::Input_Lite::KeyCodes::KP_2); 667 | assert(SL::Input_Lite::ConvertToKeyCode(89) == SL::Input_Lite::KeyCodes::KP_3); 668 | assert(SL::Input_Lite::ConvertToKeyCode(83) == SL::Input_Lite::KeyCodes::KP_4); 669 | assert(SL::Input_Lite::ConvertToKeyCode(84) == SL::Input_Lite::KeyCodes::KP_5); 670 | assert(SL::Input_Lite::ConvertToKeyCode(85) == SL::Input_Lite::KeyCodes::KP_6); 671 | assert(SL::Input_Lite::ConvertToKeyCode(79) == SL::Input_Lite::KeyCodes::KP_7); 672 | assert(SL::Input_Lite::ConvertToKeyCode(80) == SL::Input_Lite::KeyCodes::KP_8); 673 | assert(SL::Input_Lite::ConvertToKeyCode(81) == SL::Input_Lite::KeyCodes::KP_9); 674 | assert(SL::Input_Lite::ConvertToKeyCode(90) == SL::Input_Lite::KeyCodes::KP_0); 675 | assert(SL::Input_Lite::ConvertToKeyCode(91) == SL::Input_Lite::KeyCodes::KP_Point); 676 | 677 | assert(SL::Input_Lite::ConvertToKeyCode(94) == SL::Input_Lite::KeyCodes::KEY_NonUSBackslash); 678 | // assert(SL::Input_Lite::ConvertToKeyCode(255) == SL::Input_Lite::KeyCodes::KP_Equals); 679 | 680 | assert(SL::Input_Lite::ConvertToKeyCode(191) == SL::Input_Lite::KeyCodes::KEY_F13); 681 | assert(SL::Input_Lite::ConvertToKeyCode(192) == SL::Input_Lite::KeyCodes::KEY_F14); 682 | assert(SL::Input_Lite::ConvertToKeyCode(193) == SL::Input_Lite::KeyCodes::KEY_F15); 683 | assert(SL::Input_Lite::ConvertToKeyCode(194) == SL::Input_Lite::KeyCodes::KEY_F16); 684 | assert(SL::Input_Lite::ConvertToKeyCode(195) == SL::Input_Lite::KeyCodes::KEY_F17); 685 | assert(SL::Input_Lite::ConvertToKeyCode(196) == SL::Input_Lite::KeyCodes::KEY_F18); 686 | assert(SL::Input_Lite::ConvertToKeyCode(197) == SL::Input_Lite::KeyCodes::KEY_F19); 687 | assert(SL::Input_Lite::ConvertToKeyCode(198) == SL::Input_Lite::KeyCodes::KEY_F20); 688 | assert(SL::Input_Lite::ConvertToKeyCode(199) == SL::Input_Lite::KeyCodes::KEY_F21); 689 | assert(SL::Input_Lite::ConvertToKeyCode(200) == SL::Input_Lite::KeyCodes::KEY_F22); 690 | assert(SL::Input_Lite::ConvertToKeyCode(201) == SL::Input_Lite::KeyCodes::KEY_F23); 691 | assert(SL::Input_Lite::ConvertToKeyCode(202) == SL::Input_Lite::KeyCodes::KEY_F24); 692 | 693 | assert(SL::Input_Lite::ConvertToKeyCode(146) == SL::Input_Lite::KeyCodes::KEY_Help); 694 | assert(SL::Input_Lite::ConvertToKeyCode(135) == SL::Input_Lite::KeyCodes::KEY_Menu); 695 | 696 | assert(SL::Input_Lite::ConvertToKeyCode(37) == SL::Input_Lite::KeyCodes::KEY_LeftControl); 697 | assert(SL::Input_Lite::ConvertToKeyCode(50) == SL::Input_Lite::KeyCodes::KEY_LeftShift); 698 | assert(SL::Input_Lite::ConvertToKeyCode(64) == SL::Input_Lite::KeyCodes::KEY_LeftAlt); 699 | assert(SL::Input_Lite::ConvertToKeyCode(133) == SL::Input_Lite::KeyCodes::KEY_LeftMeta); 700 | 701 | assert(SL::Input_Lite::ConvertToKeyCode(105) == SL::Input_Lite::KeyCodes::KEY_RightControl); 702 | assert(SL::Input_Lite::ConvertToKeyCode(62) == SL::Input_Lite::KeyCodes::KEY_RightShift); 703 | assert(SL::Input_Lite::ConvertToKeyCode(108) == SL::Input_Lite::KeyCodes::KEY_RightAlt); 704 | assert(SL::Input_Lite::ConvertToKeyCode(134) == SL::Input_Lite::KeyCodes::KEY_RightMeta); 705 | 706 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_0) == 19); 707 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_1) == 10); 708 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_2) == 11); 709 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_3) == 12); 710 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_4) == 13); 711 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_5) == 14); 712 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_6) == 15); 713 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_7) == 16); 714 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_8) == 17); 715 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_9) == 18); 716 | 717 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_A) == 38); 718 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_B) == 56); 719 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_C) == 54); 720 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_D) == 40); 721 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_E) == 26); 722 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F) == 41); 723 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_G) == 42); 724 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_H) == 43); 725 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_I) == 31); 726 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_J) == 44); 727 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_K) == 45); 728 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_L) == 46); 729 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_M) == 58); 730 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_N) == 57); 731 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_O) == 32); 732 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_P) == 33); 733 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Q) == 24); 734 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_R) == 27); 735 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_S) == 39); 736 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_T) == 28); 737 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_U) == 30); 738 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_V) == 55); 739 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_W) == 25); 740 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_X) == 53); 741 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Y) == 29); 742 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Z) == 52); 743 | 744 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Enter) == 36); 745 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Escape) == 9); 746 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Backspace) == 22); 747 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Tab) == 23); 748 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Space) == 65); 749 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Minus) == 20); 750 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Equals) == 21); // this is correct and not a mistype 751 | 752 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_LeftBracket) == 34); 753 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_RightBracket) == 35); 754 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Backslash) == 51); 755 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Semicolon) == 47); 756 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Quote) == 48); 757 | 758 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Grave) == 49); 759 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Comma) == 59); 760 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Period) == 60); 761 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Slash) == 61); 762 | 763 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_CapsLock) == 66); 764 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F1) == 67); 765 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F2) == 68); 766 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F3) == 69); 767 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F4) == 70); 768 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F5) == 71); 769 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F6) == 72); 770 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F7) == 73); 771 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F8) == 74); 772 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F9) == 75); 773 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F10) == 76); 774 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F11) == 95); 775 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F12) == 96); 776 | 777 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_PrintScreen) == 107); 778 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_ScrollLock) == 78); 779 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Pause) == 127); 780 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Insert) == 118); 781 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Home) == 110); 782 | 783 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_PageUp) == 112); 784 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Delete) == 119); 785 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_End) == 115); 786 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_PageDown) == 117); 787 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Right) == 114); 788 | 789 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Left) == 113); 790 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Down) == 116); 791 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Up) == 111); 792 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_NumLock) == 77); 793 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Divide) == 106); 794 | 795 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Multiply) == 63); 796 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Subtract) == 82); 797 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Add) == 86); 798 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Enter) == 104); 799 | 800 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_1) == 87); 801 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_2) == 88); 802 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_3) == 89); 803 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_4) == 83); 804 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_5) == 84); 805 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_6) == 85); 806 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_7) == 79); 807 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_8) == 80); 808 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_9) == 81); 809 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_0) == 90); 810 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Point) == 91); 811 | 812 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_NonUSBackslash) == 255); 813 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KP_Equals) == 255); 814 | 815 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F13) == 191); 816 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F14) == 192); 817 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F15) == 193); 818 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F16) == 194); 819 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F17) == 195); 820 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F18) == 196); 821 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F19) == 197); 822 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F20) == 198); 823 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F21) == 199); 824 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F22) == 200); 825 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F23) == 201); 826 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_F24) == 202); 827 | 828 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Help) == 146); 829 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_Menu) == 135); 830 | 831 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_LeftControl) == 37); 832 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_LeftShift) == 50); 833 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_LeftAlt) == 64); 834 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_LeftMeta) == 133); 835 | 836 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_RightControl) == 105); 837 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_RightShift) == 62); 838 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_RightAlt) == 108); 839 | assert(SL::Input_Lite::ConvertToNative(SL::Input_Lite::KeyCodes::KEY_RightMeta) == 134); 840 | 841 | #else 842 | #error "Unknown Operating System!" 843 | #endif 844 | 845 | std::cout << "Simulating the A key on keyboard is being pressed. " << std::endl; 846 | SL::Input_Lite::SendInput(SL::Input_Lite::KeyEvent{true, SL::Input_Lite::KeyCodes::KEY_A}); 847 | SL::Input_Lite::SendInput(SL::Input_Lite::KeyEvent{false, SL::Input_Lite::KeyCodes::KEY_A}); 848 | 849 | std::cout << "Starting Mouse move tests by Offset" << std::endl; 850 | SL::Input_Lite::SendInput(SL::Input_Lite::MousePositionAbsoluteEvent{100, 100}); 851 | for (auto x = 0; x < 500; x++) { 852 | SL::Input_Lite::SendInput(SL::Input_Lite::MousePositionOffsetEvent{1, 0}); 853 | std::this_thread::sleep_for(10ms); 854 | } 855 | for (auto y = 0; y < 500; y++) { 856 | SL::Input_Lite::SendInput(SL::Input_Lite::MousePositionOffsetEvent{0, 1}); 857 | std::this_thread::sleep_for(10ms); 858 | } 859 | std::cout << "Starting Mouse move tests by Absolute" << std::endl; 860 | for (auto x = 0; x < 500; x++) { 861 | SL::Input_Lite::SendInput(SL::Input_Lite::MousePositionAbsoluteEvent{x, 300}); 862 | std::this_thread::sleep_for(10ms); 863 | } 864 | for (auto y = 0; y < 500; y++) { 865 | SL::Input_Lite::SendInput(SL::Input_Lite::MousePositionAbsoluteEvent{500, y}); 866 | std::this_thread::sleep_for(10ms); 867 | } 868 | std::cout << "Starting Mouse Click tests right down up" << std::endl; 869 | SL::Input_Lite::SendInput(SL::Input_Lite::MouseButtonEvent{true, SL::Input_Lite::MouseButtons::RIGHT}); 870 | SL::Input_Lite::SendInput(SL::Input_Lite::MouseButtonEvent{false, SL::Input_Lite::MouseButtons::RIGHT}); 871 | 872 | std::cout << "Starting Mouse Click tests left down up" << std::endl; 873 | SL::Input_Lite::SendInput(SL::Input_Lite::MouseButtonEvent{true, SL::Input_Lite::MouseButtons::LEFT}); 874 | SL::Input_Lite::SendInput(SL::Input_Lite::MouseButtonEvent{false, SL::Input_Lite::MouseButtons::LEFT}); 875 | 876 | std::cout << "Starting Mouse wheel tests " << std::endl; 877 | for (auto y = 0; y < 500; y++) { 878 | SL::Input_Lite::SendInput(SL::Input_Lite::MouseScrollEvent{1}); 879 | std::this_thread::sleep_for(10ms); 880 | } 881 | for (auto y = 0; y < 500; y++) { 882 | SL::Input_Lite::SendInput(SL::Input_Lite::MouseScrollEvent{-1}); 883 | std::this_thread::sleep_for(10ms); 884 | } 885 | 886 | return 0; 887 | } 888 | -------------------------------------------------------------------------------- /include/InputManager.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #include "Input_Lite.h" 9 | 10 | namespace SL { 11 | namespace Input_Lite { 12 | 13 | class InputManager final : public IInputManager { 14 | std::thread Thread; 15 | std::mutex Mutex; 16 | std::condition_variable Conditional; 17 | std::vector> Events; 18 | bool Ready = false; 19 | bool KeepRunning = false; 20 | 21 | void Run(); 22 | 23 | public: 24 | virtual ~InputManager(); 25 | 26 | virtual bool PushEvent(const KeyEvent &e) override; 27 | virtual bool PushEvent(const MouseButtonEvent &e) override; 28 | 29 | virtual bool PushEvent(const MouseScrollEvent &pos) override; 30 | virtual bool PushEvent(const MousePositionOffsetEvent &pos) override; 31 | virtual bool PushEvent(const MousePositionAbsoluteEvent &pos) override; 32 | 33 | std::function OnKeyEvent; 34 | std::function OnMouseButtonEvent; 35 | std::function OnMouseScroll; 36 | std::function OnMousePositionOffset; 37 | std::function OnMousePositionAbsolute; 38 | void start() { Thread = std::thread(&SL::Input_Lite::InputManager::Run, this); } 39 | }; 40 | 41 | } // namespace Input_Lite 42 | } // namespace SL 43 | -------------------------------------------------------------------------------- /include/Input_Lite.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | 6 | #ifdef WIN32 7 | #define WIN32_LEAN_AND_MEAN 8 | #include 9 | #elif __APPLE__ 10 | #include 11 | #elif __linux__ 12 | #include 13 | #else 14 | #error "Unknown Operating System!" 15 | #endif 16 | 17 | #if defined(WINDOWS) || defined(WIN32) 18 | #if defined(INPUT_LITE_DLL) 19 | #define INPUT_LITE_EXTERN __declspec(dllexport) 20 | #else 21 | #define INPUT_LITE_EXTERN 22 | #endif 23 | #else 24 | #define INPUT_LITE_EXTERN 25 | #endif 26 | 27 | namespace SL { 28 | namespace Input_Lite { 29 | // codes are from http://www.usb.org/developers/hidpage/Hut1_12v2.pdf 30 | enum KeyCodes : unsigned char { 31 | KEY_A = 4, 32 | KEY_B = 5, 33 | KEY_C = 6, 34 | KEY_D = 7, 35 | KEY_E = 8, 36 | KEY_F = 9, 37 | KEY_G = 10, 38 | KEY_H = 11, 39 | KEY_I = 12, 40 | KEY_J = 13, 41 | KEY_K = 14, 42 | KEY_L = 15, 43 | KEY_M = 16, 44 | KEY_N = 17, 45 | KEY_O = 18, 46 | KEY_P = 19, 47 | KEY_Q = 20, 48 | KEY_R = 21, 49 | KEY_S = 22, 50 | KEY_T = 23, 51 | KEY_U = 24, 52 | KEY_V = 25, 53 | KEY_W = 26, 54 | KEY_X = 27, 55 | KEY_Y = 28, 56 | KEY_Z = 29, 57 | KEY_1 = 30, 58 | KEY_2 = 31, 59 | KEY_3 = 32, 60 | KEY_4 = 33, 61 | KEY_5 = 34, 62 | KEY_6 = 35, 63 | KEY_7 = 36, 64 | KEY_8 = 37, 65 | KEY_9 = 38, 66 | KEY_0 = 39, 67 | KEY_Enter = 40, 68 | KEY_Escape = 41, 69 | KEY_Backspace = 42, 70 | KEY_Tab = 43, 71 | KEY_Space = 44, 72 | KEY_Minus = 45, 73 | KEY_Equals = 46, 74 | KEY_LeftBracket = 47, 75 | KEY_RightBracket = 48, 76 | KEY_Backslash = 49, 77 | KEY_Semicolon = 51, 78 | KEY_Quote = 52, 79 | KEY_Grave = 53, 80 | KEY_Comma = 54, 81 | KEY_Period = 55, 82 | KEY_Slash = 56, 83 | KEY_CapsLock = 57, 84 | KEY_F1 = 58, 85 | KEY_F2 = 59, 86 | KEY_F3 = 60, 87 | KEY_F4 = 61, 88 | KEY_F5 = 62, 89 | KEY_F6 = 63, 90 | KEY_F7 = 64, 91 | KEY_F8 = 65, 92 | KEY_F9 = 66, 93 | KEY_F10 = 67, 94 | KEY_F11 = 68, 95 | KEY_F12 = 69, 96 | KEY_PrintScreen = 70, 97 | KEY_ScrollLock = 71, 98 | KEY_Pause = 72, 99 | KEY_Insert = 73, 100 | KEY_Home = 74, 101 | KEY_PageUp = 75, 102 | KEY_Delete = 76, 103 | KEY_End = 77, 104 | KEY_PageDown = 78, 105 | KEY_Right = 79, 106 | KEY_Left = 80, 107 | KEY_Down = 81, 108 | KEY_Up = 82, 109 | KP_NumLock = 83, 110 | KP_Divide = 84, 111 | KP_Multiply = 85, 112 | KP_Subtract = 86, 113 | KP_Add = 87, 114 | KP_Enter = 88, 115 | KP_1 = 89, 116 | KP_2 = 90, 117 | KP_3 = 91, 118 | KP_4 = 92, 119 | KP_5 = 93, 120 | KP_6 = 94, 121 | KP_7 = 95, 122 | KP_8 = 96, 123 | KP_9 = 97, 124 | KP_0 = 98, 125 | KP_Point = 99, 126 | KEY_NonUSBackslash = 100, 127 | KP_Equals = 103, 128 | KEY_F13 = 104, 129 | KEY_F14 = 105, 130 | KEY_F15 = 106, 131 | KEY_F16 = 107, 132 | KEY_F17 = 108, 133 | KEY_F18 = 109, 134 | KEY_F19 = 110, 135 | KEY_F20 = 111, 136 | KEY_F21 = 112, 137 | KEY_F22 = 113, 138 | KEY_F23 = 114, 139 | KEY_F24 = 115, 140 | KEY_Help = 117, 141 | KEY_Menu = 118, 142 | KEY_LeftControl = 224, 143 | KEY_LeftShift = 225, 144 | KEY_LeftAlt = 226, 145 | KEY_LeftMeta = 227, 146 | KEY_RightControl = 228, 147 | KEY_RightShift = 229, 148 | KEY_RightAlt = 230, 149 | KEY_RightMeta = 231, 150 | INVALID = 255 151 | }; 152 | 153 | enum class MouseButtons : unsigned char { LEFT, MIDDLE, RIGHT }; 154 | #ifdef WIN32 155 | INPUT_LITE_EXTERN DWORD ConvertToNative(Input_Lite::KeyCodes key); 156 | INPUT_LITE_EXTERN Input_Lite::KeyCodes ConvertToKeyCode(DWORD key); 157 | #elif __APPLE__ 158 | INPUT_LITE_EXTERN CGKeyCode ConvertToNative(KeyCodes key); 159 | INPUT_LITE_EXTERN KeyCodes ConvertToKeyCode(CGKeyCode key); 160 | #elif __linux__ 161 | INPUT_LITE_EXTERN KeyCode ConvertToNative(Input_Lite::KeyCodes key); 162 | INPUT_LITE_EXTERN Input_Lite::KeyCodes ConvertToKeyCode(KeyCode key); 163 | #else 164 | #error "Unknown Operating System!" 165 | #endif 166 | 167 | struct KeyEvent { 168 | bool Pressed; 169 | KeyCodes Key; 170 | }; 171 | struct MouseButtonEvent { 172 | bool Pressed; 173 | MouseButtons Button; 174 | }; 175 | struct MouseScrollEvent { 176 | int Offset; 177 | }; 178 | struct MousePositionOffsetEvent { 179 | int X = 0; 180 | int Y = 0; 181 | }; 182 | struct MousePositionAbsoluteEvent { 183 | int X = 0; 184 | int Y = 0; 185 | }; 186 | 187 | INPUT_LITE_EXTERN void SendInput(const KeyEvent &e); 188 | INPUT_LITE_EXTERN void SendInput(const MouseButtonEvent &e); 189 | INPUT_LITE_EXTERN void SendInput(const MouseScrollEvent &e); 190 | INPUT_LITE_EXTERN void SendInput(const MousePositionOffsetEvent &e); 191 | INPUT_LITE_EXTERN void SendInput(const MousePositionAbsoluteEvent &e); 192 | 193 | class INPUT_LITE_EXTERN IInputManager { 194 | public: 195 | virtual ~IInputManager() {} 196 | virtual bool PushEvent(const KeyEvent &e) = 0; 197 | virtual bool PushEvent(const MouseButtonEvent &e) = 0; 198 | virtual bool PushEvent(const MouseScrollEvent &pos) = 0; 199 | virtual bool PushEvent(const MousePositionOffsetEvent &pos) = 0; 200 | virtual bool PushEvent(const MousePositionAbsoluteEvent &pos) = 0; 201 | }; 202 | class INPUT_LITE_EXTERN IInputConfiguration { 203 | public: 204 | virtual ~IInputConfiguration() {} 205 | 206 | virtual std::shared_ptr onEvent(const std::function &cb) = 0; 207 | virtual std::shared_ptr onEvent(const std::function &cb) = 0; 208 | virtual std::shared_ptr onEvent(const std::function &cb) = 0; 209 | virtual std::shared_ptr onEvent(const std::function &cb) = 0; 210 | virtual std::shared_ptr onEvent(const std::function &cb) = 0; 211 | virtual std::shared_ptr Build() = 0; 212 | }; 213 | 214 | INPUT_LITE_EXTERN std::shared_ptr CreateInputConfiguration(); 215 | } // namespace Input_Lite 216 | } // namespace SL 217 | -------------------------------------------------------------------------------- /src/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(libinput_lite) 2 | 3 | if(MSVC) 4 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") 5 | else() 6 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic") 7 | endif() 8 | 9 | if(WIN32) 10 | set(INPUT_LITE_PLATFORM_SRC 11 | ${CMAKE_CURRENT_SOURCE_DIR}/../src/windows/Input.cpp 12 | ) 13 | 14 | set(INPUT_LITE_PLATFORM_INC 15 | ${CMAKE_CURRENT_SOURCE_DIR}/../include/windows 16 | ${CMAKE_CURRENT_SOURCE_DIR}/../src/windows 17 | ) 18 | 19 | elseif(APPLE) 20 | find_library(corefoundation_lib CoreFoundation) 21 | find_library(cocoa_lib Cocoa) 22 | set(INPUT_LITE_PLATFORM_LIBS ${corefoundation_lib} ${cocoa_lib}) 23 | 24 | set(INPUT_LITE_PLATFORM_SRC 25 | ${CMAKE_CURRENT_SOURCE_DIR}/../src/ios/Input.cpp 26 | ) 27 | set(INPUT_LITE_PLATFORM_INC 28 | ${CMAKE_CURRENT_SOURCE_DIR}/../include/ios 29 | ${CMAKE_CURRENT_SOURCE_DIR}/../src/ios 30 | ) 31 | else() 32 | set(INPUT_LITE_PLATFORM_SRC 33 | ${CMAKE_CURRENT_SOURCE_DIR}/../src/linux/Input.cpp 34 | ) 35 | 36 | find_package(X11 REQUIRED) 37 | if(!X11_XTest_FOUND) 38 | message(FATAL_ERROR "X11 extensions are required, but not found!") 39 | endif() 40 | if(!X11_Xfixes_LIB) 41 | message(FATAL_ERROR "X11 fixes extension is required, but not found!") 42 | endif() 43 | set(INPUT_LITE_PLATFORM_INC 44 | ${CMAKE_CURRENT_SOURCE_DIR}/../include/linux 45 | ${CMAKE_CURRENT_SOURCE_DIR}/../src/linux 46 | ${X11_INCLUDE_DIR} 47 | ) 48 | find_package(Threads REQUIRED) 49 | set(INPUT_LITE_PLATFORM_LIBS 50 | ${X11_LIBRARIES} 51 | ${X11_Xfixes_LIB} 52 | ${X11_XTest_LIB} 53 | ${CMAKE_THREAD_LIBS_INIT} 54 | ) 55 | 56 | endif() 57 | 58 | set(INPUT_LITE_COMMON_SRC 59 | ${CMAKE_CURRENT_SOURCE_DIR}/../include/internal/InputManager.h 60 | ${CMAKE_CURRENT_SOURCE_DIR}/../src/internal/InputManager.cpp 61 | ${CMAKE_CURRENT_SOURCE_DIR}/../include/Input_Lite.h 62 | ${CMAKE_CURRENT_SOURCE_DIR}/../src/Input_Lite.cpp 63 | ) 64 | set(INPUT_LITE_LIBS 65 | ${PROJECT_NAME} 66 | CACHE INTERNAL "${PROJECT_NAME}: Include Libraries" FORCE 67 | ) 68 | 69 | set(INPUT_LITE_INCLUDE_DIRS 70 | ${CMAKE_CURRENT_SOURCE_DIR}/../include 71 | ${CMAKE_CURRENT_SOURCE_DIR}/../src 72 | ${CMAKE_CURRENT_SOURCE_DIR}/../include/internal 73 | ${CMAKE_CURRENT_SOURCE_DIR}/../src/internal 74 | ${INPUT_LITE_PLATFORM_INC} 75 | CACHE INTERNAL "${PROJECT_NAME}: Include Directories" FORCE 76 | ) 77 | 78 | include_directories(${INPUT_LITE_INCLUDE_DIRS}) 79 | add_library(${PROJECT_NAME} ${INPUT_LITE_COMMON_SRC} ${INPUT_LITE_PLATFORM_SRC}) 80 | 81 | target_link_libraries(${PROJECT_NAME} ${INPUT_LITE_PLATFORM_LIBS}) 82 | 83 | 84 | -------------------------------------------------------------------------------- /src/InputManager.cpp: -------------------------------------------------------------------------------- 1 | #include "InputManager.h" 2 | #include "Input_Lite.h" 3 | #include 4 | 5 | namespace SL { 6 | namespace Input_Lite { 7 | 8 | InputManager::~InputManager() 9 | { 10 | KeepRunning = false; 11 | Ready = true; 12 | Conditional.notify_all(); 13 | } 14 | 15 | bool InputManager::PushEvent(const KeyEvent &e) 16 | { 17 | if (e.Key == KeyCodes::INVALID || !OnKeyEvent) { 18 | return false; 19 | } // key not regonized 20 | auto tmp = [&, e] { OnKeyEvent(e); }; 21 | std::lock_guard lk(Mutex); 22 | Events.emplace_back(tmp); 23 | Ready = true; 24 | return true; 25 | } 26 | bool InputManager::PushEvent(const MouseButtonEvent &e) 27 | { 28 | if (!OnMouseButtonEvent) { 29 | return false; 30 | } // key not regonized 31 | auto tmp = [&, e] { OnMouseButtonEvent(e); }; 32 | std::lock_guard lk(Mutex); 33 | Events.emplace_back(tmp); 34 | Ready = true; 35 | return true; 36 | } 37 | 38 | bool InputManager::PushEvent(const MouseScrollEvent &pos) 39 | { 40 | if (!OnMouseScroll) { 41 | return false; 42 | } // key not regonized 43 | auto tmp = [&, pos] { OnMouseScroll(pos); }; 44 | std::lock_guard lk(Mutex); 45 | Events.emplace_back(tmp); 46 | Ready = true; 47 | return true; 48 | } 49 | bool InputManager::PushEvent(const MousePositionOffsetEvent &pos) 50 | { 51 | if (!OnMousePositionOffset) { 52 | return false; 53 | } // key not regonized 54 | auto tmp = [&, pos] { OnMousePositionOffset(pos); }; 55 | std::lock_guard lk(Mutex); 56 | Events.emplace_back(tmp); 57 | Ready = true; 58 | return true; 59 | } 60 | bool InputManager::PushEvent(const MousePositionAbsoluteEvent &pos) 61 | { 62 | if (!OnMousePositionAbsolute) { 63 | return false; 64 | } // key not regonized 65 | auto tmp = [&, pos] { OnMousePositionAbsolute(pos); }; 66 | std::lock_guard lk(Mutex); 67 | Events.emplace_back(tmp); 68 | Ready = true; 69 | return true; 70 | } 71 | void InputManager::Run() 72 | { 73 | while (KeepRunning) { 74 | std::unique_lock lk(Mutex); 75 | Conditional.wait(lk, [&] { return Ready; }); 76 | if (KeepRunning) { // check again.. thread could have been work up for destruction 77 | for (auto &f : Events) { 78 | f(); 79 | } 80 | Events.clear(); 81 | } 82 | } 83 | } 84 | 85 | } // namespace Input_Lite 86 | } // namespace SL -------------------------------------------------------------------------------- /src/Input_Lite.cpp: -------------------------------------------------------------------------------- 1 | #include "InputManager.h" 2 | #include "Input_Lite.h" 3 | #include 4 | 5 | namespace SL { 6 | namespace Input_Lite { 7 | 8 | class InputConfiguration : public IInputConfiguration { 9 | std::shared_ptr Impl; 10 | 11 | public: 12 | InputConfiguration(const std::shared_ptr &impl) : Impl(impl) {} 13 | virtual ~InputConfiguration() {} 14 | 15 | virtual std::shared_ptr onEvent(const std::function &cb) override 16 | { 17 | assert(!Impl->OnKeyEvent); 18 | Impl->OnKeyEvent = cb; 19 | return std::make_shared(Impl); 20 | } 21 | virtual std::shared_ptr onEvent(const std::function &cb) override 22 | { 23 | assert(!Impl->OnMouseButtonEvent); 24 | Impl->OnMouseButtonEvent = cb; 25 | return std::make_shared(Impl); 26 | } 27 | virtual std::shared_ptr onEvent(const std::function &cb) override 28 | { 29 | assert(!Impl->OnMouseScroll); 30 | Impl->OnMouseScroll = cb; 31 | return std::make_shared(Impl); 32 | } 33 | virtual std::shared_ptr onEvent(const std::function &cb) override 34 | { 35 | assert(!Impl->OnMousePositionOffset); 36 | Impl->OnMousePositionOffset = cb; 37 | return std::make_shared(Impl); 38 | } 39 | 40 | virtual std::shared_ptr onEvent(const std::function &cb) override 41 | { 42 | assert(!Impl->OnMousePositionAbsolute); 43 | Impl->OnMousePositionAbsolute = cb; 44 | return std::make_shared(Impl); 45 | } 46 | virtual std::shared_ptr Build() override { return Impl; } 47 | }; 48 | std::shared_ptr CreateInputConfiguration() { return std::make_shared(std::make_shared()); } 49 | } // namespace Input_Lite 50 | } // namespace SL -------------------------------------------------------------------------------- /src/ios/Input.cpp: -------------------------------------------------------------------------------- 1 | #include "Input_Lite.h" 2 | #include 3 | #include 4 | 5 | namespace SL { 6 | namespace Input_Lite { 7 | void SendInput(const KeyEvent &e) 8 | { 9 | auto ev = CGEventCreateKeyboardEvent(NULL, ConvertToNative(e.Key), e.Pressed); 10 | if (ev) { 11 | CGEventPost(kCGHIDEventTap, ev); 12 | CFRelease(ev); 13 | } 14 | } 15 | void SendInput(const MouseButtonEvent &e) 16 | { 17 | auto msevent = CGEventCreate(NULL); 18 | auto loc = CGEventGetLocation(msevent); 19 | CFRelease(msevent); 20 | 21 | CGEventRef ev = nullptr; 22 | switch (e.Button) { 23 | case MouseButtons::LEFT: 24 | ev = CGEventCreateMouseEvent(NULL, e.Pressed ? kCGEventLeftMouseDown : kCGEventLeftMouseUp, loc, kCGMouseButtonLeft); 25 | break; 26 | case MouseButtons::MIDDLE: 27 | ev = CGEventCreateMouseEvent(NULL, e.Pressed ? kCGEventOtherMouseDown : kCGEventOtherMouseUp, loc, kCGMouseButtonCenter); 28 | break; 29 | case MouseButtons::RIGHT: 30 | ev = CGEventCreateMouseEvent(NULL, e.Pressed ? kCGEventRightMouseDown : kCGEventRightMouseUp, loc, kCGMouseButtonRight); 31 | break; 32 | default: 33 | break; 34 | } 35 | if (ev) { 36 | CGEventPost(kCGHIDEventTap, ev); 37 | CFRelease(ev); 38 | } 39 | } 40 | void SendInput(const MouseScrollEvent &e) 41 | { 42 | auto ev = CGEventCreateScrollWheelEvent(NULL, kCGScrollEventUnitLine, 1, -e.Offset); 43 | if (ev) { 44 | CGEventPost(kCGHIDEventTap, ev); 45 | CFRelease(ev); 46 | } 47 | } 48 | void SendInput(const MousePositionOffsetEvent &e) 49 | { 50 | auto msevent = CGEventCreate(NULL); 51 | auto loc = CGEventGetLocation(msevent); 52 | CFRelease(msevent); 53 | loc.x += e.X; 54 | loc.y += e.Y; 55 | CGWarpMouseCursorPosition(loc); 56 | } 57 | void SendInput(const MousePositionAbsoluteEvent &e) 58 | { 59 | CGPoint p; 60 | p.x = e.X; 61 | p.y = e.Y; 62 | CGWarpMouseCursorPosition(p); 63 | } 64 | CGKeyCode ConvertToNative(KeyCodes key) 65 | { 66 | switch (key) { 67 | 68 | case KeyCodes::KEY_A: 69 | return kVK_ANSI_A; 70 | case KeyCodes::KEY_B: 71 | return kVK_ANSI_B; 72 | case KeyCodes::KEY_C: 73 | return kVK_ANSI_C; 74 | case KeyCodes::KEY_D: 75 | return kVK_ANSI_D; 76 | case KeyCodes::KEY_E: 77 | return kVK_ANSI_E; 78 | case KeyCodes::KEY_F: 79 | return kVK_ANSI_F; 80 | case KeyCodes::KEY_G: 81 | return kVK_ANSI_G; 82 | case KeyCodes::KEY_H: 83 | return kVK_ANSI_H; 84 | case KeyCodes::KEY_I: 85 | return kVK_ANSI_I; 86 | case KeyCodes::KEY_J: 87 | return kVK_ANSI_J; 88 | case KeyCodes::KEY_K: 89 | return kVK_ANSI_K; 90 | case KeyCodes::KEY_L: 91 | return kVK_ANSI_L; 92 | case KeyCodes::KEY_M: 93 | return kVK_ANSI_M; 94 | case KeyCodes::KEY_N: 95 | return kVK_ANSI_N; 96 | case KeyCodes::KEY_O: 97 | return kVK_ANSI_O; 98 | case KeyCodes::KEY_P: 99 | return kVK_ANSI_P; 100 | case KeyCodes::KEY_Q: 101 | return kVK_ANSI_Q; 102 | case KeyCodes::KEY_R: 103 | return kVK_ANSI_R; 104 | case KeyCodes::KEY_S: 105 | return kVK_ANSI_S; 106 | case KeyCodes::KEY_T: 107 | return kVK_ANSI_T; 108 | case KeyCodes::KEY_U: 109 | return kVK_ANSI_U; 110 | case KeyCodes::KEY_V: 111 | return kVK_ANSI_V; 112 | case KeyCodes::KEY_W: 113 | return kVK_ANSI_W; 114 | case KeyCodes::KEY_X: 115 | return kVK_ANSI_X; 116 | case KeyCodes::KEY_Y: 117 | return kVK_ANSI_Y; 118 | case KeyCodes::KEY_Z: 119 | return kVK_ANSI_Z; 120 | case KeyCodes::KEY_1: 121 | return kVK_ANSI_1; 122 | case KeyCodes::KEY_2: 123 | return kVK_ANSI_2; 124 | case KeyCodes::KEY_3: 125 | return kVK_ANSI_3; 126 | case KeyCodes::KEY_4: 127 | return kVK_ANSI_4; 128 | case KeyCodes::KEY_5: 129 | return kVK_ANSI_5; 130 | case KeyCodes::KEY_6: 131 | return kVK_ANSI_6; 132 | case KeyCodes::KEY_7: 133 | return kVK_ANSI_7; 134 | case KeyCodes::KEY_8: 135 | return kVK_ANSI_8; 136 | case KeyCodes::KEY_9: 137 | return kVK_ANSI_9; 138 | case KeyCodes::KEY_0: 139 | return kVK_ANSI_0; 140 | case KeyCodes::KEY_Enter: 141 | return kVK_Return; 142 | case KeyCodes::KEY_Escape: 143 | return kVK_Escape; 144 | case KeyCodes::KEY_Backspace: 145 | return kVK_Delete; 146 | case KeyCodes::KEY_Tab: 147 | return kVK_Tab; 148 | case KeyCodes::KEY_Space: 149 | return kVK_Space; 150 | case KeyCodes::KEY_Minus: 151 | return kVK_ANSI_Minus; 152 | case KeyCodes::KEY_Equals: 153 | return kVK_ANSI_Equal; 154 | case KeyCodes::KEY_LeftBracket: 155 | return kVK_ANSI_LeftBracket; 156 | case KeyCodes::KEY_RightBracket: 157 | return kVK_ANSI_RightBracket; 158 | case KeyCodes::KEY_Backslash: 159 | return kVK_ANSI_Backslash; 160 | case KeyCodes::KEY_Semicolon: 161 | return kVK_ANSI_Semicolon; 162 | case KeyCodes::KEY_Quote: 163 | return kVK_ANSI_Quote; 164 | case KeyCodes::KEY_Grave: 165 | return kVK_ANSI_Grave; 166 | case KeyCodes::KEY_Comma: 167 | return kVK_ANSI_Comma; 168 | case KeyCodes::KEY_Period: 169 | return kVK_ANSI_Period; 170 | case KeyCodes::KEY_Slash: 171 | return kVK_ANSI_Slash; 172 | case KeyCodes::KEY_CapsLock: 173 | return kVK_CapsLock; 174 | case KeyCodes::KEY_F1: 175 | return kVK_F1; 176 | case KeyCodes::KEY_F2: 177 | return kVK_F2; 178 | case KeyCodes::KEY_F3: 179 | return kVK_F3; 180 | case KeyCodes::KEY_F4: 181 | return kVK_F4; 182 | case KeyCodes::KEY_F5: 183 | return kVK_F5; 184 | case KeyCodes::KEY_F6: 185 | return kVK_F6; 186 | case KeyCodes::KEY_F7: 187 | return kVK_F7; 188 | case KeyCodes::KEY_F8: 189 | return kVK_F8; 190 | case KeyCodes::KEY_F9: 191 | return kVK_F9; 192 | case KeyCodes::KEY_F10: 193 | return kVK_F10; 194 | case KeyCodes::KEY_F11: 195 | return kVK_F11; 196 | case KeyCodes::KEY_F12: 197 | return kVK_F12; 198 | case KeyCodes::KEY_F13: 199 | return kVK_F13; 200 | case KeyCodes::KEY_F14: 201 | return kVK_F14; 202 | case KeyCodes::KEY_F15: 203 | return kVK_F15; 204 | case KeyCodes::KEY_F16: 205 | return kVK_F16; 206 | case KeyCodes::KEY_F17: 207 | return kVK_F17; 208 | case KeyCodes::KEY_F18: 209 | return kVK_F18; 210 | case KeyCodes::KEY_F19: 211 | return kVK_F19; 212 | case KeyCodes::KEY_F20: 213 | return kVK_F20; 214 | /* 215 | case KeyCodes::KEY_F21: 216 | return kVK_F1; 217 | case KeyCodes::KEY_F22: 218 | return kVK_F1; 219 | case KeyCodes::KEY_F23: 220 | return kVK_F1; 221 | case KeyCodes::KEY_F24: 222 | return kVK_F1; 223 | 224 | 225 | 226 | 227 | case KeyCodes::KEY_PrintScreen: 228 | return VK_SNAPSHOT; 229 | case KeyCodes::KEY_ScrollLock: 230 | return VK_SCROLL; 231 | case KeyCodes::KEY_Pause: 232 | return VK_PAUSE; 233 | case KeyCodes::KEY_Insert: 234 | return VK_INSERT; 235 | */ 236 | case KeyCodes::KEY_Home: 237 | return kVK_Home; 238 | case KeyCodes::KEY_PageUp: 239 | return kVK_PageUp; 240 | case KeyCodes::KEY_Delete: 241 | return kVK_ForwardDelete; 242 | case KeyCodes::KEY_End: 243 | return kVK_End; 244 | case KeyCodes::KEY_PageDown: 245 | return kVK_PageDown; 246 | case KeyCodes::KEY_Right: 247 | return kVK_RightArrow; 248 | case KeyCodes::KEY_Left: 249 | return kVK_LeftArrow; 250 | case KeyCodes::KEY_Down: 251 | return kVK_PageDown; 252 | case KeyCodes::KEY_Up: 253 | return kVK_UpArrow; 254 | /* 255 | case KeyCodes::KP_NumLock: 256 | return VK_NUMLOCK; 257 | */ 258 | case KeyCodes::KP_Divide: 259 | return kVK_ANSI_KeypadDivide; 260 | case KeyCodes::KP_Multiply: 261 | return kVK_ANSI_KeypadMultiply; 262 | case KeyCodes::KP_Subtract: 263 | return kVK_ANSI_KeypadMinus; 264 | case KeyCodes::KP_Add: 265 | return kVK_ANSI_KeypadPlus; 266 | case KeyCodes::KP_Enter: 267 | return kVK_ANSI_KeypadEnter; 268 | case KeyCodes::KP_1: 269 | return kVK_ANSI_Keypad1; 270 | case KeyCodes::KP_2: 271 | return kVK_ANSI_Keypad2; 272 | case KeyCodes::KP_3: 273 | return kVK_ANSI_Keypad3; 274 | case KeyCodes::KP_4: 275 | return kVK_ANSI_Keypad4; 276 | case KeyCodes::KP_5: 277 | return kVK_ANSI_Keypad5; 278 | case KeyCodes::KP_6: 279 | return kVK_ANSI_Keypad6; 280 | case KeyCodes::KP_7: 281 | return kVK_ANSI_Keypad7; 282 | case KeyCodes::KP_8: 283 | return kVK_ANSI_Keypad8; 284 | case KeyCodes::KP_9: 285 | return kVK_ANSI_Keypad9; 286 | case KeyCodes::KP_0: 287 | return kVK_ANSI_Keypad0; 288 | case KeyCodes::KP_Point: 289 | return kVK_ANSI_KeypadDecimal; 290 | case KeyCodes::KP_Equals: 291 | return kVK_ANSI_KeypadEquals; 292 | case KeyCodes::KEY_Help: 293 | return kVK_Help; 294 | case KeyCodes::KEY_Menu: 295 | return kVK_Option; 296 | case KeyCodes::KEY_LeftControl: 297 | return kVK_Control; 298 | case KeyCodes::KEY_LeftShift: 299 | return kVK_Shift; 300 | case KeyCodes::KEY_LeftAlt: 301 | return kVK_Option; 302 | case KeyCodes::KEY_LeftMeta: 303 | return kVK_Command; 304 | case KeyCodes::KEY_RightControl: 305 | return kVK_RightControl; 306 | case KeyCodes::KEY_RightShift: 307 | return kVK_RightShift; 308 | case KeyCodes::KEY_RightAlt: 309 | return kVK_RightOption; 310 | case KeyCodes::KEY_RightMeta: 311 | return kVK_RightControl; 312 | default: 313 | return 255; 314 | } 315 | } 316 | KeyCodes ConvertToKeyCode(CGKeyCode key) 317 | { 318 | switch (key) { 319 | case kVK_ANSI_0: 320 | return KeyCodes::KEY_0; 321 | case kVK_ANSI_1: 322 | return KeyCodes::KEY_1; 323 | case kVK_ANSI_2: 324 | return KeyCodes::KEY_2; 325 | case kVK_ANSI_3: 326 | return KeyCodes::KEY_3; 327 | case kVK_ANSI_4: 328 | return KeyCodes::KEY_4; 329 | case kVK_ANSI_5: 330 | return KeyCodes::KEY_5; 331 | case kVK_ANSI_6: 332 | return KeyCodes::KEY_6; 333 | case kVK_ANSI_7: 334 | return KeyCodes::KEY_7; 335 | case kVK_ANSI_8: 336 | return KeyCodes::KEY_8; 337 | case kVK_ANSI_9: 338 | return KeyCodes::KEY_9; 339 | case kVK_ANSI_A: 340 | return KeyCodes::KEY_A; 341 | case kVK_ANSI_B: 342 | return KeyCodes::KEY_B; 343 | case kVK_ANSI_C: 344 | return KeyCodes::KEY_C; 345 | case kVK_ANSI_D: 346 | return KeyCodes::KEY_D; 347 | case kVK_ANSI_E: 348 | return KeyCodes::KEY_E; 349 | case kVK_ANSI_F: 350 | return KeyCodes::KEY_F; 351 | case kVK_ANSI_G: 352 | return KeyCodes::KEY_G; 353 | case kVK_ANSI_H: 354 | return KeyCodes::KEY_H; 355 | case kVK_ANSI_I: 356 | return KeyCodes::KEY_I; 357 | case kVK_ANSI_J: 358 | return KeyCodes::KEY_J; 359 | case kVK_ANSI_K: 360 | return KeyCodes::KEY_K; 361 | case kVK_ANSI_L: 362 | return KeyCodes::KEY_L; 363 | case kVK_ANSI_M: 364 | return KeyCodes::KEY_M; 365 | case kVK_ANSI_N: 366 | return KeyCodes::KEY_N; 367 | case kVK_ANSI_O: 368 | return KeyCodes::KEY_O; 369 | case kVK_ANSI_P: 370 | return KeyCodes::KEY_P; 371 | case kVK_ANSI_Q: 372 | return KeyCodes::KEY_Q; 373 | case kVK_ANSI_R: 374 | return KeyCodes::KEY_R; 375 | case kVK_ANSI_S: 376 | return KeyCodes::KEY_S; 377 | case kVK_ANSI_T: 378 | return KeyCodes::KEY_T; 379 | case kVK_ANSI_U: 380 | return KeyCodes::KEY_U; 381 | case kVK_ANSI_V: 382 | return KeyCodes::KEY_V; 383 | case kVK_ANSI_W: 384 | return KeyCodes::KEY_W; 385 | case kVK_ANSI_X: 386 | return KeyCodes::KEY_X; 387 | case kVK_ANSI_Y: 388 | return KeyCodes::KEY_Y; 389 | case kVK_ANSI_Z: 390 | return KeyCodes::KEY_Z; 391 | case kVK_Return: 392 | return KeyCodes::KEY_Enter; 393 | case kVK_Escape: 394 | return KeyCodes::KEY_Escape; 395 | case kVK_Delete: 396 | return KeyCodes::KEY_Backspace; 397 | case kVK_Tab: 398 | return KeyCodes::KEY_Tab; 399 | case kVK_Space: 400 | return KeyCodes::KEY_Space; 401 | case kVK_ANSI_Minus: 402 | return KeyCodes::KEY_Minus; 403 | case kVK_ANSI_Equal: 404 | return KeyCodes::KEY_Equals; 405 | case kVK_ANSI_LeftBracket: 406 | return KeyCodes::KEY_LeftBracket; 407 | case kVK_ANSI_RightBracket: 408 | return KeyCodes::KEY_RightBracket; 409 | case kVK_ANSI_Backslash: 410 | return KeyCodes::KEY_Backslash; 411 | case kVK_ANSI_Semicolon: 412 | return KeyCodes::KEY_Semicolon; 413 | case kVK_ANSI_Quote: 414 | return KeyCodes::KEY_Quote; 415 | case kVK_ANSI_Grave: 416 | return KeyCodes::KEY_Grave; 417 | case kVK_ANSI_Comma: 418 | return KeyCodes::KEY_Comma; 419 | case kVK_ANSI_Period: 420 | return KeyCodes::KEY_Period; 421 | case kVK_ANSI_Slash: 422 | return KeyCodes::KEY_Slash; 423 | case kVK_CapsLock: 424 | return KeyCodes::KEY_CapsLock; 425 | case kVK_F1: 426 | return KeyCodes::KEY_F1; 427 | case kVK_F2: 428 | return KeyCodes::KEY_F2; 429 | case kVK_F3: 430 | return KeyCodes::KEY_F3; 431 | case kVK_F4: 432 | return KeyCodes::KEY_F4; 433 | case kVK_F5: 434 | return KeyCodes::KEY_F5; 435 | case kVK_F6: 436 | return KeyCodes::KEY_F6; 437 | case kVK_F7: 438 | return KeyCodes::KEY_F7; 439 | case kVK_F8: 440 | return KeyCodes::KEY_F8; 441 | case kVK_F9: 442 | return KeyCodes::KEY_F9; 443 | case kVK_F10: 444 | return KeyCodes::KEY_F10; 445 | case kVK_F11: 446 | return KeyCodes::KEY_F11; 447 | case kVK_F12: 448 | return KeyCodes::KEY_F12; 449 | case kVK_F13: 450 | return KeyCodes::KEY_F13; 451 | case kVK_F14: 452 | return KeyCodes::KEY_F14; 453 | case kVK_F15: 454 | return KeyCodes::KEY_F15; 455 | case kVK_F16: 456 | return KeyCodes::KEY_F16; 457 | case kVK_F17: 458 | return KeyCodes::KEY_F17; 459 | case kVK_F18: 460 | return KeyCodes::KEY_F18; 461 | case kVK_F19: 462 | return KeyCodes::KEY_F19; 463 | case kVK_F20: 464 | return KeyCodes::KEY_F20; 465 | /* case VK_SNAPSHOT: 466 | return KeyCodes::KEY_PrintScreen; 467 | case VK_SCROLL: 468 | return KeyCodes::KEY_ScrollLock; 469 | case VK_PAUSE: 470 | return KeyCodes::KEY_Pause; 471 | case VK_INSERT: 472 | return KeyCodes::KEY_Insert;*/ 473 | case kVK_Home: 474 | return KeyCodes::KEY_Home; 475 | case kVK_PageUp: 476 | return KeyCodes::KEY_PageUp; 477 | case kVK_ForwardDelete: 478 | return KeyCodes::KEY_Delete; 479 | case kVK_End: 480 | return KeyCodes::KEY_End; 481 | case kVK_PageDown: 482 | return KeyCodes::KEY_PageDown; 483 | case kVK_RightArrow: 484 | return KeyCodes::KEY_Right; 485 | case kVK_LeftArrow: 486 | return KeyCodes::KEY_Left; 487 | case kVK_DownArrow: 488 | return KeyCodes::KEY_Down; 489 | case kVK_UpArrow: 490 | return KeyCodes::KEY_Up; 491 | /* case VK_NUMLOCK: 492 | return KeyCodes::KP_NumLock;*/ 493 | case kVK_ANSI_KeypadDivide: 494 | return KeyCodes::KP_Divide; 495 | case kVK_ANSI_KeypadMultiply: 496 | return KeyCodes::KP_Multiply; 497 | case kVK_ANSI_KeypadMinus: 498 | return KeyCodes::KP_Subtract; 499 | case kVK_ANSI_KeypadPlus: 500 | return KeyCodes::KP_Add; 501 | case kVK_ANSI_KeypadEnter: 502 | return KeyCodes::KP_Enter; 503 | case kVK_ANSI_Keypad0: 504 | return KeyCodes::KP_0; 505 | case kVK_ANSI_Keypad1: 506 | return KeyCodes::KP_1; 507 | case kVK_ANSI_Keypad2: 508 | return KeyCodes::KP_2; 509 | case kVK_ANSI_Keypad3: 510 | return KeyCodes::KP_3; 511 | case kVK_ANSI_Keypad4: 512 | return KeyCodes::KP_4; 513 | case kVK_ANSI_Keypad5: 514 | return KeyCodes::KP_5; 515 | case kVK_ANSI_Keypad6: 516 | return KeyCodes::KP_6; 517 | case kVK_ANSI_Keypad7: 518 | return KeyCodes::KP_7; 519 | case kVK_ANSI_Keypad8: 520 | return KeyCodes::KP_8; 521 | case kVK_ANSI_Keypad9: 522 | return KeyCodes::KP_9; 523 | case kVK_ANSI_KeypadDecimal: 524 | return KeyCodes::KP_Point; 525 | case kVK_ANSI_KeypadEquals: 526 | return KeyCodes::KP_Equals; 527 | case kVK_Help: 528 | return KeyCodes::KEY_Help; 529 | case kVK_Option: 530 | return KeyCodes::KEY_Menu; 531 | case kVK_Control: 532 | return KeyCodes::KEY_LeftControl; 533 | case kVK_Shift: 534 | return KeyCodes::KEY_LeftShift; 535 | case kVK_Command: 536 | return KeyCodes::KEY_LeftMeta; 537 | case kVK_RightControl: 538 | return KeyCodes::KEY_RightControl; 539 | case kVK_RightShift: 540 | return KeyCodes::KEY_RightShift; 541 | case kVK_RightOption: 542 | return KeyCodes::KEY_RightAlt; 543 | default: 544 | return SL::Input_Lite::KeyCodes::INVALID; 545 | } 546 | } 547 | 548 | } // namespace Input_Lite 549 | } // namespace SL 550 | 551 | -------------------------------------------------------------------------------- /src/linux/Input.cpp: -------------------------------------------------------------------------------- 1 | #include "Input_Lite.h" 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #include 9 | namespace SL 10 | { 11 | namespace Input_Lite 12 | { 13 | void SendInput(const KeyEvent& e) 14 | { 15 | auto display = XOpenDisplay(NULL); 16 | auto mappedkey = ConvertToNative(e.Key); 17 | if(mappedkey == 255) 18 | return; // key doesnt exist 19 | XTestFakeKeyEvent(display, mappedkey, e.Pressed ? True : False, CurrentTime); 20 | XCloseDisplay(display); 21 | } 22 | void SendInput(const MouseButtonEvent& e) 23 | { 24 | auto display = XOpenDisplay(NULL); 25 | switch(e.Button) { 26 | case MouseButtons::LEFT: 27 | XTestFakeButtonEvent(display, Button1, e.Pressed ? True : False, CurrentTime); 28 | break; 29 | case MouseButtons::MIDDLE: 30 | XTestFakeButtonEvent(display, Button2, e.Pressed ? True : False, CurrentTime); 31 | break; 32 | case MouseButtons::RIGHT: 33 | XTestFakeButtonEvent(display, Button3, e.Pressed ? True : False, CurrentTime); 34 | break; 35 | default: 36 | break; 37 | } 38 | XCloseDisplay(display); 39 | } 40 | void SendInput(const MouseScrollEvent& e) 41 | { 42 | auto display = XOpenDisplay(NULL); 43 | if(e.Offset < 0) { 44 | for(auto i = 0; i < abs(e.Offset) && i < 5; i++) { /// cap at 5 45 | XTestFakeButtonEvent(display, Button5, True, CurrentTime); 46 | XTestFakeButtonEvent(display, Button5, False, CurrentTime); 47 | } 48 | } else if(e.Offset > 0) { 49 | for(auto i = 0; i < e.Offset && i < 5; i++) { /// cap at 5 50 | XTestFakeButtonEvent(display, Button4, True, CurrentTime); 51 | XTestFakeButtonEvent(display, Button4, False, CurrentTime); 52 | } 53 | } 54 | XCloseDisplay(display); 55 | } 56 | void SendInput(const MousePositionOffsetEvent& e) 57 | { 58 | auto display = XOpenDisplay(NULL); 59 | XTestFakeRelativeMotionEvent(display, -1, e.X, e.Y); 60 | XCloseDisplay(display); 61 | } 62 | void SendInput(const MousePositionAbsoluteEvent& e) 63 | { 64 | auto display = XOpenDisplay(NULL); 65 | XTestFakeMotionEvent(display, -1, e.X, e.Y, CurrentTime); 66 | XCloseDisplay(display); 67 | } 68 | 69 | KeyCode ConvertToNative(Input_Lite::KeyCodes key) 70 | { 71 | switch(key) { 72 | case KeyCodes::KEY_A: 73 | return 38; 74 | case KeyCodes::KEY_B: 75 | return 56; 76 | case KeyCodes::KEY_C: 77 | return 54; 78 | case KeyCodes::KEY_D: 79 | return 40; 80 | case KeyCodes::KEY_E: 81 | return 26; 82 | case KeyCodes::KEY_F: 83 | return 41; 84 | case KeyCodes::KEY_G: 85 | return 42; 86 | case KeyCodes::KEY_H: 87 | return 43; 88 | case KeyCodes::KEY_I: 89 | return 31; 90 | case KeyCodes::KEY_J: 91 | return 44; 92 | case KeyCodes::KEY_K: 93 | return 45; 94 | case KeyCodes::KEY_L: 95 | return 46; 96 | case KeyCodes::KEY_M: 97 | return 58; 98 | case KeyCodes::KEY_N: 99 | return 57; 100 | case KeyCodes::KEY_O: 101 | return 32; 102 | case KeyCodes::KEY_P: 103 | return 33; 104 | case KeyCodes::KEY_Q: 105 | return 24; 106 | case KeyCodes::KEY_R: 107 | return 27; 108 | case KeyCodes::KEY_S: 109 | return 39; 110 | case KeyCodes::KEY_T: 111 | return 28; 112 | case KeyCodes::KEY_U: 113 | return 30; 114 | case KeyCodes::KEY_V: 115 | return 55; 116 | case KeyCodes::KEY_W: 117 | return 25; 118 | case KeyCodes::KEY_X: 119 | return 53; 120 | case KeyCodes::KEY_Y: 121 | return 29; 122 | case KeyCodes::KEY_Z: 123 | return 52; 124 | case KeyCodes::KEY_1: 125 | return 10; 126 | case KeyCodes::KEY_2: 127 | return 11; 128 | case KeyCodes::KEY_3: 129 | return 12; 130 | case KeyCodes::KEY_4: 131 | return 13; 132 | case KeyCodes::KEY_5: 133 | return 14; 134 | case KeyCodes::KEY_6: 135 | return 15; 136 | case KeyCodes::KEY_7: 137 | return 16; 138 | case KeyCodes::KEY_8: 139 | return 17; 140 | case KeyCodes::KEY_9: 141 | return 18; 142 | case KeyCodes::KEY_0: 143 | return 19; 144 | case KeyCodes::KEY_Enter: 145 | return 36; 146 | case KeyCodes::KEY_Escape: 147 | return 9; 148 | case KeyCodes::KEY_Backspace: 149 | return 22; 150 | case KeyCodes::KEY_Tab: 151 | return 23; 152 | case KeyCodes::KEY_Space: 153 | return 65; 154 | case KeyCodes::KEY_Minus: 155 | return 20; 156 | case KeyCodes::KEY_Equals: 157 | return 21; 158 | case KeyCodes::KEY_LeftBracket: 159 | return 34; 160 | case KeyCodes::KEY_RightBracket: 161 | return 35; 162 | case KeyCodes::KEY_Backslash: 163 | return 51; 164 | case KeyCodes::KEY_Semicolon: 165 | return 47; 166 | case KeyCodes::KEY_Quote: 167 | return 48; 168 | case KeyCodes::KEY_Grave: 169 | return 49; 170 | case KeyCodes::KEY_Comma: 171 | return 59; 172 | case KeyCodes::KEY_Period: 173 | return 60; 174 | case KeyCodes::KEY_Slash: 175 | return 61; 176 | case KeyCodes::KEY_CapsLock: 177 | return 66; 178 | case KeyCodes::KEY_F1: 179 | case KeyCodes::KEY_F2: 180 | case KeyCodes::KEY_F3: 181 | case KeyCodes::KEY_F4: 182 | case KeyCodes::KEY_F5: 183 | case KeyCodes::KEY_F6: 184 | case KeyCodes::KEY_F7: 185 | case KeyCodes::KEY_F8: 186 | case KeyCodes::KEY_F9: 187 | case KeyCodes::KEY_F10: 188 | return 67 + (key - KeyCodes::KEY_F1); 189 | case KeyCodes::KEY_F11: 190 | return 95; 191 | case KeyCodes::KEY_F12: 192 | return 96; 193 | case KeyCodes::KEY_F13: 194 | case KeyCodes::KEY_F14: 195 | case KeyCodes::KEY_F15: 196 | case KeyCodes::KEY_F16: 197 | case KeyCodes::KEY_F17: 198 | case KeyCodes::KEY_F18: 199 | case KeyCodes::KEY_F19: 200 | case KeyCodes::KEY_F20: 201 | case KeyCodes::KEY_F21: 202 | case KeyCodes::KEY_F22: 203 | case KeyCodes::KEY_F23: 204 | case KeyCodes::KEY_F24: 205 | return 191 + (key - KeyCodes::KEY_F13); 206 | case KeyCodes::KEY_PrintScreen: 207 | return 107; 208 | case KeyCodes::KEY_ScrollLock: 209 | return 78; 210 | case KeyCodes::KEY_Pause: 211 | return 127; 212 | case KeyCodes::KEY_Insert: 213 | return 118; 214 | case KeyCodes::KEY_Home: 215 | return 110; 216 | case KeyCodes::KEY_PageUp: 217 | return 112; 218 | case KeyCodes::KEY_Delete: 219 | return 119; 220 | case KeyCodes::KEY_End: 221 | return 115; 222 | case KeyCodes::KEY_PageDown: 223 | return 117; 224 | case KeyCodes::KEY_Right: 225 | return 114; 226 | case KeyCodes::KEY_Left: 227 | return 113; 228 | case KeyCodes::KEY_Down: 229 | return 116; 230 | case KeyCodes::KEY_Up: 231 | return 111; 232 | case KeyCodes::KP_NumLock: 233 | return 77; 234 | case KeyCodes::KP_Divide: 235 | return 106; 236 | case KeyCodes::KP_Multiply: 237 | return 63; 238 | case KeyCodes::KP_Subtract: 239 | return 82; 240 | case KeyCodes::KP_Add: 241 | return 86; 242 | case KeyCodes::KP_Enter: 243 | return 104; 244 | case KeyCodes::KP_1: 245 | return 87; 246 | case KeyCodes::KP_2: 247 | return 88; 248 | case KeyCodes::KP_3: 249 | return 89; 250 | case KeyCodes::KP_4: 251 | return 83; 252 | case KeyCodes::KP_5: 253 | return 84; 254 | case KeyCodes::KP_6: 255 | return 85; 256 | case KeyCodes::KP_7: 257 | return 79; 258 | case KeyCodes::KP_8: 259 | return 80; 260 | case KeyCodes::KP_9: 261 | return 81; 262 | case KeyCodes::KP_0: 263 | return 90; 264 | case KeyCodes::KP_Point: 265 | return 91; 266 | case KeyCodes::KEY_Help: 267 | return 146; 268 | case KeyCodes::KEY_Menu: 269 | return 135; 270 | case KeyCodes::KEY_LeftControl: 271 | return 37; 272 | case KeyCodes::KEY_LeftShift: 273 | return 50; 274 | case KeyCodes::KEY_LeftAlt: 275 | return 64; 276 | case KeyCodes::KEY_LeftMeta: 277 | return 133; 278 | case KeyCodes::KEY_RightControl: 279 | return 105; 280 | case KeyCodes::KEY_RightShift: 281 | return 62; 282 | case KeyCodes::KEY_RightAlt: 283 | return 108; 284 | case KeyCodes::KEY_RightMeta: 285 | return 134; 286 | default: 287 | return 255; 288 | } 289 | } 290 | 291 | Input_Lite::KeyCodes ConvertToKeyCode(KeyCode key) 292 | { 293 | switch(key) { 294 | case 9: 295 | return KeyCodes::KEY_Escape; 296 | case 10: 297 | return KeyCodes::KEY_1; 298 | case 11: 299 | return KeyCodes::KEY_2; 300 | case 12: 301 | return KeyCodes::KEY_3; 302 | case 13: 303 | return KeyCodes::KEY_4; 304 | case 14: 305 | return KeyCodes::KEY_5; 306 | case 15: 307 | return KeyCodes::KEY_6; 308 | case 16: 309 | return KeyCodes::KEY_7; 310 | case 17: 311 | return KeyCodes::KEY_8; 312 | case 18: 313 | return KeyCodes::KEY_9; 314 | case 19: 315 | return KeyCodes::KEY_0; 316 | case 20: 317 | return KeyCodes::KEY_Minus; 318 | case 21: 319 | return KeyCodes::KEY_Equals; 320 | case 22: 321 | return KeyCodes::KEY_Backspace; 322 | case 23: 323 | return KeyCodes::KEY_Tab; 324 | case 24: 325 | return KeyCodes::KEY_Q; 326 | case 25: 327 | return KeyCodes::KEY_W; 328 | case 26: 329 | return KeyCodes::KEY_E; 330 | case 27: 331 | return KeyCodes::KEY_R; 332 | case 28: 333 | return KeyCodes::KEY_T; 334 | case 29: 335 | return KeyCodes::KEY_Y; 336 | case 30: 337 | return KeyCodes::KEY_U; 338 | case 31: 339 | return KeyCodes::KEY_I; 340 | case 32: 341 | return KeyCodes::KEY_O; 342 | case 33: 343 | return KeyCodes::KEY_P; 344 | case 34: 345 | return KeyCodes::KEY_LeftBracket; 346 | case 35: 347 | return KeyCodes::KEY_RightBracket; 348 | case 36: 349 | return KeyCodes::KEY_Enter; 350 | case 37: 351 | return KeyCodes::KEY_LeftControl; 352 | case 38: 353 | return KeyCodes::KEY_A; 354 | case 39: 355 | return KeyCodes::KEY_S; 356 | case 40: 357 | return KeyCodes::KEY_D; 358 | case 41: 359 | return KeyCodes::KEY_F; 360 | case 42: 361 | return KeyCodes::KEY_G; 362 | case 43: 363 | return KeyCodes::KEY_H; 364 | case 44: 365 | return KeyCodes::KEY_J; 366 | case 45: 367 | return KeyCodes::KEY_K; 368 | case 46: 369 | return KeyCodes::KEY_L; 370 | case 47: 371 | return KeyCodes::KEY_Semicolon; 372 | case 48: 373 | return KeyCodes::KEY_Quote; 374 | case 49: 375 | return KeyCodes::KEY_Grave; 376 | case 50: 377 | return KeyCodes::KEY_LeftShift; 378 | case 51: 379 | return KeyCodes::KEY_Backslash; 380 | case 52: 381 | return KeyCodes::KEY_Z; 382 | case 53: 383 | return KeyCodes::KEY_X; 384 | case 54: 385 | return KeyCodes::KEY_C; 386 | case 55: 387 | return KeyCodes::KEY_V; 388 | case 56: 389 | return KeyCodes::KEY_B; 390 | case 57: 391 | return KeyCodes::KEY_N; 392 | case 58: 393 | return KeyCodes::KEY_M; 394 | case 59: 395 | return KeyCodes::KEY_Comma; 396 | case 60: 397 | return KeyCodes::KEY_Period; 398 | case 61: 399 | return KeyCodes::KEY_Slash; 400 | case 62: 401 | return KeyCodes::KEY_RightShift; 402 | case 63: 403 | return KeyCodes::KP_Multiply; 404 | case 64: 405 | return KeyCodes::KEY_LeftAlt; 406 | case 65: 407 | return KeyCodes::KEY_Space; 408 | case 66: 409 | return KeyCodes::KEY_CapsLock; 410 | case 67: // f1 411 | case 68: 412 | case 69: 413 | case 70: 414 | case 71: 415 | case 72: 416 | case 73: 417 | case 74: 418 | case 75: 419 | case 76: // f10 420 | return static_cast(KeyCodes::KEY_F1 + (key - 67)); 421 | case 77: 422 | return KeyCodes::KP_NumLock; 423 | case 78: 424 | return KeyCodes::KEY_ScrollLock; 425 | case 79: 426 | return KeyCodes::KP_7; 427 | case 80: 428 | return KeyCodes::KP_8; 429 | case 81: 430 | return KeyCodes::KP_9; 431 | case 82: 432 | return KeyCodes::KP_Subtract; 433 | case 83: 434 | return KeyCodes::KP_4; 435 | case 84: 436 | return KeyCodes::KP_5; 437 | case 85: 438 | return KeyCodes::KP_6; 439 | case 86: 440 | return KeyCodes::KP_Add; 441 | case 87: 442 | return KeyCodes::KP_1; 443 | case 88: 444 | return KeyCodes::KP_2; 445 | case 89: 446 | return KeyCodes::KP_3; 447 | case 90: 448 | return KeyCodes::KP_0; 449 | case 91: 450 | return KeyCodes::KP_Point; 451 | case 94: 452 | return KeyCodes::KEY_NonUSBackslash; 453 | case 95: 454 | return KeyCodes::KEY_F11; 455 | case 96: 456 | return KeyCodes::KEY_F12; 457 | case 104: 458 | return KeyCodes::KP_Enter; 459 | case 105: 460 | return KeyCodes::KEY_RightControl; 461 | case 106: 462 | return KeyCodes::KP_Divide; 463 | case 107: 464 | return KeyCodes::KEY_PrintScreen; 465 | case 108: 466 | return KeyCodes::KEY_RightAlt; 467 | case 110: 468 | return KeyCodes::KEY_Home; 469 | case 111: 470 | return KeyCodes::KEY_Up; 471 | case 112: 472 | return KeyCodes::KEY_PageUp; 473 | case 113: 474 | return KeyCodes::KEY_Left; 475 | case 114: 476 | return KeyCodes::KEY_Right; 477 | case 115: 478 | return KeyCodes::KEY_End; 479 | case 116: 480 | return KeyCodes::KEY_Down; 481 | case 117: 482 | return KeyCodes::KEY_PageDown; 483 | case 118: 484 | return KeyCodes::KEY_Insert; 485 | case 119: 486 | return KeyCodes::KEY_Delete; 487 | case 125: 488 | return KeyCodes::KP_Equals; 489 | case 127: 490 | return KeyCodes::KEY_Pause; 491 | case 133: 492 | return KeyCodes::KEY_LeftMeta; 493 | case 134: 494 | return KeyCodes::KEY_RightMeta; 495 | case 135: 496 | return KeyCodes::KEY_Menu; 497 | case 146: 498 | return KeyCodes::KEY_Help; 499 | case 191://f13 500 | case 192: 501 | case 193: 502 | case 194: 503 | case 195: 504 | case 196: 505 | case 197: 506 | case 198: 507 | case 199: 508 | case 200: 509 | case 201: 510 | case 202: 511 | return static_cast(KeyCodes::KEY_F13 + (key - 191)); 512 | default: 513 | return SL::Input_Lite::KeyCodes::INVALID; 514 | } 515 | } 516 | } 517 | } -------------------------------------------------------------------------------- /src/windows/Input.cpp: -------------------------------------------------------------------------------- 1 | #include "InputManager.h" 2 | #include "Input_Lite.h" 3 | 4 | #include 5 | #define WIN32_LEAN_AND_MEAN 6 | #include 7 | 8 | namespace SL { 9 | namespace Input_Lite { 10 | 11 | void SendInput(const KeyEvent &e) 12 | { 13 | INPUT k = {0}; 14 | k.type = INPUT_KEYBOARD; 15 | k.ki.dwFlags = e.Pressed ? 0 : KEYEVENTF_KEYUP; 16 | k.ki.wVk = static_cast(ConvertToNative(e.Key)); 17 | if (k.ki.wVk == 255) { 18 | return; // no good! 19 | } 20 | SendInput(1, &k, sizeof(INPUT)); 21 | } 22 | void SendInput(const MouseButtonEvent &e) 23 | { 24 | INPUT inp = {0}; 25 | inp.type = INPUT_MOUSE; 26 | switch (e.Button) { 27 | case (MouseButtons::LEFT): 28 | inp.mi.dwFlags = e.Pressed ? MOUSEEVENTF_LEFTDOWN : MOUSEEVENTF_LEFTUP; 29 | break; 30 | case (MouseButtons::RIGHT): 31 | inp.mi.dwFlags = e.Pressed ? MOUSEEVENTF_RIGHTDOWN : MOUSEEVENTF_RIGHTUP; 32 | break; 33 | case (MouseButtons::MIDDLE): 34 | inp.mi.dwFlags = e.Pressed ? MOUSEEVENTF_MIDDLEDOWN : MOUSEEVENTF_MIDDLEUP; 35 | break; 36 | default: 37 | return; 38 | } 39 | SendInput(1, &inp, sizeof(INPUT)); 40 | } 41 | 42 | void SendInput(const MouseScrollEvent &e) 43 | { 44 | INPUT inp = {0}; 45 | inp.type = INPUT_MOUSE; 46 | inp.mi.dwFlags = MOUSEEVENTF_WHEEL; 47 | inp.mi.mouseData = e.Offset * 120; 48 | SendInput(1, &inp, sizeof(INPUT)); 49 | } 50 | 51 | void SendMousePosition_Impl(int x, int y, int modifier) 52 | { 53 | INPUT inp = {0}; 54 | inp.type = INPUT_MOUSE; 55 | inp.mi.dwFlags = MOUSEEVENTF_MOVE | modifier; 56 | inp.mi.dx = x; 57 | inp.mi.dy = y; 58 | SendInput(1, &inp, sizeof(INPUT)); 59 | } 60 | void SendInput(const MousePositionOffsetEvent &e) { SendMousePosition_Impl(e.X, e.Y, 0); } 61 | void SendInput(const MousePositionAbsoluteEvent &e) 62 | { 63 | SendMousePosition_Impl((e.X * 65536) / GetSystemMetrics(SM_CXSCREEN), (e.Y * 65536) / GetSystemMetrics(SM_CYSCREEN), MOUSEEVENTF_ABSOLUTE); 64 | } 65 | DWORD ConvertToNative(KeyCodes key) 66 | { 67 | switch (key) { 68 | case KeyCodes::KEY_A: 69 | case KeyCodes::KEY_B: 70 | case KeyCodes::KEY_C: 71 | case KeyCodes::KEY_D: 72 | case KeyCodes::KEY_E: 73 | case KeyCodes::KEY_F: 74 | case KeyCodes::KEY_G: 75 | case KeyCodes::KEY_H: 76 | case KeyCodes::KEY_I: 77 | case KeyCodes::KEY_J: 78 | case KeyCodes::KEY_K: 79 | case KeyCodes::KEY_L: 80 | case KeyCodes::KEY_M: 81 | case KeyCodes::KEY_N: 82 | case KeyCodes::KEY_O: 83 | case KeyCodes::KEY_P: 84 | case KeyCodes::KEY_Q: 85 | case KeyCodes::KEY_R: 86 | case KeyCodes::KEY_S: 87 | case KeyCodes::KEY_T: 88 | case KeyCodes::KEY_U: 89 | case KeyCodes::KEY_V: 90 | case KeyCodes::KEY_W: 91 | case KeyCodes::KEY_X: 92 | case KeyCodes::KEY_Y: 93 | case KeyCodes::KEY_Z: 94 | return static_cast('A') + (key - KeyCodes::KEY_A); 95 | case KeyCodes::KEY_1: 96 | case KeyCodes::KEY_2: 97 | case KeyCodes::KEY_3: 98 | case KeyCodes::KEY_4: 99 | case KeyCodes::KEY_5: 100 | case KeyCodes::KEY_6: 101 | case KeyCodes::KEY_7: 102 | case KeyCodes::KEY_8: 103 | case KeyCodes::KEY_9: 104 | return static_cast('1') + (key - KeyCodes::KEY_1); 105 | case KeyCodes::KEY_0: 106 | return static_cast('0'); 107 | case KeyCodes::KEY_Enter: 108 | return VK_RETURN; 109 | case KeyCodes::KEY_Escape: 110 | return VK_ESCAPE; 111 | case KeyCodes::KEY_Backspace: 112 | return VK_BACK; 113 | case KeyCodes::KEY_Tab: 114 | return VK_TAB; 115 | case KeyCodes::KEY_Space: 116 | return VK_SPACE; 117 | case KeyCodes::KEY_Minus: 118 | return VK_OEM_MINUS; 119 | case KeyCodes::KEY_Equals: 120 | return VK_OEM_PLUS; // this is correct and not a mistype 121 | case KeyCodes::KEY_LeftBracket: 122 | return VK_OEM_4; 123 | case KeyCodes::KEY_RightBracket: 124 | return VK_OEM_6; 125 | case KeyCodes::KEY_Backslash: 126 | return VK_OEM_5; 127 | case KeyCodes::KEY_Semicolon: 128 | return VK_OEM_1; 129 | case KeyCodes::KEY_Quote: 130 | return VK_OEM_7; 131 | case KeyCodes::KEY_Grave: 132 | return VK_OEM_3; 133 | case KeyCodes::KEY_Comma: 134 | return VK_OEM_COMMA; 135 | case KeyCodes::KEY_Period: 136 | return VK_OEM_PERIOD; 137 | case KeyCodes::KEY_Slash: 138 | return VK_OEM_2; 139 | case KeyCodes::KEY_CapsLock: 140 | return VK_CAPITAL; 141 | case KeyCodes::KEY_F1: 142 | case KeyCodes::KEY_F2: 143 | case KeyCodes::KEY_F3: 144 | case KeyCodes::KEY_F4: 145 | case KeyCodes::KEY_F5: 146 | case KeyCodes::KEY_F6: 147 | case KeyCodes::KEY_F7: 148 | case KeyCodes::KEY_F8: 149 | case KeyCodes::KEY_F9: 150 | case KeyCodes::KEY_F10: 151 | case KeyCodes::KEY_F11: 152 | case KeyCodes::KEY_F12: 153 | return VK_F1 + (key - KeyCodes::KEY_F1); 154 | case KeyCodes::KEY_F13: 155 | case KeyCodes::KEY_F14: 156 | case KeyCodes::KEY_F15: 157 | case KeyCodes::KEY_F16: 158 | case KeyCodes::KEY_F17: 159 | case KeyCodes::KEY_F18: 160 | case KeyCodes::KEY_F19: 161 | case KeyCodes::KEY_F20: 162 | case KeyCodes::KEY_F21: 163 | case KeyCodes::KEY_F22: 164 | case KeyCodes::KEY_F23: 165 | case KeyCodes::KEY_F24: 166 | return VK_F13 + (key - KeyCodes::KEY_F13); 167 | case KeyCodes::KEY_PrintScreen: 168 | return VK_SNAPSHOT; 169 | case KeyCodes::KEY_ScrollLock: 170 | return VK_SCROLL; 171 | case KeyCodes::KEY_Pause: 172 | return VK_PAUSE; 173 | case KeyCodes::KEY_Insert: 174 | return VK_INSERT; 175 | case KeyCodes::KEY_Home: 176 | return VK_HOME; 177 | case KeyCodes::KEY_PageUp: 178 | return VK_PRIOR; 179 | case KeyCodes::KEY_Delete: 180 | return VK_DELETE; 181 | case KeyCodes::KEY_End: 182 | return VK_END; 183 | case KeyCodes::KEY_PageDown: 184 | return VK_NEXT; 185 | case KeyCodes::KEY_Right: 186 | return VK_RIGHT; 187 | case KeyCodes::KEY_Left: 188 | return VK_LEFT; 189 | case KeyCodes::KEY_Down: 190 | return VK_DOWN; 191 | case KeyCodes::KEY_Up: 192 | return VK_UP; 193 | case KeyCodes::KP_NumLock: 194 | return VK_NUMLOCK; 195 | case KeyCodes::KP_Divide: 196 | return VK_DIVIDE; 197 | case KeyCodes::KP_Multiply: 198 | return VK_MULTIPLY; 199 | case KeyCodes::KP_Subtract: 200 | return VK_SUBTRACT; 201 | case KeyCodes::KP_Add: 202 | return VK_ADD; 203 | case KeyCodes::KP_Enter: 204 | return VK_RETURN; 205 | case KeyCodes::KP_1: 206 | case KeyCodes::KP_2: 207 | case KeyCodes::KP_3: 208 | case KeyCodes::KP_4: 209 | case KeyCodes::KP_5: 210 | case KeyCodes::KP_6: 211 | case KeyCodes::KP_7: 212 | case KeyCodes::KP_8: 213 | case KeyCodes::KP_9: 214 | return VK_NUMPAD1 + (key - KeyCodes::KP_1); 215 | case KeyCodes::KP_0: 216 | return VK_NUMPAD0; 217 | case KeyCodes::KP_Point: 218 | return VK_DECIMAL; 219 | case KeyCodes::KEY_Help: 220 | return VK_HELP; 221 | case KeyCodes::KEY_Menu: 222 | return VK_MENU; 223 | case KeyCodes::KEY_LeftControl: 224 | return VK_CONTROL; 225 | case KeyCodes::KEY_LeftShift: 226 | return VK_SHIFT; 227 | case KeyCodes::KEY_LeftAlt: 228 | return VK_MENU; 229 | case KeyCodes::KEY_LeftMeta: 230 | return VK_LWIN; 231 | case KeyCodes::KEY_RightControl: 232 | return VK_CONTROL; 233 | case KeyCodes::KEY_RightShift: 234 | return VK_SHIFT; 235 | case KeyCodes::KEY_RightAlt: 236 | return VK_MENU; 237 | case KeyCodes::KEY_RightMeta: 238 | return VK_RWIN; 239 | default: 240 | return 255; 241 | } 242 | } 243 | KeyCodes ConvertToKeyCode(DWORD key) 244 | { 245 | 246 | switch (key) { 247 | case '0': 248 | return KeyCodes::KEY_0; 249 | case '1': 250 | case '2': 251 | case '3': 252 | case '4': 253 | case '5': 254 | case '6': 255 | case '7': 256 | case '8': 257 | case '9': 258 | return static_cast(KeyCodes::KEY_1 + (key - static_cast('1'))); 259 | case 'A': 260 | case 'B': 261 | case 'C': 262 | case 'D': 263 | case 'E': 264 | case 'F': 265 | case 'G': 266 | case 'H': 267 | case 'I': 268 | case 'J': 269 | case 'K': 270 | case 'L': 271 | case 'M': 272 | case 'N': 273 | case 'O': 274 | case 'P': 275 | case 'Q': 276 | case 'R': 277 | case 'S': 278 | case 'T': 279 | case 'U': 280 | case 'V': 281 | case 'W': 282 | case 'X': 283 | case 'Y': 284 | case 'Z': 285 | return static_cast(KeyCodes::KEY_A + (key - static_cast('A'))); 286 | case VK_RETURN: 287 | return KeyCodes::KEY_Enter; 288 | case VK_ESCAPE: 289 | return KeyCodes::KEY_Escape; 290 | case VK_BACK: 291 | return KeyCodes::KEY_Backspace; 292 | case VK_TAB: 293 | return KeyCodes::KEY_Tab; 294 | case VK_SPACE: 295 | return KeyCodes::KEY_Space; 296 | case VK_OEM_MINUS: 297 | return KeyCodes::KEY_Minus; 298 | case VK_OEM_PLUS: 299 | return KeyCodes::KEY_Equals; // this is correct and not a mistype 300 | case VK_OEM_4: 301 | return KeyCodes::KEY_LeftBracket; 302 | case VK_OEM_6: 303 | return KeyCodes::KEY_RightBracket; 304 | case VK_OEM_5: 305 | return KeyCodes::KEY_Backslash; 306 | case VK_OEM_1: 307 | return KeyCodes::KEY_Semicolon; 308 | case VK_OEM_7: 309 | return KeyCodes::KEY_Quote; 310 | case VK_OEM_3: 311 | return KeyCodes::KEY_Grave; 312 | case VK_OEM_COMMA: 313 | return KeyCodes::KEY_Comma; 314 | case VK_OEM_PERIOD: 315 | return KeyCodes::KEY_Period; 316 | case VK_OEM_2: 317 | return KeyCodes::KEY_Slash; 318 | case VK_CAPITAL: 319 | return KeyCodes::KEY_CapsLock; 320 | case VK_F1: 321 | case VK_F2: 322 | case VK_F3: 323 | case VK_F4: 324 | case VK_F5: 325 | case VK_F6: 326 | case VK_F7: 327 | case VK_F8: 328 | case VK_F9: 329 | case VK_F10: 330 | case VK_F11: 331 | case VK_F12: 332 | return static_cast(KeyCodes::KEY_F1 + (key - VK_F1)); 333 | case VK_F13: 334 | case VK_F14: 335 | case VK_F15: 336 | case VK_F16: 337 | case VK_F17: 338 | case VK_F18: 339 | case VK_F19: 340 | case VK_F20: 341 | case VK_F21: 342 | case VK_F22: 343 | case VK_F23: 344 | case VK_F24: 345 | return static_cast(KeyCodes::KEY_F13 + (key - VK_F13)); 346 | case VK_SNAPSHOT: 347 | return KeyCodes::KEY_PrintScreen; 348 | case VK_SCROLL: 349 | return KeyCodes::KEY_ScrollLock; 350 | case VK_PAUSE: 351 | return KeyCodes::KEY_Pause; 352 | case VK_INSERT: 353 | return KeyCodes::KEY_Insert; 354 | case VK_HOME: 355 | return KeyCodes::KEY_Home; 356 | case VK_PRIOR: 357 | return KeyCodes::KEY_PageUp; 358 | case VK_DELETE: 359 | return KeyCodes::KEY_Delete; 360 | case VK_END: 361 | return KeyCodes::KEY_End; 362 | case VK_NEXT: 363 | return KeyCodes::KEY_PageDown; 364 | case VK_RIGHT: 365 | return KeyCodes::KEY_Right; 366 | case VK_LEFT: 367 | return KeyCodes::KEY_Left; 368 | case VK_DOWN: 369 | return KeyCodes::KEY_Down; 370 | case VK_UP: 371 | return KeyCodes::KEY_Up; 372 | case VK_NUMLOCK: 373 | return KeyCodes::KP_NumLock; 374 | case VK_DIVIDE: 375 | return KeyCodes::KP_Divide; 376 | case VK_MULTIPLY: 377 | return KeyCodes::KP_Multiply; 378 | case VK_SUBTRACT: 379 | return KeyCodes::KP_Subtract; 380 | case VK_ADD: 381 | return KeyCodes::KP_Add; 382 | case VK_NUMPAD1: 383 | case VK_NUMPAD2: 384 | case VK_NUMPAD3: 385 | case VK_NUMPAD4: 386 | case VK_NUMPAD5: 387 | case VK_NUMPAD6: 388 | case VK_NUMPAD7: 389 | case VK_NUMPAD8: 390 | case VK_NUMPAD9: 391 | return static_cast(KeyCodes::KP_1 + (key - VK_NUMPAD1)); 392 | case VK_NUMPAD0: 393 | return KeyCodes::KP_0; 394 | case VK_DECIMAL: 395 | return KeyCodes::KP_Point; 396 | case VK_HELP: 397 | return KeyCodes::KEY_Help; 398 | case VK_MENU: 399 | case VK_LMENU: 400 | case VK_RMENU: 401 | return KeyCodes::KEY_Menu; 402 | case VK_CONTROL: 403 | case VK_LCONTROL: 404 | case VK_RCONTROL: 405 | return KeyCodes::KEY_LeftControl; 406 | case VK_SHIFT: 407 | case VK_LSHIFT: 408 | case VK_RSHIFT: 409 | return KeyCodes::KEY_LeftShift; 410 | case VK_LWIN: 411 | return KeyCodes::KEY_LeftMeta; 412 | case VK_RWIN: 413 | return KeyCodes::KEY_RightMeta; 414 | default: 415 | return SL::Input_Lite::KeyCodes::INVALID; 416 | } 417 | } 418 | 419 | } // namespace Input_Lite 420 | } // namespace SL --------------------------------------------------------------------------------