Commit Graph
251 Commits
Author SHA1 Message Date
Henrik Rydgård 4d26021a9b More round stuff 2026-10-26 23:08:25 +01:00
Henrik Rydgård 4cb7ddb50c More misc UI polish 2026-10-26 12:10:10 +01:00
Henrik RydgårdandClaude Opus 5.5 0ce79d4d7a Pause screen: Update the save state slots when a save finishes writing
Saves are written on a worker thread, so a state saved just before opening the pause
menu may not be on disk yet when the slots are listed, and the slot stayed empty.
Post SAVESTATE_SLOT_SAVED when a slot save is written, and recreate the pause
screen's views on it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 11:49:44 +01:00
Henrik Rydgård 965b07c527 A lot more round corner fixes and layout fixes. 2026-10-25 10:28:40 +01:00
Henrik RydgårdandClaude Opus 5.5 b54056685e UI: Space ChoiceGroups from their container instead of their own margins
ChoiceGroups no longer have hardcoded margins. A new ChoiceGroupList holds them,
with padding and spacing that give the same look as before. Settings tabs, developer
tools, the two-pane settings columns, the pause menu and the rest put their groups in
one, and a few screens adjust its padding and spacing to their layout.

Also add the two groups in the remote disc streaming settings that were created but
never added, and make the settings search look inside groups: it only checked a tab's
direct children, so with ChoiceGroups a filter hid everything.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-24 14:01:58 +02:00
Henrik RydgårdandClaude Opus 5.5 4797f1381c UI: Use ChoiceGroup on the pause menu and the firmware screen's actions
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-24 01:52:34 +02:00
Henrik RydgårdandClaude Opus 5.5 0eeaeef610 Pause: Don't offer Load State on a screenshot in hardcore mode
The slot list already hides it. From the screenshot view, the load was
refused, but the pause menu still closed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-22 10:55:31 +02:00
Henrik RydgårdandClaude Opus 5.5 7d2663bf73 VSH: Insert and eject UMDs from the pause screen
While the XMB is running, the pause screen offers "Insert UMD" with the
drive empty, opening the Switch UMD game picker, and "Eject UMD" with a disc
in. The XMB notices the change through its drive callback, as it does over
the debugger's game.umd.insert/eject. Games keep "Switch UMD".

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-21 17:32:43 +02:00
Henrik RydgårdandClaude Opus 5.5 7e4127ae69 Pause menu: Don't close on a state load until the state is in place
Loading a state from the pause menu closed it right away, and the game
ran a few frames from where it was (seen and heard) before the state
was applied. Now savestate operations run while the game is paused under
the menu, and the menu closes once the load (or rewind, or load undo) is
done. Rewind snapshots aren't taken while paused.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-19 20:42:14 +02:00
Henrik RydgårdandClaude Opus 5.5 ea1ea14042 Pause screen: Ignore the pause key while another screen is on top
- Fixes #22622

Escape is both the UI back key and the default pause key. The pause
screen listens to the control mapper, which UI screens pass keyboard
input to, so Escape in Settings closed Settings and the pause screen
under it at once, dropping straight back into the game. EmuScreen
already checks IsOnTop() for the same reason.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 12:36:03 +02:00
Henrik RydgårdandClaude Opus 4.8 ffc0a274a6 Achievements: Use a 256-byte rich presence buffer to avoid an rcheevos over-read
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-01 10:26:00 -06:00
Henrik Rydgård 202b78d95b AI-generated translation strings 2026-09-14 10:59:38 -06:00
lain 78a00399ab Allow to define and modify custom names for saved states 2026-09-12 13:58:20 -06:00
Henrik RydgårdandClaude Opus 5 4132c185f4 GameInfoCache: Synchronize the rest of the worker's writes
The work item wrote title, id, id_version, region, errorString, hasConfig and
gameSizeUncompressed with no lock held, while the main thread reads them under
info->lock. title is the sharp one - an unsynchronized std::string write against
a locked read in GetTitle()/GetDBTitle() is a real data race, not just a stale
read. SetTitle() already existed and was used in exactly one of the six places.

The two expensive calls (HasGameConfig, which hits the file system, and
GetSizeUncompressedInBytes) stay outside the lock - the main thread takes it
every frame, so blocking on I/O under it would show up as UI stutter.

