Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions examples/disable_pinch_zoom.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
//go:build windows

package main

import (
"fmt"

"github.com/wailsapp/go-webview2/pkg/edge"
)

// Example showing how to disable pinch zoom in WebView2
func main() {
fmt.Println("WebView2 Pinch Zoom Control Example")
fmt.Println("===================================")

// Create a WebView2 instance
chromium := edge.NewChromium()

// Method 1: Disable pinch zoom during initialization
// This is the recommended approach as it ensures the setting
// is applied as soon as the WebView2 is ready
pinchZoomEnabled := false
chromium.PinchZoomEnabled = &pinchZoomEnabled

fmt.Println("✓ Pinch zoom disabled during initialization")

// Set up other properties if needed
chromium.Debug = true

// In a real application, you would:
// 1. Create a window (hwnd)
// 2. Call chromium.Embed(hwnd) to initialize WebView2
// 3. The pinch zoom setting will be automatically applied

// Method 2: Disable pinch zoom after initialization (runtime control)
// This can be used to enable/disable pinch zoom dynamically

// Note: This would only work after chromium.Embed() is called
// err := chromium.PutIsPinchZoomEnabled(false)
// if err != nil {
// log.Printf("Error disabling pinch zoom: %v", err)
// }

// Method 3: Check current pinch zoom setting
// Note: This would only work after chromium.Embed() is called
// enabled, err := chromium.GetIsPinchZoomEnabled()
// if err != nil {
// log.Printf("Error getting pinch zoom status: %v", err)
// } else {
// fmt.Printf("Pinch zoom is currently: %t\n", enabled)
// }

fmt.Println("\nUsage Examples:")
fmt.Println("1. Set before initialization: chromium.PinchZoomEnabled = &false")
fmt.Println("2. Set after initialization: chromium.PutIsPinchZoomEnabled(false)")
fmt.Println("3. Check current setting: enabled, err := chromium.GetIsPinchZoomEnabled()")

fmt.Println("\nThis setting prevents users from zooming the webpage using:")
fmt.Println("- Ctrl + mouse wheel")
fmt.Println("- Pinch gestures on touchpads/touchscreens")
fmt.Println("- Keyboard shortcuts like Ctrl+Plus/Ctrl+Minus")
}
1 change: 1 addition & 0 deletions pkg/edge/capabilities.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ const (
NewWindow87 = Capability("87.0.664.75") // New window creation (v87)
DocumentTitleChanged87 = Capability("87.0.664.75") // Document title changes (v87)
IsSuspended = Capability("87.0.664.75") // Suspension state
PinchZoom = Capability("87.0.664.75") // Pinch zoom control
)

// WebView2 Runtime Version 86.0.622.58 (Released: January 2021)
Expand Down
41 changes: 41 additions & 0 deletions pkg/edge/chromium.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ type Chromium struct {
DataPath string
BrowserPath string
AdditionalBrowserArgs []string
PinchZoomEnabled *bool

// permissions
permissions map[CoreWebView2PermissionKind]CoreWebView2PermissionState
Expand Down Expand Up @@ -386,6 +387,14 @@ func (e *Chromium) CreateCoreWebView2ControllerCompleted(res uintptr, controller
e.errorCallback(err)
}

// Apply pinch zoom setting if configured
if e.PinchZoomEnabled != nil {
err = e.PutIsPinchZoomEnabled(*e.PinchZoomEnabled)
if err != nil {
e.errorCallback(err)
}
}

atomic.StoreUintptr(&e.inited, 1)

return 0
Expand Down Expand Up @@ -662,6 +671,38 @@ func (e *Chromium) PutIsSwipeNavigationEnabled(enabled bool) error {
return nil
}

func (e *Chromium) GetIsPinchZoomEnabled() (bool, error) {
if !HasCapability(e.webview2RuntimeVersion, PinchZoom) {
return false, UnsupportedCapabilityError
}
webview2Settings, err := e.webview.GetSettings()
if err != nil {
return false, err
}
webview2Settings5 := webview2Settings.GetICoreWebView2Settings5()
result, err := webview2Settings5.GetIsPinchZoomEnabled()
if err != nil {
return false, err
}
return result, nil
}

func (e *Chromium) PutIsPinchZoomEnabled(enabled bool) error {
if !HasCapability(e.webview2RuntimeVersion, PinchZoom) {
return UnsupportedCapabilityError
}
webview2Settings, err := e.webview.GetSettings()
if err != nil {
return err
}
webview2Settings5 := webview2Settings.GetICoreWebView2Settings5()
err = webview2Settings5.PutIsPinchZoomEnabled(enabled)
if err != nil {
return err
}
return nil
}

func (e *Chromium) AllowExternalDrag(allow bool) error {
if !HasCapability(e.webview2RuntimeVersion, AllowExternalDrop) {
return UnsupportedCapabilityError
Expand Down