Merge pull request #330 from hchargois/fix-simulator-keyboard-shortcuts
Fix simulator keyboard shortcuts
This commit is contained in:
commit
3487d742f1
@ -907,13 +907,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style="display: flex; flex-direction: column; width: 100%">
|
<form onSubmit="sendText(); return false" style="display: flex; flex-direction: column; width: 100%">
|
||||||
<textarea id="output" rows="8" style="width: 100%"></textarea>
|
<textarea id="output" rows="8" style="width: 100%"></textarea>
|
||||||
<div style="display: flex">
|
<div style="display: flex">
|
||||||
<input id="input" placeholder="Filesystem command (see filesystem.c)" style="flex-grow: 1"></input>
|
<input id="input" placeholder="Filesystem command (see filesystem.c)" style="flex-grow: 1"></input>
|
||||||
<button id="submit" onclick="sendText()">Send</button>
|
<button type="submit">Send</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</form>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<a href="https://github.com/alexisphilip/Casio-F-91W">Original F-91W SVG</a> is © 2020 Alexis Philip, used here
|
<a href="https://github.com/alexisphilip/Casio-F-91W">Original F-91W SVG</a> is © 2020 Alexis Philip, used here
|
||||||
|
@ -22,13 +22,15 @@
|
|||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "watch_extint.h"
|
#include "watch_extint.h"
|
||||||
#include "watch_main_loop.h"
|
#include "watch_main_loop.h"
|
||||||
|
|
||||||
#include <emscripten.h>
|
#include <emscripten.h>
|
||||||
#include <emscripten/html5.h>
|
#include <emscripten/html5.h>
|
||||||
|
|
||||||
static bool output_focused = false;
|
static bool debug_console_focused = false;
|
||||||
static bool external_interrupt_enabled = false;
|
static bool external_interrupt_enabled = false;
|
||||||
static bool button_callbacks_installed = false;
|
static bool button_callbacks_installed = false;
|
||||||
static ext_irq_cb_t external_interrupt_mode_callback = NULL;
|
static ext_irq_cb_t external_interrupt_mode_callback = NULL;
|
||||||
@ -45,27 +47,47 @@ static const uint8_t BTN_IDS[] = { BTN_ID_ALARM, BTN_ID_LIGHT, BTN_ID_MODE };
|
|||||||
static EM_BOOL watch_invoke_interrupt_callback(const uint8_t button_id, watch_interrupt_trigger trigger);
|
static EM_BOOL watch_invoke_interrupt_callback(const uint8_t button_id, watch_interrupt_trigger trigger);
|
||||||
|
|
||||||
static EM_BOOL watch_invoke_key_callback(int eventType, const EmscriptenKeyboardEvent *keyEvent, void *userData) {
|
static EM_BOOL watch_invoke_key_callback(int eventType, const EmscriptenKeyboardEvent *keyEvent, void *userData) {
|
||||||
if (output_focused || keyEvent->repeat) return EM_FALSE;
|
if (debug_console_focused || keyEvent->repeat) return EM_FALSE;
|
||||||
|
|
||||||
const char *key = keyEvent->key;
|
|
||||||
if (key[1] != 0) return EM_FALSE;
|
|
||||||
|
|
||||||
uint8_t button_id;
|
uint8_t button_id;
|
||||||
switch (key[0]) {
|
const char *key = keyEvent->key;
|
||||||
case 'A':
|
if (key[1] == 0) {
|
||||||
case 'a':
|
// event is from a plain letter key
|
||||||
button_id = BTN_ID_ALARM;
|
switch (key[0]) {
|
||||||
break;
|
case 'A':
|
||||||
case 'L':
|
case 'a':
|
||||||
case 'l':
|
button_id = BTN_ID_ALARM;
|
||||||
button_id = BTN_ID_LIGHT;
|
break;
|
||||||
break;
|
case 'L':
|
||||||
case 'M':
|
case 'l':
|
||||||
case 'm':
|
button_id = BTN_ID_LIGHT;
|
||||||
button_id = BTN_ID_MODE;
|
break;
|
||||||
break;
|
case 'M':
|
||||||
default:
|
case 'm':
|
||||||
return EM_FALSE;
|
button_id = BTN_ID_MODE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return EM_FALSE;
|
||||||
|
}
|
||||||
|
} else if (strncmp(key, "Arrow", 5) == 0) {
|
||||||
|
// event is from one of the arrow keys
|
||||||
|
switch(key[5]) {
|
||||||
|
case 'U': // ArrowUp
|
||||||
|
button_id = BTN_ID_LIGHT;
|
||||||
|
break;
|
||||||
|
case 'D': // ArrowDown
|
||||||
|
case 'L': // ArrowLeft
|
||||||
|
button_id = BTN_ID_MODE;
|
||||||
|
break;
|
||||||
|
case 'R': // ArrowRight
|
||||||
|
button_id = BTN_ID_ALARM;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return EM_FALSE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// another kind of key
|
||||||
|
return EM_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_interrupt_trigger trigger = eventType == EMSCRIPTEN_EVENT_KEYDOWN ? INTERRUPT_TRIGGER_RISING : INTERRUPT_TRIGGER_FALLING;
|
watch_interrupt_trigger trigger = eventType == EMSCRIPTEN_EVENT_KEYDOWN ? INTERRUPT_TRIGGER_RISING : INTERRUPT_TRIGGER_FALLING;
|
||||||
@ -86,7 +108,7 @@ static EM_BOOL watch_invoke_touch_callback(int eventType, const EmscriptenTouchE
|
|||||||
}
|
}
|
||||||
|
|
||||||
static EM_BOOL watch_invoke_focus_callback(int eventType, const EmscriptenFocusEvent *focusEvent, void *userData) {
|
static EM_BOOL watch_invoke_focus_callback(int eventType, const EmscriptenFocusEvent *focusEvent, void *userData) {
|
||||||
output_focused = eventType == EMSCRIPTEN_EVENT_FOCUS;
|
debug_console_focused = eventType == EMSCRIPTEN_EVENT_FOCUS;
|
||||||
return EM_TRUE;
|
return EM_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,6 +120,10 @@ static void watch_install_button_callbacks(void) {
|
|||||||
emscripten_set_focus_callback(target_output, NULL, EM_FALSE, watch_invoke_focus_callback);
|
emscripten_set_focus_callback(target_output, NULL, EM_FALSE, watch_invoke_focus_callback);
|
||||||
emscripten_set_blur_callback(target_output, NULL, EM_FALSE, watch_invoke_focus_callback);
|
emscripten_set_blur_callback(target_output, NULL, EM_FALSE, watch_invoke_focus_callback);
|
||||||
|
|
||||||
|
const char *target_input = "#input";
|
||||||
|
emscripten_set_focus_callback(target_input, NULL, EM_FALSE, watch_invoke_focus_callback);
|
||||||
|
emscripten_set_blur_callback(target_input, NULL, EM_FALSE, watch_invoke_focus_callback);
|
||||||
|
|
||||||
for (int i = 0, count = sizeof(BTN_IDS) / sizeof(BTN_IDS[0]); i < count; i++) {
|
for (int i = 0, count = sizeof(BTN_IDS) / sizeof(BTN_IDS[0]); i < count; i++) {
|
||||||
char target[] = "#btn_";
|
char target[] = "#btn_";
|
||||||
target[4] = BTN_IDS[i] + '0';
|
target[4] = BTN_IDS[i] + '0';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user