Mouse scroll
This commit is contained in:
parent
aacd25da3d
commit
e548a5317f
43
src/lib.rs
43
src/lib.rs
|
|
@ -1,4 +1,7 @@
|
||||||
use bevy::{input::mouse::MouseMotion, prelude::*};
|
use bevy::{
|
||||||
|
input::mouse::{MouseMotion, MouseWheel},
|
||||||
|
prelude::*,
|
||||||
|
};
|
||||||
|
|
||||||
/// A `Plugin` providing the systems and components required to make a ScrollView work.
|
/// A `Plugin` providing the systems and components required to make a ScrollView work.
|
||||||
pub struct ScrollViewPlugin;
|
pub struct ScrollViewPlugin;
|
||||||
|
|
@ -8,7 +11,10 @@ impl Plugin for ScrollViewPlugin {
|
||||||
app.register_type::<ScrollView>()
|
app.register_type::<ScrollView>()
|
||||||
.register_type::<ScrollViewport>()
|
.register_type::<ScrollViewport>()
|
||||||
.register_type::<ScrollViewContent>()
|
.register_type::<ScrollViewContent>()
|
||||||
.add_systems(Update, (create_scroll_view, input_mouse_pressed_move));
|
.add_systems(
|
||||||
|
Update,
|
||||||
|
(create_scroll_view, input_mouse_pressed_move, scroll_events),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -67,3 +73,36 @@ fn input_mouse_pressed_move(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn scroll_events(
|
||||||
|
mut scroll_evr: EventReader<MouseWheel>,
|
||||||
|
mut q: Query<(Entity, &mut Style, &Interaction), With<ScrollViewport>>,
|
||||||
|
) {
|
||||||
|
use bevy::input::mouse::MouseScrollUnit;
|
||||||
|
for ev in scroll_evr.read() {
|
||||||
|
let y = match ev.unit {
|
||||||
|
MouseScrollUnit::Line => {
|
||||||
|
println!(
|
||||||
|
"Scroll (line units): vertical: {}, horizontal: {}",
|
||||||
|
ev.y, ev.x
|
||||||
|
);
|
||||||
|
ev.y
|
||||||
|
}
|
||||||
|
MouseScrollUnit::Pixel => {
|
||||||
|
println!(
|
||||||
|
"Scroll (pixel units): vertical: {}, horizontal: {}",
|
||||||
|
ev.y, ev.x
|
||||||
|
);
|
||||||
|
ev.y
|
||||||
|
}
|
||||||
|
};
|
||||||
|
for (_e, mut style, &interaction) in q.iter_mut() {
|
||||||
|
if interaction == Interaction::Hovered {
|
||||||
|
style.top = match style.top {
|
||||||
|
Val::Px(px) => Val::Px(px + y),
|
||||||
|
_ => Val::Px(0.0),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue