web_browser_scripts: Add injection scripts for the web browser
This commit is contained in:
		
							
								
								
									
										193
									
								
								src/yuzu/applets/web_browser_scripts.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								src/yuzu/applets/web_browser_scripts.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,193 @@ | ||||
| // Copyright 2020 yuzu Emulator Project | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| constexpr char NX_FONT_CSS[] = R"( | ||||
| (function() { | ||||
|     css = document.createElement('style'); | ||||
|     css.type = 'text/css'; | ||||
|     css.id = 'nx_font'; | ||||
|     css.innerText = ` | ||||
| /* FontStandard */ | ||||
| @font-face { | ||||
|     font-family: 'FontStandard'; | ||||
|     src: url('%1') format('truetype'); | ||||
| } | ||||
|  | ||||
| /* FontChineseSimplified */ | ||||
| @font-face { | ||||
|     font-family: 'FontChineseSimplified'; | ||||
|     src: url('%2') format('truetype'); | ||||
| } | ||||
|  | ||||
| /* FontExtendedChineseSimplified */ | ||||
| @font-face { | ||||
|     font-family: 'FontExtendedChineseSimplified'; | ||||
|     src: url('%3') format('truetype'); | ||||
| } | ||||
|  | ||||
| /* FontChineseTraditional */ | ||||
| @font-face { | ||||
|     font-family: 'FontChineseTraditional'; | ||||
|     src: url('%4') format('truetype'); | ||||
| } | ||||
|  | ||||
| /* FontKorean */ | ||||
| @font-face { | ||||
|     font-family: 'FontKorean'; | ||||
|     src: url('%5') format('truetype'); | ||||
| } | ||||
|  | ||||
| /* FontNintendoExtended */ | ||||
| @font-face { | ||||
|     font-family: 'NintendoExt003'; | ||||
|     src: url('%6') format('truetype'); | ||||
| } | ||||
|  | ||||
| /* FontNintendoExtended2 */ | ||||
| @font-face { | ||||
|     font-family: 'NintendoExt003'; | ||||
|     src: url('%7') format('truetype'); | ||||
| } | ||||
| `; | ||||
|  | ||||
|     document.head.appendChild(css); | ||||
| })(); | ||||
| )"; | ||||
|  | ||||
| constexpr char LOAD_NX_FONT[] = R"( | ||||
| (function() { | ||||
|     var elements = document.querySelectorAll("*"); | ||||
|  | ||||
|     for (var i = 0; i < elements.length; i++) { | ||||
|         var style = window.getComputedStyle(elements[i], null); | ||||
|         if (style.fontFamily.includes("Arial") || style.fontFamily.includes("Calibri") || | ||||
|             style.fontFamily.includes("Century") || style.fontFamily.includes("Times New Roman")) { | ||||
|             elements[i].style.fontFamily = "FontStandard, FontChineseSimplified, FontExtendedChineseSimplified, FontChineseTraditional, FontKorean, NintendoExt003"; | ||||
|         } else { | ||||
|             elements[i].style.fontFamily = style.fontFamily + ", FontStandard, FontChineseSimplified, FontExtendedChineseSimplified, FontChineseTraditional, FontKorean, NintendoExt003"; | ||||
|         } | ||||
|     } | ||||
| })(); | ||||
| )"; | ||||
|  | ||||
| constexpr char GAMEPAD_SCRIPT[] = R"( | ||||
| window.addEventListener("gamepadconnected", function(e) { | ||||
|     console.log("Gamepad connected at index %d: %s. %d buttons, %d axes.", | ||||
|         e.gamepad.index, e.gamepad.id, e.gamepad.buttons.length, e.gamepad.axes.length); | ||||
| }); | ||||
|  | ||||
| window.addEventListener("gamepaddisconnected", function(e) { | ||||
|     console.log("Gamepad disconnected from index %d: %s", e.gamepad.index, e.gamepad.id); | ||||
| }); | ||||
| )"; | ||||
|  | ||||
| constexpr char WINDOW_NX_SCRIPT[] = R"( | ||||
| var end_applet = false; | ||||
| var yuzu_key_callbacks = []; | ||||
|  | ||||
| (function() { | ||||
|     class WindowNX { | ||||
|         constructor() { | ||||
|             yuzu_key_callbacks[1] = function() { window.history.back(); }; | ||||
|             yuzu_key_callbacks[2] = function() { window.nx.endApplet(); }; | ||||
|         } | ||||
|  | ||||
|         addEventListener(type, listener, options) { | ||||
|             console.log("nx.addEventListener called, type=%s", type); | ||||
|  | ||||
|             window.addEventListener(type, listener, options); | ||||
|         } | ||||
|  | ||||
|         endApplet() { | ||||
|             console.log("nx.endApplet called"); | ||||
|  | ||||
|             end_applet = true; | ||||
|         } | ||||
|  | ||||
|         playSystemSe(system_se) { | ||||
|             console.log("nx.playSystemSe is not implemented, system_se=%s", system_se); | ||||
|         } | ||||
|  | ||||
|         sendMessage(message) { | ||||
|             console.log("nx.sendMessage is not implemented, message=%s", message); | ||||
|         } | ||||
|  | ||||
|         setCursorScrollSpeed(scroll_speed) { | ||||
|             console.log("nx.setCursorScrollSpeed is not implemented, scroll_speed=%d", scroll_speed); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     class WindowNXFooter { | ||||
|         setAssign(key, label, func, option) { | ||||
|             console.log("nx.footer.setAssign called, key=%s", key); | ||||
|  | ||||
|             switch (key) { | ||||
|                 case "A": | ||||
|                     yuzu_key_callbacks[0] = func; | ||||
|                     break; | ||||
|                 case "B": | ||||
|                     yuzu_key_callbacks[1] = func; | ||||
|                     break; | ||||
|                 case "X": | ||||
|                     yuzu_key_callbacks[2] = func; | ||||
|                     break; | ||||
|                 case "Y": | ||||
|                     yuzu_key_callbacks[3] = func; | ||||
|                     break; | ||||
|                 case "L": | ||||
|                     yuzu_key_callbacks[6] = func; | ||||
|                     break; | ||||
|                 case "R": | ||||
|                     yuzu_key_callbacks[7] = func; | ||||
|                     break; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         setFixed(kind) { | ||||
|             console.log("nx.footer.setFixed is not implemented, kind=%s", kind); | ||||
|         } | ||||
|  | ||||
|         unsetAssign(key) { | ||||
|             console.log("nx.footer.unsetAssign called, key=%s", key); | ||||
|  | ||||
|             switch (key) { | ||||
|                 case "A": | ||||
|                     yuzu_key_callbacks[0] = function() {}; | ||||
|                     break; | ||||
|                 case "B": | ||||
|                     yuzu_key_callbacks[1] = function() {}; | ||||
|                     break; | ||||
|                 case "X": | ||||
|                     yuzu_key_callbacks[2] = function() {}; | ||||
|                     break; | ||||
|                 case "Y": | ||||
|                     yuzu_key_callbacks[3] = function() {}; | ||||
|                     break; | ||||
|                 case "L": | ||||
|                     yuzu_key_callbacks[6] = function() {}; | ||||
|                     break; | ||||
|                 case "R": | ||||
|                     yuzu_key_callbacks[7] = function() {}; | ||||
|                     break; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     class WindowNXPlayReport { | ||||
|         incrementCounter(counter_id) { | ||||
|             console.log("nx.playReport.incrementCounter is not implemented, counter_id=%d", counter_id); | ||||
|         } | ||||
|  | ||||
|         setCounterSetIdentifier(counter_id) { | ||||
|             console.log("nx.playReport.setCounterSetIdentifier is not implemented, counter_id=%d", counter_id); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     window.nx = new WindowNX(); | ||||
|     window.nx.footer = new WindowNXFooter(); | ||||
|     window.nx.playReport = new WindowNXPlayReport(); | ||||
| })(); | ||||
| )"; | ||||
		Reference in New Issue
	
	Block a user