diff --git a/packages/desktop/src-tauri/tauri.conf.json b/packages/desktop/src-tauri/tauri.conf.json index 19da295c5..f8df151bd 100644 --- a/packages/desktop/src-tauri/tauri.conf.json +++ b/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 } diff --git a/packages/desktop/src/index.tsx b/packages/desktop/src/index.tsx index a06270b13..d6ee121af 100644 --- a/packages/desktop/src/index.tsx +++ b/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): Platform => ({ createMenu() -// Stops mousewheel events from reaching Tauri's pinch-to-zoom handler -root?.addEventListener("mousewheel", (e) => { - e.stopPropagation() -}) - render(() => { const [serverPassword, setServerPassword] = createSignal(null) const platform = createPlatform(() => serverPassword()) diff --git a/packages/desktop/src/webview-zoom.ts b/packages/desktop/src/webview-zoom.ts new file mode 100644 index 000000000..9fa9bb9ed --- /dev/null +++ b/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, + }) + } +})