1use alloc::{string::String, vec::Vec};
2use bevy_ecs::component::Component;
3use bevy_math::{IVec2, UVec2};
4
5#[cfg(feature = "bevy_reflect")]
6use {bevy_ecs::prelude::ReflectComponent, bevy_reflect::Reflect};
7
8#[cfg(all(feature = "serialize", feature = "bevy_reflect"))]
9use bevy_reflect::{ReflectDeserialize, ReflectSerialize};
10
11#[derive(Component, Debug, Clone)]
22#[cfg_attr(
23 feature = "bevy_reflect",
24 derive(Reflect),
25 reflect(Component, Debug, Clone)
26)]
27#[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))]
28#[cfg_attr(
29 all(feature = "serialize", feature = "bevy_reflect"),
30 reflect(Serialize, Deserialize)
31)]
32pub struct Monitor {
33 pub name: Option<String>,
35 pub physical_height: u32,
37 pub physical_width: u32,
39 pub physical_position: IVec2,
41 pub refresh_rate_millihertz: Option<u32>,
43 pub scale_factor: f64,
45 pub video_modes: Vec<VideoMode>,
47}
48
49#[derive(Component, Debug, Clone)]
51#[cfg_attr(
52 feature = "bevy_reflect",
53 derive(Reflect),
54 reflect(Component, Debug, Clone)
55)]
56pub struct PrimaryMonitor;
57
58impl Monitor {
59 pub fn physical_size(&self) -> UVec2 {
61 UVec2::new(self.physical_width, self.physical_height)
62 }
63}
64
65#[derive(Debug, Clone, Copy, PartialEq, Eq)]
67#[cfg_attr(feature = "bevy_reflect", derive(Reflect), reflect(Debug, Clone))]
68#[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))]
69#[cfg_attr(
70 all(feature = "serialize", feature = "bevy_reflect"),
71 reflect(Serialize, Deserialize)
72)]
73pub struct VideoMode {
74 pub physical_size: UVec2,
76 pub bit_depth: u16,
78 pub refresh_rate_millihertz: u32,
80}