// FIXME(3492): remove once docs are ready #![allow(missing_docs)] #![cfg_attr(docsrs, feature(doc_auto_cfg))] #![doc( html_logo_url = "https://bevyengine.org/assets/icon.png", html_favicon_url = "https://bevyengine.org/assets/icon.png" )] //! 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")] mod accessibility; mod focus; mod geometry; mod layout; mod render; mod stack; mod texture_slice; 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, }; // `bevy_sprite` re-exports for texture slicing #[doc(hidden)] pub use bevy_sprite::{BorderRect, ImageScaleMode, SliceScaleMode, TextureSlicer}; } use bevy_app::prelude::*; use bevy_ecs::prelude::*; use bevy_input::InputSystem; use bevy_render::{ view::{check_visibility, VisibilitySystems}, RenderApp, }; use bevy_transform::TransformSystem; use layout::ui_surface::UiSurface; 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) } } // Marks systems that can be ambiguous with [`widget::text_system`] if the `bevy_text` feature is enabled. // See https://github.com/bevyengine/bevy/pull/11391 for more details. #[derive(SystemSet, Debug, Hash, PartialEq, Eq, Clone)] struct AmbiguousWithTextSystem; #[derive(SystemSet, Debug, Hash, PartialEq, Eq, Clone)] struct AmbiguousWithUpdateText2DLayout; /// A convenient alias for `With`, for use with /// [`bevy_render::view::VisibleEntities`]. pub type WithNode = With; 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::