1
0

all_events.rs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. use dioxus::prelude::*;
  2. use std::{collections::VecDeque, fmt::Debug, rc::Rc};
  3. fn main() {
  4. launch(app);
  5. }
  6. const MAX_EVENTS: usize = 8;
  7. const CONTAINER_STYLE: &str = r#"
  8. display: flex;
  9. flex-direction: column;
  10. align-items: center;
  11. "#;
  12. const RECT_STYLE: &str = r#"
  13. background: deepskyblue;
  14. height: 50vh;
  15. width: 50vw;
  16. color: white;
  17. padding: 20px;
  18. margin: 20px;
  19. text-aligh: center;
  20. "#;
  21. fn app() -> Element {
  22. let mut events = use_signal(|| VecDeque::new() as VecDeque<Rc<dyn Debug>>);
  23. let mut log_event = move |event: Rc<dyn Debug>| {
  24. let mut events = events.write();
  25. if events.len() >= MAX_EVENTS {
  26. events.pop_front();
  27. }
  28. events.push_back(event);
  29. };
  30. rsx! {
  31. div { style: "{CONTAINER_STYLE}",
  32. // focusing is necessary to catch keyboard events
  33. div { style: "{RECT_STYLE}", tabindex: "0",
  34. onmousemove: move |event| log_event(event.inner().clone()),
  35. onclick: move |event| log_event(event.inner().clone()),
  36. ondoubleclick: move |event| log_event(event.inner().clone()),
  37. onmousedown: move |event| log_event(event.inner().clone()),
  38. onmouseup: move |event| log_event(event.inner().clone()),
  39. onwheel: move |event| log_event(event.inner().clone()),
  40. onkeydown: move |event| log_event(event.inner().clone()),
  41. onkeyup: move |event| log_event(event.inner().clone()),
  42. onkeypress: move |event| log_event(event.inner().clone()),
  43. onfocusin: move |event| log_event(event.inner().clone()),
  44. onfocusout: move |event| log_event(event.inner().clone()),
  45. "Hover, click, type or scroll to see the info down below"
  46. }
  47. div {
  48. for event in events.read().iter() {
  49. div { "{event:?}" }
  50. }
  51. }
  52. }
  53. }
  54. }