diff --git a/examples/disable_pinch_zoom.go b/examples/disable_pinch_zoom.go new file mode 100644 index 0000000..3404603 --- /dev/null +++ b/examples/disable_pinch_zoom.go @@ -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") +} \ No newline at end of file diff --git a/pkg/edge/capabilities.go b/pkg/edge/capabilities.go index 629a9ce..48ab9ab 100644 --- a/pkg/edge/capabilities.go +++ b/pkg/edge/capabilities.go @@ -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) diff --git a/pkg/edge/chromium.go b/pkg/edge/chromium.go index 4c75e11..f2ade79 100644 --- a/pkg/edge/chromium.go +++ b/pkg/edge/chromium.go @@ -76,6 +76,7 @@ type Chromium struct { DataPath string BrowserPath string AdditionalBrowserArgs []string + PinchZoomEnabled *bool // permissions permissions map[CoreWebView2PermissionKind]CoreWebView2PermissionState @@ -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 @@ -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