Commit Graph
234 Commits
Author SHA1 Message Date
Henrik RydgårdandClaude Opus 5.5 0ed9c8542b Settings: Move the System tab's builder to UI/Settings/SystemPage.cpp
Like the other tabs, except that the screen keeps what the page edits that
isn't a config setting (the compatibility reports flag, which is written
back when the screen closes, and the Windows memstick checkboxes' state) in
a SystemPageState it passes in. The page's handlers move with it, as
functions taking the page host or that state.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-25 17:23:10 +01:00
Henrik RydgårdandClaude Opus 5.5 b570c96d68 Settings: Remove the unused memstick folder callback
Nothing calls CallbackMemstickFolder or sets pendingMemstickFolder_, which
are left over from an older way of changing the folder on Android.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-25 17:19:46 +01:00
Henrik RydgårdandClaude Opus 5.5 b91bd6af86 Settings: Build the settings screen from pages described as data
Each tab is now a SettingsPage: a list of items (headers, settings, buttons,
hints, links to other pages) that a function builds and views are created
from. Settings are added with page->Setting(&g_Config.x), which takes
the label, the kind of view, the range or choices, units, labels for special
values and the default from the config. The pages keep what depends on the
UI (which settings to show and when, enable rules, and behavior that needs the
screen), and reach the screen through the page's SettingsPageHost.

A page can link to other pages, which open on top of it in the same tab,
under a bar showing where you are, like Tools > Developer tools > Graphics,
where the earlier pages can be clicked to go back to them. The bar has back,
search and help buttons, and the back key also goes back a page (or out of a
search) before leaving the screen. Each page remembers its scroll position.
In portrait there's no tab strip: a page links to the tabs, and the bar shows
just the current page's title. Rotating keeps showing the same page. Moving
between pages only focuses an item when navigating with a keyboard or
controller.

The developer tools are now pages linked from the Tools tab, instead of a
screen of their own. The in-game developer menu and
--start-screen=developertools open the settings on that page. The toggles of
live state (the remote debugger and the MIPS tracer) show and change it
through functions, and pretending to be in-game for the notification tests is
a flag on the OSD. The memory map and memstick tests, only reachable from
commented-out code, are removed.

Search lists the matching settings from all tabs and the pages they link to,
grouped by where they are. Each result goes to the setting on its page,
scrolled to and highlighted (outlined, when picked with a mouse or touch), or
for a page, opens it. This replaces the search tab and the old filter that
hid the views that didn't match, and with them ShowSearchControls. Changing
tabs leaves the search.

The pages, the bar and search are in SettingsPagesDialogScreen, between the
tabbed dialog screen and the settings screen, so the other tabbed screens
keep plain tabs.

Other visible changes:
- Reset buttons that went to the wrong value now go to the real default: the
  touch control auto-hide delay (was 20 seconds instead of 8), the mouse
  wheel delay (1 ms, below its own range, instead of 80) and the UI size (0
  instead of -1 on desktop). The alternative speeds get a reset button.
- Units are shown on more sliders (frames, MHz, seconds, Hz), and popups no
  longer spell out what 0 means in the units, since the zero label does.
  Units of up to three characters (%, x, ms, MHz) aren't translated.
- The Android HW scaler hides the scales the display is too small for,
  instead of cutting the list short.
- Choices are translated in the setting's own section.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-25 15:26:58 +01:00
Henrik RydgårdandClaude Opus 5.5 71b38e58e6 Config: Store the alternative speeds in percent
The settings screen showed them in percent but they were stored as frame
rates out of 60, so the screen kept converted copies and wrote them back. Now
they're stored in percent under new ini keys (AltSpeedPercent,
AltSpeedPercent2, AnalogAltSpeedPercent), migrated from the old frame rate
keys like the audio volumes were, and converted to a frame rate where the
timing needs one.

