1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-15 02:17:46 +08:00

Merge pull request #23836 from frenzibyte/fix-aspect-ratio-crop-texture-stuff

Fix beatmap panel background looking different than usual
This commit is contained in:
Dean Herbert 2023-06-12 14:14:04 +09:00 committed by GitHub
commit 392287e9fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -17,9 +17,8 @@ namespace osu.Game.Beatmaps
// If issues are found it's worth checking to make sure similar issues exist there. // If issues are found it's worth checking to make sure similar issues exist there.
public class BeatmapPanelBackgroundTextureLoaderStore : IResourceStore<TextureUpload> public class BeatmapPanelBackgroundTextureLoaderStore : IResourceStore<TextureUpload>
{ {
// These numbers are taken from the draw visualiser size requirements for song select panel textures at extreme aspect ratios. // The aspect ratio of SetPanelBackground at its maximum size (very tall window).
private const int max_height = 130; private const float minimum_display_ratio = 512 / 80f;
private const int max_width = 1280;
private readonly IResourceStore<TextureUpload>? textureStore; private readonly IResourceStore<TextureUpload>? textureStore;
@ -66,14 +65,21 @@ namespace osu.Game.Beatmaps
textureUpload.Dispose(); textureUpload.Dispose();
Size size = image.Size(); Size size = image.Size();
int usableWidth = Math.Min(max_width, size.Width);
int usableHeight = Math.Min(max_height, size.Height); // Assume that panel backgrounds are always displayed using `FillMode.Fill`.
// Also assume that all backgrounds are wider than they are tall, so the
// fill is always going to be based on width.
//
// We need to include enough height to make this work for all ratio panels are displayed at.
int usableHeight = (int)Math.Ceiling(size.Width * 1 / minimum_display_ratio);
usableHeight = Math.Min(size.Height, usableHeight);
// Crop the centre region of the background for now. // Crop the centre region of the background for now.
Rectangle cropRectangle = new Rectangle( Rectangle cropRectangle = new Rectangle(
(size.Width - usableWidth) / 2, 0,
(size.Height - usableHeight) / 2, (size.Height - usableHeight) / 2,
usableWidth, size.Width,
usableHeight usableHeight
); );