Skip to content

Commit eaa8b29

Browse files
committed
feat: native window webview zoom rust-JS API
1 parent fff4be3 commit eaa8b29

3 files changed

Lines changed: 29 additions & 1 deletion

File tree

src-tauri/Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src-tauri/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ serde_json = "1.0"
1818
once_cell = "1.19.0"
1919
percent-encoding = "2.3"
2020
regex = "1.10.2"
21+
webkit2gtk = "0.18" # if tauri build fails, make sure to match this version to what we have in tauri
2122
serde = { version = "1.0", features = ["derive"] }
2223
tauri = { version = "1.5.4", features = [ "cli", "api-all", "updater", "devtools", "linux-protocol-headers"] }
2324
winapi = { version = "0.3", features = ["fileapi"] }

src-tauri/src/main.rs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ use std::fs::metadata;
99
use std::path::PathBuf;
1010

1111
use std::process::Command;
12+
#[cfg(target_os = "linux")]
13+
extern crate webkit2gtk;
1214

1315
use regex::Regex;
1416
extern crate percent_encoding;
@@ -105,6 +107,30 @@ fn show_in_folder(path: String) {
105107
}
106108
}
107109

110+
#[tauri::command]
111+
fn zoom_window(window: tauri::Window, scale_factor: f64) {
112+
let _ = window.with_webview(move |webview| {
113+
#[cfg(target_os = "linux")]
114+
{
115+
// see https://docs.rs/webkit2gtk/0.18.2/webkit2gtk/struct.WebView.html
116+
// and https://docs.rs/webkit2gtk/0.18.2/webkit2gtk/trait.WebViewExt.html
117+
use webkit2gtk::traits::WebViewExt;
118+
webview.inner().set_zoom_level(scale_factor);
119+
}
120+
121+
#[cfg(windows)]
122+
unsafe {
123+
// see https://docs.rs/webview2-com/0.19.1/webview2_com/Microsoft/Web/WebView2/Win32/struct.ICoreWebView2Controller.html
124+
webview.controller().SetZoomFactor(scale_factor).unwrap();
125+
}
126+
127+
#[cfg(target_os = "macos")]
128+
unsafe {
129+
let () = msg_send![webview.inner(), setPageZoom: scale_factor];
130+
}
131+
});
132+
}
133+
108134
fn process_window_event(event: &GlobalWindowEvent) {
109135
if let tauri::WindowEvent::CloseRequested { .. } = event.event() {
110136
// this does nothing and is here if in future you need to persist something on window close.
@@ -170,7 +196,7 @@ fn main() {
170196
.on_window_event(|event| process_window_event(&event))
171197
.invoke_handler(tauri::generate_handler![
172198
toggle_devtools, console_log, console_error,
173-
_get_windows_drives, _rename_path, show_in_folder])
199+
_get_windows_drives, _rename_path, show_in_folder, zoom_window])
174200
.setup(|app| {
175201
init::init_app(app);
176202
Ok(())

0 commit comments

Comments
 (0)