Low percentages no longer round to a 0 fps limit, which meant unlimited.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-22 15:28:18 +02:00
Henrik Rydgård 57dc5bf956 Fix the enabled state of some settings hints 2026-10-22 10:59:44 +02:00
Henrik RydgårdandClaude Opus 5.5 9e6fdb5be7 Settings: Make the two nickname fields behave the same
The Networking copy showed a warning for the default name but didn't fill
in an empty infrastructure username; the System one did the reverse, and
didn't refresh the views. Both now use one helper that does both.

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 8fc75c0344 Settings: Write the alternative speeds back only when they're changed
The percentages were converted back to frame rates whenever any dialog
closed with OK. That overwrote the values Restore Defaults had just set,
and the integer rounding drifted unchanged values down (100 fps became 99
on any unrelated change). Restoring defaults also had the old reporting
choice written back on exit; it's now re-read too.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-22 10:55:30 +02:00
Henrik RydgårdandClaude Opus 5.5 7139aa6aaf Settings: Remove side effects from building the tabs
Building a settings tab should only create views, so that the tabs can
later be described as data and searched without being shown.

- Don't reset the MSAA level when the device has none. The GPU already
  falls back to no MSAA (UpdateMSAALevel), and the reset overwrote the
  setting, including per-game ones.
- Read the reporting state in the constructor. It was only read when the
  System tab was built, but always written back on exit, so leaving
  settings without opening System turned reporting off.
- Move the Windows memstick location probe (which writes a temp file next
  to the exe) out of the System tab, and keep the checkboxes' enabled
  state in members instead of poking at the views.
- Show the Android/UWP memstick path through a callback instead of a
  copy made at build time, and drop a USB path computation whose result
  was never used.
- Make the reliable-UDP checkbox follow the UDP setting directly instead
  of recreating all views when it changes.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-22 10:55:30 +02:00
