use std::sync::Arc;
use platform_core::Window;
use raw_window_handle::{
DisplayHandle, HandleError, HasDisplayHandle, HasWindowHandle, WindowHandle,
};
#[derive(Clone)]
pub struct HeadlessWindow {
inner: Arc<Inner>,
}
struct Inner {
width: u32,
height: u32,
scale_factor: f64,
prefers_dark: Option<bool>,
}
impl HeadlessWindow {
pub fn new(width: u32, height: u32) -> Self {
Self::with_options(width, height, 1.0, None)
}
pub fn with_options(
width: u32,
height: u32,
scale_factor: f64,
prefers_dark: Option<bool>,
) -> Self {
Self {
inner: Arc::new(Inner {
width,
height,
scale_factor,
prefers_dark,
}),
}
}
}
impl HasWindowHandle for HeadlessWindow {
fn window_handle(&self) -> Result<WindowHandle<'_>, HandleError> {
Err(HandleError::Unavailable)
}
}
impl HasDisplayHandle for HeadlessWindow {
fn display_handle(&self) -> Result<DisplayHandle<'_>, HandleError> {
Err(HandleError::Unavailable)
}
}
impl Window for HeadlessWindow {
fn width(&self) -> u32 {
self.inner.width
}
fn height(&self) -> u32 {
self.inner.height
}
fn request_redraw(&self) {}
fn scale_factor(&self) -> f64 {
self.inner.scale_factor
}
fn prefers_dark(&self) -> Option<bool> {
self.inner.prefers_dark
}
fn is_offscreen(&self) -> bool {
true
}
}