Spaces:
Runtime error
Runtime error
text-2-character-anim
/
pyrender
/.eggs
/pyglet-2.0.5-py3.10.egg
/pyglet
/libs
/darwin
/cocoapy
/cocoalibs.py
from ctypes import * | |
from ctypes import util | |
from .runtime import send_message, ObjCInstance | |
from .cocoatypes import * | |
###################################################################### | |
# CORE FOUNDATION | |
lib = util.find_library('CoreFoundation') | |
# Hack for compatibility with macOS > 11.0 | |
if lib is None: | |
lib = '/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation' | |
cf = cdll.LoadLibrary(lib) | |
kCFStringEncodingUTF8 = 0x08000100 | |
CFAllocatorRef = c_void_p | |
CFStringEncoding = c_uint32 | |
cf.CFStringCreateWithCString.restype = c_void_p | |
cf.CFStringCreateWithCString.argtypes = [CFAllocatorRef, c_char_p, CFStringEncoding] | |
cf.CFRelease.restype = c_void_p | |
cf.CFRelease.argtypes = [c_void_p] | |
cf.CFStringGetLength.restype = CFIndex | |
cf.CFStringGetLength.argtypes = [c_void_p] | |
cf.CFStringGetMaximumSizeForEncoding.restype = CFIndex | |
cf.CFStringGetMaximumSizeForEncoding.argtypes = [CFIndex, CFStringEncoding] | |
cf.CFStringGetCString.restype = c_bool | |
cf.CFStringGetCString.argtypes = [c_void_p, c_char_p, CFIndex, CFStringEncoding] | |
cf.CFStringGetTypeID.restype = CFTypeID | |
cf.CFStringGetTypeID.argtypes = [] | |
cf.CFAttributedStringCreate.restype = c_void_p | |
cf.CFAttributedStringCreate.argtypes = [CFAllocatorRef, c_void_p, c_void_p] | |
# Core Foundation type to Python type conversion functions | |
def CFSTR(string): | |
return ObjCInstance(c_void_p(cf.CFStringCreateWithCString( | |
None, string.encode('utf8'), kCFStringEncodingUTF8))) | |
# Other possible names for this method: | |
# at, ampersat, arobe, apenstaartje (little monkey tail), strudel, | |
# klammeraffe (spider monkey), little_mouse, arroba, sobachka (doggie) | |
# malpa (monkey), snabel (trunk), papaki (small duck), afna (monkey), | |
# kukac (caterpillar). | |
def get_NSString(string): | |
"""Autoreleased version of CFSTR""" | |
return CFSTR(string).autorelease() | |
def cfstring_to_string(cfstring): | |
length = cf.CFStringGetLength(cfstring) | |
size = cf.CFStringGetMaximumSizeForEncoding(length, kCFStringEncodingUTF8) | |
buffer = c_buffer(size + 1) | |
result = cf.CFStringGetCString(cfstring, buffer, len(buffer), kCFStringEncodingUTF8) | |
if result: | |
return str(buffer.value, 'utf-8') | |
cf.CFDataCreate.restype = c_void_p | |
cf.CFDataCreate.argtypes = [c_void_p, c_void_p, CFIndex] | |
cf.CFDataGetBytes.restype = None | |
cf.CFDataGetBytes.argtypes = [c_void_p, CFRange, c_void_p] | |
cf.CFDataGetLength.restype = CFIndex | |
cf.CFDataGetLength.argtypes = [c_void_p] | |
cf.CFDictionaryGetValue.restype = c_void_p | |
cf.CFDictionaryGetValue.argtypes = [c_void_p, c_void_p] | |
cf.CFDictionaryAddValue.restype = None | |
cf.CFDictionaryAddValue.argtypes = [c_void_p, c_void_p, c_void_p] | |
cf.CFDictionaryCreateMutable.restype = c_void_p | |
cf.CFDictionaryCreateMutable.argtypes = [CFAllocatorRef, CFIndex, c_void_p, c_void_p] | |
cf.CFNumberCreate.restype = c_void_p | |
cf.CFNumberCreate.argtypes = [CFAllocatorRef, CFNumberType, c_void_p] | |
cf.CFNumberGetType.restype = CFNumberType | |
cf.CFNumberGetType.argtypes = [c_void_p] | |
cf.CFNumberGetValue.restype = c_ubyte | |
cf.CFNumberGetValue.argtypes = [c_void_p, CFNumberType, c_void_p] | |
cf.CFNumberGetTypeID.restype = CFTypeID | |
cf.CFNumberGetTypeID.argtypes = [] | |
cf.CFGetTypeID.restype = CFTypeID | |
cf.CFGetTypeID.argtypes = [c_void_p] | |
# CFNumber.h | |
kCFNumberSInt8Type = 1 | |
kCFNumberSInt16Type = 2 | |
kCFNumberSInt32Type = 3 | |
kCFNumberSInt64Type = 4 | |
kCFNumberFloat32Type = 5 | |
kCFNumberFloat64Type = 6 | |
kCFNumberCharType = 7 | |
kCFNumberShortType = 8 | |
kCFNumberIntType = 9 | |
kCFNumberLongType = 10 | |
kCFNumberLongLongType = 11 | |
kCFNumberFloatType = 12 | |
kCFNumberDoubleType = 13 | |
kCFNumberCFIndexType = 14 | |
kCFNumberNSIntegerType = 15 | |
kCFNumberCGFloatType = 16 | |
kCFNumberMaxType = 16 | |
def cfnumber_to_number(cfnumber): | |
"""Convert CFNumber to python int or float.""" | |
numeric_type = cf.CFNumberGetType(cfnumber) | |
cfnum_to_ctype = {kCFNumberSInt8Type:c_int8, kCFNumberSInt16Type:c_int16, | |
kCFNumberSInt32Type:c_int32, kCFNumberSInt64Type:c_int64, | |
kCFNumberFloat32Type:c_float, kCFNumberFloat64Type:c_double, | |
kCFNumberCharType:c_byte, kCFNumberShortType:c_short, | |
kCFNumberIntType:c_int, kCFNumberLongType:c_long, | |
kCFNumberLongLongType:c_longlong, kCFNumberFloatType:c_float, | |
kCFNumberDoubleType:c_double, kCFNumberCFIndexType:CFIndex, | |
kCFNumberCGFloatType:CGFloat} | |
if numeric_type in cfnum_to_ctype: | |
t = cfnum_to_ctype[numeric_type] | |
result = t() | |
if cf.CFNumberGetValue(cfnumber, numeric_type, byref(result)): | |
return result.value | |
else: | |
raise Exception('cfnumber_to_number: unhandled CFNumber type %d' % numeric_type) | |
# Dictionary of cftypes matched to the method converting them to python values. | |
known_cftypes = { cf.CFStringGetTypeID() : cfstring_to_string, | |
cf.CFNumberGetTypeID() : cfnumber_to_number | |
} | |
def cftype_to_value(cftype): | |
"""Convert a CFType into an equivalent python type. | |
The convertible CFTypes are taken from the known_cftypes | |
dictionary, which may be added to if another library implements | |
its own conversion methods.""" | |
if not cftype: | |
return None | |
typeID = cf.CFGetTypeID(cftype) | |
if typeID in known_cftypes: | |
convert_function = known_cftypes[typeID] | |
return convert_function(cftype) | |
else: | |
return cftype | |
cf.CFSetGetCount.restype = CFIndex | |
cf.CFSetGetCount.argtypes = [c_void_p] | |
cf.CFSetGetValues.restype = None | |
# PyPy 1.7 is fine with 2nd arg as POINTER(c_void_p), | |
# but CPython ctypes 1.1.0 complains, so just use c_void_p. | |
cf.CFSetGetValues.argtypes = [c_void_p, c_void_p] | |
def cfset_to_set(cfset): | |
"""Convert CFSet to python set.""" | |
count = cf.CFSetGetCount(cfset) | |
buffer = (c_void_p * count)() | |
cf.CFSetGetValues(cfset, byref(buffer)) | |
return set([ cftype_to_value(c_void_p(buffer[i])) for i in range(count) ]) | |
cf.CFArrayGetCount.restype = CFIndex | |
cf.CFArrayGetCount.argtypes = [c_void_p] | |
cf.CFArrayGetValueAtIndex.restype = c_void_p | |
cf.CFArrayGetValueAtIndex.argtypes = [c_void_p, CFIndex] | |
def cfarray_to_list(cfarray): | |
"""Convert CFArray to python list.""" | |
count = cf.CFArrayGetCount(cfarray) | |
return [ cftype_to_value(c_void_p(cf.CFArrayGetValueAtIndex(cfarray, i))) | |
for i in range(count) ] | |
kCFRunLoopDefaultMode = c_void_p.in_dll(cf, 'kCFRunLoopDefaultMode') | |
cf.CFRunLoopGetCurrent.restype = c_void_p | |
cf.CFRunLoopGetCurrent.argtypes = [] | |
cf.CFRunLoopGetMain.restype = c_void_p | |
cf.CFRunLoopGetMain.argtypes = [] | |
###################################################################### | |
# APPLICATION KIT | |
# Even though we don't use this directly, it must be loaded so that | |
# we can find the NSApplication, NSWindow, and NSView classes. | |
lib = util.find_library('AppKit') | |
# Hack for compatibility with macOS > 11.0 | |
if lib is None: | |
lib = '/System/Library/Frameworks/AppKit.framework/AppKit' | |
appkit = cdll.LoadLibrary(lib) | |
NSDefaultRunLoopMode = c_void_p.in_dll(appkit, 'NSDefaultRunLoopMode') | |
NSEventTrackingRunLoopMode = c_void_p.in_dll(appkit, 'NSEventTrackingRunLoopMode') | |
NSApplicationDidHideNotification = c_void_p.in_dll(appkit, 'NSApplicationDidHideNotification') | |
NSApplicationDidUnhideNotification = c_void_p.in_dll(appkit, 'NSApplicationDidUnhideNotification') | |
# /System/Library/Frameworks/AppKit.framework/Headers/NSEvent.h | |
NSAnyEventMask = 0xFFFFFFFF # NSUIntegerMax | |
NSKeyDown = 10 | |
NSKeyUp = 11 | |
NSFlagsChanged = 12 | |
NSApplicationDefined = 15 | |
NSAlphaShiftKeyMask = 1 << 16 | |
NSShiftKeyMask = 1 << 17 | |
NSControlKeyMask = 1 << 18 | |
NSAlternateKeyMask = 1 << 19 | |
NSCommandKeyMask = 1 << 20 | |
NSNumericPadKeyMask = 1 << 21 | |
NSHelpKeyMask = 1 << 22 | |
NSFunctionKeyMask = 1 << 23 | |
NSInsertFunctionKey = 0xF727 | |
NSDeleteFunctionKey = 0xF728 | |
NSHomeFunctionKey = 0xF729 | |
NSBeginFunctionKey = 0xF72A | |
NSEndFunctionKey = 0xF72B | |
NSPageUpFunctionKey = 0xF72C | |
NSPageDownFunctionKey = 0xF72D | |
# /System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h | |
NSBorderlessWindowMask = 0 | |
NSTitledWindowMask = 1 << 0 | |
NSClosableWindowMask = 1 << 1 | |
NSMiniaturizableWindowMask = 1 << 2 | |
NSResizableWindowMask = 1 << 3 | |
# /System/Library/Frameworks/AppKit.framework/Headers/NSPanel.h | |
NSUtilityWindowMask = 1 << 4 | |
# /System/Library/Frameworks/AppKit.framework/Headers/NSGraphics.h | |
NSBackingStoreRetained = 0 | |
NSBackingStoreNonretained = 1 | |
NSBackingStoreBuffered = 2 | |
# /System/Library/Frameworks/AppKit.framework/Headers/NSTrackingArea.h | |
NSTrackingMouseEnteredAndExited = 0x01 | |
NSTrackingMouseMoved = 0x02 | |
NSTrackingCursorUpdate = 0x04 | |
NSTrackingActiveInActiveApp = 0x40 | |
# /System/Library/Frameworks/AppKit.framework/Headers/NSOpenGL.h | |
NSOpenGLPFAAllRenderers = 1 # choose from all available renderers | |
NSOpenGLPFADoubleBuffer = 5 # choose a double buffered pixel format | |
NSOpenGLPFAStereo = 6 # stereo buffering supported | |
NSOpenGLPFAAuxBuffers = 7 # number of aux buffers | |
NSOpenGLPFAColorSize = 8 # number of color buffer bits | |
NSOpenGLPFAAlphaSize = 11 # number of alpha component bits | |
NSOpenGLPFADepthSize = 12 # number of depth buffer bits | |
NSOpenGLPFAStencilSize = 13 # number of stencil buffer bits | |
NSOpenGLPFAAccumSize = 14 # number of accum buffer bits | |
NSOpenGLPFAMinimumPolicy = 51 # never choose smaller buffers than requested | |
NSOpenGLPFAMaximumPolicy = 52 # choose largest buffers of type requested | |
NSOpenGLPFAOffScreen = 53 # choose an off-screen capable renderer | |
NSOpenGLPFAFullScreen = 54 # choose a full-screen capable renderer | |
NSOpenGLPFASampleBuffers = 55 # number of multi sample buffers | |
NSOpenGLPFASamples = 56 # number of samples per multi sample buffer | |
NSOpenGLPFAAuxDepthStencil = 57 # each aux buffer has its own depth stencil | |
NSOpenGLPFAColorFloat = 58 # color buffers store floating point pixels | |
NSOpenGLPFAMultisample = 59 # choose multisampling | |
NSOpenGLPFASupersample = 60 # choose supersampling | |
NSOpenGLPFASampleAlpha = 61 # request alpha filtering | |
NSOpenGLPFARendererID = 70 # request renderer by ID | |
NSOpenGLPFASingleRenderer = 71 # choose a single renderer for all screens | |
NSOpenGLPFANoRecovery = 72 # disable all failure recovery systems | |
NSOpenGLPFAAccelerated = 73 # choose a hardware accelerated renderer | |
NSOpenGLPFAClosestPolicy = 74 # choose the closest color buffer to request | |
NSOpenGLPFARobust = 75 # renderer does not need failure recovery | |
NSOpenGLPFABackingStore = 76 # back buffer contents are valid after swap | |
NSOpenGLPFAMPSafe = 78 # renderer is multi-processor safe | |
NSOpenGLPFAWindow = 80 # can be used to render to an onscreen window | |
NSOpenGLPFAMultiScreen = 81 # single window can span multiple screens | |
NSOpenGLPFACompliant = 83 # renderer is opengl compliant | |
NSOpenGLPFAScreenMask = 84 # bit mask of supported physical screens | |
NSOpenGLPFAPixelBuffer = 90 # can be used to render to a pbuffer | |
NSOpenGLPFARemotePixelBuffer = 91 # can be used to render offline to a pbuffer | |
NSOpenGLPFAAllowOfflineRenderers = 96 # allow use of offline renderers | |
NSOpenGLPFAAcceleratedCompute = 97 # choose a hardware accelerated compute device | |
NSOpenGLPFAOpenGLProfile = 99 # specify an OpenGL Profile to use | |
NSOpenGLPFAVirtualScreenCount = 128 # number of virtual screens in this format | |
NSOpenGLProfileVersionLegacy = 0x1000 # choose a Legacy/Pre-OpenGL 3.0 Implementation | |
NSOpenGLProfileVersion3_2Core = 0x3200 # choose an OpenGL 3.2 Core Implementation | |
NSOpenGLProfileVersion4_1Core = 0x4100 # choose an OpenGL 4.1 Core Implementation | |
NSOpenGLCPSwapInterval = 222 | |
# /System/Library/Frameworks/ApplicationServices.framework/Frameworks/... | |
# CoreGraphics.framework/Headers/CGImage.h | |
kCGImageAlphaNone = 0 | |
kCGImageAlphaPremultipliedLast = 1 | |
kCGImageAlphaPremultipliedFirst = 2 | |
kCGImageAlphaLast = 3 | |
kCGImageAlphaFirst = 4 | |
kCGImageAlphaNoneSkipLast = 5 | |
kCGImageAlphaNoneSkipFirst = 6 | |
kCGImageAlphaOnly = 7 | |
kCGImageAlphaPremultipliedLast = 1 | |
kCGBitmapAlphaInfoMask = 0x1F | |
kCGBitmapFloatComponents = 1 << 8 | |
kCGBitmapByteOrderMask = 0x7000 | |
kCGBitmapByteOrderDefault = 0 << 12 | |
kCGBitmapByteOrder16Little = 1 << 12 | |
kCGBitmapByteOrder32Little = 2 << 12 | |
kCGBitmapByteOrder16Big = 3 << 12 | |
kCGBitmapByteOrder32Big = 4 << 12 | |
# NSApplication.h | |
NSApplicationPresentationDefault = 0 | |
NSApplicationPresentationHideDock = 1 << 1 | |
NSApplicationPresentationHideMenuBar = 1 << 3 | |
NSApplicationPresentationDisableProcessSwitching = 1 << 5 | |
NSApplicationPresentationDisableHideApplication = 1 << 8 | |
# NSRunningApplication.h | |
NSApplicationActivationPolicyRegular = 0 | |
NSApplicationActivationPolicyAccessory = 1 | |
NSApplicationActivationPolicyProhibited = 2 | |
###################################################################### | |
# QUARTZ / COREGRAPHICS | |
lib = util.find_library('Quartz') | |
# Hack for compatibility with macOS > 11.0 | |
if lib is None: | |
lib = '/System/Library/Frameworks/Quartz.framework/Quartz' | |
quartz = cdll.LoadLibrary(lib) | |
CGDirectDisplayID = c_uint32 # CGDirectDisplay.h | |
CGError = c_int32 # CGError.h | |
CGBitmapInfo = c_uint32 # CGImage.h | |
# /System/Library/Frameworks/ApplicationServices.framework/Frameworks/... | |
# ImageIO.framework/Headers/CGImageProperties.h | |
kCGImagePropertyGIFDictionary = c_void_p.in_dll(quartz, 'kCGImagePropertyGIFDictionary') | |
kCGImagePropertyGIFDelayTime = c_void_p.in_dll(quartz, 'kCGImagePropertyGIFDelayTime') | |
# /System/Library/Frameworks/ApplicationServices.framework/Frameworks/... | |
# CoreGraphics.framework/Headers/CGColorSpace.h | |
kCGRenderingIntentDefault = 0 | |
quartz.CGDisplayIDToOpenGLDisplayMask.restype = c_uint32 | |
quartz.CGDisplayIDToOpenGLDisplayMask.argtypes = [c_uint32] | |
quartz.CGMainDisplayID.restype = CGDirectDisplayID | |
quartz.CGMainDisplayID.argtypes = [] | |
quartz.CGShieldingWindowLevel.restype = c_int32 | |
quartz.CGShieldingWindowLevel.argtypes = [] | |
quartz.CGCursorIsVisible.restype = c_bool | |
quartz.CGDisplayCopyAllDisplayModes.restype = c_void_p | |
quartz.CGDisplayCopyAllDisplayModes.argtypes = [CGDirectDisplayID, c_void_p] | |
quartz.CGDisplaySetDisplayMode.restype = CGError | |
quartz.CGDisplaySetDisplayMode.argtypes = [CGDirectDisplayID, c_void_p, c_void_p] | |
quartz.CGDisplayCapture.restype = CGError | |
quartz.CGDisplayCapture.argtypes = [CGDirectDisplayID] | |
quartz.CGDisplayRelease.restype = CGError | |
quartz.CGDisplayRelease.argtypes = [CGDirectDisplayID] | |
quartz.CGDisplayCopyDisplayMode.restype = c_void_p | |
quartz.CGDisplayCopyDisplayMode.argtypes = [CGDirectDisplayID] | |
quartz.CGDisplayModeGetRefreshRate.restype = c_double | |
quartz.CGDisplayModeGetRefreshRate.argtypes = [c_void_p] | |
quartz.CGDisplayModeRetain.restype = c_void_p | |
quartz.CGDisplayModeRetain.argtypes = [c_void_p] | |
quartz.CGDisplayModeRelease.restype = None | |
quartz.CGDisplayModeRelease.argtypes = [c_void_p] | |
quartz.CGDisplayModeGetWidth.restype = c_size_t | |
quartz.CGDisplayModeGetWidth.argtypes = [c_void_p] | |
quartz.CGDisplayModeGetHeight.restype = c_size_t | |
quartz.CGDisplayModeGetHeight.argtypes = [c_void_p] | |
quartz.CGDisplayModeCopyPixelEncoding.restype = c_void_p | |
quartz.CGDisplayModeCopyPixelEncoding.argtypes = [c_void_p] | |
quartz.CGGetActiveDisplayList.restype = CGError | |
quartz.CGGetActiveDisplayList.argtypes = [c_uint32, POINTER(CGDirectDisplayID), POINTER(c_uint32)] | |
quartz.CGDisplayBounds.restype = CGRect | |
quartz.CGDisplayBounds.argtypes = [CGDirectDisplayID] | |
quartz.CGImageSourceCreateWithData.restype = c_void_p | |
quartz.CGImageSourceCreateWithData.argtypes = [c_void_p, c_void_p] | |
quartz.CGImageSourceCreateImageAtIndex.restype = c_void_p | |
quartz.CGImageSourceCreateImageAtIndex.argtypes = [c_void_p, c_size_t, c_void_p] | |
quartz.CGImageSourceCopyPropertiesAtIndex.restype = c_void_p | |
quartz.CGImageSourceCopyPropertiesAtIndex.argtypes = [c_void_p, c_size_t, c_void_p] | |
quartz.CGImageGetDataProvider.restype = c_void_p | |
quartz.CGImageGetDataProvider.argtypes = [c_void_p] | |
quartz.CGDataProviderCopyData.restype = c_void_p | |
quartz.CGDataProviderCopyData.argtypes = [c_void_p] | |
quartz.CGDataProviderCreateWithCFData.restype = c_void_p | |
quartz.CGDataProviderCreateWithCFData.argtypes = [c_void_p] | |
quartz.CGImageCreate.restype = c_void_p | |
quartz.CGImageCreate.argtypes = [c_size_t, c_size_t, c_size_t, c_size_t, c_size_t, c_void_p, c_uint32, c_void_p, c_void_p, c_bool, c_int] | |
quartz.CGImageRelease.restype = None | |
quartz.CGImageRelease.argtypes = [c_void_p] | |
quartz.CGImageGetBytesPerRow.restype = c_size_t | |
quartz.CGImageGetBytesPerRow.argtypes = [c_void_p] | |
quartz.CGImageGetWidth.restype = c_size_t | |
quartz.CGImageGetWidth.argtypes = [c_void_p] | |
quartz.CGImageGetHeight.restype = c_size_t | |
quartz.CGImageGetHeight.argtypes = [c_void_p] | |
quartz.CGImageGetBitsPerPixel.restype = c_size_t | |
quartz.CGImageGetBitsPerPixel.argtypes = [c_void_p] | |
quartz.CGImageGetBitmapInfo.restype = CGBitmapInfo | |
quartz.CGImageGetBitmapInfo.argtypes = [c_void_p] | |
quartz.CGColorSpaceCreateDeviceRGB.restype = c_void_p | |
quartz.CGColorSpaceCreateDeviceRGB.argtypes = [] | |
quartz.CGDataProviderRelease.restype = None | |
quartz.CGDataProviderRelease.argtypes = [c_void_p] | |
quartz.CGColorSpaceRelease.restype = None | |
quartz.CGColorSpaceRelease.argtypes = [c_void_p] | |
quartz.CGWarpMouseCursorPosition.restype = CGError | |
quartz.CGWarpMouseCursorPosition.argtypes = [CGPoint] | |
quartz.CGDisplayMoveCursorToPoint.restype = CGError | |
quartz.CGDisplayMoveCursorToPoint.argtypes = [CGDirectDisplayID, CGPoint] | |
quartz.CGAssociateMouseAndMouseCursorPosition.restype = CGError | |
quartz.CGAssociateMouseAndMouseCursorPosition.argtypes = [c_bool] | |
quartz.CGBitmapContextCreate.restype = c_void_p | |
quartz.CGBitmapContextCreate.argtypes = [c_void_p, c_size_t, c_size_t, c_size_t, c_size_t, c_void_p, CGBitmapInfo] | |
quartz.CGBitmapContextCreateImage.restype = c_void_p | |
quartz.CGBitmapContextCreateImage.argtypes = [c_void_p] | |
quartz.CGFontCreateWithDataProvider.restype = c_void_p | |
quartz.CGFontCreateWithDataProvider.argtypes = [c_void_p] | |
quartz.CGFontCreateWithFontName.restype = c_void_p | |
quartz.CGFontCreateWithFontName.argtypes = [c_void_p] | |
quartz.CGContextDrawImage.restype = None | |
quartz.CGContextDrawImage.argtypes = [c_void_p, CGRect, c_void_p] | |
quartz.CGContextRelease.restype = None | |
quartz.CGContextRelease.argtypes = [c_void_p] | |
quartz.CGContextSetTextPosition.restype = None | |
quartz.CGContextSetTextPosition.argtypes = [c_void_p, CGFloat, CGFloat] | |
quartz.CGContextSetShouldAntialias.restype = None | |
quartz.CGContextSetShouldAntialias.argtypes = [c_void_p, c_bool] | |
###################################################################### | |
# CORETEXT | |
lib = util.find_library('CoreText') | |
# Hack for compatibility with macOS > 11.0 | |
if lib is None: | |
lib = '/System/Library/Frameworks/CoreText.framework/CoreText' | |
ct = cdll.LoadLibrary(lib) | |
# Types | |
CTFontOrientation = c_uint32 # CTFontDescriptor.h | |
CTFontSymbolicTraits = c_uint32 # CTFontTraits.h | |
# CoreText constants | |
kCTFontAttributeName = c_void_p.in_dll(ct, 'kCTFontAttributeName') | |
kCTFontFamilyNameAttribute = c_void_p.in_dll(ct, 'kCTFontFamilyNameAttribute') | |
kCTFontSymbolicTrait = c_void_p.in_dll(ct, 'kCTFontSymbolicTrait') | |
kCTFontWeightTrait = c_void_p.in_dll(ct, 'kCTFontWeightTrait') | |
kCTFontTraitsAttribute = c_void_p.in_dll(ct, 'kCTFontTraitsAttribute') | |
# constants from CTFontTraits.h | |
kCTFontItalicTrait = (1 << 0) | |
kCTFontBoldTrait = (1 << 1) | |
ct.CTLineCreateWithAttributedString.restype = c_void_p | |
ct.CTLineCreateWithAttributedString.argtypes = [c_void_p] | |
ct.CTLineDraw.restype = None | |
ct.CTLineDraw.argtypes = [c_void_p, c_void_p] | |
ct.CTFontGetBoundingRectsForGlyphs.restype = CGRect | |
ct.CTFontGetBoundingRectsForGlyphs.argtypes = [c_void_p, CTFontOrientation, POINTER(CGGlyph), POINTER(CGRect), CFIndex] | |
ct.CTFontGetAdvancesForGlyphs.restype = c_double | |
ct.CTFontGetAdvancesForGlyphs.argtypes = [c_void_p, CTFontOrientation, POINTER(CGGlyph), POINTER(CGSize), CFIndex] | |
ct.CTFontGetAscent.restype = CGFloat | |
ct.CTFontGetAscent.argtypes = [c_void_p] | |
ct.CTFontGetDescent.restype = CGFloat | |
ct.CTFontGetDescent.argtypes = [c_void_p] | |
ct.CTFontGetSymbolicTraits.restype = CTFontSymbolicTraits | |
ct.CTFontGetSymbolicTraits.argtypes = [c_void_p] | |
ct.CTFontGetGlyphsForCharacters.restype = c_bool | |
ct.CTFontGetGlyphsForCharacters.argtypes = [c_void_p, POINTER(UniChar), POINTER(CGGlyph), CFIndex] | |
ct.CTFontCreateWithGraphicsFont.restype = c_void_p | |
ct.CTFontCreateWithGraphicsFont.argtypes = [c_void_p, CGFloat, c_void_p, c_void_p] | |
ct.CTFontCopyFamilyName.restype = c_void_p | |
ct.CTFontCopyFamilyName.argtypes = [c_void_p] | |
ct.CTFontCopyFullName.restype = c_void_p | |
ct.CTFontCopyFullName.argtypes = [c_void_p] | |
ct.CTFontCreateWithFontDescriptor.restype = c_void_p | |
ct.CTFontCreateWithFontDescriptor.argtypes = [c_void_p, CGFloat, c_void_p] | |
ct.CTFontDescriptorCreateWithAttributes.restype = c_void_p | |
ct.CTFontDescriptorCreateWithAttributes.argtypes = [c_void_p] | |
###################################################################### | |
# FOUNDATION | |
lib = util.find_library('Foundation') | |
# Hack for compatibility with macOS > 11.0 | |
if lib is None: | |
lib = '/System/Library/Frameworks/Foundation.framework/Foundation' | |
foundation = cdll.LoadLibrary(lib) | |
foundation.NSMouseInRect.restype = c_bool | |
foundation.NSMouseInRect.argtypes = [NSPoint, NSRect, c_bool] | |