WIP: feat(input): add mouse item wheels with local icons #616
No reviewers
Labels
No labels
area/accessibility
area/audio
area/input
area/install
area/menu
area/renderer
area/saves
area/upscaling
beanstalk: approved @ 1697603
beanstalk: approved @ 2c5a62e
beanstalk: approved @ 4fd82b7
beanstalk: approved @ 64d6d09
beanstalk: approved @ 6f91fae
beanstalk: approved @ 70a78f9
beanstalk: approved @ 8d361dc
beanstalk: approved @ 9d8356e
beanstalk: approved @ abf2227
beanstalk: approved @ d82f202
beanstalk: approved @ e5f1e40
beanstalk: approved @ ee8ab5f
ci: approved
good first issue
gpu/amd
gpu/igpu
gpu/intel
gpu/nvidia
help wanted
kind
bug
kind
chore
kind
docs
kind
feature
kind
performance
kind
question
needs measurements
platform/linux
platform/macos
platform/steam-deck
platform/windows
preview
priority
critical
priority
high
priority
low
regression
status
blocked
status
confirmed
status
duplicate
status
invalid
status
needs-info
status
wontfix
testing wanted
ci: approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot!616
Loading…
Reference in a new issue
No description provided.
Delete branch "TheDevil/Longshot:feat/mouse-item-wheels"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Type: feat · Risk: medium · Tested on: Windows renderer build and game-free fixtures · Needs: fresh gameplay and Linux validation
Why
Mouse selection should offer a radial item selector without changing controller selection. This replaces the wheel portion of #173 and depends on #613.
What changed
Opt-in Mouse item wheels uses Q/R and mouse direction, scroll pages and release to equip. Item art is extracted locally during the user's build; no game art is distributed. Controller selection remains native. Host callbacks preserve the full guest register context around selection calls. API advances 23 to 24.
This is stacked on #613. Review the wheel-only delta from parent
04fa541dc8to current headc14f4005de(original feature commit5eadb470); the upstream diff includes that parent until it lands.Measurements
Verdict: Windows renderer links and focused production-code/context/icon tests pass. No fresh gameplay performance claim.
Before: #613 @
92e8eba875After: wheel commit @
5eadb470Hardware: Windows x64, i7-14700F, 16 GB; GPU not exercised.
Scene: synthetic input, guest-context and icon fixtures; no game running.
Method: production-code fixtures and renderer-only build.
How to reproduce:
python -I -B tests/run_all.py --jobs 5; focused checkstest_pc_guest_call.py,test_pc_item_icons.py,test_pc_controls.py,test_fps_overlay_order.py,test_option_ids.py,test_audio_output_menu.py,test_stick_dead_zone.py.Full suite: 534 passed, 14 failed, 34 skipped. The 14 failures match main @
2b1d38c682(530 passed): test_appimage_player_build, test_cpm_discovery, test_crash_dialog, test_env_on, test_finish_output, test_lift_cleanup_error, test_linux_preflight, test_make_game_cache, test_oot_state_tap, test_readback_late, test_tested_configurations, test_vk_pgo, test_vram_budget_row, test_walk_key. Seven focused checks above pass; renderer links with zero failures.Baseline: the keyboard-controls parent #613 is the comparison because this wheel depends on its input API.
92e8eba85eadb470Flags and settings
item_wheels=0by default. Enable PC keyboard controls and Mouse item wheels to use it. No environment switch. Controller selection uses the original path. Turning the setting off restores the column selector for keyboard input.Testing
Tested: full game-free Windows suite, register-context preservation and invalid/null guest calls, synthetic local icon extraction, overlay ordering, option IDs, renderer compilation.
git diff --checkpasses.Not tested: fresh game build/runtime, physical devices, actual local art extraction from a game, Linux host/renderer; user's installed game remains untouched.
Must be tested:
Risks
Guest screen/layout assumptions, focus transitions and icon extraction can fail on unsupported game layouts. Input hooks validate before applying. Disable the wheel to restore native selector behavior.
Compatibility: API 24 requires rebuilding host and renderer together. Save/cache formats unchanged. Optional ini key defaults off. This PR excludes NR, the runtime bridge and the FPS cap.
Checklist
Everyone
type(scope): description) of the status line's type.main.python -I -B tests/run_all.pypasses (any failure that also fails onmainis named).third_party/untouched (a new folder with aPROVENANCE.mdinstead).When it applies
Assisted-by:trailer.docs/tested/fragment: pending; WIP.Upstream refresh
Current head:
c14f4005deaa2c1cb00e548bd3eb401321f03810. Main snapshot6c9edffeis incorporated by merge, preserving published history. 8 focused checks passed after the merge; zero failures/skips. Earlier full-suite measurements remain tied to their named feature commits above. The literal rebase checklist remains unticked because history was merged, not rewritten. Fresh game/Linux checks remain WIP.Updated the branch to include main @
6c9edffeby non-rewriting merge. Current headc14f4005de; 8 focused post-merge checks passed, 0 failed/skipped. Description preserves commit-specific full-suite results and remaining live/Linux validation. Still WIP.View command line instructions
Manual merge helper
Use this merge commit message when completing the merge manually.
Checkout
From your project repository, check out a new branch and test the changes.