FontLoadStatus FontLoad(const char *p_filename) { FontLoadStatus t_status; t_status = kFontLoadStatusSuccess; FSSpec t_fsspec; if (t_status == kFontLoadStatusSuccess) { if (!path_to_fsspec(p_filename, &t_fsspec)) t_status = kFontLoadStatusNotFound; } ATSFontContainerRef t_container; t_container = NULL; if (t_status == kFontLoadStatusSuccess) { OSStatus t_os_status; t_os_status = ATSFontActivateFromFileSpecification(&t_fsspec, kATSFontContextLocal, kATSFontFormatUnspecified, NULL, kATSOptionFlagsDefault, &t_container); if (t_os_status != noErr) t_status = kFontLoadStatusBadFont; } if (t_status == kFontLoadStatusSuccess) s_font_map . insert(make_pair(std::string(p_filename), t_container)); return t_status; }
static void registerFont(QFontDatabasePrivate::ApplicationFont *fnt) { ATSFontContainerRef handle; OSStatus e; if(fnt->data.isEmpty()) { #if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_5) { extern OSErr qt_mac_create_fsref(const QString &, FSRef *); // qglobal.cpp FSRef ref; if(qt_mac_create_fsref(fnt->fileName, &ref) != noErr) return; ATSFontActivateFromFileReference(&ref, kATSFontContextLocal, kATSFontFormatUnspecified, 0, kATSOptionFlagsDefault, &handle); } else #endif { extern Q_CORE_EXPORT OSErr qt_mac_create_fsspec(const QString &, FSSpec *); // global.cpp FSSpec spec; if(qt_mac_create_fsspec(fnt->fileName, &spec) != noErr) return; e = ATSFontActivateFromFileSpecification(&spec, kATSFontContextLocal, kATSFontFormatUnspecified, 0, kATSOptionFlagsDefault, &handle); } } else { e = ATSFontActivateFromMemory((void *)fnt->data.constData(), fnt->data.size(), kATSFontContextLocal, kATSFontFormatUnspecified, 0, kATSOptionFlagsDefault, &handle); fnt->data = QByteArray(); } if(e != noErr) return; ItemCount fontCount = 0; e = ATSFontFindFromContainer(handle, kATSOptionFlagsDefault, 0, 0, &fontCount); if(e != noErr) return; QVarLengthArray<ATSFontRef> containedFonts(fontCount); e = ATSFontFindFromContainer(handle, kATSOptionFlagsDefault, fontCount, containedFonts.data(), &fontCount); if(e != noErr) return; fnt->families.clear(); for(int i = 0; i < containedFonts.size(); ++i) { QCFString family; ATSFontGetName(containedFonts[i], kATSOptionFlagsDefault, &family); fnt->families.append(family); } fnt->handle = handle; }
static PyObject* loadfont(PyObject* self, PyObject* args) { PyObject* result = Py_False; const char* path = NULL; int ok = PyArg_ParseTuple(args, "s", &path); if (ok) { CFStringRef componentPath = CFStringCreateWithCString(kCFAllocatorDefault, path, kCFStringEncodingUTF8); CFURLRef componentURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, componentPath, kCFURLPOSIXPathStyle, false); FSRef fsref; if (CFURLGetFSRef(componentURL, &fsref)) { OSStatus err = noErr; ATSFontContainerRef fontContainerRef; // we don't deactivate the font #if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_4) err = ATSFontActivateFromFileReference(&fsref, kATSFontContextLocal, kATSFontFormatUnspecified, NULL, kATSOptionFlagsDefault, &fontContainerRef); #else FSSpec fsSpec; FSRef fsRef; if ((err = FSGetCatalogInfo( &fsRef, kFSCatInfoNone, NULL, NULL, &fsSpec, NULL)) == noErr) { err = ATSFontActivateFromFileSpecification(&fsSpec, kATSFontContextLocal, kATSFontFormatUnspecified, NULL, kATSOptionFlagsDefault, &fontContainerRef); } #endif if (err == noErr) { result = Py_True; } } CFRelease(componentURL); CFRelease(componentPath); } return result; }
static void registerFont(QFontDatabasePrivate::ApplicationFont *fnt) { ATSFontContainerRef handle; OSStatus e = noErr; if(fnt->data.isEmpty()) { #if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_5) { extern OSErr qt_mac_create_fsref(const QString &, FSRef *); // qglobal.cpp FSRef ref; if(qt_mac_create_fsref(fnt->fileName, &ref) != noErr) return; ATSFontActivateFromFileReference(&ref, kATSFontContextLocal, kATSFontFormatUnspecified, 0, kATSOptionFlagsDefault, &handle); } else #endif { #ifndef Q_WS_MAC64 extern Q_CORE_EXPORT OSErr qt_mac_create_fsspec(const QString &, FSSpec *); // global.cpp FSSpec spec; if(qt_mac_create_fsspec(fnt->fileName, &spec) != noErr) return; e = ATSFontActivateFromFileSpecification(&spec, kATSFontContextLocal, kATSFontFormatUnspecified, 0, kATSOptionFlagsDefault, &handle); #endif } } else { e = ATSFontActivateFromMemory((void *)fnt->data.constData(), fnt->data.size(), kATSFontContextLocal, kATSFontFormatUnspecified, 0, kATSOptionFlagsDefault, &handle); fnt->data = QByteArray(); } if(e != noErr) return; ItemCount fontCount = 0; e = ATSFontFindFromContainer(handle, kATSOptionFlagsDefault, 0, 0, &fontCount); if(e != noErr) return; QVarLengthArray<ATSFontRef> containedFonts(fontCount); e = ATSFontFindFromContainer(handle, kATSOptionFlagsDefault, fontCount, containedFonts.data(), &fontCount); if(e != noErr) return; fnt->families.clear(); #if defined(QT_MAC_USE_COCOA) // Make sure that the family name set on the font matches what // kCTFontFamilyNameAttribute returns in initializeDb(). // So far the best solution seems find the installed font // using CoreText and get the family name from it. // (ATSFontFamilyGetName appears to be the correct API, but also // returns the font display name.) for(int i = 0; i < containedFonts.size(); ++i) { QCFString fontPostScriptName; ATSFontGetPostScriptName(containedFonts[i], kATSOptionFlagsDefault, &fontPostScriptName); QCFType<CTFontDescriptorRef> font = CTFontDescriptorCreateWithNameAndSize(fontPostScriptName, 14); QCFString familyName = (CFStringRef)CTFontDescriptorCopyAttribute(font, kCTFontFamilyNameAttribute); fnt->families.append(familyName); } #else for(int i = 0; i < containedFonts.size(); ++i) { QCFString family; ATSFontGetName(containedFonts[i], kATSOptionFlagsDefault, &family); fnt->families.append(family); } #endif fnt->handle = handle; }