the area
fn spawn_table(mut trigger: OnSpawn<TableProps>, mut commands: Commands) {
let children = std::mem::take(&mut trigger.props.children);
let parent = commands
.entity(trigger.entity)
.insert((
Table,
Node {
display: Display::Flex,
flex_wrap: FlexWrap::Wrap,
column_gap: Val::Px(20.0),
width: Val::Px(500.0),
height: Val::Px(400.0),
overflow: Overflow {
x: OverflowAxis::Clip,
y: OverflowAxis::Scroll,
},
..default()
},
BackgroundColor(Color::WHITE),
))
.id();
for child in children {
commands.spawn_trigger(child).set_parent_in_place(parent);
}
commands
.spawn_trigger(CardProps {
color_hex: "#000000",
})
.insert(NextTableSlot)
.set_parent_in_place(parent);
}
pub fn update_scroll_position(
mut mouse_wheel_events: EventReader<MouseWheel>,
hover_map: Res<HoverMap>,
mut scrolled_node_query: Query<&mut ScrollPosition>,
) {
for mouse_wheel_event in mouse_wheel_events.read() {
let (dx, dy) = match mouse_wheel_event.unit {
MouseScrollUnit::Line => (mouse_wheel_event.x * 21.0, mouse_wheel_event.y * 21.0),
MouseScrollUnit::Pixel => (mouse_wheel_event.x, mouse_wheel_event.y),
};
for (_pointer, pointer_map) in hover_map.iter() {
for (entity, _hit) in pointer_map.iter() {
if let Ok(mut scroll_position) = scrolled_node_query.get_mut(*entity) {
scroll_position.offset_x -= dx;
scroll_position.offset_y -= dy;
}
}
}
}
}