tui_keys.rs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. use dioxus::events::WheelEvent;
  2. use dioxus::prelude::*;
  3. use dioxus_html::geometry::ScreenPoint;
  4. use dioxus_html::input_data::keyboard_types::Code;
  5. use dioxus_html::input_data::MouseButtonSet;
  6. use dioxus_html::on::{KeyboardEvent, MouseEvent};
  7. fn main() {
  8. dioxus::tui::launch(app);
  9. }
  10. fn app(cx: Scope) -> Element {
  11. let key = use_state(&cx, || "".to_string());
  12. let mouse = use_state(&cx, ScreenPoint::zero);
  13. let count = use_state(&cx, || 0);
  14. let buttons = use_state(&cx, MouseButtonSet::empty);
  15. let mouse_clicked = use_state(&cx, || false);
  16. let key_down_handler = move |evt: KeyboardEvent| {
  17. match evt.data.code() {
  18. Code::ArrowLeft => count.set(count + 1),
  19. Code::ArrowRight => count.set(count - 1),
  20. Code::ArrowUp => count.set(count + 10),
  21. Code::ArrowDown => count.set(count - 10),
  22. _ => {}
  23. }
  24. key.set(format!(
  25. "{:?} repeating: {:?}",
  26. evt.key(),
  27. evt.is_auto_repeating()
  28. ));
  29. };
  30. cx.render(rsx! {
  31. div {
  32. width: "100%",
  33. height: "10px",
  34. background_color: "red",
  35. justify_content: "center",
  36. align_items: "center",
  37. flex_direction: "column",
  38. onkeydown: key_down_handler,
  39. onwheel: move |evt: WheelEvent| {
  40. count.set(count + evt.data.delta().strip_units().y as i64);
  41. },
  42. ondrag: move |evt: MouseEvent| {
  43. mouse.set(evt.data.screen_coordinates());
  44. },
  45. onmousedown: move |evt: MouseEvent| {
  46. mouse.set(evt.data.screen_coordinates());
  47. buttons.set(evt.data.held_buttons());
  48. mouse_clicked.set(true);
  49. },
  50. onmouseup: move |evt: MouseEvent| {
  51. buttons.set(evt.data.held_buttons());
  52. mouse_clicked.set(false);
  53. },
  54. "count: {count:?}",
  55. "key: {key}",
  56. "mouse buttons: {buttons:?}",
  57. "mouse pos: {mouse:?}",
  58. "mouse button pressed: {mouse_clicked}"
  59. }
  60. })
  61. }