keys.rs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. use crossterm::event::{KeyCode, KeyEvent, MouseEvent};
  2. use dioxus::prelude::*;
  3. fn main() {
  4. rink::launch(app);
  5. }
  6. fn app(cx: Scope) -> Element {
  7. let (key, set_key) = use_state(&cx, || KeyCode::Null);
  8. let (mouse, set_mouse) = use_state(&cx, || (0, 0));
  9. let (size, set_size) = use_state(&cx, || (0, 0));
  10. let (count, set_count) = use_state(&cx, || 0);
  11. cx.render(rsx! {
  12. div {
  13. width: "100%",
  14. height: "10px",
  15. background_color: "red",
  16. justify_content: "center",
  17. align_items: "center",
  18. flex_direction: "column",
  19. rink::InputHandler {
  20. onkeydown: move |evt: KeyEvent| {
  21. use crossterm::event::KeyCode::*;
  22. match evt.code {
  23. Left => set_count(count + 1),
  24. Right => set_count(count - 1),
  25. Up => set_count(count + 10),
  26. Down => set_count(count - 10),
  27. _ => {},
  28. }
  29. set_key(evt.code);
  30. },
  31. onmousedown: move |evt: MouseEvent| {
  32. set_mouse((evt.row, evt.column));
  33. },
  34. onresize: move |dims| {
  35. set_size(dims);
  36. },
  37. },
  38. "count: {count:?}",
  39. "key: {key:?}",
  40. "mouse: {mouse:?}",
  41. "resize: {size:?}",
  42. }
  43. })
  44. }
  45. fn app2<'a>(cx: Scope<'a>) -> Element<'a> {
  46. let (count, set_count) = use_state(&cx, || 0);
  47. cx.render(rsx! {
  48. div {
  49. width: "100%",
  50. height: "10px",
  51. background_color: "red",
  52. justify_content: "center",
  53. align_items: "center",
  54. oninput: move |_| set_count(count + 1),
  55. "Hello world!",
  56. h1 {},
  57. }
  58. })
  59. }