RetroArch icon indicating copy to clipboard operation
RetroArch copied to clipboard

webOS mouse pointer support

Open nordeep opened this issue 3 years ago • 4 comments

Looking for help add Mouse feature support to webOS version of RetroArch - https://github.com/webosbrew/RetroArch Unfortunately Mouse as a HID device and as a Magic Remote doesn't work in DosBox and ScummVM cores. Gamepad and keyboard are working well.

nordeep avatar Mar 07 '22 14:03 nordeep

see here https://github.com/nenge123/mgba-retroarch

https://mgba.nenge.net/

or

let REPLACE_MODULE = result =>{
        if (result instanceof ArrayBuffer) result = new Uint8Array(result);
        if (result instanceof Uint8Array) result = new TextDecoder().decode(result);
        return result.replace(
//this replace will remove document keybrodEvent
            /var\s?__specialEventTargets\s?=\s?\[0,\s?typeof\s?document\s?!==\s?"undefined"\s?\?\s?document\s?:\s?0,\s?typeof\s?window\s?!==\s?"undefined"\s?\?\s?window\s?:\s?0\];/,
            'var __specialEventTargets=[0,Module.canvas,window];'
        ).replace(
//this replace make mobile event not error
            /var\s?rect\s?=\s?__specialEventTargets\.indexOf\(target\)\s?<\s?0\s?\?\s?__getBoundingClientRect\(target\)\s?:\s?\{\s*\n*\s*"left":\s*\d+,\n?\s*"top":\s*\d+\n?\s*\};/,
            'var rect= __getBoundingClientRect(Module.canvas);'
        ).replace(
//this replace make mobile support touch on canvans
            /if\s?\(!JSEvents\.mouseEvent\)\s?JSEvents\.mouseEvent\s?=\s?_malloc\(64\);/,
            'if (!JSEvents.mouseEvent) JSEvents.mouseEvent = _malloc(64);eventTypeString = eventTypeString.replace(\'mouse\',\'pointer\');'
        )
};

let coredata = REPLACE_MODULE(await (await fetch(`${corename}_libretro.js`)).arrayBuffer()); 


nenge123 avatar Mar 11 '22 17:03 nenge123

class abc{
aa(){           
 this.on(document,'keydown',e=>{
                if(this.$('.game-result').childNodes[0]) return;
                e.preventDefault();
                this.canvas.dispatchEvent(this.KeyboardEvent(e));
            });
            this.on(document,'keyup',e=>{
                if(this.$('.game-result').childNodes[0]) return;
                e.preventDefault();
                this.canvas.dispatchEvent(this.KeyboardEvent(e));
            });
}

        keyPress(key,type){
            let m = this.keyToCode[key.toLowerCase()];
            this.canvas.dispatchEvent(new KeyboardEvent(type, {'code':m||key,'key':key}));
        }
        keyPressOnce(key){
            this.keyPress(key,'keydown');
            setTimeout(()=>this.keyPress(key,'keyup'),50);
        }
        KeyboardEvent(e){
            let code = e.code;
            if(code.search('Arrow') != -1){
                //code = code.replace('Arrow','').toLowerCase();
            }
           return new KeyboardEvent(e.type,{
              "code":code,
              "key":e.key,
              "location":e.location,
              "ctrlKey":e.ctrlKey,
              "shiftKey":e.shiftKey,
              "altKey":e.altKey,
              "metaKey":e.metaKey,
              "repeat":e.repeat,
              "locale":e.locale,
              "char":e.char,
              "charCode":e.charCode,
              "keyCode":e.keyCode,
              "which":e.which
           });
        }

    KeyMap = {
        input_player1_a: "x",
        input_player1_b: "z",
        input_player1_down: "down",
        input_player1_l: "q",
        input_player1_l2: "nul",
        input_player1_l3: "nul",
        input_player1_left: "left",
        input_player1_r: "w",
        input_player1_r2: "nul",
        input_player1_r3: "nul",
        input_player1_right: "right",
        input_player1_select: "rshift",
        input_player1_start: "enter",
        input_player1_turbo: "nul",
        input_player1_up: "up",
        input_player1_x: "s",
        input_player1_y: "a",
        input_toggle_fast_forward: "space",
        input_toggle_fullscreen: "f",
        input_reset: "h",
        input_screenshot: "f8",
        input_load_state: "f4",
        input_save_state: "f2",
        input_menu_toggle: "f1",
        input_toggle_slowmotion: null,
        audio_latency: 128,
    };
    keyToCode = { "tilde": "Backquote", "num1": "Digit1", "num2": "Digit2", "num3": "Digit3", "num4": "Digit4", "num5": "Digit5", "num6": "Digit6", "num7": "Digit7", "num8": "Digit8", "num9": "Digit9", "num0": "Digit0", "minus": "Minus", "equal": "Equal", "backspace": "Backspace", "tab": "Tab", "q": "KeyQ", "w": "KeyW", "e": "KeyE", "r": "KeyR", "t": "KeyT", "y": "KeyY", "u": "KeyU", "i": "KeyI", "o": "KeyO", "p": "KeyP", "a": "KeyA", "s": "KeyS", "d": "KeyD", "f": "KeyF", "g": "KeyG", "h": "KeyH", "j": "KeyJ", "k": "KeyK", "l": "KeyL", "z": "KeyZ", "x": "KeyX", "c": "KeyC", "v": "KeyV", "b": "KeyB", "n": "KeyN", "m": "KeyM", "leftbracket": "BracketLeft", "rightbracket": "BracketRight", "backslash": "Backslash", "capslock": "CapsLock", "semicolon": "Semicolon", "quote": "Quote", "enter": "Enter", "shift": "ShiftLeft", "comma": "Comma", "period": "Period", "slash": "Slash", "rshift": "ShiftRight", "ctrl": "ControlLeft", "lmeta": "MetaLeft", "alt": "AltLeft", "space": "Space", "ralt": "AltRight", "menu": "ContextMenu", "rctrl": "ControlRight", "up": "ArrowUp", "left": "ArrowLeft", "down": "ArrowDown", "right": "ArrowRight", "kp_period": "NumpadDecimal", "kp_enter": "NumpadEnter", "keypad0": "Numpad0", "keypad1": "Numpad1", "keypad2": "Numpad2", "keypad3": "Numpad3", "keypad4": "Numpad4", "keypad5": "Numpad5", "keypad6": "Numpad6", "keypad7": "Numpad7", "keypad8": "Numpad8", "keypad9": "Numpad9", "add": "NumpadAdd", "numlock": "NumLock", "divide": "NumpadDivide", "multiply": "NumpadMultiply", "subtract": "NumpadSubtract", "home": "Home", "end": "End", "pageup": "PageUp", "pagedown": "PageDown", "del": "Delete", "insert": "Insert", "f12": "F12", "f10": "F10", "f9": "F9", "f8": "F8", "f7": "F7", "f6": "F6", "f5": "F5", "f4": "F4", "f3": "F3", "f2": "F2", "f1": "F1", "escape": "Escape" };

nenge123 avatar Mar 11 '22 17:03 nenge123

PRs welcome.

LibretroAdmin avatar Oct 04 '22 16:10 LibretroAdmin

This was added in https://github.com/libretro/RetroArch/pull/18432. Works in Scumm VM cores.

Doesn't work with FPS type games.

cscd98 avatar Nov 29 '25 14:11 cscd98