From b21b03c137fd919658d96eef310fbb8b14bec1b4 Mon Sep 17 00:00:00 2001 From: Sergey Stepanov Date: Mon, 4 Mar 2024 22:07:45 +0300 Subject: [PATCH] Add numlock, capslock, and scrollock --- web/js/api/api.js | 48 +++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/web/js/api/api.js b/web/js/api/api.js index 5f4f0db02..6371ba480 100644 --- a/web/js/api/api.js +++ b/web/js/api/api.js @@ -41,27 +41,29 @@ const api = (() => { const decodeBytes = (b) => String.fromCharCode.apply(null, new Uint8Array(b)) - const keyboardPress = (pressed = false, e) => { + const keyboardPress = (() => { + // 0 1 2 3 4 5 6 + // [CODE ] P MOD const buffer = new ArrayBuffer(7); const dv = new DataView(buffer); - // 0 1 2 3 4 5 6 - dv.setUint8(4, pressed ? 1 : 0) - const k = libretro.map('', e.code); - dv.setUint32(0, k) - - // meta keys - let mod = 0; - - e.altKey && (mod |= libretro.mod.ALT) - e.ctrlKey && (mod |= libretro.mod.CTRL) - e.metaKey && (mod |= libretro.mod.META) - e.shiftKey && (mod |= libretro.mod.SHIFT) - - dv.setUint16(5, mod) - - webrtc.keyboard(buffer); - } + return (pressed = false, e) => { + const key = libretro.mod; + const code = libretro.map('', e.code); + const mod = 0 + | (e.altKey && key.ALT) + | (e.ctrlKey && key.CTRL) + | (e.metaKey && key.META) + | (e.shiftKey && key.SHIFT) + | (e.getModifierState('NumLock') && key.NUMLOCK) + | (e.getModifierState('CapsLock') && key.CAPSLOCK) + | (e.getModifierState('ScrollLock') && key.SCROLLOCK) + dv.setUint32(0, code); + dv.setUint8(4, +pressed); + dv.setUint16(5, mod) + webrtc.keyboard(buffer); + } + })(); const mouseMove = (() => { // 0 1 2 3 4 @@ -310,17 +312,13 @@ libretro = function () {// RETRO_KEYBOARD const retroMod = { NONE: 0x0000, - SHIFT: 0x01, CTRL: 0x02, ALT: 0x04, META: 0x08, - - // RETROKMOD_NUMLOCK = 0x10, - // RETROKMOD_CAPSLOCK = 0x20, - // RETROKMOD_SCROLLOCK = 0x40, - - // RETROKMOD_DUMMY = INT_MAX /* Ensure sizeof(enum) == sizeof(int) */ + NUMLOCK: 0x10, + CAPSLOCK: 0x20, + SCROLLOCK: 0x40, }; const _map = (key = '', code = '') => {