57 lines
1.9 KiB
Java
57 lines
1.9 KiB
Java
package tech.williamist.darktitlebar;
|
|
|
|
import com.sun.jna.Memory;
|
|
import com.sun.jna.Native;
|
|
import com.sun.jna.Pointer;
|
|
import com.sun.jna.platform.win32.Kernel32;
|
|
import com.sun.jna.platform.win32.WinDef;
|
|
import com.sun.jna.platform.win32.WinNT;
|
|
import net.minecraft.client.util.Window;
|
|
import org.lwjgl.glfw.GLFWNativeWin32;
|
|
import org.lwjgl.system.Platform;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
public class DarkTitleBar {
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger("DarkTitleBar");
|
|
|
|
public static void setDarkTitlebar(Window w) {
|
|
// check if we are running on windows
|
|
if (Platform.get() != Platform.WINDOWS) {
|
|
logger.warn("DarkTitleBar only works on windows!");
|
|
return;
|
|
}
|
|
|
|
// check for supported windows versions
|
|
WinNT.OSVERSIONINFO osversioninfo = new WinNT.OSVERSIONINFO();
|
|
|
|
Kernel32.INSTANCE.GetVersionEx(osversioninfo);
|
|
|
|
if (osversioninfo.dwMajorVersion.longValue() < 10 || osversioninfo.dwBuildNumber.longValue() < 17763) { // 1809
|
|
logger.warn("DarkTitleBar requires Windows 10 version 1809 or newer!");
|
|
return;
|
|
}
|
|
|
|
// get hwnd
|
|
long glfwWindow = w.getHandle();
|
|
long hwndLong = GLFWNativeWin32.glfwGetWin32Window(glfwWindow);
|
|
WinDef.HWND hwnd = new WinDef.HWND(Pointer.createConstant(hwndLong));
|
|
|
|
// set dark modey
|
|
Memory mem = new Memory(Native.POINTER_SIZE);
|
|
mem.setInt(0, 1);
|
|
DwmApi.INSTANCE.DwmSetWindowAttribute(
|
|
hwnd,
|
|
DwmApi.DWMWA_USE_IMMERSIVE_DARK_MODE,
|
|
new WinDef.LPVOID(mem),
|
|
new WinDef.DWORD(WinDef.DWORD.SIZE)
|
|
);
|
|
mem.close();
|
|
|
|
// we have to "refresh" the window for the titlebar to appear without resizing.
|
|
// this seems to work.
|
|
w.applyVideoMode();
|
|
}
|
|
}
|