Add button type to click events
This commit is contained in:
parent
17f963e4cc
commit
39b45a747b
|
@ -59,7 +59,7 @@ fn SceneTree<'a>(cx: Scope, selected_entity: &'a UseState<Option<Entity>>) -> El
|
||||||
rsx! {
|
rsx! {
|
||||||
for (entity, name) in entities {
|
for (entity, name) in entities {
|
||||||
Button {
|
Button {
|
||||||
onclick: move |event: Event<()>| {
|
onclick: move |event: Event<PointerButton>| if *event.data == PointerButton::Primary {
|
||||||
if Some(entity) == ***selected_entity {
|
if Some(entity) == ***selected_entity {
|
||||||
selected_entity.set(None);
|
selected_entity.set(None);
|
||||||
} else {
|
} else {
|
||||||
|
@ -79,7 +79,7 @@ fn SceneTree<'a>(cx: Scope, selected_entity: &'a UseState<Option<Entity>>) -> El
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Button {
|
Button {
|
||||||
onclick: move |event: Event<()>| {
|
onclick: move |event: Event<PointerButton>| if *event.data == PointerButton::Primary {
|
||||||
spawn_entity();
|
spawn_entity();
|
||||||
event.stop_propagation();
|
event.stop_propagation();
|
||||||
},
|
},
|
||||||
|
@ -148,8 +148,8 @@ fn Button<'a>(cx: Scope<'a, ButtonProps<'a>>) -> Element<'a> {
|
||||||
render! {
|
render! {
|
||||||
node {
|
node {
|
||||||
onclick: move |event| cx.props.onclick.call(event),
|
onclick: move |event| cx.props.onclick.call(event),
|
||||||
onclick_down: |_| clicked.set(true),
|
onclick_down: |event| if *event.data == PointerButton::Primary { clicked.set(true) },
|
||||||
onclick_up: |_| clicked.set(false),
|
onclick_up: |event| if *event.data == PointerButton::Primary { clicked.set(false) },
|
||||||
onmouse_enter: |_| hovered.set(true),
|
onmouse_enter: |_| hovered.set(true),
|
||||||
onmouse_exit: |_| { hovered.set(false); clicked.set(false) },
|
onmouse_exit: |_| { hovered.set(false); clicked.set(false) },
|
||||||
padding: "8",
|
padding: "8",
|
||||||
|
@ -161,7 +161,7 @@ fn Button<'a>(cx: Scope<'a, ButtonProps<'a>>) -> Element<'a> {
|
||||||
|
|
||||||
#[derive(Props)]
|
#[derive(Props)]
|
||||||
struct ButtonProps<'a> {
|
struct ButtonProps<'a> {
|
||||||
onclick: EventHandler<'a, Event<()>>,
|
onclick: EventHandler<'a, Event<PointerButton>>,
|
||||||
base_color: Option<&'a str>,
|
base_color: Option<&'a str>,
|
||||||
click_color: Option<&'a str>,
|
click_color: Option<&'a str>,
|
||||||
hover_color: Option<&'a str>,
|
hover_color: Option<&'a str>,
|
||||||
|
|
|
@ -17,16 +17,22 @@ use std::{any::Any, mem, rc::Rc};
|
||||||
|
|
||||||
// TODO: Other events
|
// TODO: Other events
|
||||||
pub mod events {
|
pub mod events {
|
||||||
|
use bevy_mod_picking::pointer::PointerButton;
|
||||||
|
|
||||||
super::impl_event! [
|
super::impl_event! [
|
||||||
();
|
();
|
||||||
onclick
|
|
||||||
onclick_down
|
|
||||||
onclick_up
|
|
||||||
onmouse_over
|
onmouse_over
|
||||||
onmouse_out
|
onmouse_out
|
||||||
onmouse_enter
|
onmouse_enter
|
||||||
onmouse_exit
|
onmouse_exit
|
||||||
];
|
];
|
||||||
|
|
||||||
|
super::impl_event! [
|
||||||
|
PointerButton;
|
||||||
|
onclick
|
||||||
|
onclick_down
|
||||||
|
onclick_up
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Resource, Default)]
|
#[derive(Resource, Default)]
|
||||||
|
@ -53,13 +59,13 @@ impl EventReaders {
|
||||||
) -> Vec<(Entity, &'static str, Rc<dyn Any>, bool)> {
|
) -> Vec<(Entity, &'static str, Rc<dyn Any>, bool)> {
|
||||||
let mut events: Vec<(Entity, &'static str, Rc<dyn Any>, bool)> = Vec::new();
|
let mut events: Vec<(Entity, &'static str, Rc<dyn Any>, bool)> = Vec::new();
|
||||||
for event in self.click.read(click) {
|
for event in self.click.read(click) {
|
||||||
events.push((event.target, "click", Rc::new(()), true));
|
events.push((event.target, "click", Rc::new(event.button), true));
|
||||||
}
|
}
|
||||||
for event in self.click_down.read(click_down) {
|
for event in self.click_down.read(click_down) {
|
||||||
events.push((event.target, "click_down", Rc::new(()), true));
|
events.push((event.target, "click_down", Rc::new(event.button), true));
|
||||||
}
|
}
|
||||||
for event in self.click_up.read(click_up) {
|
for event in self.click_up.read(click_up) {
|
||||||
events.push((event.target, "click_up", Rc::new(()), true));
|
events.push((event.target, "click_up", Rc::new(event.button), true));
|
||||||
}
|
}
|
||||||
for event in self.mouse_over.read(mouse_over) {
|
for event in self.mouse_over.read(mouse_over) {
|
||||||
events.push((event.target, "mouse_over", Rc::new(()), false));
|
events.push((event.target, "mouse_over", Rc::new(()), false));
|
||||||
|
|
|
@ -30,6 +30,7 @@ pub mod prelude {
|
||||||
pub use super::ecs_hooks::*;
|
pub use super::ecs_hooks::*;
|
||||||
pub use super::elements::*;
|
pub use super::elements::*;
|
||||||
pub use super::{DioxusUiBundle, DioxusUiPlugin, DioxusUiRoot};
|
pub use super::{DioxusUiBundle, DioxusUiPlugin, DioxusUiRoot};
|
||||||
|
pub use bevy_mod_picking::pointer::PointerButton;
|
||||||
pub use dioxus;
|
pub use dioxus;
|
||||||
pub use dioxus::prelude::*;
|
pub use dioxus::prelude::*;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue