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

88 lines
1.9 KiB
C#

using CPF.Mac.Foundation;
using CPF.Mac.ObjCRuntime;
using System;
namespace CPF.Mac.CoreGraphics
{
public class CGPDFPageInfo
{
private static IntPtr kCGPDFContextMediaBox;
private static IntPtr kCGPDFContextCropBox;
private static IntPtr kCGPDFContextBleedBox;
private static IntPtr kCGPDFContextTrimBox;
private static IntPtr kCGPDFContextArtBox;
public CGRect? MediaBox
{
get;
set;
}
public CGRect? CropBox
{
get;
set;
}
public CGRect? BleedBox
{
get;
set;
}
public CGRect? TrimBox
{
get;
set;
}
public CGRect? ArtBox
{
get;
set;
}
static CGPDFPageInfo()
{
IntPtr handle = Dlfcn.dlopen("/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/CoreGraphics", 0);
try
{
kCGPDFContextMediaBox = Dlfcn.GetIndirect(handle, "kCGPDFContextMediaBox");
kCGPDFContextCropBox = Dlfcn.GetIndirect(handle, "kCGPDFContextCropBox");
kCGPDFContextBleedBox = Dlfcn.GetIndirect(handle, "kCGPDFContextBleedBox");
kCGPDFContextTrimBox = Dlfcn.GetIndirect(handle, "kCGPDFContextTrimBox");
kCGPDFContextArtBox = Dlfcn.GetIndirect(handle, "kCGPDFContextArtBox");
}
finally
{
Dlfcn.dlclose(handle);
}
}
private unsafe static void Add(NSMutableDictionary dict, IntPtr key, CGRect? val)
{
if (val.HasValue)
{
CGRect value = val.Value;
NSData obj = NSData.FromBytes((IntPtr)(void*)(&value), 16uL);
dict.LowlevelSetObject(obj, key);
}
}
internal virtual NSMutableDictionary ToDictionary()
{
NSMutableDictionary nSMutableDictionary = new NSMutableDictionary();
Add(nSMutableDictionary, kCGPDFContextMediaBox, MediaBox);
Add(nSMutableDictionary, kCGPDFContextCropBox, CropBox);
Add(nSMutableDictionary, kCGPDFContextBleedBox, BleedBox);
Add(nSMutableDictionary, kCGPDFContextTrimBox, TrimBox);
Add(nSMutableDictionary, kCGPDFContextArtBox, ArtBox);
return nSMutableDictionary;
}
}
}