Commit Graph
180 Commits
Author SHA1 Message Date
Henrik RydgårdandClaude Opus 5.5 f364f297f1 Touch controls: Use the full width when the side insets are only for a top corner
On the iPhone Duo's cover screen, the camera sits in a box in the top right
corner, which gives a side inset down the whole right edge in portrait. The
controls are far below it, so they lose width for nothing. iOS 27.1 reports
the box as an occlusion region, and from that we report how far down the side
insets are needed (SYSPROP_DISPLAY_SIDE_INSETS_BOTTOM). When that's within the
top third, the game screen and the touch layout editor skip the side insets.
The rest of the UI, including the FPS counter, still keeps them.

The regions can show up after the size and insets have settled, so the insets
are now recomputed on every layout, and a screen recreates its views when its
layout mode changes, since the touch controls are placed for the bounds they
were created in.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 09:39:49 +01:00
Henrik RydgårdandClaude Opus 5.5 0da3129a69 Touch controls: Add a HOME button, and list HOME with the standard PSP controls
POPS (the PS1 emulator) uses HOME for its menu. The touch button is hidden by
default, and HOME still has no default key mapping. It's also appended to the
custom button and gesture key lists.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-24 14:14:17 +02:00
Henrik RydgårdandClaude Opus 5.5 fbf101de36 Touch controls: Rotate with the current orientation's display layout
The D-pad and sticks always used the landscape layout's rotation settings,
while the screen and physical pads use the current orientation's.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-22 10:55:30 +02:00
Henrik Rydgård dcbfa7d3ee Custom buttons: sanitize image/shape on the one screen that didn't
CustomButtonMappingScreen indexes customKeyImages[36] and customKeyShapes[11] with
values read straight from the ini, and it's reachable from the main menu - so
neither GamepadEmu nor TouchControlLayoutScreen, which both sanitize first, need
have run. Those two had the same fixup copy-pasted; hoisted it into a Sanitize()
next to the tables and called it from all three.
2026-09-02 18:06:47 +02:00
Henrik Rydgård 9315c0953a GamepadEmu: bounds-check touch pointer IDs before use
TouchInput::id was used directly to index the global primaryButton[]
array (MultiTouchButton::Touch) and to shift pointer bitmasks
(PSPDpad/PSPStick/PSPCustomStick/GestureGamepad::Touch), guarded only
by a debug-only assert in one of the five call sites - a no-op in
release builds. input.id isn't always a small sequential slot in
[0, TOUCH_MAX_POINTERS): SDL assigns SDL_FingerID values directly,
Android pointer IDs can go up to 31, and UWP's TouchMapper allocates
one more slot (11) than TOUCH_MAX_POINTERS (10) and can also return -1
when it runs out of slots - all reachable through ordinary multi-touch
use, no malicious input required.

Also apply bounds check to the PER_GAME gesture config ints
(iDoubleTapGesture/iSwipeUp/Down/Left/Right) before indexing
GestureKey::keyList[] with them.

