|
@@ -1,6 +1,6 @@
|
|
|
-use crate::config::Config;
|
|
|
use crate::log_err;
|
|
|
-use crate::{core::*, utils::init, utils::server};
|
|
|
+use crate::{config::Config, core::*, utils::init, utils::server};
|
|
|
+use anyhow::Result;
|
|
|
use tauri::{App, AppHandle, Manager};
|
|
|
|
|
|
/// handle something when start app
|
|
@@ -49,16 +49,39 @@ pub fn create_window(app_handle: &AppHandle) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- let builder = tauri::window::WindowBuilder::new(
|
|
|
+ let mut 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);
|
|
|
|
|
|
+ match Config::verge().latest().window_size_position.clone() {
|
|
|
+ Some(size_pos) if size_pos.len() == 4 => {
|
|
|
+ let size = (size_pos[0], size_pos[1]);
|
|
|
+ let pos = (size_pos[2], size_pos[3]);
|
|
|
+ builder = builder.inner_size(size.0, size.1).position(pos.0, pos.1);
|
|
|
+ }
|
|
|
+ _ => {
|
|
|
+ #[cfg(target_os = "windows")]
|
|
|
+ {
|
|
|
+ builder = builder.inner_size(800.0, 636.0).center();
|
|
|
+ }
|
|
|
+
|
|
|
+ #[cfg(target_os = "macos")]
|
|
|
+ {
|
|
|
+ builder = builder.inner_size(800.0, 642.0).center();
|
|
|
+ }
|
|
|
+
|
|
|
+ #[cfg(target_os = "linux")]
|
|
|
+ {
|
|
|
+ builder = builder.inner_size(800.0, 642.0).center();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
#[cfg(target_os = "windows")]
|
|
|
{
|
|
|
use std::time::Duration;
|
|
@@ -68,7 +91,6 @@ pub fn create_window(app_handle: &AppHandle) {
|
|
|
match builder
|
|
|
.decorations(false)
|
|
|
.transparent(true)
|
|
|
- .inner_size(800.0, 636.0)
|
|
|
.visible(false)
|
|
|
.build()
|
|
|
{
|
|
@@ -96,15 +118,30 @@ pub fn create_window(app_handle: &AppHandle) {
|
|
|
#[cfg(target_os = "macos")]
|
|
|
crate::log_err!(builder
|
|
|
.decorations(true)
|
|
|
- .inner_size(800.0, 642.0)
|
|
|
.hidden_title(true)
|
|
|
.title_bar_style(tauri::TitleBarStyle::Overlay)
|
|
|
.build());
|
|
|
|
|
|
#[cfg(target_os = "linux")]
|
|
|
- crate::log_err!(builder
|
|
|
- .decorations(true)
|
|
|
- .transparent(false)
|
|
|
- .inner_size(800.0, 642.0)
|
|
|
- .build());
|
|
|
+ crate::log_err!(builder.decorations(true).transparent(false).build());
|
|
|
+}
|
|
|
+
|
|
|
+/// save window size and position
|
|
|
+pub fn save_window_size_position(app_handle: &AppHandle) -> Result<()> {
|
|
|
+ let win = app_handle
|
|
|
+ .get_window("main")
|
|
|
+ .ok_or(anyhow::anyhow!("failed to get window"))?;
|
|
|
+
|
|
|
+ let scale = win.scale_factor()?;
|
|
|
+ let size = win.inner_size()?;
|
|
|
+ let size = size.to_logical::<f64>(scale);
|
|
|
+ let pos = win.outer_position()?;
|
|
|
+ let pos = pos.to_logical::<f64>(scale);
|
|
|
+
|
|
|
+ let verge = Config::verge();
|
|
|
+ let mut verge = verge.latest();
|
|
|
+ verge.window_size_position = Some(vec![size.width, size.height, pos.x, pos.y]);
|
|
|
+ verge.save_file()?;
|
|
|
+
|
|
|
+ Ok(())
|
|
|
}
|