use crate::host::error::HostApiError;
#[derive(Debug, Clone)]
pub struct MonitorInfo {
pub x: i32,
pub y: i32,
pub width: u32,
pub height: u32,
pub scale_factor: f64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct WindowPosition {
pub x: i32,
pub y: i32,
}
pub struct PositionRequest {
pub enable_drag_window: bool,
pub saved_position: Option<WindowPosition>,
pub follow_mouse: bool,
pub vertical_position_ratio: f64,
pub window_width: i32,
pub monitors: Vec<MonitorInfo>,
}
#[async_trait::async_trait]
pub trait WindowPositioner: Send + Sync {
async fn compute_position(
&self,
request: PositionRequest,
) -> Result<WindowPosition, HostApiError>;
}