34 lines
1.1 KiB
Rust
34 lines
1.1 KiB
Rust
|
|
use tauri::{PhysicalPosition, Window};
|
||
|
|
|
||
|
|
#[tauri::command]
|
||
|
|
fn dock_window(window: Window, side: String) -> Result<(), String> {
|
||
|
|
let monitor = window
|
||
|
|
.current_monitor()
|
||
|
|
.map_err(|error| error.to_string())?
|
||
|
|
.ok_or_else(|| "无法识别当前屏幕".to_string())?;
|
||
|
|
let window_size = window.outer_size().map_err(|error| error.to_string())?;
|
||
|
|
let monitor_position = monitor.position();
|
||
|
|
let monitor_size = monitor.size();
|
||
|
|
let x = if side == "left" {
|
||
|
|
monitor_position.x
|
||
|
|
} else {
|
||
|
|
monitor_position.x + monitor_size.width as i32 - window_size.width as i32
|
||
|
|
};
|
||
|
|
|
||
|
|
window
|
||
|
|
.set_position(PhysicalPosition::new(x, monitor_position.y))
|
||
|
|
.map_err(|error| error.to_string())?;
|
||
|
|
window
|
||
|
|
.set_always_on_top(true)
|
||
|
|
.map_err(|error| error.to_string())?;
|
||
|
|
Ok(())
|
||
|
|
}
|
||
|
|
|
||
|
|
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
||
|
|
pub fn run() {
|
||
|
|
tauri::Builder::default()
|
||
|
|
.invoke_handler(tauri::generate_handler![dock_window])
|
||
|
|
.run(tauri::generate_context!())
|
||
|
|
.expect("failed to run 森林AI Mini");
|
||
|
|
}
|