1010#include < nxemu-core/version.h>
1111#include < sciter_element.h>
1212#include < widgets/menubar.h>
13+ #include < yuzu_common/settings_input.h>
1314
1415SciterMainWindow::SciterMainWindow (ISciterUI & SciterUI, const char * windowTitle) :
1516 m_sciterUI(SciterUI),
@@ -76,6 +77,7 @@ bool SciterMainWindow::Show(void)
7677 return false ;
7778 }
7879 SciterElement rootElement (m_window->GetRootElement ());
80+ m_sciterUI.AttachHandler (rootElement, IID_IKEYSINK , (IKeySink*)this );
7981 m_window->OnDestroySinkAdd (this );
8082 m_window->CenterWindow ();
8183 SetCaption (m_windowTitle);
@@ -111,6 +113,166 @@ void SciterMainWindow::ShowLoadingScreen()
111113 }
112114}
113115
116+ int32_t SciterMainWindow::SciterKeyToSwitchKey (SciterKeys key)
117+ {
118+ static const std::unordered_map<uint32_t , int32_t > keyMappings = {
119+ {' A' , InputSettings::NativeKeyboard::A},
120+ {' B' , InputSettings::NativeKeyboard::B},
121+ {' C' , InputSettings::NativeKeyboard::C},
122+ {' D' , InputSettings::NativeKeyboard::D},
123+ {' E' , InputSettings::NativeKeyboard::E},
124+ {' F' , InputSettings::NativeKeyboard::F},
125+ {' G' , InputSettings::NativeKeyboard::G},
126+ {' H' , InputSettings::NativeKeyboard::H},
127+ {' I' , InputSettings::NativeKeyboard::I},
128+ {' J' , InputSettings::NativeKeyboard::J},
129+ {' K' , InputSettings::NativeKeyboard::K},
130+ {' L' , InputSettings::NativeKeyboard::L},
131+ {' M' , InputSettings::NativeKeyboard::M},
132+ {' N' , InputSettings::NativeKeyboard::N},
133+ {' O' , InputSettings::NativeKeyboard::O},
134+ {' P' , InputSettings::NativeKeyboard::P},
135+ {' Q' , InputSettings::NativeKeyboard::Q},
136+ {' R' , InputSettings::NativeKeyboard::R},
137+ {' S' , InputSettings::NativeKeyboard::S},
138+ {' T' , InputSettings::NativeKeyboard::T},
139+ {' U' , InputSettings::NativeKeyboard::U},
140+ {' v' , InputSettings::NativeKeyboard::V},
141+ {' W' , InputSettings::NativeKeyboard::W},
142+ {' X' , InputSettings::NativeKeyboard::X},
143+ {' Y' , InputSettings::NativeKeyboard::Y},
144+ {' Z' , InputSettings::NativeKeyboard::Z},
145+ {' 1' , InputSettings::NativeKeyboard::N1 },
146+ {' 2' , InputSettings::NativeKeyboard::N2 },
147+ {' 3' , InputSettings::NativeKeyboard::N3 },
148+ {' 4' , InputSettings::NativeKeyboard::N4 },
149+ {' 5' , InputSettings::NativeKeyboard::N5 },
150+ {' 6' , InputSettings::NativeKeyboard::N6 },
151+ {' 7' , InputSettings::NativeKeyboard::N7 },
152+ {' 8' , InputSettings::NativeKeyboard::N8 },
153+ {' 9' , InputSettings::NativeKeyboard::N9 },
154+ {' 0' , InputSettings::NativeKeyboard::N0 },
155+ {SCITER_KEY_ENTER , InputSettings::NativeKeyboard::Return},
156+ {SCITER_KEY_ESCAPE , InputSettings::NativeKeyboard::Escape},
157+ {SCITER_KEY_TAB , InputSettings::NativeKeyboard::Tab},
158+ {SCITER_KEY_BACKSPACE , InputSettings::NativeKeyboard::Space},
159+ {SCITER_KEY_F1 , InputSettings::NativeKeyboard::F1 },
160+ {SCITER_KEY_F2 , InputSettings::NativeKeyboard::F2 },
161+ {SCITER_KEY_F3 , InputSettings::NativeKeyboard::F3 },
162+ {SCITER_KEY_F4 , InputSettings::NativeKeyboard::F4 },
163+ {SCITER_KEY_F5 , InputSettings::NativeKeyboard::F5 },
164+ {SCITER_KEY_F6 , InputSettings::NativeKeyboard::F6 },
165+ {SCITER_KEY_F7 , InputSettings::NativeKeyboard::F7 },
166+ {SCITER_KEY_F8 , InputSettings::NativeKeyboard::F8 },
167+ {SCITER_KEY_F9 , InputSettings::NativeKeyboard::F9 },
168+ {SCITER_KEY_F10 , InputSettings::NativeKeyboard::F10 },
169+ {SCITER_KEY_F11 , InputSettings::NativeKeyboard::F11 },
170+ {SCITER_KEY_F12 , InputSettings::NativeKeyboard::F12 },
171+ {SCITER_KEY_RIGHT , InputSettings::NativeKeyboard::Right},
172+ {SCITER_KEY_LEFT , InputSettings::NativeKeyboard::Left},
173+ {SCITER_KEY_DOWN , InputSettings::NativeKeyboard::Down},
174+ {SCITER_KEY_UP , InputSettings::NativeKeyboard::Up},
175+ {SCITER_KEY_F13 , InputSettings::NativeKeyboard::F13 },
176+ {SCITER_KEY_F14 , InputSettings::NativeKeyboard::F14 },
177+ {SCITER_KEY_F15 , InputSettings::NativeKeyboard::F15 },
178+ {SCITER_KEY_F16 , InputSettings::NativeKeyboard::F16 },
179+ {SCITER_KEY_F17 , InputSettings::NativeKeyboard::F17 },
180+ {SCITER_KEY_F18 , InputSettings::NativeKeyboard::F18 },
181+ {SCITER_KEY_F19 , InputSettings::NativeKeyboard::F19 },
182+ {SCITER_KEY_F20 , InputSettings::NativeKeyboard::F20 },
183+ {SCITER_KEY_F21 , InputSettings::NativeKeyboard::F21 },
184+ {SCITER_KEY_F22 , InputSettings::NativeKeyboard::F22 },
185+ {SCITER_KEY_F23 , InputSettings::NativeKeyboard::F23 },
186+ {SCITER_KEY_F24 , InputSettings::NativeKeyboard::F24 },
187+ };
188+
189+ if (keyMappings.find (key) != keyMappings.end ())
190+ {
191+ return keyMappings.at (key);
192+ }
193+ return 0 ;
194+ }
195+
196+ int32_t SciterMainWindow::SciterKeyToVKCode (SciterKeys key)
197+ {
198+ static const std::unordered_map<uint32_t , int32_t > keyMappings = {
199+ {' A' , ' A' },
200+ {' B' , ' B' },
201+ {' C' , ' C' },
202+ {' D' , ' D' },
203+ {' E' , ' E' },
204+ {' F' , ' F' },
205+ {' G' , ' G' },
206+ {' H' , ' H' },
207+ {' I' , ' I' },
208+ {' J' , ' J' },
209+ {' K' , ' K' },
210+ {' L' , ' L' },
211+ {' M' , ' M' },
212+ {' N' , ' N' },
213+ {' O' , ' O' },
214+ {' P' , ' P' },
215+ {' Q' , ' Q' },
216+ {' R' , ' R' },
217+ {' S' , ' S' },
218+ {' T' , ' T' },
219+ {' U' , ' U' },
220+ {' v' , ' V' },
221+ {' W' , ' W' },
222+ {' X' , ' X' },
223+ {' Y' , ' Y' },
224+ {' Z' , ' Z' },
225+ {' 1' , ' 1' },
226+ {' 2' , ' 2' },
227+ {' 3' , ' 3' },
228+ {' 4' , ' 4' },
229+ {' 5' , ' 5' },
230+ {' 6' , ' 6' },
231+ {' 7' , ' 7' },
232+ {' 8' , ' 8' },
233+ {' 9' , ' 9' },
234+ {' 0' , ' 0' },
235+ {SCITER_KEY_ENTER , VK_RETURN },
236+ {SCITER_KEY_ESCAPE , VK_ESCAPE },
237+ {SCITER_KEY_TAB , VK_TAB },
238+ {SCITER_KEY_BACKSPACE , VK_SPACE },
239+ {SCITER_KEY_F1 , VK_F1 },
240+ {SCITER_KEY_F2 , VK_F2 },
241+ {SCITER_KEY_F3 , VK_F3 },
242+ {SCITER_KEY_F4 , VK_F4 },
243+ {SCITER_KEY_F5 , VK_F5 },
244+ {SCITER_KEY_F6 , VK_F6 },
245+ {SCITER_KEY_F7 , VK_F7 },
246+ {SCITER_KEY_F8 , VK_F8 },
247+ {SCITER_KEY_F9 , VK_F9 },
248+ {SCITER_KEY_F10 , VK_F10 },
249+ {SCITER_KEY_F11 , VK_F11 },
250+ {SCITER_KEY_F12 , VK_F12 },
251+ {SCITER_KEY_RIGHT , VK_RIGHT },
252+ {SCITER_KEY_LEFT , VK_LEFT },
253+ {SCITER_KEY_DOWN , VK_DOWN },
254+ {SCITER_KEY_UP , VK_UP },
255+ {SCITER_KEY_F13 , VK_F13 },
256+ {SCITER_KEY_F14 , VK_F14 },
257+ {SCITER_KEY_F15 , VK_F15 },
258+ {SCITER_KEY_F16 , VK_F16 },
259+ {SCITER_KEY_F17 , VK_F17 },
260+ {SCITER_KEY_F18 , VK_F18 },
261+ {SCITER_KEY_F19 , VK_F19 },
262+ {SCITER_KEY_F20 , VK_F20 },
263+ {SCITER_KEY_F21 , VK_F21 },
264+ {SCITER_KEY_F22 , VK_F22 },
265+ {SCITER_KEY_F23 , VK_F23 },
266+ {SCITER_KEY_F24 , VK_F24 },
267+ };
268+
269+ if (keyMappings.find (key) != keyMappings.end ())
270+ {
271+ return keyMappings.at (key);
272+ }
273+ return 0 ;
274+ }
275+
114276void SciterMainWindow::SetCaption (const std::string & caption)
115277{
116278 SciterElement rootElement (m_window->GetRootElement ());
@@ -238,3 +400,38 @@ void * SciterMainWindow::RenderSurface(void) const
238400{
239401 return m_renderWindow;
240402}
403+
404+ bool SciterMainWindow::OnKeyDown (SCITER_ELEMENT element, SCITER_ELEMENT item, SciterKeys keyCode, uint32_t keyboardState)
405+ {
406+ SwitchSystem* system = SwitchSystem::GetInstance ();
407+ if (system != nullptr )
408+ {
409+ IOperatingSystem& OperatingSystem = system->OperatingSystem ();
410+ int keyIndex = SciterKeyToSwitchKey (keyCode);
411+ if (keyIndex != 0 )
412+ {
413+ OperatingSystem.KeyboardKeyPress (0 , keyIndex, SciterKeyToVKCode (keyCode));
414+ }
415+ }
416+ return false ;
417+ }
418+
419+ bool SciterMainWindow::OnKeyUp (SCITER_ELEMENT element, SCITER_ELEMENT item, SciterKeys keyCode, uint32_t keyboardState)
420+ {
421+ SwitchSystem* system = SwitchSystem::GetInstance ();
422+ if (system != nullptr )
423+ {
424+ IOperatingSystem& OperatingSystem = system->OperatingSystem ();
425+ int keyIndex = SciterKeyToSwitchKey (keyCode);
426+ if (keyIndex != 0 )
427+ {
428+ OperatingSystem.KeyboardKeyRelease (0 , keyIndex, SciterKeyToVKCode (keyCode));
429+ }
430+ }
431+ return false ;
432+ }
433+
434+ bool SciterMainWindow::OnKeyChar (SCITER_ELEMENT element, SCITER_ELEMENT item, SciterKeys keyCode, uint32_t keyboardState)
435+ {
436+ return false ;
437+ }
0 commit comments