all_events.rs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. use dioxus::{events::*, 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, Vec::new);
  36. let log_event = move |event: Event| events.write().push(event);
  37. cx.render(rsx! (
  38. div {
  39. style: "{CONTAINER_STYLE}",
  40. div {
  41. style: "{RECT_STYLE}",
  42. // focusing is necessary to catch keyboard events
  43. tabindex: "0",
  44. onmousemove: move |event| log_event(Event::MouseMove(event)),
  45. onclick: move |event| log_event(Event::MouseClick(event)),
  46. ondblclick: move |event| log_event(Event::MouseDoubleClick(event)),
  47. onmousedown: move |event| log_event(Event::MouseDown(event)),
  48. onmouseup: move |event| log_event(Event::MouseUp(event)),
  49. onwheel: move |event| log_event(Event::Wheel(event)),
  50. onkeydown: move |event| log_event(Event::KeyDown(event)),
  51. onkeyup: move |event| log_event(Event::KeyUp(event)),
  52. onkeypress: move |event| log_event(Event::KeyPress(event)),
  53. onfocusin: move |event| log_event(Event::FocusIn(event)),
  54. onfocusout: move |event| log_event(Event::FocusOut(event)),
  55. "Hover, click, type or scroll to see the info down below"
  56. }
  57. div {
  58. events
  59. .read()
  60. .iter()
  61. .rev()
  62. .take(MAX_EVENTS)
  63. .rev()
  64. .map(|event| cx.render(rsx!(div {"{event:?}"})))
  65. },
  66. },
  67. ))
  68. }