Skip to content

Commit bf26a72

Browse files
author
N3xoX1
committed
ui: fix up using input in sciter version
1 parent 2735c88 commit bf26a72

3 files changed

Lines changed: 211 additions & 6 deletions

File tree

src/nxemu/user_interface/sciter_main_window.cpp

Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <nxemu-core/version.h>
1111
#include <sciter_element.h>
1212
#include <widgets/menubar.h>
13+
#include <yuzu_common/settings_input.h>
1314

1415
SciterMainWindow::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+
114276
void 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+
}

src/nxemu/user_interface/sciter_main_window.h

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
class SciterMainWindow :
88
public IWindowDestroySink,
99
public IMenuBarSink,
10-
public IRenderWindow
10+
public IRenderWindow,
11+
public IKeySink
1112
{
1213
enum MainMenuID
1314
{
@@ -41,21 +42,28 @@ class SciterMainWindow :
4142
void RomLoadingChanged(void);
4243
void DisplayedFramesChanged(void);
4344
void ShowLoadingScreen(void);
44-
45+
int32_t SciterKeyToSwitchKey(SciterKeys key);
46+
int32_t SciterKeyToVKCode(SciterKeys vkcode);
47+
4548
void OnOpenGame(void);
4649
void OnFileExit(void);
4750
void OnSettings(void);
4851
void OnInputConfig(void);
4952
void OnRecetGame(uint32_t fileIndex);
5053

5154
// IWindowDestroySink
52-
void OnWindowDestroy(HWINDOW hWnd);
55+
void OnWindowDestroy(HWINDOW hWnd) override;
5356

5457
// IMenuBarSink
55-
void OnMenuItem(int32_t id, SCITER_ELEMENT item);
58+
void OnMenuItem(int32_t id, SCITER_ELEMENT item) override;
5659

5760
// IRenderWindow
58-
void * RenderSurface(void) const;
61+
void * RenderSurface(void) const override;
62+
63+
// IKeySink
64+
bool OnKeyDown(SCITER_ELEMENT element, SCITER_ELEMENT item, SciterKeys keyCode, uint32_t keyboardState) override;
65+
bool OnKeyUp(SCITER_ELEMENT element, SCITER_ELEMENT item, SciterKeys keyCode, uint32_t keyboardState) override;
66+
bool OnKeyChar(SCITER_ELEMENT element, SCITER_ELEMENT item, SciterKeys keyCode, uint32_t keyboardState) override;
5967

6068
ISciterUI & m_sciterUI;
6169
ISciterWindow * m_window;

0 commit comments

Comments
 (0)