mirror of
https://github.com/bevyengine/bevy
synced 2025-01-10 20:29:01 +00:00
ddfafab971
# Objective Fix https://github.com/bevyengine/bevy/issues/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(?) - https://github.com/bevyengine/bevy/issues/5621 - https://github.com/bevyengine/bevy/issues/7099 - https://github.com/bevyengine/bevy/issues/7098 Co-authored-by: Carter Anderson <mcanders1@gmail.com>
93 lines
3.5 KiB
Rust
93 lines
3.5 KiB
Rust
use bevy_reflect::{prelude::ReflectDefault, FromReflect, Reflect};
|
|
|
|
#[cfg(feature = "serialize")]
|
|
use bevy_reflect::{ReflectDeserialize, ReflectSerialize};
|
|
|
|
/// The icon to display for a window's cursor.
|
|
///
|
|
/// Examples of all of these cursors can be found [here](https://www.w3schools.com/cssref/playit.asp?filename=playcss_cursor).
|
|
/// This `enum` is simply a copy of a similar `enum` found in [`winit`](https://docs.rs/winit/latest/winit/window/enum.CursorIcon.html).
|
|
/// `winit`, in turn, mostly copied cursor types available in the browser.
|
|
#[derive(Default, Debug, Hash, PartialEq, Eq, Clone, Copy, Reflect, FromReflect)]
|
|
#[cfg_attr(
|
|
feature = "serialize",
|
|
derive(serde::Serialize, serde::Deserialize),
|
|
reflect(Serialize, Deserialize)
|
|
)]
|
|
#[reflect(Debug, PartialEq, Default)]
|
|
pub enum CursorIcon {
|
|
/// The platform-dependent default cursor.
|
|
#[default]
|
|
Default,
|
|
/// A simple crosshair.
|
|
Crosshair,
|
|
/// A hand (often used to indicate links in web browsers).
|
|
Hand,
|
|
/// An arrow. This is the default cursor on most systems.
|
|
Arrow,
|
|
/// Indicates something is to be moved.
|
|
Move,
|
|
/// Indicates text that may be selected or edited.
|
|
Text,
|
|
/// Program busy indicator.
|
|
Wait,
|
|
/// Help indicator (often rendered as a "?")
|
|
Help,
|
|
/// Progress indicator. Shows that processing is being done.
|
|
///
|
|
/// But in contrast with "Wait" the user may still interact with the program.
|
|
/// Often rendered as a spinning beach ball, or an arrow with a watch or hourglass.
|
|
Progress,
|
|
/// Cursor showing that something cannot be done.
|
|
NotAllowed,
|
|
/// Indicates that a context menu is available.
|
|
ContextMenu,
|
|
/// Indicates that a cell (or set of cells) may be selected.
|
|
Cell,
|
|
/// Indicates vertical text that may be selected or edited.
|
|
VerticalText,
|
|
/// Indicates that an alias of something is to be created.
|
|
Alias,
|
|
/// Indicates something is to be copied.
|
|
Copy,
|
|
/// Indicates that the dragged item cannot be dropped here.
|
|
NoDrop,
|
|
/// Indicates that something can be grabbed.
|
|
Grab,
|
|
/// Indicates that something is grabbed.
|
|
Grabbing,
|
|
/// Indicates that the user can scroll by dragging the mouse.
|
|
AllScroll,
|
|
/// Indicates that the user can zoom in.
|
|
ZoomIn,
|
|
/// Indicates that the user can zoom out.
|
|
ZoomOut,
|
|
/// Indicates that an edge of a box is to be moved right (east).
|
|
EResize,
|
|
/// Indicates that an edge of a box is to be moved up (north).
|
|
NResize,
|
|
/// Indicates that an edge of a box is to be moved up and right (north/east).
|
|
NeResize,
|
|
/// indicates that an edge of a box is to be moved up and left (north/west).
|
|
NwResize,
|
|
/// Indicates that an edge of a box is to be moved down (south).
|
|
SResize,
|
|
/// The cursor indicates that an edge of a box is to be moved down and right (south/east).
|
|
SeResize,
|
|
/// The cursor indicates that an edge of a box is to be moved down and left (south/west).
|
|
SwResize,
|
|
/// Indicates that an edge of a box is to be moved left (west).
|
|
WResize,
|
|
/// Indicates a bidirectional resize cursor.
|
|
EwResize,
|
|
/// Indicates a bidirectional resize cursor.
|
|
NsResize,
|
|
/// Indicates a bidirectional resize cursor.
|
|
NeswResize,
|
|
/// Indicates a bidirectional resize cursor.
|
|
NwseResize,
|
|
/// Indicates that a column can be resized horizontally.
|
|
ColResize,
|
|
/// Indicates that the row can be resized vertically.
|
|
RowResize,
|
|
}
|