github.com/secoba/wails/v2@v2.6.4/internal/frontend/desktop/windows/theme.go (about)

     1  //go:build windows
     2  
     3  package windows
     4  
     5  import (
     6  	"github.com/secoba/wails/v2/internal/frontend/desktop/windows/win32"
     7  	"github.com/secoba/wails/v2/pkg/options/windows"
     8  )
     9  
    10  func (w *Window) UpdateTheme() {
    11  
    12  	// Don't redraw theme if nothing has changed
    13  	if !w.themeChanged {
    14  		return
    15  	}
    16  	w.themeChanged = false
    17  
    18  	if win32.IsCurrentlyHighContrastMode() {
    19  		return
    20  	}
    21  
    22  	if !win32.SupportsThemes() {
    23  		return
    24  	}
    25  
    26  	var isDarkMode bool
    27  	switch w.theme {
    28  	case windows.SystemDefault:
    29  		isDarkMode = win32.IsCurrentlyDarkMode()
    30  	case windows.Dark:
    31  		isDarkMode = true
    32  	case windows.Light:
    33  		isDarkMode = false
    34  	}
    35  	win32.SetTheme(w.Handle(), isDarkMode)
    36  
    37  	// Custom theme processing
    38  	winOptions := w.frontendOptions.Windows
    39  	var customTheme *windows.ThemeSettings
    40  	if winOptions != nil {
    41  		customTheme = winOptions.CustomTheme
    42  	}
    43  	// Custom theme
    44  	if win32.SupportsCustomThemes() && customTheme != nil {
    45  		if w.isActive {
    46  			if isDarkMode {
    47  				win32.SetTitleBarColour(w.Handle(), customTheme.DarkModeTitleBar)
    48  				win32.SetTitleTextColour(w.Handle(), customTheme.DarkModeTitleText)
    49  				win32.SetBorderColour(w.Handle(), customTheme.DarkModeBorder)
    50  			} else {
    51  				win32.SetTitleBarColour(w.Handle(), customTheme.LightModeTitleBar)
    52  				win32.SetTitleTextColour(w.Handle(), customTheme.LightModeTitleText)
    53  				win32.SetBorderColour(w.Handle(), customTheme.LightModeBorder)
    54  			}
    55  		} else {
    56  			if isDarkMode {
    57  				win32.SetTitleBarColour(w.Handle(), customTheme.DarkModeTitleBarInactive)
    58  				win32.SetTitleTextColour(w.Handle(), customTheme.DarkModeTitleTextInactive)
    59  				win32.SetBorderColour(w.Handle(), customTheme.DarkModeBorderInactive)
    60  			} else {
    61  				win32.SetTitleBarColour(w.Handle(), customTheme.LightModeTitleBarInactive)
    62  				win32.SetTitleTextColour(w.Handle(), customTheme.LightModeTitleTextInactive)
    63  				win32.SetBorderColour(w.Handle(), customTheme.LightModeBorderInactive)
    64  			}
    65  		}
    66  	}
    67  }