Files
StaticLink.Avalonia/NuGet/AvaloniaNative/buildTransitive/StaticLink.Avalonia.Native.MacOSFontWarmup.cs
T
2026-06-21 12:37:51 +08:00

51 lines
1.8 KiB
C#

using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
namespace StaticLink.Avalonia.Native;
internal static class MacOSFontWarmup
{
[ModuleInitializer]
internal static void Initialize()
{
if (!OperatingSystem.IsMacOS())
{
return;
}
try
{
var nsApplication = objc_getClass("NSApplication");
var sharedApplication = sel_registerName("sharedApplication");
_ = objc_msgSend(nsApplication, sharedApplication);
var nsFont = objc_getClass("NSFont");
var systemFontOfSize = sel_registerName("systemFontOfSize:");
var systemFontOfSizeWidth = sel_registerName("systemFontOfSize:width:");
_ = objc_msgSend(nsFont, systemFontOfSize, 13.0);
_ = objc_msgSend(nsFont, systemFontOfSizeWidth, 13.0, 0.0);
}
catch
{
// Defensive AppKit font-cache warmup must never fail application startup.
}
}
[DllImport("/usr/lib/libobjc.A.dylib", EntryPoint = "objc_getClass")]
private static extern IntPtr objc_getClass([MarshalAs(UnmanagedType.LPUTF8Str)] string name);
[DllImport("/usr/lib/libobjc.A.dylib", EntryPoint = "sel_registerName")]
private static extern IntPtr sel_registerName([MarshalAs(UnmanagedType.LPUTF8Str)] string name);
[DllImport("/usr/lib/libobjc.A.dylib", EntryPoint = "objc_msgSend")]
private static extern IntPtr objc_msgSend(IntPtr receiver, IntPtr selector);
[DllImport("/usr/lib/libobjc.A.dylib", EntryPoint = "objc_msgSend")]
private static extern IntPtr objc_msgSend(IntPtr receiver, IntPtr selector, double value);
[DllImport("/usr/lib/libobjc.A.dylib", EntryPoint = "objc_msgSend")]
private static extern IntPtr objc_msgSend(IntPtr receiver, IntPtr selector, double value, double width);
}