|
9 | 9 | import org.apache.commons.io.IOUtils;
|
10 | 10 | import org.apache.commons.lang3.SystemUtils;
|
11 | 11 | import org.lwjgl.stb.STBTTFontinfo;
|
| 12 | +import org.lwjgl.system.JNI; |
12 | 13 | import org.lwjgl.system.MemoryStack;
|
13 | 14 | import org.lwjgl.system.MemoryUtil;
|
14 |
| -import org.lwjgl.system.dyncall.DynCall; |
15 | 15 | import org.lwjgl.system.windows.User32;
|
16 | 16 | import org.slf4j.Logger;
|
17 | 17 | import org.slf4j.LoggerFactory;
|
|
36 | 36 | import static org.lwjgl.system.MemoryStack.stackPush;
|
37 | 37 |
|
38 | 38 | public final class STBTTFontManager extends FontManager {
|
39 |
| - |
40 | 39 | public static final Logger LOGGER = LoggerFactory.getLogger("Font");
|
41 | 40 |
|
42 | 41 | private static final boolean DEBUG = Boolean.parseBoolean(System.getProperty("engine.font.debug", "false"));
|
@@ -115,22 +114,14 @@ private Font getSystemDefaultFont() {
|
115 | 114 | return new Font("Arial", Font.REGULAR, 16);
|
116 | 115 | }
|
117 | 116 |
|
118 |
| - long callVM = MemoryUtil.NULL; |
119 | 117 | try (MemoryStack stack = stackPush()) {
|
120 | 118 | int sizeLOGFONT = Integer.BYTES * 5 + Byte.BYTES * 8 + Character.BYTES * 32;
|
121 |
| - ByteBuffer structLOGFONT = stack.malloc(sizeLOGFONT); |
122 |
| - callVM = DynCall.dcNewCallVM(Integer.BYTES * 3 + Long.BYTES); |
123 |
| - DynCall.dcArgInt(callVM, 0x001F); // SPI_GETICONTITLELOGFONT |
124 |
| - DynCall.dcArgInt(callVM, sizeLOGFONT); |
125 |
| - DynCall.dcArgPointer(callVM, MemoryUtil.memAddress(structLOGFONT)); |
126 |
| - DynCall.dcArgInt(callVM, 0); |
127 |
| - DynCall.dcCallBool(callVM, systemParametersInfoW); |
128 |
| - String defaultFontFamily = MemoryUtil.memUTF16Safe(structLOGFONT.position(Integer.BYTES * 5 + Byte.BYTES * 8)).trim(); |
129 |
| - return new Font(defaultFontFamily, Font.REGULAR, 16); |
130 |
| - } finally { |
131 |
| - if (callVM != MemoryUtil.NULL) { |
132 |
| - DynCall.dcFree(callVM); |
| 119 | + long pointerLOGFONT = stack.nmalloc(sizeLOGFONT); |
| 120 | + if (JNI.callPI(0x001F, sizeLOGFONT, pointerLOGFONT, 0, systemParametersInfoW) == 0) { |
| 121 | + return new Font("Arial", Font.REGULAR, 16); |
133 | 122 | }
|
| 123 | + String fontFamily = MemoryUtil.memUTF16Safe(pointerLOGFONT + Integer.BYTES * 5 + Byte.BYTES * 8); |
| 124 | + return new Font(fontFamily, Font.REGULAR, 16); |
134 | 125 | }
|
135 | 126 | }
|
136 | 127 |
|
|
0 commit comments