1
0

all_events.rs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. use dioxus::{events::*, html::MouseEvent, prelude::*};
  2. fn main() {
  3. dioxus_desktop::launch(app);
  4. }
  5. #[derive(Debug)]
  6. enum Event {
  7. MouseMove(MouseEvent),
  8. MouseClick(MouseEvent),
  9. MouseDoubleClick(MouseEvent),
  10. MouseDown(MouseEvent),
  11. MouseUp(MouseEvent),
  12. Wheel(WheelEvent),
  13. KeyDown(KeyboardEvent),
  14. KeyUp(KeyboardEvent),
  15. KeyPress(KeyboardEvent),
  16. FocusIn(FocusEvent),
  17. FocusOut(FocusEvent),
  18. }
  19. const MAX_EVENTS: usize = 8;
  20. const CONTAINER_STYLE: &str = r#"
  21. display: flex;
  22. flex-direction: column;
  23. align-items: center;
  24. "#;
  25. const RECT_STYLE: &str = r#"
  26. background: deepskyblue;
  27. height: 50vh;
  28. width: 50vw;
  29. color: white;
  30. padding: 20px;
  31. margin: 20px;
  32. text-aligh: center;
  33. "#;
  34. fn app(cx: Scope) -> Element {
  35. let events = use_ref(cx, std::collections::VecDeque::new);
  36. let log_event = move |event: Event| {
  37. let mut events = events.write();
  38. if events.len() >= MAX_EVENTS {
  39. events.pop_front();
  40. }
  41. events.push_back(event);
  42. };
  43. cx.render(rsx! (
  44. div { style: "{CONTAINER_STYLE}",
  45. div {
  46. style: "{RECT_STYLE}",
  47. // focusing is necessary to catch keyboard events
  48. tabindex: "0",
  49. onmousemove: move |event| log_event(Event::MouseMove(event)),
  50. onclick: move |event| log_event(Event::MouseClick(event)),
  51. ondoubleclick: move |event| log_event(Event::MouseDoubleClick(event)),
  52. onmousedown: move |event| log_event(Event::MouseDown(event)),
  53. onmouseup: move |event| log_event(Event::MouseUp(event)),
  54. onwheel: move |event| log_event(Event::Wheel(event)),
  55. onkeydown: move |event| log_event(Event::KeyDown(event)),
  56. onkeyup: move |event| log_event(Event::KeyUp(event)),
  57. onkeypress: move |event| log_event(Event::KeyPress(event)),
  58. onfocusin: move |event| log_event(Event::FocusIn(event)),
  59. onfocusout: move |event| log_event(Event::FocusOut(event)),
  60. "Hover, click, type or scroll to see the info down below"
  61. }
  62. div { events.read().iter().map(|event| rsx!( div { "{event:?}" } )) }
  63. }
  64. ))
  65. }