use crate::prelude::*;
#[derive(Clone, Component, Debug, Deserialize, PartialEq, Resource, Serialize)]
#[serde(default)]
pub struct WindowState {
pub mode: WindowMode,
pub resolution: Option<(u32, u32)>,
pub scale: Option<f64>,
pub position: Option<(i32, i32)>,
#[serde(skip)]
pub(crate) sync: bool,
}
impl WindowState {
pub fn borderless_fullscreen() -> WindowState {
WindowState {
mode: WindowMode::BorderlessFullscreen,
resolution: None,
scale: None,
position: None,
sync: true,
}
}
pub fn fullscreen() -> WindowState {
WindowState {
mode: WindowMode::Fullscreen,
resolution: None,
scale: None,
position: None,
sync: true,
}
}
pub fn sized_fullscreen() -> WindowState {
WindowState {
mode: WindowMode::SizedFullscreen,
resolution: None,
scale: None,
position: None,
sync: true,
}
}
pub fn windowed(width: u32, height: u32) -> WindowState {
WindowState {
mode: WindowMode::Windowed,
resolution: Some((width, height)),
scale: None,
position: None,
sync: true,
}
}
}
impl WindowState {
pub fn at(mut self, x: i32, y: i32) -> WindowState {
if self.mode == WindowMode::Windowed {
self.position = Some((x, y));
}
self
}
pub fn scaled(mut self, scale: f64) -> WindowState {
self.scale = Some(scale);
self
}
}
impl Default for WindowState {
fn default() -> WindowState {
WindowState::borderless_fullscreen()
}
}