//! This crate contains Bevy's UI system, which can be used to create UI for both 2D and 3D games //! # Basic usage //! Spawn UI elements with [`node_bundles::ButtonBundle`], [`node_bundles::ImageBundle`], [`node_bundles::TextBundle`] and [`node_bundles::NodeBundle`] //! This UI is laid out with the Flexbox and CSS Grid layout models (see ) pub mod measurement; pub mod node_bundles; pub mod ui_material; pub mod update; pub mod widget; use bevy_derive::{Deref, DerefMut}; use bevy_reflect::Reflect; #[cfg(feature = "bevy_text")] use bevy_text::TextLayoutInfo; #[cfg(feature = "bevy_text")] mod accessibility; mod focus; mod geometry; mod layout; mod render; mod stack; mod ui_node; pub use focus::*; pub use geometry::*; pub use layout::*; pub use measurement::*; pub use render::*; pub use ui_material::*; pub use ui_node::*; use widget::UiImageSize; #[doc(hidden)] pub mod prelude { #[doc(hidden)] pub use crate::{ geometry::*, node_bundles::*, ui_material::*, ui_node::*, widget::Button, widget::Label, Interaction, UiMaterialPlugin, UiScale, }; } #[cfg(feature = "bevy_text")] use crate::widget::TextFlags; use bevy_app::prelude::*; use bevy_ecs::prelude::*; use bevy_input::InputSystem; use bevy_render::RenderApp; use bevy_transform::TransformSystem; use stack::ui_stack_system; pub use stack::UiStack; use update::{update_clipping_system, update_target_camera_system}; /// The basic plugin for Bevy UI #[derive(Default)] pub struct UiPlugin; /// The label enum labeling the types of systems in the Bevy UI #[derive(Debug, Hash, PartialEq, Eq, Clone, SystemSet)] pub enum UiSystem { /// After this label, the ui layout state has been updated Layout, /// After this label, input interactions with UI entities have been updated for this frame Focus, /// After this label, the [`UiStack`] resource has been updated Stack, /// After this label, node outline widths have been updated Outlines, } /// The current scale of the UI. /// /// A multiplier to fixed-sized ui values. /// **Note:** This will only affect fixed ui values like [`Val::Px`] #[derive(Debug, Reflect, Resource, Deref, DerefMut)] pub struct UiScale(pub f32); impl Default for UiScale { fn default() -> Self { Self(1.0) } } impl Plugin for UiPlugin { fn build(&self, app: &mut App) { app.init_resource::() .init_resource::() .init_resource::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() // NOTE: used by Style::aspect_ratio .register_type::>() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::