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>
This commit is contained in:
Henrik RydgårdandClaude Opus 5.5 committed 2026-10-26 09:39:49 +01:00
1 parent 9a6a4361ae
commit f364f297f1
12 files changed
+77 -6

No files matched your search

+4
View File
@@ -586,6 +586,10 @@ void TouchControlLayoutScreen::onFinish(DialogResult reason) {
g_Config.Save("TouchControlLayoutScreen::onFinish");
}
ViewLayoutMode TouchControlLayoutScreen::LayoutMode() const {
return TouchControlsLayoutMode();
}
void TouchControlLayoutScreen::OnReset(UI::EventParams &e) {
INFO_LOG(Log::G3D, "Resetting touch control layout to default.");