1
0

tui_keys.rs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. dioxus::tui::launch(app);
  7. }
  8. fn app(cx: Scope) -> Element {
  9. let key = use_state(&cx, || "".to_string());
  10. let mouse = use_state(&cx, || (0, 0));
  11. let count = use_state(&cx, || 0);
  12. let buttons = use_state(&cx, || 0);
  13. let 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 => count.set(count + 1),
  25. KeyCode::RightArrow => count.set(count - 1),
  26. KeyCode::UpArrow => count.set(count + 10),
  27. KeyCode::DownArrow => count.set(count - 10),
  28. _ => {},
  29. }
  30. key.set(format!("{:?} repeating: {:?}", evt.key, evt.repeat));
  31. },
  32. onwheel: move |evt: WheelEvent| {
  33. count.set(count + evt.data.delta_y as i64);
  34. },
  35. ondrag: move |evt: MouseEvent| {
  36. mouse.set((evt.data.screen_x, evt.data.screen_y));
  37. },
  38. onmousedown: move |evt: MouseEvent| {
  39. mouse.set((evt.data.screen_x, evt.data.screen_y));
  40. buttons.set(evt.data.buttons);
  41. mouse_clicked.set(true);
  42. },
  43. onmouseup: move |evt: MouseEvent| {
  44. buttons.set(evt.data.buttons);
  45. mouse_clicked.set(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. }