Set up a future system for OS X like we have on GTK+ and moved everything we already have to it. You'll notice we also set up a loader for what we're going to use this for: using OpenType attributes directly on OS X.
This commit is contained in:
parent
90962e18c4
commit
dd54469677
|
@ -22,6 +22,7 @@ list(APPEND _LIBUI_SOURCES
|
||||||
darwin/fontbutton.m
|
darwin/fontbutton.m
|
||||||
darwin/fontmatch.m
|
darwin/fontmatch.m
|
||||||
darwin/form.m
|
darwin/form.m
|
||||||
|
darwin/future.m
|
||||||
darwin/graphemes.m
|
darwin/graphemes.m
|
||||||
darwin/grid.m
|
darwin/grid.m
|
||||||
darwin/group.m
|
darwin/group.m
|
||||||
|
|
|
@ -12,9 +12,7 @@ NSLayoutConstraint *mkConstraint(id view1, NSLayoutAttribute attr1, NSLayoutRela
|
||||||
attribute:attr2
|
attribute:attr2
|
||||||
multiplier:multiplier
|
multiplier:multiplier
|
||||||
constant:c];
|
constant:c];
|
||||||
// apparently only added in 10.9
|
FUTURE_NSLayoutConstraint_setIdentifier(constraint, desc);
|
||||||
if ([constraint respondsToSelector:@selector(setIdentifier:)])
|
|
||||||
[((id) constraint) setIdentifier:desc];
|
|
||||||
return constraint;
|
return constraint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
// 19 may 2017
|
||||||
|
#import "uipriv_darwin.h"
|
||||||
|
|
||||||
|
// functions and constants FROM THE FUTURE!
|
||||||
|
|
||||||
|
// TODO add weight constants here?
|
||||||
|
|
||||||
|
// added in OS X 10.10; we need 10.8
|
||||||
|
CFStringRef FUTURE_kCTFontOpenTypeFeatureTag = NULL;
|
||||||
|
CFStringRef FUTURE_kCTFontOpenTypeFeatureValue = NULL;
|
||||||
|
|
||||||
|
// note that we treat any error as "the symbols aren't there" (and don't care if dlclose() failed)
|
||||||
|
void loadFutures(void)
|
||||||
|
{
|
||||||
|
void *handle;
|
||||||
|
|
||||||
|
// 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(FUTURE_kCTFontOpenTypeFeatureTag, kCTFontOpenTypeFeatureTag);
|
||||||
|
GET(FUTURE_kCTFontOpenTypeFeatureValue, kCTFontOpenTypeFeatureValue);
|
||||||
|
dlclose(handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
// wrappers for methods that exist in the future that we can check for with respondsToSelector:
|
||||||
|
// keep them in one place for convenience
|
||||||
|
|
||||||
|
// apparently only added in 10.9; we need 10.8
|
||||||
|
void FUTURE_NSLayoutConstraint_setIdentifier(NSLayoutConstraint *constraint, NSString *identifier)
|
||||||
|
{
|
||||||
|
id cid = (id) constraint;
|
||||||
|
|
||||||
|
if ([constraint respondsToSelector:@selector(setIdentifier:)])
|
||||||
|
[cid setIdentifier:identifier];
|
||||||
|
}
|
||||||
|
|
||||||
|
// added in 10.11; we need 10.8
|
||||||
|
// return whether this was done because we recreate its effects if not (see winmoveresize.m)
|
||||||
|
BOOL FUTURE_NSWindow_performWindowDragWithEvent(NSWindow *w, NSEvent *initialEvent)
|
||||||
|
{
|
||||||
|
id cw = (id) w;
|
||||||
|
|
||||||
|
if ([w respondsToSelector:@selector(performWindowDragWithEvent:)]) {
|
||||||
|
[cw performWindowDragWithEvent:initialEvent];
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
return NO;
|
||||||
|
}
|
|
@ -119,6 +119,7 @@ const char *uiInit(uiInitOptions *o)
|
||||||
[realNSApp() setDelegate:delegate];
|
[realNSApp() setDelegate:delegate];
|
||||||
|
|
||||||
initAlloc();
|
initAlloc();
|
||||||
|
loadFutures();
|
||||||
|
|
||||||
// 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];
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_8
|
#define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_8
|
||||||
#define MAC_OS_X_VERSION_MAX_ALLOWED MAC_OS_X_VERSION_10_8
|
#define MAC_OS_X_VERSION_MAX_ALLOWED MAC_OS_X_VERSION_10_8
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
|
#include <dlfcn.h> // see future.m
|
||||||
#import "../ui.h"
|
#import "../ui.h"
|
||||||
#import "../ui_darwin.h"
|
#import "../ui_darwin.h"
|
||||||
#import "../common/uipriv.h"
|
#import "../common/uipriv.h"
|
||||||
|
@ -163,3 +164,10 @@ extern void openTypeToAAT(uiOpenTypeFeatures *otf, void (*doAAT)(uint16_t type,
|
||||||
(x8tox32(b) << 16) | \
|
(x8tox32(b) << 16) | \
|
||||||
(x8tox32(c) << 8) | \
|
(x8tox32(c) << 8) | \
|
||||||
x8tox32(d))
|
x8tox32(d))
|
||||||
|
|
||||||
|
// future.m
|
||||||
|
extern CFStringRef FUTURE_kCTFontOpenTypeFeatureTag;
|
||||||
|
extern CFStringRef FUTURE_kCTFontOpenTypeFeatureValue;
|
||||||
|
extern void loadFutures(void);
|
||||||
|
extern void FUTURE_NSLayoutConstraint_setIdentifier(NSLayoutConstraint *constraint, NSString *identifier);
|
||||||
|
extern BOOL FUTURE_NSWindow_performWindowDragWithEvent(NSWindow *w, NSEvent *initialEvent);
|
||||||
|
|
|
@ -48,12 +48,10 @@ void doManualMove(NSWindow *w, NSEvent *initialEvent)
|
||||||
BOOL (^handleEvent)(NSEvent *e);
|
BOOL (^handleEvent)(NSEvent *e);
|
||||||
__block BOOL done;
|
__block BOOL done;
|
||||||
|
|
||||||
// this is only available on 10.11 and newer (LONGTERM FUTURE)
|
// 10.11 gives us a method to handle this for us
|
||||||
// but use it if available; this lets us use the real OS dragging code, which means we can take advantage of OS features like Spaces
|
// use it if available; this lets us use the real OS dragging code, which means we can take advantage of OS features like Spaces
|
||||||
if ([w respondsToSelector:@selector(performWindowDragWithEvent:)]) {
|
if (FUTURE_NSWindow_performWindowDragWithEvent(w, initialEvent))
|
||||||
[((id) w) performWindowDragWithEvent:initialEvent];
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
mdp.w = w;
|
mdp.w = w;
|
||||||
mdp.initialFrame = [mdp.w frame];
|
mdp.initialFrame = [mdp.w frame];
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#define GDK_VERSION_MAX_ALLOWED GDK_VERSION_3_10
|
#define GDK_VERSION_MAX_ALLOWED GDK_VERSION_3_10
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <dlfcn.h> // see drawtext.c
|
#include <dlfcn.h> // see future.c
|
||||||
#include <langinfo.h>
|
#include <langinfo.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
Loading…
Reference in New Issue