How, with Bevy, can you get and set Window information after creation?

Viewed 5278

I want to be able to read and set window-settings with Bevy. I attempted to do so with a basic system:

fn test_system(mut win_desc: ResMut<WindowDescriptor>) {
    win_desc.title = "test".to_string();
    println!("{}",win_desc.title);
}

While this works (partially), it only gives you the original settings, and it doesn't allow changes at all. In this example, the title will not change, but the display of the title will. In another example, changing the window-size (manually at run-time) will not be reflected if you were to print win_desc.width.

2 Answers

At the moment, the WindowDescriptor is used only during window creation and is not updated later

To get notified when the window is resized I use this system:

fn resize_notificator(resize_event: Res<Events<WindowResized>>) {
    let mut reader = resize_event.get_reader();
    for e in reader.iter(&resize_event) {
        println!("width = {} height = {}", e.width, e.height);
    }
}

Other useful events can be found at https://github.com/bevyengine/bevy/blob/master/crates/bevy_window/src/event.rs

There's a nice example of working with windows provided in the bevy GitHub repo: https://github.com/bevyengine/bevy/blob/master/examples/window/window_settings.rs

For your case of reading / writing window size:

fn window_resize_system(mut windows: ResMut<Windows>) {
    let window = windows.get_primary_mut().unwrap();
    println!("Window size was: {},{}", window.width(), window.height());
    window.set_resolution(1280, 720);
}

As zyrg mentioned, you can also listen for window events.

Related