1
0
Fork 0
mirror of https://github.com/Ryujinx/Ryujinx.git synced 2024-10-01 12:30:00 +02:00

misc: Migrate usage of RuntimeInformation to OperatingSystem (#2901)

Very basic migration across the codebase.
This commit is contained in:
Mary 2021-12-05 00:02:30 +01:00 committed by GitHub
parent 7c9360d393
commit f39fce8f54
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 77 additions and 68 deletions

View file

@ -151,7 +151,7 @@ namespace ARMeilleure.CodeGen.X86
public static CallConvName GetCurrentCallConv() public static CallConvName GetCurrentCallConv()
{ {
return RuntimeInformation.IsOSPlatform(OSPlatform.Windows) return OperatingSystem.IsWindows()
? CallConvName.Windows ? CallConvName.Windows
: CallConvName.SystemV; : CallConvName.SystemV;
} }

View file

@ -95,7 +95,7 @@ namespace ARMeilleure.Signal
{ {
if (_initialized) return; if (_initialized) return;
bool unix = RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX); bool unix = OperatingSystem.IsLinux() || OperatingSystem.IsMacOS();
ref SignalHandlerConfig config = ref GetConfigRef(); ref SignalHandlerConfig config = ref GetConfigRef();
if (unix) if (unix)

View file

@ -39,7 +39,7 @@ namespace ARMeilleure.Translation.Cache
_cacheAllocator = new CacheMemoryAllocator(CacheSize); _cacheAllocator = new CacheMemoryAllocator(CacheSize);
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
JitUnwindWindows.InstallFunctionTableHandler(_jitRegion.Pointer, CacheSize, _jitRegion.Pointer + Allocate(PageSize)); JitUnwindWindows.InstallFunctionTableHandler(_jitRegion.Pointer, CacheSize, _jitRegion.Pointer + Allocate(PageSize));
} }

View file

@ -960,10 +960,10 @@ namespace ARMeilleure.Translation.PTC
{ {
uint osPlatform = 0u; uint osPlatform = 0u;
osPlatform |= (RuntimeInformation.IsOSPlatform(OSPlatform.FreeBSD) ? 1u : 0u) << 0; osPlatform |= (OperatingSystem.IsFreeBSD() ? 1u : 0u) << 0;
osPlatform |= (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? 1u : 0u) << 1; osPlatform |= (OperatingSystem.IsLinux() ? 1u : 0u) << 1;
osPlatform |= (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? 1u : 0u) << 2; osPlatform |= (OperatingSystem.IsMacOS() ? 1u : 0u) << 2;
osPlatform |= (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? 1u : 0u) << 3; osPlatform |= (OperatingSystem.IsWindows() ? 1u : 0u) << 3;
return osPlatform; return osPlatform;
} }

View file

@ -18,7 +18,7 @@ namespace Ryujinx.Common.System
static public void Prevent() static public void Prevent()
{ {
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_SYSTEM_REQUIRED | EXECUTION_STATE.ES_DISPLAY_REQUIRED); SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_SYSTEM_REQUIRED | EXECUTION_STATE.ES_DISPLAY_REQUIRED);
} }
@ -26,7 +26,7 @@ namespace Ryujinx.Common.System
static public void Restore() static public void Restore()
{ {
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS); SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS);
} }

View file

