MacosUtil.java
com.mojang.blaze3d.platform.MacosUtil
信息
- 全限定名:com.mojang.blaze3d.platform.MacosUtil
- 类型:public class
- 包:com.mojang.blaze3d.platform
- 源码路径:src/main/java/com/mojang/blaze3d/platform/MacosUtil.java
- 起始行号:L17
- 职责:
TODO
字段/常量
-
IS_MACOS- 类型:
boolean - 修饰符:
public static final - 源码定位:
L18 - 说明:
TODO
- 类型:
-
NS_RESIZABLE_WINDOW_MASK- 类型:
int - 修饰符:
private static final - 源码定位:
L19 - 说明:
TODO
- 类型:
-
NS_FULL_SCREEN_WINDOW_MASK- 类型:
int - 修饰符:
private static final - 源码定位:
L20 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
- 无
方法
下面的方法块按源码顺序生成。
public static void exitNativeFullscreen(Window window) @ L22
- 方法名:exitNativeFullscreen
- 源码定位:L22
- 返回类型:void
- 修饰符:public static
参数:
- window: Window
说明:
TODO
public static void clearResizableBit(Window window) @ L26
- 方法名:clearResizableBit
- 源码定位:L26
- 返回类型:void
- 修饰符:public static
参数:
- window: Window
说明:
TODO
private static Optional<NSObject> getNsWindow(Window window) @ L33
- 方法名:getNsWindow
- 源码定位:L33
- 返回类型:Optional
- 修饰符:private static
参数:
- window: Window
说明:
TODO
private static boolean isInNativeFullscreen(NSObject nsWindow) @ L38
- 方法名:isInNativeFullscreen
- 源码定位:L38
- 返回类型:boolean
- 修饰符:private static
参数:
- nsWindow: NSObject
说明:
TODO
private static long getStyleMask(NSObject nsWindow) @ L42
- 方法名:getStyleMask
- 源码定位:L42
- 返回类型:long
- 修饰符:private static
参数:
- nsWindow: NSObject
说明:
TODO
private static void toggleNativeFullscreen(NSObject nsWindow) @ L46
- 方法名:toggleNativeFullscreen
- 源码定位:L46
- 返回类型:void
- 修饰符:private static
参数:
- nsWindow: NSObject
说明:
TODO
public static void loadIcon(IoSupplier<InputStream> icon) @ L50
- 方法名:loadIcon
- 源码定位:L50
- 返回类型:void
- 修饰符:public static
参数:
- icon: IoSupplier
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class MacosUtil {
public static final boolean IS_MACOS = System.getProperty("os.name").toLowerCase(Locale.ROOT).contains("mac");
private static final int NS_RESIZABLE_WINDOW_MASK = 8;
private static final int NS_FULL_SCREEN_WINDOW_MASK = 16384;
public static void exitNativeFullscreen(Window window) {
getNsWindow(window).filter(MacosUtil::isInNativeFullscreen).ifPresent(MacosUtil::toggleNativeFullscreen);
}
public static void clearResizableBit(Window window) {
getNsWindow(window).ifPresent(nsWindow -> {
long styleMask = getStyleMask(nsWindow);
nsWindow.send("setStyleMask:", new Object[]{styleMask & -9L});
});
}
private static Optional<NSObject> getNsWindow(Window window) {
long nsWindow = GLFWNativeCocoa.glfwGetCocoaWindow(window.handle());
return nsWindow != 0L ? Optional.of(new NSObject(new Pointer(nsWindow))) : Optional.empty();
}
private static boolean isInNativeFullscreen(NSObject nsWindow) {
return (getStyleMask(nsWindow) & 16384L) != 0L;
}
private static long getStyleMask(NSObject nsWindow) {
return (Long)nsWindow.sendRaw("styleMask", new Object[0]);
}
private static void toggleNativeFullscreen(NSObject nsWindow) {
nsWindow.send("toggleFullScreen:", new Object[]{Pointer.NULL});
}
public static void loadIcon(IoSupplier<InputStream> icon) throws IOException {
try (InputStream iconStream = icon.get()) {
String base64Icon = Base64.getEncoder().encodeToString(iconStream.readAllBytes());
Client objc = Client.getInstance();
Object data = objc.sendProxy("NSData", "alloc", new Object[0]).send("initWithBase64Encoding:", new Object[]{base64Icon});
Object image = objc.sendProxy("NSImage", "alloc", new Object[0]).send("initWithData:", new Object[]{data});
objc.sendProxy("NSApplication", "sharedApplication", new Object[0]).send("setApplicationIconImage:", new Object[]{image});
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
System.getProperty()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Client.getInstance()
- 引用位置: