Path: blob/main/examples/ui/scroll_and_overflow/overflow.rs
9341 views
//! Simple example demonstrating overflow behavior.12use bevy::{color::palettes::css::*, prelude::*};34fn main() {5App::new()6.add_plugins(DefaultPlugins)7.add_systems(Startup, setup)8.add_systems(Update, update_outlines)9.run();10}1112fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {13commands.spawn(Camera2d);1415let text_style = TextFont::default();1617let image = asset_server.load("branding/icon.png");1819commands20.spawn((21Node {22width: percent(100),23height: percent(100),24align_items: AlignItems::Center,25justify_content: JustifyContent::Center,26..Default::default()27},28BackgroundColor(ANTIQUE_WHITE.into()),29))30.with_children(|parent| {31for overflow in [32Overflow::visible(),33Overflow::clip_x(),34Overflow::clip_y(),35Overflow::clip(),36] {37parent38.spawn(Node {39flex_direction: FlexDirection::Column,40align_items: AlignItems::Center,41margin: UiRect::horizontal(px(25)),42..Default::default()43})44.with_children(|parent| {45let label = format!("{overflow:#?}");46parent47.spawn((48Node {49padding: UiRect::all(px(10)),50margin: UiRect::bottom(px(25)),51..Default::default()52},53BackgroundColor(Color::srgb(0.25, 0.25, 0.25)),54))55.with_children(|parent| {56parent.spawn((Text::new(label), text_style.clone()));57});58parent59.spawn((60Node {61width: px(100),62height: px(100),63padding: UiRect {64left: px(25),65top: px(25),66..Default::default()67},68border: UiRect::all(px(5)),69overflow,70..default()71},72BorderColor::all(Color::BLACK),73BackgroundColor(GRAY.into()),74))75.with_children(|parent| {76parent.spawn((77ImageNode::new(image.clone()),78Node {79min_width: px(100),80min_height: px(100),81..default()82},83Interaction::default(),84Outline {85width: px(2),86offset: px(2),87color: Color::NONE,88},89));90});91});92}93});94}9596fn update_outlines(mut outlines_query: Query<(&mut Outline, Ref<Interaction>)>) {97for (mut outline, interaction) in outlines_query.iter_mut() {98if interaction.is_changed() {99outline.color = match *interaction {100Interaction::Pressed => RED.into(),101Interaction::Hovered => WHITE.into(),102Interaction::None => Color::NONE,103};104}105}106}107108109