Преглед изворни кода

fix(desktop): completely disable pinch to zoom

Brendan Allan пре 1 месец
родитељ
комит
8b379329a6

+ 1 - 1
packages/desktop/src-tauri/tauri.conf.json

@@ -19,7 +19,7 @@
         "url": "/",
         "decorations": true,
         "dragDropEnabled": false,
-        "zoomHotkeysEnabled": true,
+        "zoomHotkeysEnabled": false,
         "titleBarStyle": "Overlay",
         "hiddenTitle": true,
         "trafficLightPosition": { "x": 12.0, "y": 18.0 }

+ 1 - 5
packages/desktop/src/index.tsx

@@ -1,4 +1,5 @@
 // @refresh reload
+import "./webview-zoom"
 import { render } from "solid-js/web"
 import { AppBaseProviders, AppInterface, PlatformProvider, Platform } from "@opencode-ai/app"
 import { open, save } from "@tauri-apps/plugin-dialog"
@@ -303,11 +304,6 @@ const createPlatform = (password: Accessor<string | null>): Platform => ({
 
 createMenu()
 
-// Stops mousewheel events from reaching Tauri's pinch-to-zoom handler
-root?.addEventListener("mousewheel", (e) => {
-  e.stopPropagation()
-})
-
 render(() => {
   const [serverPassword, setServerPassword] = createSignal<string | null>(null)
   const platform = createPlatform(() => serverPassword())

+ 31 - 0
packages/desktop/src/webview-zoom.ts

@@ -0,0 +1,31 @@
+// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
+// SPDX-License-Identifier: Apache-2.0
+// SPDX-License-Identifier: MIT
+
+import { invoke } from "@tauri-apps/api/core"
+import { type as ostype } from "@tauri-apps/plugin-os"
+
+const OS_NAME = ostype()
+
+let zoomLevel = 1
+
+const MAX_ZOOM_LEVEL = 10
+const MIN_ZOOM_LEVEL = 0.2
+
+window.addEventListener("keydown", (event) => {
+  if (OS_NAME === "macos" ? event.metaKey : event.ctrlKey) {
+    if (event.key === "-") {
+      zoomLevel -= 0.2
+    } else if (event.key === "=" || event.key === "+") {
+      zoomLevel += 0.2
+    } else if (event.key === "0") {
+      zoomLevel = 1
+    } else {
+      return
+    }
+    zoomLevel = Math.min(Math.max(zoomLevel, MIN_ZOOM_LEVEL), MAX_ZOOM_LEVEL)
+    invoke("plugin:webview|set_webview_zoom", {
+      value: zoomLevel,
+    })
+  }
+})