Skip to content

Commit 8e43dde

Browse files
committed
Use new spawn API
1 parent c502186 commit 8e43dde

File tree

2 files changed

+18
-34
lines changed

2 files changed

+18
-34
lines changed

crates/bevy_ui/src/lib.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -223,8 +223,7 @@ impl Plugin for UiPlugin {
223223
.in_set(AmbiguousWithTextSystem)
224224
.in_set(AmbiguousWithUpdateText2DLayout),
225225
),
226-
)
227-
.add_observer(widget::on_add_viewport);
226+
);
228227

229228
build_text_interop(app);
230229

crates/bevy_ui/src/widget/viewport.rs

+17-32
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1-
use bevy_asset::Assets;
1+
use bevy_asset::{Assets, Handle};
22
use bevy_ecs::{
3+
bundle::Bundle,
4+
children,
35
entity::Entity,
46
event::EventReader,
5-
observer::Trigger,
7+
hierarchy::Children,
68
prelude::Component,
79
query::Changed,
810
reflect::ReflectComponent,
11+
spawn::SpawnRelated,
912
system::{Commands, Local, Query, Res, ResMut},
10-
world::OnAdd,
1113
};
12-
use bevy_hierarchy::{BuildChildren, Children};
1314
use bevy_image::Image;
1415
use bevy_math::Rect;
1516
#[cfg(feature = "bevy_ui_picking_backend")]
@@ -19,13 +20,14 @@ use bevy_picking::{
1920
pointer::{Location, PointerId, PointerInput},
2021
Pickable,
2122
};
23+
use bevy_platform_support::collections::HashSet;
2224
use bevy_reflect::Reflect;
2325
use bevy_render::{
2426
camera::{Camera, NormalizedRenderTarget},
2527
render_resource::Extent3d,
2628
};
2729
use bevy_transform::components::GlobalTransform;
28-
use bevy_utils::{default, HashSet};
30+
use bevy_utils::default;
2931
#[cfg(feature = "bevy_ui_picking_backend")]
3032
use uuid::Uuid;
3133

@@ -149,26 +151,14 @@ pub fn viewport_picking(
149151
}
150152
}
151153

152-
/// Adds a [`PointerId`] and [`ImageNode`] child to entities that have a [`Viewport`] component
153-
/// added to them.
154-
pub fn on_add_viewport(
155-
trigger: Trigger<OnAdd, Viewport>,
156-
mut commands: Commands,
157-
viewport_query: Query<&Viewport>,
158-
camera_query: Query<&Camera>,
159-
) {
160-
let node = trigger.target();
161-
162-
let viewport = viewport_query.get(node).unwrap();
163-
let Ok(camera) = camera_query.get(viewport.camera) else {
164-
return;
165-
};
166-
let Some(image_handle) = camera.target.as_image() else {
167-
return;
168-
};
169-
commands
170-
.spawn((
171-
ImageNode::new(image_handle.clone()),
154+
/// Spawns a new viewport widget with the given `camera` and `target`.
155+
pub fn viewport(camera: Entity, target: Handle<Image>) -> impl Bundle {
156+
(
157+
Viewport::new(camera),
158+
#[cfg(feature = "bevy_ui_picking_backend")]
159+
PointerId::Custom(Uuid::new_v4()),
160+
children![(
161+
ImageNode::new(target),
172162
Node {
173163
position_type: PositionType::Absolute,
174164
top: Val::ZERO,
@@ -179,13 +169,8 @@ pub fn on_add_viewport(
179169
},
180170
#[cfg(feature = "bevy_ui_picking_backend")]
181171
Pickable::IGNORE,
182-
))
183-
.set_parent(node);
184-
185-
#[cfg(feature = "bevy_ui_picking_backend")]
186-
commands
187-
.entity(node)
188-
.insert(PointerId::Custom(Uuid::new_v4()));
172+
)],
173+
)
189174
}
190175

191176
/// Updates the size of the associated render target for viewports when the node size changes.

0 commit comments

Comments
 (0)