| use tauri::{AppHandle, LogicalPosition, LogicalSize, Manager}; |
|
|
| use super::tab_manager::{tab_label, ViewportLayout}; |
| use crate::state::AppState; |
|
|
| const OFFSCREEN_X: f64 = -32000.0; |
| const OFFSCREEN_Y: f64 = -32000.0; |
|
|
| pub fn bounds(layout: &ViewportLayout) -> (f64, f64, f64, f64) { |
| ( |
| layout.x.max(0.0), |
| layout.y.max(0.0), |
| layout.width.max(1.0), |
| layout.height.max(1.0), |
| ) |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| pub fn show_tab(app: &AppHandle, tab_id: &str, layout: &ViewportLayout) -> Result<(), String> { |
| let label = tab_label(app, tab_id)?; |
| let (x, y, w, h) = bounds(layout); |
| if let Some(webview) = app.get_webview(&label) { |
| |
| webview.set_position(LogicalPosition::new(x, y)).map_err(|e| e.to_string())?; |
| webview.set_size(LogicalSize::new(w, h)).map_err(|e| e.to_string())?; |
| let _ = webview.show(); |
| let _ = webview.set_focus(); |
| } |
| Ok(()) |
| } |
|
|
| |
| |
| pub fn hide_tab(app: &AppHandle, tab_id: &str) -> Result<(), String> { |
| let label = tab_label(app, tab_id)?; |
| if let Some(webview) = app.get_webview(&label) { |
| webview.set_position(LogicalPosition::new(OFFSCREEN_X, OFFSCREEN_Y)).map_err(|e| e.to_string())?; |
| webview.set_size(LogicalSize::new(1.0, 1.0)).map_err(|e| e.to_string())?; |
| |
| } |
| Ok(()) |
| } |
|
|
| pub fn resize_active(app: &AppHandle, layout: &ViewportLayout) -> Result<(), String> { |
| let active = { |
| let state = app.state::<AppState>(); |
| let tabs = state.tabs.lock().map_err(|_| "lock")?; |
| tabs.active.clone() |
| }; |
| if let Some(active_id) = active { |
| show_tab(app, &active_id, layout)?; |
| } |
| Ok(()) |
| } |
|
|