| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- package glfw
- import (
- "runtime"
- "syscall"
- "unsafe"
- "fyne.io/fyne/v2"
- "fyne.io/fyne/v2/internal"
- "golang.org/x/sys/windows/registry"
- )
- func (w *window) setDarkMode() {
- if runtime.GOOS == "windows" {
- hwnd := w.view().GetWin32Window()
- dark := isDark()
- dwm := syscall.NewLazyDLL("dwmapi.dll")
- setAtt := dwm.NewProc("DwmSetWindowAttribute")
- ret, _, err := setAtt.Call(uintptr(unsafe.Pointer(hwnd)), // window handle
- 20, // DWMWA_USE_IMMERSIVE_DARK_MODE
- uintptr(unsafe.Pointer(&dark)), // on or off
- 8) // sizeof(darkMode)
- if ret != 0 && ret != 0x80070057 { // err is always non-nil, we check return value (except erroneous code)
- fyne.LogError("Failed to set dark mode", err)
- }
- }
- }
- func isDark() bool {
- k, err := registry.OpenKey(registry.CURRENT_USER, `SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize`, registry.QUERY_VALUE)
- if err != nil { // older version of Windows will not have this key
- return false
- }
- defer k.Close()
- useLight, _, err := k.GetIntegerValue("AppsUseLightTheme")
- if err != nil { // older version of Windows will not have this value
- return false
- }
- return useLight == 0
- }
- func (w *window) computeCanvasSize(width, height int) fyne.Size {
- if w.fixedSize {
- return fyne.NewSize(internal.UnscaleInt(w.canvas, w.width), internal.UnscaleInt(w.canvas, w.height))
- }
- return fyne.NewSize(internal.UnscaleInt(w.canvas, width), internal.UnscaleInt(w.canvas, height))
- }
|