Additionally, minor cleanup on Android and moves the TouchMapper helper
out from UWP to InputState.h.
2026-08-12 09:47:13 +02:00
Henrik Rydgård 6f57a49f07 Default touch control layout improvement in portrait, fix insets on pause screen in portrait 2026-03-15 15:00:12 +01:00
Henrik Rydgård 15055ee360 Fixes to gesture mapping - don't gate double-tap and analog between the gesture enable control for each zone. 2026-03-06 00:44:31 +01:00
Henrik Rydgård 2c207aedf8 Fix problem where the touch screen controls got reactivated by gamepad input 2026-02-28 11:11:17 +01:00
ThePillowMan 422e983846 Fixed stylization issues + issues regarding games which shouldnt rotate controls 2026-02-17 21:26:27 -05:00
ThePillowMan 3a810ac38b deleted accidentally left print statement 2026-02-17 19:12:35 -05:00
ThePillowMan bbf72d0c82 Update GamepadEmu.cpp
Fixes touch controls for D-Pad and Analog Stick using same methodology behind regular DPad.
2026-02-17 18:26:51 -05:00
Henrik Rydgård 801d379f74 Gesture control: Prevent pressing touch buttons while performing a gesture. 2026-02-06 13:10:20 +01:00
Henrik Rydgård d6d2c24e24 Fix the toggle touch controls input (properly this time) 2026-02-05 09:44:42 +01:00
Henrik Rydgård 44e30b14a3 Split the screen between the two gesture input zones. 2026-02-04 15:01:06 +01:00
Henrik Rydgård 03a7df74fa Have two independent gesture control zones 2026-02-04 15:01:06 +01:00
Henrik Rydgård 03c901d0cc Prepare for multiple gesture mapping zones 2026-02-04 15:01:06 +01:00
Henrik Rydgård 42137914e1 Fix the Toggle touch controls button, thanks Domiiniik 2026-02-04 14:33:54 +01:00
Henrik Rydgård 8350f67332 Fix typos, minor translation updates 2026-02-04 01:34:26 +01:00
Henrik Rydgård 7b1ba55e72 Prevent touch controls from fading away while being held.
Fixes #20531
2026-02-04 00:00:38 +01:00
Henrik Rydgård c9494bd579 Rename GamepadView->GamepadComponent 2026-02-03 23:30:45 +01:00
Henrik Rydgård e6a2a36bb8 Touch screen controls layout: In portrait mode, move everything up a bit by default. More comfortable. 2026-02-01 14:19:51 +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 481d0fd18c Switch TouchInputFlags to enum class, fix some minor UI issues
Scroll views now only wheel-scroll if the mouse is hovering over them.
2025-12-19 11:38:56 +01:00
Henrik Rydgård 7a8a642aed Convert the pause button to a normal customizable touch screen button 2025-11-25 15:47:05 +01:00
Henrik Rydgård 213436013f Try to avoid having the back button cut off by the top edge of the screen 2025-11-25 15:46:33 +01:00
Henrik Rydgård 3116eba395 More UI work (#21035)
* Improve a couple of on-screen buttons (menu, fastforward)

* Fix the new continue button, oops

* Add some missing translations

* Split a translation string to make portrait look better

* More GameScreen redesign

* Don't accidentally go into game-specific mode

* Fix layout issue with popupscreens, fix context menu positioning

* One more icon
2025-11-24 20:33:13 +01:00
Henrik Rydgård 9de8e75709 AnchorLayout: Allow centering separately for horizontal and vertical 2025-11-10 12:10:08 +01:00
Henrik Rydgård a183420a87 Orientation-specific defaults 2025-11-05 21:46:38 +01:00
Henrik Rydgård 063c7d4f7e Get separate touch screen config for portrait working 2025-11-05 21:01:37 +01: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 e4a14330e0 Correct comment, rename array 2025-08-28 10:24:30 +02:00
Henrik Rydgård 76fb535bec Allow binding "Pause (no menu)" to touch controls. Also makes controls stay visible when paused. 2025-08-27 08:54:13 +02:00
Henrik Rydgård 09e067c6e1 Revert "Get rid of remains of support for non-square screen DPIs"
This reverts commit f206ed95eb.
2025-05-21 21:41:50 +02:00
Henrik Rydgård f206ed95eb Get rid of remains of support for non-square screen DPIs 2025-02-20 11:14:26 -06:00
Henrik Rydgård 928854ffd3 Hold only the first button, allow other buttons to toggle with dragging as normal. 2025-02-14 12:40:44 -06:00
Henrik Rydgård 5ef2f06019 Implement "Touch gliding" (keep all dragged/touched buttons pressed until touch release)
I think the feature might need a better name though?

Fixes #14490
2025-02-14 11:00:24 -06:00
Henrik Rydgård 96c4a10e8c Add two new core states, rename RUNNING to RUNNING_CPU and similar for stepping. 2024-12-01 21:04:21 +01:00
Henrik Rydgård 107bd01536 Fix some issues with clicking touch buttons using the mouse after the hover change.
Increase a buffer size.
2024-11-22 10:31:10 +01:00
Henrik Rydgård d3e9398cb3 Split Core_EnableStepping into Core_Break and Core_Resume 2024-11-03 17:53:42 +01:00
Henrik Rydgård 758776f216 Touch control layout: Make sure no buttons are initialized off screen.
Fixes #19486
2024-09-26 11:08:07 +02:00
Henrik Rydgård 047913ddd3 Make sure we don't try to use out-of-bounds icons/shapes for custom buttons 2024-09-15 12:11:39 +02:00
Katharine Chui d7fd44280a allow binding custom right stick to analog 2024-07-16 16:06:13 +02:00
Henrik Rydgård f42f7ac9d1 Touch controls on iOS: Move the three center button up slightly by default to avoid the task switcher 2024-05-26 09:39:44 +02: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 5a7db8aa11 Fix issue with touch control editor with no game running. Fixes #18652 2023-12-31 01:04:14 +01:00
Henrik Rydgård 679b8330ff Add bindings for toggling mouse control and touch screen controls. Not bound by default.
I think I'll find myself using both of these for testing, feel worthwhile.

Suggested in #18464
2023-12-29 17:40:57 +01:00
Henrik Rydgård 63181374c7 Finish previous commit 2023-12-29 17:24:15 +01:00
Henrik Rydgård 4609df40c9 Update gamepad opacity once per frame, not once per button 2023-12-29 17:09:38 +01:00
Herman Semenov 95f535dab0 [UI/Windows] Object out of scope optimization for better codegeneration (lower level scope) 2023-12-20 12:35:02 +03:00
Henrik Rydgård 72be2f5459 Restore the D-Pad behavior (see #18028) 2023-09-11 11:41:29 +02:00