Browse Source

Merge pull request #981 from Demonthos/update-crossterm-rink

Update crossterm version
Jon Kelley 2 năm trước cách đây
mục cha
commit
50b0bcaa6f

+ 1 - 1
packages/dioxus-tui/Cargo.toml

@@ -21,7 +21,7 @@ dioxus-native-core-macro = { workspace = true }
 dioxus-hot-reload = { workspace = true, optional = true }
 rink = { workspace = true }
 
-crossterm = "0.23.0"
+crossterm = "0.26.0"
 tokio = { workspace = true, features = ["full"] }
 futures = "0.3.19"
 taffy = "0.3.12"

+ 4 - 0
packages/dioxus-tui/tests/events.rs

@@ -47,10 +47,14 @@ fn key_down() {
         tui_ctx.inject_event(Event::Key(KeyEvent {
             code: KeyCode::Tab,
             modifiers: KeyModifiers::NONE,
+            kind: crossterm::event::KeyEventKind::Press,
+            state: crossterm::event::KeyEventState::NONE,
         }));
         tui_ctx.inject_event(Event::Key(KeyEvent {
             code: KeyCode::Char('a'),
             modifiers: KeyModifiers::NONE,
+            kind: crossterm::event::KeyEventKind::Press,
+            state: crossterm::event::KeyEventState::NONE,
         }));
         cx.render(rsx! {
             div {

+ 1 - 1
packages/rink/Cargo.toml

@@ -18,7 +18,7 @@ dioxus-native-core = { workspace = true }
 dioxus-native-core-macro = { workspace = true }
 
 tui = "0.17.0"
-crossterm = "0.23.0"
+crossterm = "0.26.1"
 anyhow = "1.0.42"
 tokio = { workspace = true, features = ["full"] }
 futures = "0.3.19"

+ 62 - 2
packages/rink/src/hooks.rs

@@ -1,5 +1,6 @@
 use crossterm::event::{
-    Event as TermEvent, KeyCode as TermKeyCode, KeyModifiers, MouseButton, MouseEventKind,
+    Event as TermEvent, KeyCode as TermKeyCode, KeyModifiers, ModifierKeyCode, MouseButton,
+    MouseEventKind,
 };
 use dioxus_native_core::prelude::*;
 use dioxus_native_core::real_dom::NodeImmutable;
@@ -800,6 +801,34 @@ fn key_from_crossterm_key_code(key_code: TermKeyCode) -> Key {
         TermKeyCode::Char(c) => Key::Character(c.to_string()),
         TermKeyCode::Null => Key::Unidentified,
         TermKeyCode::Esc => Key::Escape,
+        TermKeyCode::CapsLock => Key::CapsLock,
+        TermKeyCode::ScrollLock => Key::ScrollLock,
+        TermKeyCode::NumLock => Key::NumLock,
+        TermKeyCode::PrintScreen => Key::PrintScreen,
+        TermKeyCode::Pause => Key::Pause,
+        TermKeyCode::Media(crossterm::event::MediaKeyCode::FastForward) => Key::MediaFastForward,
+        TermKeyCode::Media(crossterm::event::MediaKeyCode::PlayPause) => Key::MediaPlayPause,
+        TermKeyCode::Media(crossterm::event::MediaKeyCode::TrackPrevious) => {
+            Key::MediaTrackPrevious
+        }
+        TermKeyCode::Media(crossterm::event::MediaKeyCode::TrackNext) => Key::MediaTrackNext,
+        TermKeyCode::Media(crossterm::event::MediaKeyCode::Stop) => Key::MediaStop,
+        TermKeyCode::Media(crossterm::event::MediaKeyCode::Play) => Key::MediaPlay,
+        TermKeyCode::Media(crossterm::event::MediaKeyCode::Pause) => Key::MediaPause,
+        TermKeyCode::Media(crossterm::event::MediaKeyCode::Record) => Key::MediaRecord,
+        TermKeyCode::Media(crossterm::event::MediaKeyCode::Rewind) => Key::MediaRewind,
+        TermKeyCode::Modifier(modifier) => match modifier {
+            ModifierKeyCode::IsoLevel3Shift
+            | ModifierKeyCode::IsoLevel5Shift
+            | ModifierKeyCode::RightShift
+            | ModifierKeyCode::LeftShift => Key::Shift,
+            ModifierKeyCode::RightControl | ModifierKeyCode::LeftControl => Key::Control,
+            ModifierKeyCode::RightAlt | ModifierKeyCode::LeftAlt => Key::Alt,
+            ModifierKeyCode::RightSuper | ModifierKeyCode::LeftSuper => Key::Super,
+            ModifierKeyCode::RightHyper | ModifierKeyCode::LeftHyper => Key::Hyper,
+            ModifierKeyCode::LeftMeta | ModifierKeyCode::RightMeta => Key::Meta,
+        },
+        _ => Key::Unidentified,
     }
 }
 
@@ -929,8 +958,39 @@ fn guess_code_from_crossterm_key_code(key_code: TermKeyCode) -> Option<Code> {
             '~' => Code::Backquote,
             _ => return None,
         },
-        TermKeyCode::Null => return None,
         TermKeyCode::Esc => Code::Escape,
+        TermKeyCode::CapsLock => Code::CapsLock,
+        TermKeyCode::ScrollLock => Code::ScrollLock,
+        TermKeyCode::NumLock => Code::NumLock,
+        TermKeyCode::PrintScreen => Code::PrintScreen,
+        TermKeyCode::Pause => Code::Pause,
+        TermKeyCode::Menu => Code::ContextMenu,
+        TermKeyCode::Media(crossterm::event::MediaKeyCode::FastForward) => Code::MediaFastForward,
+        TermKeyCode::Media(crossterm::event::MediaKeyCode::PlayPause) => Code::MediaPlayPause,
+        TermKeyCode::Media(crossterm::event::MediaKeyCode::TrackPrevious) => {
+            Code::MediaTrackPrevious
+        }
+        TermKeyCode::Media(crossterm::event::MediaKeyCode::TrackNext) => Code::MediaTrackNext,
+        TermKeyCode::Media(crossterm::event::MediaKeyCode::Stop) => Code::MediaStop,
+        TermKeyCode::Media(crossterm::event::MediaKeyCode::Play) => Code::MediaPlay,
+        TermKeyCode::Media(crossterm::event::MediaKeyCode::Pause) => Code::MediaPause,
+        TermKeyCode::Media(crossterm::event::MediaKeyCode::Record) => Code::MediaRecord,
+        TermKeyCode::Media(crossterm::event::MediaKeyCode::Rewind) => Code::MediaRewind,
+        TermKeyCode::Modifier(modifier) => match modifier {
+            ModifierKeyCode::IsoLevel3Shift
+            | ModifierKeyCode::IsoLevel5Shift
+            | ModifierKeyCode::LeftShift => Code::ShiftLeft,
+            ModifierKeyCode::RightShift => Code::ShiftRight,
+            ModifierKeyCode::RightControl => Code::ControlRight,
+            ModifierKeyCode::LeftControl => Code::ControlLeft,
+            ModifierKeyCode::RightAlt => Code::AltRight,
+            ModifierKeyCode::LeftAlt => Code::AltLeft,
+            ModifierKeyCode::RightSuper | ModifierKeyCode::LeftSuper => Code::Super,
+            ModifierKeyCode::RightHyper | ModifierKeyCode::LeftHyper => Code::Hyper,
+            ModifierKeyCode::LeftMeta => Code::MetaLeft,
+            ModifierKeyCode::RightMeta => Code::MetaRight,
+        },
+        _ => return None,
     };
 
     Some(code)

+ 1 - 1
packages/rink/src/lib.rs

@@ -235,7 +235,7 @@ pub fn render<R: Driver>(
                                         }
                                     }
                                     TermEvent::Resize(_, _) => updated = true,
-                                    TermEvent::Mouse(_) => {}
+                                    _ => {}
                                 },
                                 InputEvent::Close => break,
                             };