Commit Graph
70 Commits
Author SHA1 Message Date
Henrik RydgårdandClaude Opus 5.5 916dfab834 UI: Round the corners of popups
FillRoundRect falls back to a square FillRect for drawables it can't
round, and a ViewGroup with round corners set rounds its background.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 21:47:06 +01:00
Henrik RydgårdandClaude Opus 5.5 4c7dd44351 TextDrawer: Remove the current font and scale
Drawing now takes the style and scale too, like measuring, so the text
drawers have no font state left. UIContext keeps its current style and
passes it, and fills it in from the theme if nothing has set one yet.
PPGe passes its one font.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 11:54:10 +01:00
Henrik RydgårdandClaude Opus 5.5 dc1e9e50fc TextDrawer: Measure in a given style without switching fonts
Measuring took the current font and scale, so UIContext switched to the
style being measured and back. On first draw the font to switch back to
could be an empty one, which the UWP drawer asserts on.

MeasureString and MeasureStringRect now take the style and scale, and the
backends' MeasureStringInternal measures in the style it's given.
SetOrCreateFont, which sets the font drawing uses, is shared, and the
backends only implement EnsureFont, which creates a font if needed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 11:45:04 +01:00
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 cccb296050 UI: Only even out the side insets in landscape
In portrait, a camera cutout is at the top, so a one-sided side inset is a
real edge and mirroring it just wastes space. The iPhone Duo's cover screen
has its sensor bar on the right in portrait, which left an equally wide
empty strip on the left of the main screen.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-25 23:21:12 +01:00
Henrik Rydgård 518795e35f Cut down on outdated/useless REPORTing and logging 2026-10-25 17:33:44 +01:00
Henrik RydgårdandClaude Opus 5.5 2ed5aa264c UI: Let round rects keep some corners square
A RoundCorners mask picks the corners to round. A square corner is drawn
from the corner image's edge profiles, split along the diagonal, so its
antialiasing matches the straight edges and it needs no extra draw call.

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 02b688e4f3 TextDrawer: Cache wrapped text, hash the string caches
MeasureString was slow mostly because of wrapping: DrawStringRect and
MeasureStringRect re-ran the word wrapper every frame, and it measures
every prefix of every word. Wrapped strings are now cached. The caches
are unordered_maps with an xxhash of the key, and lookups reuse a key
buffer so a hit doesn't allocate. UIContext also skips switching fonts
when measuring in the current style. In a Mac debug build, 200 cached
measures go from 0.26 to 0.06 ms and 10 wrapped paragraphs from 2.1 to
0.01 ms per frame.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-22 10:11:42 +02:00
Henrik Rydgård 25a146a11c Make the PPSSPP UI fit inside the imgui desktop 2026-08-07 17:56:09 +02:00
Henrik Rydgård fead647304 Android: Improve insets behavior on older devices without camera cutouts 2026-03-14 22:53:17 +01:00
Henrik Rydgård 75453632f9 Handle inset adjustements on the C++ side, handle them better in the UI. 2026-03-14 18:13:37 +01:00
Henrik Rydgård 1ea93e2913 Small refactor of text rect measurement. Add move/resize icons 2025-11-27 11:50:22 +01:00
Henrik Rydgård c4c29ab6b3 Fix issue with UI atlas being generated unnecessarily on mobile 2025-11-22 10:29:21 +01:00
Henrik Rydgård 4283e66a12 Font style rework: Windows part 2025-11-09 08:52:21 +01:00
Henrik Rydgård 6d1973edfb Add banners on the top of settings pages, if editing game-specific settings show the icon. 2025-11-09 08:51:41 +01:00
Henrik Rydgård 56d3dae334 Avoid regenerating the UI Atlas if unnecessary (faster resize) 2025-11-06 23:44:55 +01:00
Henrik Rydgård 42a44e4243 Improve inset handling 2025-10-28 14:54:28 +01:00
Henrik Rydgård b660dcee2b Various inset and margin fixes and improvements 2025-10-28 13:59:37 +01:00
Henrik Rydgård 45ef8120f3 Minor UX 2025-10-27 13:17:48 +01:00
Henrik Rydgård 4a50174d14 Support dpi scaling in SVG atlas generation 2025-09-20 10:00:05 -06:00
Henrik Rydgård 21354c8671 Add a way to force recreating the UI atlas in developer tools 2025-09-17 09:49:54 -06:00
Henrik Rydgård 52c4c31508 Runtime atlas generation 2025-09-17 09:49:54 -06:00
Henrik Rydgård daa593bdcb Invert the relationship for loading atlas textures 2025-09-15 12:42:11 -06:00
Henrik Rydgård e39c78dab2 Remove the ability of themes to control the UI atlas (temporary) 2025-09-13 19:58:07 -06:00
Henrik Rydgård f410b7e6ea Show a tiny indicator in the top left of the screen when the game is saving or loading. 2025-07-10 15:11:59 +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 617bef73ee Fix a runtime warning in text rendering 2024-11-21 15:48:18 +01:00
Henrik Rydgård 7e952ab795 Delete unused code, fix a comment. 2024-10-23 10:55:46 +02:00
Henrik Rydgård e01ca5b057 Logging API change (refactor) (#19324)
* Rename LogType to Log

* Explicitly use the Log:: enum when logging. Allows for autocomplete when editing.

* Mac/ARM64 buildfix

* Do the same with the hle result log macros

* Rename the log names to mixed case while at it.

* iOS buildfix

* Qt buildfix attempt, ARM32 buildfix
2024-07-14 14:42:59 +02:00
Henrik Rydgård 306c28c2cc Remove lots of now-unnecessary ".c_str()" 2024-05-24 22:53:13 +02:00
Henrik Rydgård 804f31f424 Convert MeasureString* functions to use std::string_view 2024-05-24 14:16:40 +02:00
Henrik Rydgård d39d4270e1 More std::string_view 2024-05-24 12:40:10 +02:00
Henrik Rydgård 0f94482d36 More string_view in text drawing 2024-05-24 12:40:10 +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 812b1024f0 Move TouchTestScreen to DevScreens 2023-12-14 19:01:19 +01:00
Henrik Rydgård d549817245 Add missing check 2023-12-13 12:21:12 +01:00
Henrik Rydgård 2aca8fe3f9 Get rid of more unnecessary uses of ManagedTexture 2023-12-12 23:13:45 +01:00
Henrik Rydgård d2e10a058e Some renaming 2023-12-12 22:15:55 +01:00
Henrik Rydgård 48d60d8613 Remove UIContext knowledge of screen tags 2023-12-10 22:21:50 +01:00
Henrik Rydgård 376db1f931 Remove the unused "front" draw2d buffer. Saves 1.5MB of RAM. 2023-12-08 12:29:24 +01:00
Henrik Rydgård 4108dcec23 Unify CalculateTextScale 2023-07-17 12:02:32 +02:00
Henrik Rydgård 4ae3c519e2 Add assorted null checks for safety
More probably needed. Should at least hopefully fix the leaderboard crash reported in #17631

Will try to do something more systematic later.
2023-07-10 19:27:07 +02:00
Henrik Rydgård 0bf0a4a1ef UIContext: Add an easy way to draw drop shadows under rectangular things 2023-07-08 18:25:00 +02:00
Henrik Rydgård 8b431b39ba Wrap the display globals in a struct (#16998)
* Wrap the display globals in a struct

Makes it easier to search/replace these, for future refactorings.

* Some renaming

* Qt buildfix, also fix the Qt build on Mac (got broken with battery changes)

* Attempt at buildfixing ios

* UWP buildfix
2023-02-25 13:09:44 +01:00
Henrik Rydgård 0f52954eae Minor log cleanups 2023-01-30 14:38:05 +01:00
Henrik Rydgård 91cca1c980 Improve scissor rect clipping. Affected D3D11 validation when maximizing/minimizing. 2023-01-24 16:48:13 +01:00
Henrik Rydgård a5747d53b3 Fix some report spam 2023-01-02 22:23:50 +01:00
Unknown W. Brackets 68fb7a477d UI: Fix tiny reverse dependency. 2022-12-27 15:18:35 -08:00
Henrik Rydgård ec6d330ae4 Move AsyncImageFileView to Common, which required some more shuffling around of stuff. 2022-11-21 20:38:20 +01:00