use bevy_ecs::{component::Component, prelude::ReflectComponent};
use bevy_math::{IVec2, UVec2};
use bevy_reflect::Reflect;
#[cfg(feature = "serialize")]
use bevy_reflect::{ReflectDeserialize, ReflectSerialize};
#[derive(Component, Debug, Clone, Reflect)]
#[cfg_attr(
feature = "serialize",
derive(serde::Serialize, serde::Deserialize),
reflect(Serialize, Deserialize)
)]
#[reflect(Component, Debug)]
pub struct Monitor {
pub name: Option<String>,
pub physical_height: u32,
pub physical_width: u32,
pub physical_position: IVec2,
pub refresh_rate_millihertz: Option<u32>,
pub scale_factor: f64,
pub video_modes: Vec<VideoMode>,
}
#[derive(Component, Debug, Clone, Reflect)]
#[reflect(Component, Debug)]
pub struct PrimaryMonitor;
impl Monitor {
pub fn physical_size(&self) -> UVec2 {
UVec2::new(self.physical_width, self.physical_height)
}
}
#[derive(Debug, Clone, Reflect)]
#[cfg_attr(
feature = "serialize",
derive(serde::Serialize, serde::Deserialize),
reflect(Serialize, Deserialize)
)]
pub struct VideoMode {
pub physical_size: UVec2,
pub bit_depth: u16,
pub refresh_rate_millihertz: u32,
}