diff --git a/dist/better-xcloud.user.js b/dist/better-xcloud.user.js index db99afa..8c0ced2 100644 --- a/dist/better-xcloud.user.js +++ b/dist/better-xcloud.user.js @@ -2299,7 +2299,7 @@ class KeyHelper { } // src/assets/svg/command.svg -var command_default = "\n \n \n\n"; +var command_default = "\n \n \n\n"; // src/assets/svg/controller.svg var controller_default = "\n \n\n"; @@ -2313,6 +2313,9 @@ var cursor_text_default = "\n \n\n"; // src/assets/svg/refresh.svg -var refresh_default = "\n \n\n"; +var refresh_default = "\n \n\n"; // src/assets/svg/remote-play.svg var remote_play_default = "\n \n\n"; @@ -2341,43 +2344,43 @@ var stream_stats_default = "\n \n \n \n \n\n"; +var touch_control_enable_default = "\n \n \n \n \n\n"; // src/assets/svg/touch-control-disable.svg -var touch_control_disable_default = "\n \n \n \n \n \n \n \n\n"; +var touch_control_disable_default = "\n \n \n \n \n \n \n \n\n"; // src/assets/svg/caret-left.svg -var caret_left_default = "\n \n\n"; +var caret_left_default = "\n \n\n"; // src/assets/svg/caret-right.svg -var caret_right_default = "\n \n\n"; +var caret_right_default = "\n \n\n"; // src/assets/svg/camera.svg -var camera_default = "\n \n \n \n \n\n"; +var camera_default = "\n \n \n \n \n\n"; // src/assets/svg/microphone.svg -var microphone_default = "\n \n\n"; +var microphone_default = "\n \n\n"; // src/assets/svg/microphone-slash.svg -var microphone_slash_default = "\n \n \n\n"; +var microphone_slash_default = "\n \n \n\n"; // src/assets/svg/battery-full.svg -var battery_full_default = "\n \n\n"; +var battery_full_default = "\n \n\n"; // src/assets/svg/clock.svg -var clock_default = "\n \n \n \n \n\n"; +var clock_default = "\n \n \n \n \n\n"; // src/assets/svg/cloud.svg -var cloud_default = "\n \n\n"; +var cloud_default = "\n \n\n"; // src/assets/svg/download.svg -var download_default = "\n \n \n\n"; +var download_default = "\n \n \n\n"; // src/assets/svg/speaker-high.svg -var speaker_high_default = "\n \n \n\n"; +var speaker_high_default = "\n \n \n\n"; // src/assets/svg/upload.svg -var upload_default = "\n \n \n\n"; +var upload_default = "\n \n \n\n"; // src/utils/bx-icon.ts var BxIcon = { @@ -2386,6 +2389,7 @@ var BxIcon = { COMMAND: command_default, CONTROLLER: controller_default, DISPLAY: display_default, + HOME: home_default, MOUSE: mouse_default, MOUSE_SETTINGS: mouse_settings_default, NEW: new_default, @@ -2699,13 +2703,14 @@ class StreamBadges { }); window.addEventListener(BxEvent.XCLOUD_GUIDE_SHOWN, async (e) => { const where = e.where; - if (where === XcloudGuideWhere.HOME && STATES.isPlaying) { - const $btnQuit = document.querySelector("#gamepass-dialog-root a[class*=QuitGameButton]"); - if (!$btnQuit) { - return; - } - $btnQuit.insertAdjacentElement("beforebegin", await StreamBadges.getInstance().render()); + if (where !== XcloudGuideWhere.HOME || !STATES.isPlaying) { + return; } + const $btnQuit = document.querySelector("#gamepass-dialog-root a[class*=QuitGameButton]"); + if (!$btnQuit) { + return; + } + $btnQuit.insertAdjacentElement("beforebegin", await StreamBadges.getInstance().render()); }); } } @@ -2747,6 +2752,17 @@ var cloneStreamHudButton = function($orgButton, label, svgIcon) { $orgSvg.replaceWith($svg); return $container; }; +var cloneCloseButton = function($$btnOrg, icon, className, onChange) { + const $btn = $$btnOrg.cloneNode(true); + const $svg = createSvgIcon(icon); + $svg.setAttribute("class", $btn.firstElementChild.getAttribute("class") || ""); + $svg.style.fill = "none"; + $btn.classList.add(className); + $btn.removeChild($btn.firstElementChild); + $btn.appendChild($svg); + $btn.addEventListener("click", onChange); + return $btn; +}; function injectStreamMenuButtons() { const $screen = document.querySelector("#PageContent section[class*=PureScreens]"); if (!$screen) { @@ -2797,20 +2813,17 @@ function injectStreamMenuButtons() { if (!$btnCloseHud) { return; } - $btnCloseHud && $btnCloseHud.addEventListener("click", (e) => { + $btnCloseHud.addEventListener("click", (e) => { $settingsDialog.classList.add("bx-gone"); }); - const $btnRefresh = $btnCloseHud.cloneNode(true); - const $svgRefresh = createSvgIcon(BxIcon.REFRESH); - $svgRefresh.setAttribute("class", $btnRefresh.firstElementChild.getAttribute("class") || ""); - $svgRefresh.style.fill = "none"; - $btnRefresh.classList.add("bx-stream-refresh-button"); - $btnRefresh.removeChild($btnRefresh.firstElementChild); - $btnRefresh.appendChild($svgRefresh); - $btnRefresh.addEventListener("click", (e) => { + const $btnRefresh = cloneCloseButton($btnCloseHud, BxIcon.REFRESH, "bx-stream-refresh-button", () => { confirm(t("confirm-reload-stream")) && window.location.reload(); }); + const $btnHome = cloneCloseButton($btnCloseHud, BxIcon.HOME, "bx-stream-home-button", () => { + confirm(t("back-to-home-confirm")) && (window.location.href = window.location.href.substring(0, 31)); + }); $btnCloseHud.insertAdjacentElement("afterend", $btnRefresh); + $btnRefresh.insertAdjacentElement("afterend", $btnHome); const $menu = document.querySelector("div[class*=StreamMenu-module__menuContainer] > div[class*=Menu-module]"); $menu?.appendChild(await StreamBadges.getInstance().render()); hideSettingsFunc(); @@ -2896,6 +2909,36 @@ function showStreamSettings(tabId) { $parent.addEventListener("click", onClick); } } +function setupStreamUiEvents() { + window.addEventListener(BxEvent.XCLOUD_GUIDE_SHOWN, async (e) => { + const where = e.where; + if (where !== XcloudGuideWhere.HOME || !STATES.isPlaying) { + return; + } + const $btnQuit = document.querySelector("#gamepass-dialog-root a[class*=QuitGameButton]"); + if (!$btnQuit) { + return; + } + const $btnReload = createButton({ + label: t("reload-stream"), + style: ButtonStyle.FULL_WIDTH | ButtonStyle.FOCUSABLE, + onClick: (e2) => { + confirm(t("confirm-reload-stream")) && window.location.reload(); + } + }); + const $btnHome = createButton({ + label: t("back-to-home"), + style: ButtonStyle.FULL_WIDTH | ButtonStyle.FOCUSABLE, + onClick: (e2) => { + confirm(t("back-to-home-confirm")) && (window.location.href = window.location.href.substring(0, 31)); + } + }); + $btnQuit.insertAdjacentElement("afterend", $btnReload); + $btnReload.insertAdjacentElement("afterend", $btnHome); + const $btnXcloudHome = document.querySelector("#gamepass-dialog-root div[class^=HomeButtonWithDivider]"); + $btnXcloudHome && ($btnXcloudHome.style.display = "none"); + }); +} // src/modules/mkb/pointer-client.ts var LOG_TAG = "PointerClient"; @@ -6619,6 +6662,15 @@ body[data-media-type=default] .bx-stream-refresh-button { body[data-media-type=tv] .bx-stream-refresh-button { top: calc(var(--gds-focus-borderSize) + 80px) !important; } +.bx-stream-home-button { + top: calc(env(safe-area-inset-top, 0px) + 10px + 50px * 2) !important; +} +body[data-media-type=default] .bx-stream-home-button { + left: calc(env(safe-area-inset-left, 0px) + 12px) !important; +} +body[data-media-type=tv] .bx-stream-home-button { + top: calc(var(--gds-focus-borderSize) + 80px * 2) !important; +} div[data-testid=media-container] { display: flex; } @@ -6635,6 +6687,10 @@ div[data-testid=media-container].bx-taking-screenshot:before { align-self: center; background: #000; } +#gamepass-dialog-root div[class^=Guide-module__guide] .bx-button { + overflow: visible; + margin-bottom: 12px; +} @-moz-keyframes bx-anim-taking-screenshot { 0% { border: 0px solid rgba(255,255,255,0.502); @@ -6859,7 +6915,7 @@ div[class^=StreamMenu-module__container] .bx-badges { } #gamepass-dialog-root .bx-badges { position: fixed; - top: 140px; + top: 60px; left: 460px; max-width: 500px; } @@ -8944,6 +9000,7 @@ var main = function() { Toast.setup(); getPref(PrefKey.GAME_BAR_POSITION) !== "off" && GameBar.getInstance(); BX_FLAGS.PreloadUi && setupStreamUi(); + setupStreamUiEvents(); StreamBadges.setupEvents(); StreamStats.setupEvents(); MkbHandler.setupEvents();