From 1eb6a30cf67d8216a66b53687fd93f78371dc990 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Tue, 29 Sep 2026 10:03:01 +0300 Subject: [PATCH] Apply interface scale through WebKit page zoom --- src/app/imp.rs | 3 +++ src/app/ipc/event.rs | 1 + src/app/ipc/request.rs | 11 +++++++++++ src/app/ipc/response.rs | 2 +- src/app/webview/mod.rs | 4 ++++ 5 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/app/imp.rs b/src/app/imp.rs index 89cd019..d5495f9 100644 --- a/src/app/imp.rs +++ b/src/app/imp.rs @@ -146,6 +146,9 @@ impl ApplicationImpl for Application { let message = ipc::create_response(IpcEvent::Fullscreen(state)); webview.send(&message); } + IpcEvent::InterfaceScale(scale) => { + webview.set_interface_scale(scale); + } IpcEvent::MediaStatus(status) => { mpris.set_status(status); diff --git a/src/app/ipc/event.rs b/src/app/ipc/event.rs index 4f07337..8931dcb 100644 --- a/src/app/ipc/event.rs +++ b/src/app/ipc/event.rs @@ -27,6 +27,7 @@ pub enum IpcEvent { Ready, Quit, Fullscreen(bool), + InterfaceScale(u16), Visibility(bool), OpenMedia(String), Mpv(IpcEventMpv), diff --git a/src/app/ipc/request.rs b/src/app/ipc/request.rs index 41230fb..81b3735 100644 --- a/src/app/ipc/request.rs +++ b/src/app/ipc/request.rs @@ -17,6 +17,11 @@ pub struct IpcMessageRequestWinSetVisilibty { fullscreen: bool, } +#[derive(Deserialize, Debug)] +pub struct IpcMessageRequestWinSetInterfaceScale { + scale: u16, +} + #[derive(Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct IpcMessageRequestMediaMetadata { @@ -60,6 +65,12 @@ impl TryFrom for IpcEvent { Ok(IpcEvent::Fullscreen(data.fullscreen)) } + "win-set-interface-scale" => { + let data: IpcMessageRequestWinSetInterfaceScale = + serde_json::from_value(data) + .map_err(|_| "Invalid win-set-interface-scale object")?; + Ok(IpcEvent::InterfaceScale(data.scale)) + } "mpv-command" => { let data: Vec = serde_json::from_value(data) .map_err(|_| "Invalid mpv-command arguments")?; diff --git a/src/app/ipc/response.rs b/src/app/ipc/response.rs index 5dcb34c..8259922 100644 --- a/src/app/ipc/response.rs +++ b/src/app/ipc/response.rs @@ -31,7 +31,7 @@ impl TryFrom for IpcMessageResponse { args: None, data: Some(json!({ "transport": { - "properties": [[], ["", "shellVersion", "", VERSION]], + "properties": [[], ["", "shellVersion", "", VERSION], ["", "nativeInterfaceScale", "", "true"]], "signals": [], "methods": [["onEvent"]] } diff --git a/src/app/webview/mod.rs b/src/app/webview/mod.rs index 156c199..f8067ff 100644 --- a/src/app/webview/mod.rs +++ b/src/app/webview/mod.rs @@ -29,6 +29,10 @@ impl Default for WebView { } impl WebView { + pub fn set_interface_scale(&self, scale: u16) { + self.imp().webview.set_zoom_level(f64::from(scale) / 100.0); + } + pub fn load_uri(&self, uri: &str) { let widget = self.imp();