Skip to content

feat(qt): implement the Game Mode redesign - #1120

Merged
zortos293 merged 7 commits into
devfrom
zortos293/game-mode-design-implementation
Oct 5, 2026
Merged

zortos293 merged 7 commits into
devfrom
zortos293/game-mode-design-implementation

Conversation

@zortos293

@zortos293 zortos293 commented Oct 5, 2026 •

Copy link
Copy Markdown
Collaborator

Implements the approved Game Mode Paper design in the existing Qt/native application. Opus 5.5 High handled the UI implementation; Astra handled integration, input/state wiring, and verification.

Console UI

  • Redesign Home, Library, Store, game details, all eight settings sections, and supporting account, capture, diagnostics, theme, sign-in, and update screens. Store marks use the existing assets and actual catalog variants. Friends becomes Coming soon while local controller setup remains available.
  • Replace console dropdowns with inline selectors and controller-sized edge sheets. Warnings and destructive confirmations use the same sidebar design, safe default focus, and scrollable long content. Remove the three unused old picker/badge components.
  • Unify queue, connection, error, conflict, reconnect, and session-report presentation. The guide uses a compact panel and nested controls/help pages instead of navigating away from the stream.

Game Mode entry

  • Implement the approved "Into the cloud" animation as a vector cut-out over the live Qt screen, not video playback. Cold entry runs once at startup; desktop-to-console entry uses a shorter reveal. Reduced motion and unsupported curve renderers use an even crossfade.
  • Preserve the actual destination, bypass active/queued/recovering sessions, and keep mode selection and failed-save rollback synchronous. Skip input is consumed until keyboard, pointer, and physical controller state return to neutral.
  • Add original procedural air and pluck cues with a persisted, default-on UI sounds toggle in console Themes and desktop Interface settings. Playback waits for loaded settings, respects system mute, and stops on skip/cancel. The standard-library generator reproduces both WAV assets.

Input and lifecycle safety

The native video item remains alive beneath overlays. Console gameplay input waits for first-frame metadata, statistics stay nonblocking, and queue polling cannot replace an exit confirmation. A required ad's existing view stays underneath the confirmation.

Confirmations activate the focused action rather than treating Enter as unconditional confirmation. Root warnings block background navigation and reclaim focus from deferred page callbacks. Store chips survive metadata refresh without dropping focus or substituting another store for an invalid selection. Dismissing update notices and settings sheets restores usable controller focus.

Guide screenshots dismiss the guide and wait for rendered frames before compositor capture. This remains a window-region capture, not a decoded-frame export. Screenshot callbacks and modal HDR layers are active only while needed. Shared reveal motion now has a standalone, interruptible animation owner with working reduced-motion transitions.

Desktop-specific layouts are unchanged apart from the UI-sounds toggle. Native streaming protocols are unchanged. Shared component contracts are preserved. Only locales/en.json receives translation-source additions.

Verification

  • Built the application and Qt test targets on Linux with Qt 6.8.3 and SDL 3.2.20.
  • 424/424 CTest entries passed on the final tree, including normal/reduced motion, windowed/fullscreen session and confirmation tests, new console control tests, and focus/metadata regressions.
  • npm run locales:check, 213 Python contract tests, QML syntax checks, Rust formatting, and git diff --check passed. The new core sound-preference persistence/default/reset test passed.
  • Built and packaged locally on Windows with Qt 6.11.2. Seven clean-SDK-path package smoke flows and four focused entry/controller CTest targets passed. Virtual-controller tests were isolated from attached physical devices.
  • Captured the running Qt entry with actual audio output. The reduced-motion rectangle regression failed against the previous component and passed after the fix.
  • Captured 28 real-app smoke screens, including 1280×800, 960×540, light-theme, and desktop regression samples. Also inspected X11/Vulkan-rendered artwork and exercised the picker, Recording page, safe Enter, and explicit quit action interactively.
  • The forced-background-focus startup regression failed before the fix and passed afterward. An independent Opus review was completed and its confirmed findings were fixed.

The screenshots and recording below use account-free fixtures, not a live session. Live GFN gameplay, physical controllers, native HDR output, and Wayland screenshot capture were not exercised. Reproduction commands and component contracts are in docs/qt-game-mode-design.md.

Game Mode settings in the running Qt app

Sidebar confirmation with safe focus and the parked Home selection

Watch the Qt picker, settings navigation, and safe confirmation interaction

Watch the running Qt cloud entry with startup sound

Open in Capy

@coderabbitai

coderabbitai Bot commented Oct 5, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 004fd40f-431a-41c8-a4cd-264405a27aec

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@blacksmith-sh

This comment has been minimized.

@capy-ai

capy-ai Bot commented Oct 5, 2026

Copy link
Copy Markdown
Contributor

Fixed the Linux/macOS CI failure in 6af0ab6. Odd-height font metrics exposed a half-pixel clock-centering error; a focused regression reproduced the failure locally before the layout fix. The original centering assertion is unchanged.

The standalone layout harness now bundles the actual mono fonts and navigation icons and supplies its AppController context. The new console-control tests are also included in the CI unit target and Windows runtime dependencies. All 33 CI-unit entries pass locally; platform CI and the complete Qt suite are rerunning.

@capy-ai

capy-ai Bot commented Oct 5, 2026

Copy link
Copy Markdown
Contributor

Follow-up controller fixes are in 76fd5fa:

  • Cross on Library search opens the keyboard instead of the first game; Square/Triangle actions stay scoped to the game grid.
  • Home tile resizing retains the property menu and game selection; Circle dismisses it without navigating away. Focus halos now have unclipped list gutters.
  • Settings rows and section delegates retain identity through updates, fixing codec flicker, FPS focus resets, and D-pad section navigation. Sky uses a fixed palette value, and resolution choices now share desktop's source, including custom saved resolutions.
  • Held digital D-pad directions repeat with bounded timing and stop on release, suspension, and input handoff. Activation buttons do not repeat.
  • Idle PS/Ctrl+G opens shell quick settings rather than a cached game's session guide. Connected-controller prompts remain controller prompts after mouse use; keyboard-only HUD shortcuts are hidden for pads.

Validation: 420 Qt checks passed, the Python workflow/packaging contracts and localization checks passed, and the new Windows x64 Release package passed six smoke flows on the user's PC. The four virtual D-pad direction checks and the Windows search/menu/sheet regression runners passed there too.

2a56407 only aligns the standalone test hosts with the app's Basic control style and waits for the newly opened checkbox sheet to render before clicking it on Qt 6.11.2. Assertions remain intact. No live cloud gameplay validation was performed.

@zortos293
zortos293 merged commit 012cac1 into dev Oct 5, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant