diff --git a/src/Ryujinx.Common/Helpers/ObjectiveC.cs b/src/Ryujinx.Common/Helpers/ObjectiveC.cs index 4c2481f6e..b7c7ffb62 100644 --- a/src/Ryujinx.Common/Helpers/ObjectiveC.cs +++ b/src/Ryujinx.Common/Helpers/ObjectiveC.cs @@ -42,6 +42,9 @@ namespace Ryujinx.Common.Helper [return: MarshalAs(UnmanagedType.Bool)] private static partial bool bool_objc_msgSend(nint receiver, Selector selector, nint param); + [LibraryImport(ObjCRuntime, EntryPoint = "objc_msgSend")] + private static partial double double_objc_msgSend(nint receiver, Selector selector); + public readonly struct Object { public readonly nint ObjPtr; @@ -105,6 +108,11 @@ namespace Ryujinx.Common.Helper { return bool_objc_msgSend(ObjPtr, selector, obj.ObjPtr); } + + public double GetDoubleFromMessage(string selectorName) + { + return double_objc_msgSend(ObjPtr, selectorName); + } } public readonly struct Selector diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs b/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs index e360d42f7..fa212046a 100644 --- a/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs +++ b/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs @@ -186,12 +186,17 @@ namespace Ryujinx.Ava.UI.Renderer // Make its renderer our metal layer. child.SendMessage("setWantsLayer:", 1); child.SendMessage("setLayer:", metalLayer); - metalLayer.SendMessage("setContentsScale:", Program.DesktopScaleFactor); + + double initialScaleFactor = child.GetDoubleFromMessage("backingScaleFactor"); + + metalLayer.SendMessage("setContentsScale:", initialScaleFactor); // Ensure the scale factor is up to date. _updateBoundsCallback = rect => { - metalLayer.SendMessage("setContentsScale:", Program.DesktopScaleFactor); + double currentScaleFactor = child.GetDoubleFromMessage("backingScaleFactor"); + + metalLayer.SendMessage("setContentsScale:", currentScaleFactor); }; nint nsView = child.ObjPtr;