From a41d0cda0cebc10b64a750b63deba8634adb271f Mon Sep 17 00:00:00 2001
From: redphx <96280+redphx@users.noreply.github.com>
Date: Fri, 7 Jun 2024 21:04:52 +0700
Subject: [PATCH] Update better-xcloud.user.js
---
dist/better-xcloud.user.js | 148 ++++++++++++++++++++++++++++---------
1 file changed, 114 insertions(+), 34 deletions(-)
diff --git a/dist/better-xcloud.user.js b/dist/better-xcloud.user.js
index fa7f6ad..6778575 100644
--- a/dist/better-xcloud.user.js
+++ b/dist/better-xcloud.user.js
@@ -506,6 +506,7 @@ var Texts = {
"clarity-boost-warning": "These settings don't work when the Clarity Boost mode is ON",
clear: "Clear",
close: "Close",
+ "close-ap": "Close app",
"combine-audio-video-streams": "Combine audio & video streams",
"combine-audio-video-streams-summary": "May fix the laggy audio problem",
"conditional-formatting": "Conditional formatting text color",
@@ -559,6 +560,7 @@ var Texts = {
"hide-scrollbar": "Hide web page's scrollbar",
"hide-system-menu-icon": "Hide System menu's icon",
"hide-touch-controller": "Hide touch controller",
+ "horizontal-scroll-sensitivity": "Horizontal scroll sensitivity",
"horizontal-sensitivity": "Horizontal sensitivity",
ignore: "Ignore",
import: "Import",
@@ -579,6 +581,7 @@ var Texts = {
"mkb-click-to-activate": "Click to activate",
"mkb-disclaimer": "Using this feature when playing online could be viewed as cheating",
"mouse-and-keyboard": "Mouse & Keyboard",
+ "mouse-wheel": "Mouse wheel",
muted: "Muted",
name: "Name",
"native-mkb": "Native Mouse & Keyboard",
@@ -601,11 +604,11 @@ var Texts = {
"press-key-to-toggle-mkb": [
(e) => `Press ${e.key} to toggle this feature`,
,
+ (e) => `${e.key}: Funktion an-/ausschalten`,
,
,
,
- ,
- ,
+ (e) => `Premi ${e.key} per attivare questa funzionalità`,
(e) => `${e.key} でこの機能を切替`,
,
,
@@ -613,7 +616,7 @@ var Texts = {
,
,
(e) => `Etkinleştirmek için ${e.key} tuşuna basın`,
- ,
+ (e) => `Натисніть ${e.key} щоб перемкнути цю функцію`,
(e) => `Nhấn ${e.key} để bật/tắt tính năng này`,
,
],
@@ -716,6 +719,7 @@ var Texts = {
unmuted: "Unmuted",
"use-mouse-absolute-position": "Use mouse's absolute position",
"user-agent-profile": "User-Agent profile",
+ "vertical-scroll-sensitivity": "Vertical scroll sensitivity",
"vertical-sensitivity": "Vertical sensitivity",
"vibration-intensity": "Vibration intensity",
"vibration-status": "Vibration",
@@ -1398,6 +1402,8 @@ var PrefKey;
PrefKey2["CONTROLLER_DEVICE_VIBRATION"] = "controller_device_vibration";
PrefKey2["CONTROLLER_VIBRATION_INTENSITY"] = "controller_vibration_intensity";
PrefKey2["NATIVE_MKB_ENABLED"] = "native_mkb_enabled";
+ PrefKey2["NATIVE_MKB_SCROLL_HORIZONTAL_SENSITIVITY"] = "native_mkb_scroll_x_sensitivity";
+ PrefKey2["NATIVE_MKB_SCROLL_VERTICAL_SENSITIVITY"] = "native_mkb_scroll_y_sensitivity";
PrefKey2["MKB_ENABLED"] = "mkb_enabled";
PrefKey2["MKB_HIDE_IDLE_CURSOR"] = "mkb_hide_idle_cursor";
PrefKey2["MKB_ABSOLUTE_MOUSE"] = "mkb_absolute_mouse";
@@ -1662,7 +1668,6 @@ class Preferences {
} else {
return (value / 1024000).toFixed(1) + " Mb/s";
}
- return null;
}
},
migrate: function(savedPrefs, value) {
@@ -1765,6 +1770,40 @@ class Preferences {
}
}
},
+ [PrefKey.NATIVE_MKB_SCROLL_HORIZONTAL_SENSITIVITY]: {
+ label: t("horizontal-scroll-sensitivity"),
+ type: SettingElementType.NUMBER_STEPPER,
+ default: 0,
+ min: 0,
+ max: 1e4,
+ steps: 10,
+ params: {
+ exactTicks: 2000,
+ customTextValue: (value) => {
+ if (!value) {
+ return t("default");
+ }
+ return (value / 100).toFixed(1) + "x";
+ }
+ }
+ },
+ [PrefKey.NATIVE_MKB_SCROLL_VERTICAL_SENSITIVITY]: {
+ label: t("vertical-scroll-sensitivity"),
+ type: SettingElementType.NUMBER_STEPPER,
+ default: 0,
+ min: 0,
+ max: 1e4,
+ steps: 10,
+ params: {
+ exactTicks: 2000,
+ customTextValue: (value) => {
+ if (!value) {
+ return t("default");
+ }
+ return (value / 100).toFixed(1) + "x";
+ }
+ }
+ },
[PrefKey.MKB_DEFAULT_PRESET_ID]: {
default: 0
},
@@ -2338,11 +2377,8 @@ var display_default = "\n";
// src/assets/svg/new.svg
var new_default = "\n";
@@ -2371,6 +2407,9 @@ var touch_control_enable_default = "\n";
+
// src/assets/svg/caret-left.svg
var caret_left_default = "\n";
@@ -2412,14 +2451,14 @@ var BxIcon = {
CONTROLLER: controller_default,
DISPLAY: display_default,
HOME: home_default,
- MOUSE: mouse_default,
- MOUSE_SETTINGS: mouse_settings_default,
+ NATIVE_MKB: native_mkb_default,
NEW: new_default,
COPY: copy_default,
TRASH: trash_default,
CURSOR_TEXT: cursor_text_default,
QUESTION: question_default,
REFRESH: refresh_default,
+ VIRTUAL_CONTROLLER: virtual_controller_default,
REMOTE_PLAY: remote_play_default,
CARET_LEFT: caret_left_default,
CARET_RIGHT: caret_right_default,
@@ -3067,6 +3106,8 @@ class NativeMkbHandler extends MkbHandler {
#mouseButtonsPressed = 0;
#mouseWheelX = 0;
#mouseWheelY = 0;
+ #mouseVerticalMultiply = 0;
+ #mouseHorizontalMultiply = 0;
#inputSink;
#$message;
static getInstance() {
@@ -3156,6 +3197,8 @@ class NativeMkbHandler extends MkbHandler {
} catch (e) {
Toast.show("Cannot enable Mouse & Keyboard feature");
}
+ this.#mouseVerticalMultiply = getPref(PrefKey.NATIVE_MKB_SCROLL_VERTICAL_SENSITIVITY);
+ this.#mouseHorizontalMultiply = getPref(PrefKey.NATIVE_MKB_SCROLL_HORIZONTAL_SENSITIVITY);
window.addEventListener("keyup", this);
window.addEventListener(BxEvent.XCLOUD_DIALOG_SHOWN, this);
window.addEventListener(BxEvent.POINTER_LOCK_REQUESTED, this);
@@ -3240,8 +3283,14 @@ class NativeMkbHandler extends MkbHandler {
}
handleMouseWheel(data) {
const { vertical, horizontal } = data;
- this.#mouseWheelX = horizontal * 50;
- this.#mouseWheelY = vertical * 50;
+ this.#mouseWheelX = horizontal;
+ if (this.#mouseHorizontalMultiply && this.#mouseHorizontalMultiply !== 1) {
+ this.#mouseWheelX *= this.#mouseHorizontalMultiply;
+ }
+ this.#mouseWheelY = vertical;
+ if (this.#mouseVerticalMultiply && this.#mouseVerticalMultiply !== 1) {
+ this.#mouseWheelY *= this.#mouseVerticalMultiply;
+ }
this.#sendMouseInput({
X: 0,
Y: 0,
@@ -3251,6 +3300,12 @@ class NativeMkbHandler extends MkbHandler {
});
return true;
}
+ setVerticalScrollMultiplier(vertical) {
+ this.#mouseVerticalMultiply = vertical;
+ }
+ setHorizontalScrollMultiplier(horizontal) {
+ this.#mouseHorizontalMultiply = horizontal;
+ }
waitForMouseData(enabled) {
}
isEnabled() {
@@ -3365,7 +3420,7 @@ class PointerLockMouseDataProvider extends MouseDataProvider {
class EmulatedMkbHandler extends MkbHandler {
static #instance;
- static get INSTANCE() {
+ static getInstance() {
if (!EmulatedMkbHandler.#instance) {
EmulatedMkbHandler.#instance = new EmulatedMkbHandler;
}
@@ -3640,7 +3695,6 @@ class EmulatedMkbHandler extends MkbHandler {
this.waitForMouseData(false);
}
}), createButton({
- icon: BxIcon.MOUSE_SETTINGS,
label: t("edit"),
onClick: (e) => {
e.preventDefault();
@@ -3774,7 +3828,7 @@ class EmulatedMkbHandler extends MkbHandler {
}
} else if (getPref(PrefKey.MKB_ENABLED) && (AppInterface || !UserAgent.isMobile())) {
BxLogger.info(LOG_TAG2, "Emulate MKB");
- EmulatedMkbHandler.INSTANCE.init();
+ EmulatedMkbHandler.getInstance().init();
}
});
}
@@ -4653,7 +4707,7 @@ class MkbRemapper {
this.#STATE.currentPresetId = parseInt(Object.keys(presets)[0]);
defaultPresetId = this.#STATE.currentPresetId;
setPref(PrefKey.MKB_DEFAULT_PRESET_ID, defaultPresetId);
- EmulatedMkbHandler.INSTANCE.refreshPresetData();
+ EmulatedMkbHandler.getInstance().refreshPresetData();
} else {
defaultPresetId = getPref(PrefKey.MKB_DEFAULT_PRESET_ID);
}
@@ -4809,7 +4863,7 @@ class MkbRemapper {
style: ButtonStyle.PRIMARY,
onClick: (e) => {
setPref(PrefKey.MKB_DEFAULT_PRESET_ID, this.#STATE.currentPresetId);
- EmulatedMkbHandler.INSTANCE.refreshPresetData();
+ EmulatedMkbHandler.getInstance().refreshPresetData();
this.#refresh();
}
})), CE("div", {}, createButton({
@@ -4827,7 +4881,7 @@ class MkbRemapper {
updatedPreset.data = this.#STATE.editingPresetData;
LocalDb.INSTANCE.updatePreset(updatedPreset).then((id2) => {
if (id2 === getPref(PrefKey.MKB_DEFAULT_PRESET_ID)) {
- EmulatedMkbHandler.INSTANCE.refreshPresetData();
+ EmulatedMkbHandler.getInstance().refreshPresetData();
}
this.#toggleEditing(false);
this.#refresh();
@@ -5228,18 +5282,6 @@ var getVideoPlayerFilterStyle = function() {
var setupStreamSettingsDialog = function() {
const isSafari = UserAgent.isSafari();
const SETTINGS_UI = [
- getPref(PrefKey.MKB_ENABLED) && {
- icon: BxIcon.MOUSE,
- group: "mkb",
- items: [
- {
- group: "mkb",
- label: t("virtual-controller"),
- help_url: "https://better-xcloud.github.io/mouse-and-keyboard/",
- content: MkbRemapper.INSTANCE.render()
- }
- ]
- },
{
icon: BxIcon.DISPLAY,
group: "stream",
@@ -5375,6 +5417,42 @@ var setupStreamSettingsDialog = function() {
}
]
},
+ getPref(PrefKey.MKB_ENABLED) && {
+ icon: BxIcon.VIRTUAL_CONTROLLER,
+ group: "mkb",
+ items: [
+ {
+ group: "mkb",
+ label: t("virtual-controller"),
+ help_url: "https://better-xcloud.github.io/mouse-and-keyboard/",
+ content: MkbRemapper.INSTANCE.render()
+ }
+ ]
+ },
+ AppInterface && getPref(PrefKey.NATIVE_MKB_ENABLED) === "on" && {
+ icon: BxIcon.NATIVE_MKB,
+ group: "native-mkb",
+ items: [
+ {
+ group: "native-mkb",
+ label: t("native-mkb"),
+ items: [
+ {
+ pref: PrefKey.NATIVE_MKB_SCROLL_VERTICAL_SENSITIVITY,
+ onChange: (e, value) => {
+ NativeMkbHandler.getInstance().setVerticalScrollMultiplier(value / 100);
+ }
+ },
+ {
+ pref: PrefKey.NATIVE_MKB_SCROLL_HORIZONTAL_SENSITIVITY,
+ onChange: (e, value) => {
+ NativeMkbHandler.getInstance().setHorizontalScrollMultiplier(value / 100);
+ }
+ }
+ ]
+ }
+ ]
+ },
{
icon: BxIcon.COMMAND,
group: "shortcuts",
@@ -9385,12 +9463,12 @@ var unload = function() {
if (!STATES.isPlaying) {
return;
}
+ EmulatedMkbHandler.getInstance().destroy();
+ NativeMkbHandler.getInstance().destroy();
STATES.isPlaying = false;
STATES.currentStream = {};
window.BX_EXPOSED.shouldShowSensorControls = false;
window.BX_EXPOSED.stopTakRendering = false;
- EmulatedMkbHandler.INSTANCE.destroy();
- NativeMkbHandler.getInstance().destroy();
const $streamSettingsDialog = document.querySelector(".bx-stream-settings-dialog");
if ($streamSettingsDialog) {
$streamSettingsDialog.classList.add("bx-gone");
@@ -9578,7 +9656,9 @@ window.addEventListener(BxEvent.STREAM_ERROR_PAGE, (e) => {
BxEvent.dispatch(window, BxEvent.STREAM_STOPPED);
});
window.addEventListener(BxEvent.STREAM_STOPPED, unload);
-window.addEventListener("beforeunload", unload);
+window.addEventListener("pagehide", (e) => {
+ BxEvent.dispatch(window, BxEvent.STREAM_STOPPED);
+});
window.addEventListener(BxEvent.CAPTURE_SCREENSHOT, (e) => {
Screenshot.takeScreenshot();
});