diff --git a/src/Ryujinx.Graphics.Gpu/Window.cs b/src/Ryujinx.Graphics.Gpu/Window.cs index d82f66836..6bcedd2b7 100644 --- a/src/Ryujinx.Graphics.Gpu/Window.cs +++ b/src/Ryujinx.Graphics.Gpu/Window.cs @@ -213,7 +213,7 @@ namespace Ryujinx.Graphics.Gpu texture.SynchronizeMemory(); // Add overlays by modifying texture data directly - AddOverlaysToTexture(texture, pt.Crop); + AddOverlaysToTexture(texture); ImageCrop crop = new( (int)(pt.Crop.Left * texture.ScaleFactor), @@ -264,8 +264,7 @@ namespace Ryujinx.Graphics.Gpu /// Add overlays to the texture using SkiaSharp /// /// The texture to modify - /// The crop information containing flip flags - private void AddOverlaysToTexture(Image.Texture texture, ImageCrop crop) + private void AddOverlaysToTexture(Image.Texture texture) { try { @@ -315,9 +314,9 @@ namespace Ryujinx.Graphics.Gpu // Create canvas for drawing overlays using var canvas = new SKCanvas(bitmap); - // Flip Y-axis if the game/texture requires it - // Some games have textures that are already flipped, while others need flipping - if (crop.FlipY) + // On Linux with OpenGL, we need to flip the Y-axis because OpenGL uses bottom-left origin + // while SkiaSharp uses top-left origin + if (OperatingSystem.IsLinux()) { canvas.Scale(1, -1); canvas.Translate(0, -height); diff --git a/src/Ryujinx/UI/Overlay/ControllerOverlay.cs b/src/Ryujinx/UI/Overlay/ControllerOverlay.cs index 7e6ae6758..e8ea8a547 100644 --- a/src/Ryujinx/UI/Overlay/ControllerOverlay.cs +++ b/src/Ryujinx/UI/Overlay/ControllerOverlay.cs @@ -16,6 +16,7 @@ namespace Ryujinx.UI.Overlay { private const float OverlayWidth = 400; private const float Padding = 24; + private const float Spacing = 16; private const float PlayerSpacing = 12; private const float PlayerRowHeight = 32; @@ -119,7 +120,7 @@ namespace Ryujinx.UI.Overlay if (playerBindings.ContainsKey(playerIndex)) { var controllers = playerBindings[playerIndex]; - var controllerNames = GetUniqueControllerDisplayNames(controllers); + var controllerNames = controllers.Select(c => GetControllerDisplayName(c)).ToList(); var controllerTextElement = new TextElement(Padding + 56, rowY + 2, string.Join(", ", controllerNames), PlayerTextSize, new SKColor(144, 238, 144)) // LightGreen { @@ -168,37 +169,6 @@ namespace Ryujinx.UI.Overlay }; } - private List GetUniqueControllerDisplayNames(List controllers) - { - var nameGroups = new Dictionary>(); - var displayNames = new List(); - - // First pass: get base names and group them - for (int i = 0; i < controllers.Count; i++) - { - string baseName = GetControllerDisplayName(controllers[i]); - - if (!nameGroups.ContainsKey(baseName)) - { - nameGroups[baseName] = new List(); - } - nameGroups[baseName].Add(i); - displayNames.Add(baseName); - } - - // Second pass: add numbering for duplicates - foreach (var group in nameGroups.Where(g => g.Value.Count > 1)) - { - for (int i = 0; i < group.Value.Count; i++) - { - int index = group.Value[i]; - displayNames[index] = $"{group.Key} #{i + 1}"; - } - } - - return displayNames; - } - private string GetControllerDisplayName(OriginalInputConfig config) { if (string.IsNullOrEmpty(config.Name)) @@ -211,15 +181,11 @@ namespace Ryujinx.UI.Overlay }; } - // Truncate long controller names from the middle + // Truncate long controller names string name = config.Name; if (name.Length > 25) { - int keepLength = 22; // Total characters to keep (excluding "...") - int leftLength = (keepLength + 1) / 2; // Round up for left side - int rightLength = keepLength / 2; // Round down for right side - - name = name.Substring(0, leftLength) + "..." + name.Substring(name.Length - rightLength); + name = name.Substring(0, 22) + "..."; } return name;