├── .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
--------------------------------------------------------------------------------