From 474af5c20483b4255fae5655e5d32471e7adeb7d Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Fri, 25 Dec 2015 02:52:33 +0900 Subject: [PATCH] Use Cocoa APIs for font detection on OS X. Moving FontConfig to Linux platform only. --- src/platform/linux.c | 28 ++++++++++++++++++++++++++++ src/platform/osx.m | 16 ++++++++++++++++ src/platform/posix.c | 28 ---------------------------- 3 files changed, 44 insertions(+), 28 deletions(-) diff --git a/src/platform/linux.c b/src/platform/linux.c index 3dc44da9b7..13d5244c61 100644 --- a/src/platform/linux.c +++ b/src/platform/linux.c @@ -24,6 +24,7 @@ #include #include #include "../util/util.h" +#include "fontconfig/fontconfig.h" // See http://syprog.blogspot.ru/2011/12/listing-loaded-shared-objects-in-linux.html struct lmap { @@ -163,4 +164,31 @@ int platform_open_common_file_dialog(int type, utf8 *title, utf8 *filename, utf8 return 0; } +bool platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer) +{ + FcConfig* config = FcInitLoadConfigAndFonts(); + FcPattern* pat = FcNameParse((const FcChar8*) font->font_name); + + FcConfigSubstitute(config, pat, FcMatchPattern); + FcDefaultSubstitute(pat); + + bool found = false; + FcResult result = FcResultNoMatch; + FcPattern* match = FcFontMatch(config, pat, &result); + + if (match) + { + FcChar8* filename = NULL; + if (FcPatternGetString(match, FC_FILE, 0, &filename) == FcResultMatch) + { + found = true; + strcpy(buffer, (utf8*) filename); + } + FcPatternDestroy(match); + } + + FcPatternDestroy(pat); + return found; +} + #endif diff --git a/src/platform/osx.m b/src/platform/osx.m index 1052cad4b8..784a3d7aab 100644 --- a/src/platform/osx.m +++ b/src/platform/osx.m @@ -172,4 +172,20 @@ int platform_open_common_file_dialog(int type, utf8 *title, utf8 *filename, utf8 } } +bool platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer) +{ + @autoreleasepool + { + CTFontDescriptorRef fontRef = CTFontDescriptorCreateWithNameAndSize((CFStringRef)[NSString stringWithUTF8String:font->font_name], 0.0); + CFURLRef url = (CFURLRef)CTFontDescriptorCopyAttribute(fontRef, kCTFontURLAttribute); + if (url) { + NSString *fontPath = [NSString stringWithString:[(NSURL *)CFBridgingRelease(url) path]]; + strcpy(buffer, fontPath.UTF8String); + return true; + } else { + return false; + } + } +} + #endif diff --git a/src/platform/posix.c b/src/platform/posix.c index 8bfd8eb260..8a09b85b6f 100644 --- a/src/platform/posix.c +++ b/src/platform/posix.c @@ -37,7 +37,6 @@ #include #include #include -#include "fontconfig/fontconfig.h" // The name of the mutex used to prevent multiple instances of the game from running #define SINGLE_INSTANCE_MUTEX_NAME "RollerCoaster Tycoon 2_GSKMUTEX" @@ -758,31 +757,4 @@ uint8 platform_get_locale_temperature_format(){ return TEMPERATURE_FORMAT_C; } -bool platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer) -{ - FcConfig* config = FcInitLoadConfigAndFonts(); - FcPattern* pat = FcNameParse((const FcChar8*) font->font_name); - - FcConfigSubstitute(config, pat, FcMatchPattern); - FcDefaultSubstitute(pat); - - bool found = false; - FcResult result = FcResultNoMatch; - FcPattern* match = FcFontMatch(config, pat, &result); - - if (match) - { - FcChar8* filename = NULL; - if (FcPatternGetString(match, FC_FILE, 0, &filename) == FcResultMatch) - { - found = true; - strcpy(buffer, (utf8*) filename); - } - FcPatternDestroy(match); - } - - FcPatternDestroy(pat); - return found; -} - #endif