CPF/CPF.Mac/Mac/CoreText/CTFontDescriptorAttributes.cs

360 lines
8.3 KiB
C#
Raw Normal View History

2023-11-21 23:05:03 +08:00
using CPF.Mac.CoreGraphics;
using CPF.Mac.Foundation;
using CPF.Mac.ObjCRuntime;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
namespace CPF.Mac.CoreText
{
[Since(3, 2)]
public class CTFontDescriptorAttributes
{
public NSDictionary Dictionary
{
get;
private set;
}
public NSUrl Url
{
get
{
return (NSUrl)Dictionary[CTFontDescriptorAttributeKey.Url];
}
set
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.Url, value);
}
}
public string Name
{
get
{
return Adapter.GetStringValue(Dictionary, CTFontDescriptorAttributeKey.Name);
}
set
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.Name, value);
}
}
public string DisplayName
{
get
{
return Adapter.GetStringValue(Dictionary, CTFontDescriptorAttributeKey.DisplayName);
}
set
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.DisplayName, value);
}
}
public string FamilyName
{
get
{
return Adapter.GetStringValue(Dictionary, CTFontDescriptorAttributeKey.FamilyName);
}
set
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.FamilyName, value);
}
}
public string StyleName
{
get
{
return Adapter.GetStringValue(Dictionary, CTFontDescriptorAttributeKey.StyleName);
}
set
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.StyleName, value);
}
}
public CTFontTraits Traits
{
get
{
NSDictionary nSDictionary = (NSDictionary)Dictionary[CTFontDescriptorAttributeKey.Traits];
if (nSDictionary == null)
{
return null;
}
return new CTFontTraits(nSDictionary);
}
set
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.Traits, value?.Dictionary);
}
}
public CTFontVariation Variation
{
get
{
NSDictionary nSDictionary = (NSDictionary)Dictionary[CTFontDescriptorAttributeKey.Variation];
if (nSDictionary != null)
{
return new CTFontVariation(nSDictionary);
}
return null;
}
set
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.Variation, value?.Dictionary);
}
}
public float? Size
{
get
{
return Adapter.GetSingleValue(Dictionary, CTFontDescriptorAttributeKey.Size);
}
set
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.Size, value);
}
}
public unsafe CGAffineTransform? Matrix
{
get
{
NSData nSData = (NSData)Dictionary[CTFontDescriptorAttributeKey.Matrix];
if (nSData == null)
{
return null;
}
return (CGAffineTransform)Marshal.PtrToStructure(nSData.Bytes, typeof(CGAffineTransform));
}
set
{
if (!value.HasValue)
{
Adapter.SetValue((IDictionary<NSObject, NSObject>)Dictionary, (NSObject)CTFontDescriptorAttributeKey.Matrix, (NSObject)null);
return;
}
byte[] array = new byte[Marshal.SizeOf(typeof(CGAffineTransform))];
fixed (byte* value2 = array)
{
Marshal.StructureToPtr(value.Value, (IntPtr)(void*)value2, fDeleteOld: false);
}
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.Matrix, NSData.FromArray(array));
}
}
public IEnumerable<CTFontDescriptor> CascadeList
{
get
{
return Adapter.GetNativeArray(Dictionary, CTFontDescriptorAttributeKey.CascadeList, (IntPtr d) => new CTFontDescriptor(d, owns: false));
}
set
{
Adapter.SetNativeValue(Dictionary, CTFontDescriptorAttributeKey.CascadeList, value);
}
}
public NSCharacterSet CharacterSet
{
get
{
return (NSCharacterSet)Dictionary[CTFontDescriptorAttributeKey.CharacterSet];
}
set
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.CharacterSet, value);
}
}
public IEnumerable<string> Languages
{
get
{
return Adapter.GetStringArray(Dictionary, CTFontDescriptorAttributeKey.Languages);
}
set
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.Languages, value);
}
}
public float? BaselineAdjust
{
get
{
return Adapter.GetSingleValue(Dictionary, CTFontDescriptorAttributeKey.BaselineAdjust);
}
set
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.BaselineAdjust, value);
}
}
public float? MacintoshEncodings
{
get
{
return Adapter.GetSingleValue(Dictionary, CTFontDescriptorAttributeKey.MacintoshEncodings);
}
set
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.MacintoshEncodings, value);
}
}
public IEnumerable<CTFontFeatures> Features
{
get
{
return Adapter.GetNativeArray(Dictionary, CTFontDescriptorAttributeKey.Features, (IntPtr d) => new CTFontFeatures((NSDictionary)Runtime.GetNSObject(d)));
}
set
{
List<CTFontFeatures> source;
if (value == null || (source = new List<CTFontFeatures>(value)).Count == 0)
{
Adapter.SetValue((IDictionary<NSObject, NSObject>)Dictionary, (NSObject)CTFontDescriptorAttributeKey.Features, (NSObject)null);
}
else
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.Features, NSArray.FromNSObjects(((IEnumerable<CTFontFeatures>)source).Select((Func<CTFontFeatures, NSObject>)((CTFontFeatures e) => e.Dictionary)).ToList()));
}
}
}
public IEnumerable<CTFontFeatureSettings> FeatureSettings
{
get
{
return Adapter.GetNativeArray(Dictionary, CTFontDescriptorAttributeKey.Features, (IntPtr d) => new CTFontFeatureSettings((NSDictionary)Runtime.GetNSObject(d)));
}
set
{
List<CTFontFeatureSettings> source;
if (value == null || (source = new List<CTFontFeatureSettings>(value)).Count == 0)
{
Adapter.SetValue((IDictionary<NSObject, NSObject>)Dictionary, (NSObject)CTFontDescriptorAttributeKey.Features, (NSObject)null);
}
else
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.FeatureSettings, NSArray.FromNSObjects(((IEnumerable<CTFontFeatureSettings>)source).Select((Func<CTFontFeatureSettings, NSObject>)((CTFontFeatureSettings e) => e.Dictionary)).ToList()));
}
}
}
public float? FixedAdvance
{
get
{
return Adapter.GetSingleValue(Dictionary, CTFontDescriptorAttributeKey.FixedAdvance);
}
set
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.FixedAdvance, value);
}
}
public CTFontOrientation? FontOrientation
{
get
{
uint? uInt32Value = Adapter.GetUInt32Value(Dictionary, CTFontDescriptorAttributeKey.FontOrientation);
if (uInt32Value.HasValue)
{
return (CTFontOrientation)uInt32Value.Value;
}
return null;
}
set
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.FontOrientation, value.HasValue ? new uint?((uint)value.Value) : null);
}
}
public CTFontFormat? FontFormat
{
get
{
uint? uInt32Value = Adapter.GetUInt32Value(Dictionary, CTFontDescriptorAttributeKey.FontFormat);
if (uInt32Value.HasValue)
{
return (CTFontFormat)uInt32Value.Value;
}
return null;
}
set
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.FontFormat, value.HasValue ? new uint?((uint)value.Value) : null);
}
}
public NSNumber RegistrationScope
{
get
{
return (NSNumber)Dictionary[CTFontDescriptorAttributeKey.RegistrationScope];
}
set
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.RegistrationScope, value);
}
}
public CTFontPriority? Priority
{
get
{
uint? uInt32Value = Adapter.GetUInt32Value(Dictionary, CTFontDescriptorAttributeKey.Priority);
if (uInt32Value.HasValue)
{
return (CTFontPriority)uInt32Value.Value;
}
return null;
}
set
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.Priority, value.HasValue ? new uint?((uint)value.Value) : null);
}
}
public bool Enabled
{
get
{
NSNumber nSNumber = (NSNumber)Dictionary[CTFontDescriptorAttributeKey.Enabled];
if (nSNumber == null)
{
return false;
}
return nSNumber.Int32Value != 0;
}
set
{
Adapter.SetValue(Dictionary, CTFontDescriptorAttributeKey.Enabled, value ? new NSNumber(1) : null);
}
}
public CTFontDescriptorAttributes()
: this(new NSMutableDictionary())
{
}
public CTFontDescriptorAttributes(NSDictionary dictionary)
{
if (dictionary == null)
{
throw new ArgumentNullException("dictionary");
}
Dictionary = dictionary;
}
}
}