Skip to content
Snippets Groups Projects
window_size.rs 1.3 KiB
Newer Older
TheRawMeatball's avatar
TheRawMeatball committed
use bevy::{
    prelude::*,
    window::{WindowCreated, WindowResized},
};

/// Tracks the bevy window size.
StarToaster's avatar
StarToaster committed
#[derive(Resource, Default, Debug, Clone, Copy, PartialEq)]
TheRawMeatball's avatar
TheRawMeatball committed
pub struct WindowSize(pub f32, pub f32);

StarToaster's avatar
StarToaster committed
pub fn update_window_size(
TheRawMeatball's avatar
TheRawMeatball committed
    mut window_resized_events: EventReader<WindowResized>,
    mut window_created_events: EventReader<WindowCreated>,
    windows: Res<Windows>,
    mut window_size: ResMut<WindowSize>,
TheRawMeatball's avatar
TheRawMeatball committed
) {
    let mut changed_window_ids = Vec::new();
    // handle resize events. latest events are handled first because we only want to resize each
    // window once
    for event in window_resized_events.iter().rev() {
        if changed_window_ids.contains(&event.id) {
            continue;
        }

        changed_window_ids.push(event.id);
    }

    // handle resize events. latest events are handled first because we only want to resize each
    // window once
    for event in window_created_events.iter().rev() {
        if changed_window_ids.contains(&event.id) {
            continue;
        }

        changed_window_ids.push(event.id);
    }

    for window_id in changed_window_ids {
        if let Some(window) = windows.get(window_id) {
            let width = window.width();
            let height = window.height();
            *window_size = WindowSize(width, height);
        }
    }
TheRawMeatball's avatar
TheRawMeatball committed
}