blob: 090dcb31f6c3c91269f733c14f9da4b661af5ea6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
/** Available and recommended on Mac OS X >= 10.6 Update 4 */
public static final int JAWT_MACOSX_USE_CALAYER = 0x80000000;
public static final VersionNumber JAWT_MacOSXCALayerMinVersion = new VersionNumber(10,6,4);
private static volatile JAWT jawt = null;
private static int jawt_version_flags = 0;
private int jawt_version_cached = 0;
public final int getVersionCached() {
return jawt_version_cached;
}
public static void setJAWTVersionFlags(int versionFlags) {
synchronized (JAWT.class) {
if (jawt != null) {
throw new RuntimeException("JAWT already instantiated");
}
jawt_version_flags = versionFlags;
}
}
public static boolean isJAWTInstantiated() {
synchronized (JAWT.class) {
return jawt != null;
}
}
/** Helper routine for all users to call to access the JAWT. */
public static JAWT getJAWT() {
if (jawt == null) {
synchronized (JAWT.class) {
if (jawt == null) {
JAWTUtil.initSingleton();
// Workaround for 4845371.
// Make sure the first reference to the JNI GetDirectBufferAddress is done
// from a privileged context so the VM's internal class lookups will succeed.
AccessController.doPrivileged(new PrivilegedAction<Object>() {
public Object run() {
JAWT j = JAWT.create();
if( 0 != ( jawt_version_flags & JAWT_MACOSX_USE_CALAYER ) ) {
j.setVersion(jawt_version_flags);
if (JAWTFactory.JAWT_GetAWT(j)) {
jawt = j;
jawt.jawt_version_cached = jawt.getVersion();
return null;
}
jawt_version_flags &= ~JAWT_MACOSX_USE_CALAYER;
System.err.println("MacOSX "+Platform.OS_VERSION_NUMBER+" >= "+JAWT_MacOSXCALayerMinVersion+": Failed to use JAWT_MACOSX_USE_CALAYER");
}
j.setVersion(jawt_version_flags);
if (!JAWTFactory.JAWT_GetAWT(j)) {
throw new RuntimeException("Unable to initialize JAWT: 0x"+Integer.toHexString(jawt_version_flags));
}
jawt = j;
jawt.jawt_version_cached = jawt.getVersion();
return null;
}
});
}
}
}
return jawt;
}
|