bevy/examples/ui
Rob Parrett 5b29402cc8
Add with_child to simplify spawning when there will only be one child (#14594)
# Objective

This idea came up in the context of a hypothetical "text sections as
entities" where text sections are children of a text bundle.

```rust
commands
    .spawn(TextBundle::default())
    .with_children(|parent} {
        parent.spawn(TextSection::from("Hello"));
    });
```

This is a bit cumbersome (but powerful and probably the way things are
headed). [`bsn!`](https://github.com/bevyengine/bevy/discussions/14437)
will eventually make this nicer, but in the mean time, this might
improve ergonomics for the common case where there is only one
`TextSection`.

## Solution

Add a `with_child` method to the `BuildChildren` trait that spawns a
single bundle and adds it as a child to the entity.

```rust
commands
    .spawn(TextBundle::default())
    .with_child(TextSection::from("Hello"));
```

## Testing

I added some tests, and modified the `button` example to use the new
method.

If any potential co-authors want to improve the tests, that would be
great.

## Alternatives

- Some sort of macro. See
https://github.com/tigregalis/bevy_spans_ent/blob/main/examples/macro.rs#L20.
I don't love this, personally, and it would probably be obsoleted by
`bsn!`.
- Wait for `bsn!`
- Add `with_children_batch` that takes an `Into<Iterator>` of bundles.
  ```rust
  with_children_batch(vec![TextSection::from("Hello")])
  ```
This is maybe not as useful as it sounds -- it only works with
homogeneous bundles, so no marker components or styles.
- If this doesn't seem valuable, doing nothing is cool with me.
2024-08-02 15:37:15 +00:00
..
borders.rs remove rounded_borders and merge with borders example (#14317) 2024-07-15 16:54:05 +00:00
button.rs Add with_child to simplify spawning when there will only be one child (#14594) 2024-08-02 15:37:15 +00:00
display_and_visibility.rs fix remaining issues with background color in examples (#14115) 2024-07-03 01:13:55 +00:00
flex_layout.rs Omit font size where it closely matches the default in examples (#13952) 2024-06-20 21:01:28 +00:00
font_atlas_debug.rs Adding explanation to seeded rng used in examples (#12593) 2024-03-26 19:40:18 +00:00
grid.rs Omit font size where it closely matches the default in examples (#13952) 2024-06-20 21:01:28 +00:00
overflow.rs Updates default Text font size to 24px (#13603) 2024-05-31 16:41:27 +00:00
overflow_debug.rs Updates default Text font size to 24px (#13603) 2024-05-31 16:41:27 +00:00
relative_cursor_position.rs Migrate from LegacyColor to bevy_color::Color (#12163) 2024-02-29 19:35:12 +00:00
render_ui_to_texture.rs Migrate from LegacyColor to bevy_color::Color (#12163) 2024-02-29 19:35:12 +00:00
size_constraints.rs fix remaining issues with background color in examples (#14115) 2024-07-03 01:13:55 +00:00
text.rs Cosmic text (#10193) 2024-07-04 20:41:08 +00:00
text_debug.rs Cosmic text (#10193) 2024-07-04 20:41:08 +00:00
text_wrap_debug.rs Cosmic text (#10193) 2024-07-04 20:41:08 +00:00
transparency_ui.rs Make default behavior for BackgroundColor and BorderColor more intuitive (#14017) 2024-06-25 21:50:41 +00:00
ui.rs Updates default Text font size to 24px (#13603) 2024-05-31 16:41:27 +00:00
ui_material.rs Update ui_material example to be a slider instead (#14031) 2024-06-27 21:23:04 +00:00
ui_scaling.rs Cosmic text (#10193) 2024-07-04 20:41:08 +00:00
ui_texture_atlas.rs Make default behavior for BackgroundColor and BorderColor more intuitive (#14017) 2024-06-25 21:50:41 +00:00
ui_texture_atlas_slice.rs Fix UI texture atlas with offset (#13620) 2024-07-30 15:31:58 +00:00
ui_texture_slice.rs Fix border color in ui_texture_slice and ui_texture_atlas_slice examples. (#14121) 2024-07-03 13:51:44 +00:00
viewport_debug.rs Fix green colors becoming darker in various examples (#12328) 2024-03-05 23:42:03 +00:00
window_fallthrough.rs Migrate from LegacyColor to bevy_color::Color (#12163) 2024-02-29 19:35:12 +00:00
z_index.rs Fix green colors becoming darker in various examples (#12328) 2024-03-05 23:42:03 +00:00