PurgeType read hasFlags/fileType/pendingFlags under mapLock_ only, racing the
worker's MarkReadyNoLock. It also erased entries without dropping their
textures, unlike Clear() - so a work item that finished just before PurgeType
took the lock could be left holding the last reference, and ~GameInfo would
then release GPU textures on a worker thread.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FzzCUp8y1ahgVueb1Cq92Y
2026-08-29 00:05:42 +02:00
Henrik Rydgård 63ef2a7498 Hide savestate controls if you are running a frame dump 2026-08-09 19:03:08 +02:00
Henrik Rydgård 7219cd2f5a Split off ScreenManager from Screen.cpp 2026-08-07 14:30:36 +02:00
Henrik Rydgård 2c73aead45 Minor code cleanup on pause screen 2026-08-07 08:49:29 +02:00
Henrik Rydgård ecce9baffa Fix some pause screen issues 2026-07-30 18:44:44 +02:00
Henrik Rydgård 9fb0973852 Unrelated UI fix 2026-07-18 11:57:48 +02:00
Henrik Rydgård 497baecc9e Correct OnVkey locking on PauseScreen as well 2026-07-12 11:31:29 +02:00
Henrik Rydgård 48068384fe Add ugly hack to prevent double-trigger of ESC to close the pause screen 2026-06-28 12:21:51 +02:00
Henrik Rydgård 02e9deb232 Fix some input behavior that got lost in the previous commits. 2026-06-24 21:48:44 +02:00
Henrik Rydgård 02aaa3b2b9 Don't have pauseTrigger as an output parameter from ControlMapper::Key() 2026-06-16 10:57:52 +02:00
Henrik Rydgård 6d98293be9 Hide orientation controls on large Android 17 devices, since they won't work. 2026-06-15 10:37:58 +02:00
Henrik Rydgård 78a6bd7157 Add DevMenu to the three dots menu on the pause screen 2026-06-05 17:19:06 +02:00
Henrik Rydgård 9f5d28ca6e Fix toggling pause with the bound pause key 2026-06-03 18:49:13 +02:00
Eloren1 109d1caa50 Separate TriggerFinish from parent result 2026-05-31 22:05:53 +03:00
Eloren1 938029cd6a Add screenshots + extract LoadStateConfirmScreen 2026-05-31 21:55:06 +03:00
Eloren1 7734c5f8f5 Call TriggerFinish on next frame outside popup 2026-05-31 20:27:07 +03:00
Eloren1 23aef44ae1 UI: Add load state confirmation option 2026-05-31 19:32:41 +03:00
Henrik Rydgård 231aefe476 Code cleanup for save state notification, add metadata field 2026-05-19 11:07:07 +02:00
Henrik Rydgård 6eb0b3fd51 Fix an issue with Exit icon not showing up in MessagePopup 2026-05-13 11:04:03 +02:00
Henrik Rydgård e0a5a3e2bf iOS: Add basic deep link support.
Fixes #21577
2026-04-28 22:17:24 +02:00
Henrik Rydgård 9793172eba More UI refinements 2026-04-07 20:52:38 -06:00
Henrik Rydgård 9cb9e3ad9b Pause screen UI fixes, add link to relay server status 2026-04-06 13:29:42 -06:00
Henrik Rydgård cfc5d74602 Some progress with server status UI 2026-03-30 11:34:19 -06:00
Henrik Rydgård 179aaa06cc Fix accidentally missing undo button on the savestate popup. Make sure the timestamp updates, too. 2026-03-13 20:14:21 +01:00
Henrik Rydgård f2ebcf42cb On the pause screen, ask for confirmation when creating configs. Too easy to slip and do by accident. 2026-03-12 15:41:24 +01:00
Henrik Rydgård cf9ee07b8e Adhoc: Forgot that we have to load the server list in-game to check the connection mode 2026-03-09 00:44:56 +01:00
Henrik Rydgård 892ef99daa Misc cleanups and fixes 2026-03-04 14:41:59 +01:00
Henrik Rydgård 52ec01994d Add icons to the buttons on the save state popup. Flip the undo buttons to match the regular buttons. 2026-02-28 11:40:55 +01:00
Henrik Rydgård 8eeb64c9dc Fix a bug in gridlayout column count computation, fix layout problem on savestate popups. 2026-02-25 14:28:57 +01:00
Henrik Rydgård f13d339ed3 Set the CRC banner on the game screen to fit contents, instead of the screen.
Also make sure it's not visible when it shouldn't be
2026-02-25 00:52:25 +01:00
Henrik Rydgård 7ea2265ff3 Make the undo save/load buttons not scroll with the savestate list 2026-02-24 00:56:45 +01:00
Henrik Rydgård 22f2e69d0a Integrate the exit reminder (you haven't saved..) in warnings from setting that require restart
Part of #21223
2026-02-24 00:56:45 +01:00
Henrik Rydgård e0ed2bfd41 Additional pause screen flicker fix 2026-02-19 16:17:03 +01:00
Henrik Rydgård f359c1b3b1 More flicker elimination on pause screen 2026-02-19 00:15:49 +01:00
Henrik Rydgård e1c80373d6 Fix minor flicker when closing menus on the pause screen 2026-02-18 15:40:55 +01:00
Nab 0b51d74bb2 Add icon to Create new shortcut option 2026-02-14 17:40:05 +00:00
Henrik Rydgård d446d1c26c Have the pausescreen listen to the control mapper, for the pause key 2026-02-12 23:43:49 +01:00