Skip to content

Commit 7a18e23

Browse files
Aceericart
andcommitted
Windows as Entities (#5589)
# Objective Fix bevyengine/bevy#4530 - Make it easier to open/close/modify windows by setting them up as `Entity`s with a `Window` component. - Make multiple windows very simple to set up. (just add a `Window` component to an entity and it should open) ## Solution - Move all properties of window descriptor to ~components~ a component. - Replace `WindowId` with `Entity`. - ~Use change detection for components to update backend rather than events/commands. (The `CursorMoved`/`WindowResized`/... events are kept for user convenience.~ Check each field individually to see what we need to update, events are still kept for user convenience. --- ## Changelog - `WindowDescriptor` renamed to `Window`. - Width/height consolidated into a `WindowResolution` component. - Requesting maximization/minimization is done on the [`Window::state`] field. - `WindowId` is now `Entity`. ## Migration Guide - Replace `WindowDescriptor` with `Window`. - Change `width` and `height` fields in a `WindowResolution`, either by doing ```rust WindowResolution::new(width, height) // Explicitly // or using From<_> for tuples for convenience (1920., 1080.).into() ``` - Replace any `WindowCommand` code to just modify the `Window`'s fields directly and creating/closing windows is now by spawning/despawning an entity with a `Window` component like so: ```rust let window = commands.spawn(Window { ... }).id(); // open window commands.entity(window).despawn(); // close window ``` ## Unresolved - ~How do we tell when a window is minimized by a user?~ ~Currently using the `Resize(0, 0)` as an indicator of minimization.~ No longer attempting to tell given how finnicky this was across platforms, now the user can only request that a window be maximized/minimized. ## Future work - Move `exit_on_close` functionality out from windowing and into app(?) - bevyengine/bevy#5621 - bevyengine/bevy#7099 - bevyengine/bevy#7098 Co-authored-by: Carter Anderson <[email protected]>
1 parent 2eb2ecd commit 7a18e23

File tree

5 files changed

+769
-520
lines changed

5 files changed

+769
-520
lines changed

src/converters.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ pub fn convert_mouse_button(mouse_button: winit::event::MouseButton) -> MouseBut
3333

3434
pub fn convert_touch_input(
3535
touch_input: winit::event::Touch,
36-
location: winit::dpi::LogicalPosition<f32>,
36+
location: winit::dpi::LogicalPosition<f64>,
3737
) -> TouchInput {
3838
TouchInput {
3939
phase: match touch_input.phase {
@@ -42,7 +42,7 @@ pub fn convert_touch_input(
4242
winit::event::TouchPhase::Ended => TouchPhase::Ended,
4343
winit::event::TouchPhase::Cancelled => TouchPhase::Cancelled,
4444
},
45-
position: Vec2::new(location.x, location.y),
45+
position: Vec2::new(location.x as f32, location.y as f32),
4646
force: touch_input.force.map(|f| match f {
4747
winit::event::Force::Calibrated {
4848
force,

0 commit comments

Comments
 (0)