1
0

all_events.rs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 {
  45. style: "{CONTAINER_STYLE}",
  46. div {
  47. style: "{RECT_STYLE}",
  48. // focusing is necessary to catch keyboard events
  49. tabindex: "0",
  50. onmousemove: move |event| log_event(Event::MouseMove(event)),
  51. onclick: move |event| log_event(Event::MouseClick(event)),
  52. ondblclick: move |event| log_event(Event::MouseDoubleClick(event)),
  53. onmousedown: move |event| log_event(Event::MouseDown(event)),
  54. onmouseup: move |event| log_event(Event::MouseUp(event)),
  55. onwheel: move |event| log_event(Event::Wheel(event)),
  56. onkeydown: move |event| log_event(Event::KeyDown(event)),
  57. onkeyup: move |event| log_event(Event::KeyUp(event)),
  58. onkeypress: move |event| log_event(Event::KeyPress(event)),
  59. onfocusin: move |event| log_event(Event::FocusIn(event)),
  60. onfocusout: move |event| log_event(Event::FocusOut(event)),
  61. "Hover, click, type or scroll to see the info down below"
  62. }
  63. div {
  64. events.read().iter().map(|event| rsx!( div { "{event:?}" } ))
  65. },
  66. },
  67. ))
  68. }