[v3 windows] Fix translucency. Update example.

This commit is contained in:
Lea Anthony 2023-07-11 23:04:22 +10:00
commit ba7ab2e607
No known key found for this signature in database
GPG key ID: 33DAF7BB90A58405
5 changed files with 55 additions and 12 deletions

View file

@ -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: "<html style='background-color: rgba(0,0,0,0);'><body></body></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: "<html style='background-color: rgba(0,0,0,0);'><body></body></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: "<html style='background-color: rgba(0,0,0,0);'><body></body></html>",
Windows: application.WindowsWindow{
BackdropType: application.Tabbed,
},
}).Show()
windowCounter++
})
}
sizeMenu := menu.AddSubmenu("Size")
sizeMenu.Add("Set Size (800,600)").OnClick(func(ctx *application.Context) {

View file

@ -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

View file

@ -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=

View file

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

View file

@ -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 {