@ -2,12 +2,14 @@
using System; using System;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Runtime.Versioning;
namespace Ryujinx.Common.System namespace Ryujinx.Common.System
{ {
/// <summary> /// <summary>
/// Handle Windows Multimedia timer resolution. /// Handle Windows Multimedia timer resolution.
/// </summary> /// </summary>
[SupportedOSPlatform("windows")]
public class WindowsMultimediaTimerResolution : IDisposable public class WindowsMultimediaTimerResolution : IDisposable
{ {
[StructLayout(LayoutKind.Sequential)] [StructLayout(LayoutKind.Sequential)]

View file

@ -28,7 +28,6 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using System.Runtime.InteropServices;
using System.Text.Json; using System.Text.Json;
using System.Threading; using System.Threading;
@ -473,7 +472,7 @@ namespace Ryujinx.Headless.SDL2
private static void ExecutionEntrypoint() private static void ExecutionEntrypoint()
{ {
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
_windowsMultimediaTimerResolution = new WindowsMultimediaTimerResolution(1); _windowsMultimediaTimerResolution = new WindowsMultimediaTimerResolution(1);
} }
@ -490,9 +489,12 @@ namespace Ryujinx.Headless.SDL2
_emulationContext.Dispose(); _emulationContext.Dispose();
_window.Dispose(); _window.Dispose();
if (OperatingSystem.IsWindows())
{
_windowsMultimediaTimerResolution?.Dispose(); _windowsMultimediaTimerResolution?.Dispose();
_windowsMultimediaTimerResolution = null; _windowsMultimediaTimerResolution = null;
} }
}
private static bool LoadApplication(Options options) private static bool LoadApplication(Options options)
{ {

View file

@ -1,5 +1,4 @@
using System; using System;
using System.Runtime.InteropServices;
namespace Ryujinx.Memory namespace Ryujinx.Memory
{ {
@ -7,14 +6,14 @@ namespace Ryujinx.Memory
{ {
public static IntPtr Allocate(ulong size) public static IntPtr Allocate(ulong size)
{ {
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
IntPtr sizeNint = new IntPtr((long)size); IntPtr sizeNint = new IntPtr((long)size);
return MemoryManagementWindows.Allocate(sizeNint); return MemoryManagementWindows.Allocate(sizeNint);
} }
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || else if (OperatingSystem.IsLinux() ||
RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) OperatingSystem.IsMacOS())
{ {
return MemoryManagementUnix.Allocate(size); return MemoryManagementUnix.Allocate(size);
} }
@ -26,14 +25,14 @@ namespace Ryujinx.Memory
public static IntPtr Reserve(ulong size) public static IntPtr Reserve(ulong size)
{ {
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
IntPtr sizeNint = new IntPtr((long)size); IntPtr sizeNint = new IntPtr((long)size);
return MemoryManagementWindows.Reserve(sizeNint); return MemoryManagementWindows.Reserve(sizeNint);
} }
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || else if (OperatingSystem.IsLinux() ||
RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) OperatingSystem.IsMacOS())
{ {
return MemoryManagementUnix.Reserve(size); return MemoryManagementUnix.Reserve(size);
} }
@ -45,14 +44,14 @@ namespace Ryujinx.Memory
public static bool Commit(IntPtr address, ulong size) public static bool Commit(IntPtr address, ulong size)
{ {
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
IntPtr sizeNint = new IntPtr((long)size); IntPtr sizeNint = new IntPtr((long)size);
return MemoryManagementWindows.Commit(address, sizeNint); return MemoryManagementWindows.Commit(address, sizeNint);
} }
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || else if (OperatingSystem.IsLinux() ||
RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) OperatingSystem.IsMacOS())
{ {
return MemoryManagementUnix.Commit(address, size); return MemoryManagementUnix.Commit(address, size);
} }
@ -64,14 +63,14 @@ namespace Ryujinx.Memory
public static bool Decommit(IntPtr address, ulong size) public static bool Decommit(IntPtr address, ulong size)
{ {
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
IntPtr sizeNint = new IntPtr((long)size); IntPtr sizeNint = new IntPtr((long)size);
return MemoryManagementWindows.Decommit(address, sizeNint); return MemoryManagementWindows.Decommit(address, sizeNint);
} }
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || else if (OperatingSystem.IsLinux() ||
RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) OperatingSystem.IsMacOS())
{ {
return MemoryManagementUnix.Decommit(address, size); return MemoryManagementUnix.Decommit(address, size);
} }
@ -85,14 +84,14 @@ namespace Ryujinx.Memory
{ {
bool result; bool result;
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
IntPtr sizeNint = new IntPtr((long)size); IntPtr sizeNint = new IntPtr((long)size);
result = MemoryManagementWindows.Reprotect(address, sizeNint, permission); result = MemoryManagementWindows.Reprotect(address, sizeNint, permission);
} }
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || else if (OperatingSystem.IsLinux() ||
RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) OperatingSystem.IsMacOS())
{ {
result = MemoryManagementUnix.Reprotect(address, size, permission); result = MemoryManagementUnix.Reprotect(address, size, permission);
} }
@ -109,12 +108,12 @@ namespace Ryujinx.Memory
public static bool Free(IntPtr address) public static bool Free(IntPtr address)
{ {
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
return MemoryManagementWindows.Free(address); return MemoryManagementWindows.Free(address);
} }
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || else if (OperatingSystem.IsLinux() ||
RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) OperatingSystem.IsMacOS())
{ {
return MemoryManagementUnix.Free(address); return MemoryManagementUnix.Free(address);
} }
@ -126,14 +125,14 @@ namespace Ryujinx.Memory
public static IntPtr CreateSharedMemory(ulong size, bool reserve) public static IntPtr CreateSharedMemory(ulong size, bool reserve)
{ {
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
IntPtr sizeNint = new IntPtr((long)size); IntPtr sizeNint = new IntPtr((long)size);
return MemoryManagementWindows.CreateSharedMemory(sizeNint, reserve); return MemoryManagementWindows.CreateSharedMemory(sizeNint, reserve);
} }
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || else if (OperatingSystem.IsLinux() ||
RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) OperatingSystem.IsMacOS())
{ {
return MemoryManagementUnix.CreateSharedMemory(size, reserve); return MemoryManagementUnix.CreateSharedMemory(size, reserve);
} }
@ -145,12 +144,12 @@ namespace Ryujinx.Memory
public static void DestroySharedMemory(IntPtr handle) public static void DestroySharedMemory(IntPtr handle)
{ {
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
MemoryManagementWindows.DestroySharedMemory(handle); MemoryManagementWindows.DestroySharedMemory(handle);
} }
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || else if (OperatingSystem.IsLinux() ||
RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) OperatingSystem.IsMacOS())
{ {
MemoryManagementUnix.DestroySharedMemory(handle); MemoryManagementUnix.DestroySharedMemory(handle);
} }
@ -162,12 +161,12 @@ namespace Ryujinx.Memory
public static IntPtr MapSharedMemory(IntPtr handle) public static IntPtr MapSharedMemory(IntPtr handle)
{ {
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
return MemoryManagementWindows.MapSharedMemory(handle); return MemoryManagementWindows.MapSharedMemory(handle);
} }
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || else if (OperatingSystem.IsLinux() ||
RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) OperatingSystem.IsMacOS())
{ {
return MemoryManagementUnix.MapSharedMemory(handle); return MemoryManagementUnix.MapSharedMemory(handle);
} }
@ -179,12 +178,12 @@ namespace Ryujinx.Memory
public static void UnmapSharedMemory(IntPtr address) public static void UnmapSharedMemory(IntPtr address)
{ {
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
MemoryManagementWindows.UnmapSharedMemory(address); MemoryManagementWindows.UnmapSharedMemory(address);
} }
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || else if (OperatingSystem.IsLinux() ||
RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) OperatingSystem.IsMacOS())
{ {
MemoryManagementUnix.UnmapSharedMemory(address); MemoryManagementUnix.UnmapSharedMemory(address);
} }
@ -196,8 +195,8 @@ namespace Ryujinx.Memory
public static IntPtr Remap(IntPtr target, IntPtr source, ulong size) public static IntPtr Remap(IntPtr target, IntPtr source, ulong size)
{ {
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || if (OperatingSystem.IsLinux() ||
RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) OperatingSystem.IsMacOS())
{ {
return MemoryManagementUnix.Remap(target, source, size); return MemoryManagementUnix.Remap(target, source, size);
} }

View file

@ -3,9 +3,12 @@ using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Runtime.Versioning;
namespace Ryujinx.Memory namespace Ryujinx.Memory
{ {
[SupportedOSPlatform("linux")]
[SupportedOSPlatform("macos")]
static class MemoryManagementUnix static class MemoryManagementUnix
{ {
private struct UnixSharedMemory private struct UnixSharedMemory

View file

@ -2,9 +2,11 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Runtime.Versioning;
namespace Ryujinx.Memory namespace Ryujinx.Memory
{ {
[SupportedOSPlatform("windows")]
static class MemoryManagementWindows static class MemoryManagementWindows
{ {
private static readonly IntPtr InvalidHandleValue = new IntPtr(-1); private static readonly IntPtr InvalidHandleValue = new IntPtr(-1);
@ -59,9 +61,7 @@ namespace Ryujinx.Memory
static MemoryManagementWindows() static MemoryManagementWindows()
{ {
Version version = Environment.OSVersion.Version; UseWin10Placeholders = OperatingSystem.IsWindowsVersionAtLeast(10, 0, 17134);
UseWin10Placeholders = (version.Major == 10 && version.Build >= 17134) || version.Major > 10;
} }
public static IntPtr Allocate(IntPtr size) public static IntPtr Allocate(IntPtr size)

View file

@ -47,7 +47,7 @@ namespace Ryujinx.Modules
{ {
if (_restartQuery) if (_restartQuery)
{ {
string ryuName = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "Ryujinx.exe" : "Ryujinx"; string ryuName = OperatingSystem.IsWindows() ? "Ryujinx.exe" : "Ryujinx";
string ryuExe = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ryuName); string ryuExe = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ryuName);
string ryuArg = string.Join(" ", Environment.GetCommandLineArgs().AsEnumerable().Skip(1).ToArray()); string ryuArg = string.Join(" ", Environment.GetCommandLineArgs().AsEnumerable().Skip(1).ToArray());

View file

@ -51,17 +51,17 @@ namespace Ryujinx.Modules
int artifactIndex = -1; int artifactIndex = -1;
// Detect current platform // Detect current platform
if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) if (OperatingSystem.IsMacOS())
{ {
_platformExt = "osx_x64.zip"; _platformExt = "osx_x64.zip";
artifactIndex = 1; artifactIndex = 1;
} }
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) else if (OperatingSystem.IsWindows())
{ {
_platformExt = "win_x64.zip"; _platformExt = "win_x64.zip";
artifactIndex = 2; artifactIndex = 2;
} }
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) else if (OperatingSystem.IsLinux())
{ {
_platformExt = "linux_x64.tar.gz"; _platformExt = "linux_x64.tar.gz";
artifactIndex = 0; artifactIndex = 0;
@ -372,7 +372,7 @@ namespace Ryujinx.Modules
updateDialog.MainText.Text = "Extracting Update..."; updateDialog.MainText.Text = "Extracting Update...";
updateDialog.ProgressBar.Value = 0; updateDialog.ProgressBar.Value = 0;
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) if (OperatingSystem.IsLinux())
{ {
using (Stream inStream = File.OpenRead(updateFile)) using (Stream inStream = File.OpenRead(updateFile))
using (Stream gzipStream = new GZipInputStream(inStream)) using (Stream gzipStream = new GZipInputStream(inStream))
@ -545,7 +545,7 @@ namespace Ryujinx.Modules
{ {
var files = Directory.EnumerateFiles(HomeDir); // All files directly in base dir. var files = Directory.EnumerateFiles(HomeDir); // All files directly in base dir.
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
foreach (string dir in WindowsDependencyDirs) foreach (string dir in WindowsDependencyDirs)
{ {

View file

@ -61,7 +61,7 @@ namespace Ryujinx
} }
} }
// Enforce loading of Mono.Posix.NETStandard to avoid .NET runtime lazy loading it during an update. // Enforce loading of Mono.Posix to avoid .NET runtime lazy loading it during an update.
Assembly.Load("Mono.Posix.NETStandard"); Assembly.Load("Mono.Posix.NETStandard");
// Make process DPI aware for proper window sizing on high-res screens. // Make process DPI aware for proper window sizing on high-res screens.

View file

@ -59,13 +59,13 @@ namespace Ryujinx.Ui
private SwappableNativeWindowBase RetrieveNativeWindow() private SwappableNativeWindowBase RetrieveNativeWindow()
{ {
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
IntPtr windowHandle = gdk_win32_window_get_handle(Window.Handle); IntPtr windowHandle = gdk_win32_window_get_handle(Window.Handle);
return new WGLWindow(new NativeHandle(windowHandle)); return new WGLWindow(new NativeHandle(windowHandle));
} }
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) else if (OperatingSystem.IsLinux())
{ {
IntPtr displayHandle = gdk_x11_display_get_xdisplay(Display.Handle); IntPtr displayHandle = gdk_x11_display_get_xdisplay(Display.Handle);
IntPtr windowHandle = gdk_x11_window_get_xid(Window.Handle); IntPtr windowHandle = gdk_x11_window_get_xid(Window.Handle);

View file

@ -1,6 +1,6 @@
using Ryujinx.Common.Logging; using Ryujinx.Common.Logging;
using System;
using System.Diagnostics; using System.Diagnostics;
using System.Runtime.InteropServices;
namespace Ryujinx.Ui.Helper namespace Ryujinx.Ui.Helper
{ {
@ -18,15 +18,15 @@ namespace Ryujinx.Ui.Helper
public static void OpenUrl(string url) public static void OpenUrl(string url)
{ {
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
Process.Start(new ProcessStartInfo("cmd", $"/c start {url.Replace("&", "^&")}")); Process.Start(new ProcessStartInfo("cmd", $"/c start {url.Replace("&", "^&")}"));
} }
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) else if (OperatingSystem.IsLinux())
{ {
Process.Start("xdg-open", url); Process.Start("xdg-open", url);
} }
else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) else if (OperatingSystem.IsMacOS())
{ {
Process.Start("open", url); Process.Start("open", url);
} }

View file

@ -2,7 +2,6 @@ using System;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -909,8 +908,12 @@ namespace Ryujinx.Ui
RendererWidget.Dispose(); RendererWidget.Dispose();
if (OperatingSystem.IsWindows())
{
_windowsMultimediaTimerResolution?.Dispose(); _windowsMultimediaTimerResolution?.Dispose();
_windowsMultimediaTimerResolution = null; _windowsMultimediaTimerResolution = null;
}
DisplaySleep.Restore(); DisplaySleep.Restore();
_viewBox.Remove(RendererWidget); _viewBox.Remove(RendererWidget);
@ -941,7 +944,7 @@ namespace Ryujinx.Ui
private void CreateGameWindow() private void CreateGameWindow()
{ {
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
_windowsMultimediaTimerResolution = new WindowsMultimediaTimerResolution(1); _windowsMultimediaTimerResolution = new WindowsMultimediaTimerResolution(1);
} }

View file

@ -19,13 +19,13 @@ namespace Ryujinx.Ui
private NativeWindowBase RetrieveNativeWindow() private NativeWindowBase RetrieveNativeWindow()
{ {
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (OperatingSystem.IsWindows())
{ {
IntPtr windowHandle = gdk_win32_window_get_handle(Window.Handle); IntPtr windowHandle = gdk_win32_window_get_handle(Window.Handle);
return new SimpleWin32Window(new NativeHandle(windowHandle)); return new SimpleWin32Window(new NativeHandle(windowHandle));
} }
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) else if (OperatingSystem.IsLinux())
{ {
IntPtr displayHandle = gdk_x11_display_get_xdisplay(Display.Handle); IntPtr displayHandle = gdk_x11_display_get_xdisplay(Display.Handle);
IntPtr windowHandle = gdk_x11_window_get_xid(Window.Handle); IntPtr windowHandle = gdk_x11_window_get_xid(Window.Handle);