Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/tests/window/change_window_mode.rs
6592 views
1
//! a test that confirms that 'bevy' does not panic while changing from Windowed to Fullscreen when viewport is set
2
3
use bevy::{prelude::*, render::camera::Viewport, window::WindowMode};
4
5
//Having a viewport set to the same size as a window used to cause panic on some occasions when switching to Fullscreen
6
const WINDOW_WIDTH: f32 = 1366.0;
7
const WINDOW_HEIGHT: f32 = 768.0;
8
9
fn main() {
10
//Specify Window Size.
11
let window = Window {
12
resolution: (WINDOW_WIDTH, WINDOW_HEIGHT).into(),
13
..default()
14
};
15
let primary_window = Some(window);
16
17
App::new()
18
.add_plugins(DefaultPlugins.set(WindowPlugin {
19
primary_window,
20
..default()
21
}))
22
.add_systems(Startup, startup)
23
.add_systems(Update, toggle_window_mode)
24
.run();
25
}
26
27
fn startup(mut cmds: Commands) {
28
//Match viewport to Window size.
29
let physical_position = UVec2::new(0, 0);
30
let physical_size = Vec2::new(WINDOW_WIDTH, WINDOW_HEIGHT).as_uvec2();
31
let viewport = Some(Viewport {
32
physical_position,
33
physical_size,
34
..default()
35
});
36
37
cmds.spawn(Camera2d).insert(Camera {
38
viewport,
39
..default()
40
});
41
}
42
43
fn toggle_window_mode(mut qry_window: Query<&mut Window>) {
44
let Ok(mut window) = qry_window.single_mut() else {
45
return;
46
};
47
48
window.mode = match window.mode {
49
WindowMode::Windowed => {
50
// it takes a while for the window to change from `Windowed` to `Fullscreen` and back
51
std::thread::sleep(std::time::Duration::from_secs(4));
52
WindowMode::Fullscreen(
53
MonitorSelection::Entity(entity),
54
VideoModeSelection::Current,
55
)
56
}
57
_ => {
58
std::thread::sleep(std::time::Duration::from_secs(4));
59
WindowMode::Windowed
60
}
61
};
62
}
63
64