CPF/CPF.Mac/Mac/CoreText/CTBaselineClassID.cs
2023-11-21 23:05:03 +08:00

93 lines
2.3 KiB
C#

using CPF.Mac.Foundation;
using CPF.Mac.ObjCRuntime;
using System;
namespace CPF.Mac.CoreText
{
internal static class CTBaselineClassID
{
public static readonly NSString Roman;
public static readonly NSString IdeographicCentered;
public static readonly NSString IdeographicLow;
public static readonly NSString IdeographicHigh;
public static readonly NSString Hanging;
public static readonly NSString Math;
static CTBaselineClassID()
{
IntPtr intPtr = Dlfcn.dlopen("/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/CoreText", 0);
if (!(intPtr == IntPtr.Zero))
{
try
{
Roman = Dlfcn.GetStringConstant(intPtr, "kCTBaselineClassRoman");
IdeographicCentered = Dlfcn.GetStringConstant(intPtr, "kCTBaselineClassIdeographicCentered");
IdeographicLow = Dlfcn.GetStringConstant(intPtr, "kCTBaselineClassIdeographicLow");
IdeographicHigh = Dlfcn.GetStringConstant(intPtr, "kCTBaselineClassIdeographicHigh");
Hanging = Dlfcn.GetStringConstant(intPtr, "kCTBaselineClassHanging");
Math = Dlfcn.GetStringConstant(intPtr, "kCTBaselineClassMath");
}
finally
{
Dlfcn.dlclose(intPtr);
}
}
}
public static NSString ToNSString(CTBaselineClass key)
{
switch (key)
{
case CTBaselineClass.Roman:
return Roman;
case CTBaselineClass.IdeographicCentered:
return IdeographicCentered;
case CTBaselineClass.IdeographicLow:
return IdeographicLow;
case CTBaselineClass.IdeographicHigh:
return IdeographicHigh;
case CTBaselineClass.Hanging:
return Hanging;
case CTBaselineClass.Math:
return Math;
default:
throw new ArgumentOutOfRangeException("key");
}
}
public static CTBaselineClass FromHandle(IntPtr handle)
{
if (handle == Roman.Handle)
{
return CTBaselineClass.Roman;
}
if (handle == IdeographicCentered.Handle)
{
return CTBaselineClass.IdeographicCentered;
}
if (handle == IdeographicLow.Handle)
{
return CTBaselineClass.IdeographicLow;
}
if (handle == IdeographicHigh.Handle)
{
return CTBaselineClass.IdeographicHigh;
}
if (handle == Hanging.Handle)
{
return CTBaselineClass.Hanging;
}
if (handle == Math.Handle)
{
return CTBaselineClass.Math;
}
throw new ArgumentOutOfRangeException("handle");
}
}
}