From ae94993b09b871a2f5cca5638f428d51624fd582 Mon Sep 17 00:00:00 2001 From: GyDi Date: Wed, 25 May 2022 16:45:18 +0800 Subject: [PATCH] fix: create main window --- src-tauri/src/main.rs | 36 ++------------------------ src-tauri/src/utils/resolve.rs | 46 +++++++++++++++++++++++++++++++++- 2 files changed, 47 insertions(+), 35 deletions(-) diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 19bbc41..9d729e4 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -44,23 +44,7 @@ fn main() -> std::io::Result<()> { .on_system_tray_event(move |app_handle, event| match event { SystemTrayEvent::MenuItemClick { id, .. } => match id.as_str() { "open_window" => { - tauri::window::WindowBuilder::new( - app_handle, - "main".to_string(), - tauri::WindowUrl::App("index.html".into()), - ) - .title("Clash Verge") - .center() - .decorations(false) - .fullscreen(false) - .inner_size(800.0, 636.0) - .min_inner_size(600.0, 520.0) - .build() - .err() - .and_then(|e| { - log::error!("{e}"); - Some(0) - }); + resolve::create_window(app_handle); } "system_proxy" => { let core = app_handle.state::(); @@ -104,23 +88,7 @@ fn main() -> std::io::Result<()> { }, #[cfg(target_os = "windows")] SystemTrayEvent::LeftClick { .. } => { - tauri::window::WindowBuilder::new( - app_handle, - "main".to_string(), - tauri::WindowUrl::App("index.html".into()), - ) - .title("Clash Verge") - .center() - .decorations(false) - .fullscreen(false) - .inner_size(800.0, 636.0) - .min_inner_size(600.0, 520.0) - .build() - .err() - .and_then(|e| { - log::error!("{e}"); - Some(0) - }); + resolve::create_window(app_handle); } _ => {} }) diff --git a/src-tauri/src/utils/resolve.rs b/src-tauri/src/utils/resolve.rs index cf5e617..5fa0d74 100644 --- a/src-tauri/src/utils/resolve.rs +++ b/src-tauri/src/utils/resolve.rs @@ -1,4 +1,4 @@ -use crate::{core::Core, utils::init, utils::server}; +use crate::{core::Core, log_if_err, utils::init, utils::server}; use tauri::{App, AppHandle, Manager}; /// handle something when start app @@ -61,3 +61,47 @@ fn resolve_window(app: &App) { })); } } + +/// create main window +pub fn create_window(app_handle: &AppHandle) { + if let Some(window) = app_handle.get_window("main") { + let _ = window.unminimize(); + let _ = window.show(); + let _ = window.set_focus(); + return; + } + + let builder = tauri::window::WindowBuilder::new( + app_handle, + "main".to_string(), + tauri::WindowUrl::App("index.html".into()), + ) + .title("Clash Verge") + .center() + .fullscreen(false) + .min_inner_size(600.0, 520.0); + + #[cfg(target_os = "windows")] + { + use crate::utils::winhelp; + use window_shadows::set_shadow; + use window_vibrancy::apply_blur; + + match builder.decorations(false).inner_size(800.0, 636.0).build() { + Ok(window) => { + let _ = set_shadow(&window, true); + + if !winhelp::is_win11() { + let _ = apply_blur(&window, None); + } + } + Err(err) => log::error!("{err}"), + } + } + + #[cfg(target_os = "macos")] + log_if_err!(builder.decorations(true).inner_size(800.0, 620.0).build()); + + #[cfg(target_os = "linux")] + log_if_err!(builder.decorations(false).inner_size(800.0, 636.0).build()); +}