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});
        }
    }
}

引用的其他类