keys.rs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. use dioxus::events::WheelEvent;
  2. use dioxus::prelude::*;
  3. use dioxus_html::on::{KeyboardEvent, MouseEvent};
  4. use dioxus_html::KeyCode;
  5. fn main() {
  6. rink::launch(app);
  7. }
  8. fn app(cx: Scope) -> Element {
  9. let (key, set_key) = use_state(&cx, || "".to_string());
  10. let (mouse, set_mouse) = use_state(&cx, || (0, 0));
  11. let (count, set_count) = use_state(&cx, || 0);
  12. let (buttons, set_buttons) = use_state(&cx, || 0);
  13. let (mouse_clicked, set_mouse_clicked) = use_state(&cx, || false);
  14. cx.render(rsx! {
  15. div {
  16. width: "100%",
  17. height: "10px",
  18. background_color: "red",
  19. justify_content: "center",
  20. align_items: "center",
  21. flex_direction: "column",
  22. onkeydown: move |evt: KeyboardEvent| {
  23. match evt.data.key_code {
  24. KeyCode::LeftArrow => set_count(count + 1),
  25. KeyCode::RightArrow => set_count(count - 1),
  26. KeyCode::UpArrow => set_count(count + 10),
  27. KeyCode::DownArrow => set_count(count - 10),
  28. _ => {},
  29. }
  30. set_key(format!("{:?} repeating: {:?}", evt.key, evt.repeat));
  31. },
  32. onwheel: move |evt: WheelEvent| {
  33. set_count(count + evt.data.delta_y as i64);
  34. },
  35. ondrag: move |evt: MouseEvent| {
  36. set_mouse((evt.data.screen_x, evt.data.screen_y));
  37. },
  38. onmousedown: move |evt: MouseEvent| {
  39. set_mouse((evt.data.screen_x, evt.data.screen_y));
  40. set_buttons(evt.data.buttons);
  41. set_mouse_clicked(true);
  42. },
  43. onmouseup: move |evt: MouseEvent| {
  44. set_buttons(evt.data.buttons);
  45. set_mouse_clicked(false);
  46. },
  47. "count: {count:?}",
  48. "key: {key}",
  49. "mouse buttons: {buttons:b}",
  50. "mouse pos: {mouse:?}",
  51. "mouse button pressed: {mouse_clicked}"
  52. }
  53. })
  54. }
  55. fn app2<'a>(cx: Scope<'a>) -> Element<'a> {
  56. let (count, set_count) = use_state(&cx, || 0);
  57. cx.render(rsx! {
  58. div {
  59. width: "100%",
  60. height: "10px",
  61. background_color: "red",
  62. justify_content: "center",
  63. align_items: "center",
  64. oninput: move |_| set_count(count + 1),
  65. "Hello world!",
  66. h1 {},
  67. }
  68. })
  69. }