From ba7ab2e60726200e101fe25ee4012382fc048c18 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Tue, 11 Jul 2023 23:04:22 +1000 Subject: [PATCH] [v3 windows] Fix translucency. Update example. --- v3/examples/window/main.go | 44 ++++++++++++++++++++ v3/go.mod | 3 +- v3/go.sum | 5 +-- v3/pkg/application/webview_window_windows.go | 10 +++-- v3/pkg/w32/theme.go | 5 +-- 5 files changed, 55 insertions(+), 12 deletions(-) diff --git a/v3/examples/window/main.go b/v3/examples/window/main.go index 8d325344b..abf6bb724 100644 --- a/v3/examples/window/main.go +++ b/v3/examples/window/main.go @@ -141,6 +141,50 @@ func main() { windowCounter++ }) } + if runtime.GOOS == "windows" { + myMenu.Add("New WebviewWindow (Mica)"). + OnClick(func(ctx *application.Context) { + app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ + Title: "WebviewWindow " + strconv.Itoa(windowCounter), + X: rand.Intn(1000), + Y: rand.Intn(800), + BackgroundType: application.BackgroundTypeTranslucent, + HTML: "", + Windows: application.WindowsWindow{ + BackdropType: application.Mica, + }, + }).Show() + windowCounter++ + }) + myMenu.Add("New WebviewWindow (Acrylic)"). + OnClick(func(ctx *application.Context) { + app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ + Title: "WebviewWindow " + strconv.Itoa(windowCounter), + X: rand.Intn(1000), + Y: rand.Intn(800), + BackgroundType: application.BackgroundTypeTranslucent, + HTML: "", + Windows: application.WindowsWindow{ + BackdropType: application.Acrylic, + }, + }).Show() + windowCounter++ + }) + myMenu.Add("New WebviewWindow (Tabbed)"). + OnClick(func(ctx *application.Context) { + app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ + Title: "WebviewWindow " + strconv.Itoa(windowCounter), + X: rand.Intn(1000), + Y: rand.Intn(800), + BackgroundType: application.BackgroundTypeTranslucent, + HTML: "", + Windows: application.WindowsWindow{ + BackdropType: application.Tabbed, + }, + }).Show() + windowCounter++ + }) + } sizeMenu := menu.AddSubmenu("Size") sizeMenu.Add("Set Size (800,600)").OnClick(func(ctx *application.Context) { diff --git a/v3/go.mod b/v3/go.mod index f1a195158..5fad6bf13 100644 --- a/v3/go.mod +++ b/v3/go.mod @@ -23,7 +23,7 @@ require ( github.com/pterm/pterm v0.12.51 github.com/samber/lo v1.37.0 github.com/tc-hib/winres v0.1.6 - github.com/wailsapp/go-webview2 v1.0.2-0.20230604075323-d593c659ca7b + github.com/wailsapp/go-webview2 v1.0.2 github.com/wailsapp/wails/v2 v2.5.1 golang.org/x/sys v0.9.0 modernc.org/sqlite v1.21.0 @@ -32,7 +32,6 @@ require ( require ( atomicgo.dev/cursor v0.1.1 // indirect atomicgo.dev/keyboard v0.2.8 // indirect - cloud.google.com/go v0.67.0 // indirect github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/containerd/console v1.0.3 // indirect github.com/dustin/go-humanize v1.0.0 // indirect diff --git a/v3/go.sum b/v3/go.sum index 3c31e84a0..e3ca39b09 100644 --- a/v3/go.sum +++ b/v3/go.sum @@ -18,7 +18,6 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.67.0 h1:YIkzmqUfVGiGPpT98L8sVvUIkDno6UlrDxw4NR6z5ak= cloud.google.com/go v0.67.0/go.mod h1:YNan/mUhNZFrYUor0vqrsQ0Ffl7Xtm/ACOy/vsTS858= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= @@ -279,8 +278,8 @@ github.com/tc-hib/winres v0.1.6 h1:qgsYHze+BxQPEYilxIz/KCQGaClvI2+yLBAZs+3+0B8= github.com/tc-hib/winres v0.1.6/go.mod h1:pe6dOR40VOrGz8PkzreVKNvEKnlE8t4yR8A8naL+t7A= github.com/tmclane/purego v0.0.0-20230601213035-1f25e70d7b01 h1:oQwu3iNDywGp1Hry+PDvz+grwbCGpzY+ckSnWKCnX5Y= github.com/tmclane/purego v0.0.0-20230601213035-1f25e70d7b01/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ= -github.com/wailsapp/go-webview2 v1.0.2-0.20230604075323-d593c659ca7b h1:cztK9x+ikg6nFscy5c8NgtfIXv/d0ESdENy9+JkE8i4= -github.com/wailsapp/go-webview2 v1.0.2-0.20230604075323-d593c659ca7b/go.mod h1:Uk2BePfCRzttBBjFrBmqKGJd41P6QIHeV9kTgIeOZNo= +github.com/wailsapp/go-webview2 v1.0.2 h1:ypcJYe+f40+n8XjmV2nSsy3Dw506o6KYbt46tW4PFW4= +github.com/wailsapp/go-webview2 v1.0.2/go.mod h1:Uk2BePfCRzttBBjFrBmqKGJd41P6QIHeV9kTgIeOZNo= github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs= github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8= diff --git a/v3/pkg/application/webview_window_windows.go b/v3/pkg/application/webview_window_windows.go index 7c80d68a5..bcaa44433 100644 --- a/v3/pkg/application/webview_window_windows.go +++ b/v3/pkg/application/webview_window_windows.go @@ -273,9 +273,13 @@ func (w *windowsWebviewWindow) run() { switch options.BackgroundType { case BackgroundTypeSolid: - w.setBackgroundColour(options.BackgroundColour) + var col = options.BackgroundColour + w.setBackgroundColour(col) + w.chromium.SetBackgroundColour(col.Red, col.Green, col.Blue, col.Alpha) case BackgroundTypeTransparent: + w.chromium.SetBackgroundColour(0, 0, 0, 0) case BackgroundTypeTranslucent: + w.chromium.SetBackgroundColour(0, 0, 0, 0) w.setBackdropType(options.Windows.BackdropType) } @@ -823,7 +827,7 @@ func (w *windowsWebviewWindow) setExStyle(b bool, style int) { } func (w *windowsWebviewWindow) setBackdropType(backdropType BackdropType) { - if !w32.IsWindowsVersionAtLeast(10, 0, 22621) { + if !w32.SupportsBackdropTypes() { var accent = w32.ACCENT_POLICY{ AccentState: w32.ACCENT_ENABLE_BLURBEHIND, } @@ -834,7 +838,7 @@ func (w *windowsWebviewWindow) setBackdropType(backdropType BackdropType) { w32.SetWindowCompositionAttribute(w.hwnd, &data) } else { - w32.DwmSetWindowAttribute(w.hwnd, w32.DwmwaSystemBackdropType, w32.PVOID(&backdropType), unsafe.Sizeof(backdropType)) + w32.EnableTranslucency(w.hwnd, int32(backdropType)) } } diff --git a/v3/pkg/w32/theme.go b/v3/pkg/w32/theme.go index 1b358789f..3c2d42158 100644 --- a/v3/pkg/w32/theme.go +++ b/v3/pkg/w32/theme.go @@ -20,9 +20,6 @@ const DwmwaSystemBackdropType DWMWINDOWATTRIBUTE = 38 const SPI_GETHIGHCONTRAST = 0x0042 const HCF_HIGHCONTRASTON = 0x00000001 -// BackdropType defines the type of translucency we wish to use -type BackdropType int32 - func dwmSetWindowAttribute(hwnd uintptr, dwAttribute DWMWINDOWATTRIBUTE, pvAttribute unsafe.Pointer, cbAttribute uintptr) { ret, _, err := procDwmSetWindowAttribute.Call( hwnd, @@ -66,7 +63,7 @@ func SetTheme(hwnd uintptr, useDarkMode bool) { } } -func EnableTranslucency(hwnd uintptr, backdrop BackdropType) { +func EnableTranslucency(hwnd uintptr, backdrop int32) { if SupportsBackdropTypes() { dwmSetWindowAttribute(hwnd, DwmwaSystemBackdropType, unsafe.Pointer(&backdrop), unsafe.Sizeof(backdrop)) } else {