Fixed loading of undocumented symbols. Now we're making progress! And what's more, fvar support is working! But not perfectly — everything seems to be hitting extremes...

This commit is contained in:
Pietro Gagliardi 2017-11-03 21:55:43 -04:00
parent e0b584082d
commit ad34745327
6 changed files with 40 additions and 8 deletions

View File

@ -44,6 +44,7 @@ list(APPEND _LIBUI_SOURCES
darwin/stddialogs.m darwin/stddialogs.m
darwin/tab.m darwin/tab.m
darwin/text.m darwin/text.m
darwin/undocumented.m
darwin/util.m darwin/util.m
darwin/window.m darwin/window.m
darwin/winmoveresize.m darwin/winmoveresize.m

View File

@ -26,10 +26,6 @@
// because the descriptors returned by Core Text's own font // because the descriptors returned by Core Text's own font
// matching won't have any. // matching won't have any.
// TODO explicitly mark these as undocumented
extern const CFStringRef kCTFontPreferredSubFamilyNameKey;
extern const CFStringRef kCTFontPreferredFamilyNameKey;
@implementation fontStyleData @implementation fontStyleData
- (id)initWithFont:(CTFontRef)f - (id)initWithFont:(CTFontRef)f
@ -246,7 +242,7 @@ extern const CFStringRef kCTFontPreferredFamilyNameKey;
FONTNAME(preferredSubFamilyName, FONTNAME(preferredSubFamilyName,
self->didPreferredSubFamilyName, self->didPreferredSubFamilyName,
self->preferredSubFamilyName, self->preferredSubFamilyName,
kCTFontPreferredSubFamilyNameKey) UNDOC_kCTFontPreferredSubFamilyNameKey)
FONTNAME(subFamilyName, FONTNAME(subFamilyName,
self->didSubFamilyName, self->didSubFamilyName,
self->subFamilyName, self->subFamilyName,
@ -258,7 +254,7 @@ FONTNAME(fullName,
FONTNAME(preferredFamilyName, FONTNAME(preferredFamilyName,
self->didPreferredFamilyName, self->didPreferredFamilyName,
self->preferredFamilyName, self->preferredFamilyName,
kCTFontPreferredFamilyNameKey) UNDOC_kCTFontPreferredFamilyNameKey)
FONTNAME(familyName, FONTNAME(familyName,
self->didFamilyName, self->didFamilyName,
self->familyName, self->familyName,

View File

@ -4,8 +4,6 @@
// functions and constants FROM THE FUTURE! // functions and constants FROM THE FUTURE!
// note: for constants, dlsym() returns the address of the constant itself, as if we had done &constantName // note: for constants, dlsym() returns the address of the constant itself, as if we had done &constantName
// TODO add weight constants here?
// added in OS X 10.10; we need 10.8 // added in OS X 10.10; we need 10.8
CFStringRef *FUTURE_kCTFontOpenTypeFeatureTag = NULL; CFStringRef *FUTURE_kCTFontOpenTypeFeatureTag = NULL;
CFStringRef *FUTURE_kCTFontOpenTypeFeatureValue = NULL; CFStringRef *FUTURE_kCTFontOpenTypeFeatureValue = NULL;

View File

@ -120,6 +120,7 @@ const char *uiInit(uiInitOptions *o)
initAlloc(); initAlloc();
loadFutures(); loadFutures();
loadUndocumented();
// always do this so we always have an application menu // always do this so we always have an application menu
appDelegate().menuManager = [[menuManager new] autorelease]; appDelegate().menuManager = [[menuManager new] autorelease];

View File

@ -174,3 +174,8 @@ extern CFStringRef *FUTURE_kCTFontOpenTypeFeatureValue;
extern void loadFutures(void); extern void loadFutures(void);
extern void FUTURE_NSLayoutConstraint_setIdentifier(NSLayoutConstraint *constraint, NSString *identifier); extern void FUTURE_NSLayoutConstraint_setIdentifier(NSLayoutConstraint *constraint, NSString *identifier);
extern BOOL FUTURE_NSWindow_performWindowDragWithEvent(NSWindow *w, NSEvent *initialEvent); extern BOOL FUTURE_NSWindow_performWindowDragWithEvent(NSWindow *w, NSEvent *initialEvent);
// undocumented.m
extern CFStringRef UNDOC_kCTFontPreferredSubFamilyNameKey;
extern CFStringRef UNDOC_kCTFontPreferredFamilyNameKey;
extern void loadUndocumented(void);

31
darwin/undocumented.m Normal file
View File

@ -0,0 +1,31 @@
// 3 november 2017
#import "uipriv_darwin.h"
// functions and constants FROM THE DEPTHS BELOW!
// note: for constants, dlsym() returns the address of the constant itself, as if we had done &constantName
// we also provide default values just in case
// these values come from 10.12.6
CFStringRef UNDOC_kCTFontPreferredSubFamilyNameKey = CFSTR("CTFontPreferredSubFamilyName");
CFStringRef UNDOC_kCTFontPreferredFamilyNameKey = CFSTR("CTFontPreferredFamilyName");
// note that we treat any error as "the symbols aren't there" (and don't care if dlclose() failed)
void loadUndocumented(void)
{
void *handle;
CFStringRef *str;
// dlsym() walks the dependency chain, so opening the current process should be sufficient
handle = dlopen(NULL, RTLD_LAZY);
if (handle == NULL)
return;
#define GET(var, fn) *((void **) (&var)) = dlsym(handle, #fn)
GET(str, kCTFontPreferredSubFamilyNameKey);
NSLog(@"get %p", str);
if (str != NULL)
UNDOC_kCTFontPreferredSubFamilyNameKey = *str;
GET(str, kCTFontPreferredFamilyNameKey);
if (str != NULL)
UNDOC_kCTFontPreferredFamilyNameKey = *str;
dlclose(handle);
}