Henrik RydgårdandClaude Opus 5.5 a361dfc490 Drop unused Config.h and SmallDataConvert.h includes
Config.h is edited about 100 times a year and each edit recompiled 198
files; now 172. SmallDataConvert.h pulls in arm_neon.h and was included by
headers that don't use it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 12:13:42 +02:00
Henrik Rydgård 77c28d7b5d Clean up quickchat setting code and translation strings 2026-03-18 08:58:50 +01:00
Henrik Rydgård 4af47ff7b2 Minor cleanup 2026-03-12 11:10:35 +01:00
Henrik Rydgård 5255d450bc Move the AdhocServerScreen to its own file, remove the "Toggle List" button 2026-02-26 17:17:42 +01:00
Katharine Chui b3b9e90403 expand adhoc server list
Add various data fields and logic to handle:
- automatic adhoc data mode handling
- future UI expension on server list
- future support for automatically downloaded/user provided server list
2026-02-18 19:22:38 +01:00
Henrik Rydgård 1a2e32d451 Fix some untranslatable strings, thanks TotalCaesar569 2026-02-18 18:39:44 +01:00
Henrik Rydgård 03a7df74fa Have two independent gesture control zones 2026-02-04 15:01:06 +01:00
Henrik Rydgård 9001f33d94 Minor cleanup 2026-02-04 00:48:50 +01:00
Henrik Rydgård 1363cb2282 Remove a bunch of member variables from GameSettingsScreen 2026-01-19 17:19:02 +01:00
Henrik Rydgård 1d2f846c66 Partial drive-by cleanup of quick chat code 2026-01-19 17:14:24 +01:00
Henrik Rydgård 18a67b82d2 Do the same with KeyInputFlags. Fix minor UI misalignments 2025-12-19 13:41:58 +01:00
Henrik Rydgård ed25b5e991 Add convenient UI on the pause screen for changing/locking the screen orientation 2025-11-26 11:14:37 +01:00
Henrik Rydgård b71ee0ba89 Fix some bugs around game-specific config load/save (#21033) 2025-11-24 14:05:23 +01:00
Henrik Rydgård 4f91d7a71a More layout work, more use of MessagePopupScreen instead of PromptScreen 2025-11-10 15:23:29 +01:00
Henrik Rydgård 0453fb5449 Move PopupScreen base class into PopupScreens.cpp/h 2025-11-10 10:26:38 +01:00
Henrik Rydgård 19f723d579 Notifications should obey insets 2025-10-29 14:22:17 +01:00
Henrik Rydgård e37c0cbef3 Introduce SimpleBaseDialogScreen, TabbedBaseDialogScreen's simpler cousin 2025-10-29 08:39:59 +01:00
Henrik Rydgård 243c784666 Use the common tabdialog class for GestureMappingScreen 2025-10-29 08:39:59 +01:00
Henrik Rydgård 2b9f2672bb UI screens header cleanup 2025-10-29 00:15:41 +01:00
Henrik Rydgård 7ffd72b32e Rename some screen classes 2025-10-29 00:02:43 +01:00
Henrik Rydgård 5b3c3bd189 Replace some functions with lambdas 2025-10-23 10:40:55 +02:00
Henrik Rydgård 58456ae950 Remove the UI::EventReturn return values. Makes editing the UI nicer. 2025-09-15 11:09:00 -06:00
Henrik Rydgård 60608b2b39 Allow customizing the proAdhoc server list by editing the ini 2025-08-15 16:35:25 +02:00
Henrik Rydgård 2dbb54667d IAP work 2025-05-25 11:22:04 +02:00
Henrik Rydgård 6035ef0652 Implement image file picker on iOS, various buildfixes 2025-05-19 20:41:16 +02:00
Henrik Rydgård 60a19016ae Split out DeveloperToolsScreen from GameSettingsScreen.cpp 2025-04-09 13:13:08 +02:00
Henrik Rydgård 77841801b9 Disallow running framedump tests while in-game. 2025-04-09 11:58:31 +02:00
Henrik Rydgård 01b06b76c9 Infrastructure username handling: Add separate username, pick Nickname as default if valid. 2025-01-07 17:43:02 +01:00
Henrik Rydgård a545d3074f Do some renaming, dedupe some strings (old commit resurrected), add an assert 2024-10-22 22:28:06 +02:00
Henrik Rydgård 4665196535 iOS app store: Hide the "Set memoery stick" option in developer tools
It's really not a good idea to change it.

In case someone does have a use case for it, we keep the option anyway,
but in developer tools, with a loud warning next to it.

Should help #18929 by reducing the number of people causing themselves trouble
with the option.
2024-09-26 21:17:00 +02:00
Nemoumbra ab7af0cc19 Minor cleanup, new UI button 2024-09-14 19:46:05 +03:00
Nemoumbra ff5877e993 Renamed the IR instruction, new UI button added 2024-09-14 19:46:05 +03:00
Nemoumbra e3b09bea59 Ported the MIPSLogger's UI + basic integration of MIPSTracer 2024-09-14 19:46:05 +03:00
Henrik Rydgård c5791764d8 Make the i18n T function use std::string_view
Buildfixes, crashfixes

One more

Android buildfix

Buildfix Qt
2024-02-12 18:44:39 +01:00
Henrik Rydgård ee62ffdb02 Audit our use of condition variables, fix some minor issues 2024-01-29 11:09:08 +01:00
Henrik Rydgård 3b3373dde6 Add some test code for file systems. Discovered that delete on scoped storage is always recursive! Dangerous. 2024-01-22 11:54:41 +01:00
Henrik Rydgård 558bcff368 Reorder some settings in System so the sub-categories make sense 2024-01-22 11:54:41 +01:00
Henrik Rydgård f77adec8af Unrelated, but return true to SYSPROP_HAS_KEYBOARD in SDL. 2024-01-20 11:23:58 +01:00
Henrik Rydgård 9253bf9cb5 Add a new screen for managing installed Adreno drivers 2024-01-17 10:51:08 +01:00
Henrik Rydgård 663ef40640 Move the new driver choice to Developer Tools 2023-12-14 16:34:55 +01:00
Dzmitry Dubrova a461800973 Implement custom driver loading for ARM64 Android devices 2023-12-14 08:53:03 +03:00
Henrik Rydgård 43e792fb71 Move RetroAchievements to the Tools tab. 2023-09-11 10:47:34 +02:00