feat(core): wire up mouse event
This commit is contained in:
parent
aaa55ca063
commit
03d2aac56e
|
@ -24,7 +24,7 @@ use log::{error, trace};
|
|||
|
||||
use crate::engine::{
|
||||
event::{
|
||||
input::{Key, KeyboardEvent, Status, Variant},
|
||||
input::{Key, KeyboardEvent, MouseButton, MouseEvent, Status, Variant},
|
||||
Event,
|
||||
},
|
||||
funnel, process,
|
||||
|
@ -51,7 +51,10 @@ impl<'a> funnel::Source<'a> for DetectSource {
|
|||
status: keyboard_event.status.into(),
|
||||
variant: keyboard_event.variant.map(|variant| variant.into()),
|
||||
}),
|
||||
InputEvent::Mouse(mouse_event) => todo!(), // TODO
|
||||
InputEvent::Mouse(mouse_event) => Event::Mouse(MouseEvent {
|
||||
status: mouse_event.status.into(),
|
||||
button: mouse_event.button.into(),
|
||||
}),
|
||||
InputEvent::HotKey(_) => todo!(), // TODO
|
||||
}
|
||||
}
|
||||
|
@ -76,11 +79,13 @@ pub fn init_and_spawn() -> Result<DetectSource> {
|
|||
.send(true)
|
||||
.expect("unable to send to the init_tx channel");
|
||||
|
||||
source.eventloop(Box::new(move |event| {
|
||||
source
|
||||
.eventloop(Box::new(move |event| {
|
||||
sender
|
||||
.send(event)
|
||||
.expect("unable to send to the source channel");
|
||||
})).expect("detect eventloop crashed");
|
||||
}))
|
||||
.expect("detect eventloop crashed");
|
||||
}
|
||||
}
|
||||
Err(error) => {
|
||||
|
@ -180,3 +185,18 @@ impl From<espanso_detect::event::Status> for Status {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<espanso_detect::event::MouseButton> for MouseButton {
|
||||
fn from(button: espanso_detect::event::MouseButton) -> Self {
|
||||
match button {
|
||||
espanso_detect::event::MouseButton::Left => MouseButton::Left,
|
||||
espanso_detect::event::MouseButton::Right => MouseButton::Right,
|
||||
espanso_detect::event::MouseButton::Middle => MouseButton::Middle,
|
||||
espanso_detect::event::MouseButton::Button1 => MouseButton::Button1,
|
||||
espanso_detect::event::MouseButton::Button2 => MouseButton::Button2,
|
||||
espanso_detect::event::MouseButton::Button3 => MouseButton::Button3,
|
||||
espanso_detect::event::MouseButton::Button4 => MouseButton::Button4,
|
||||
espanso_detect::event::MouseButton::Button5 => MouseButton::Button5,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,9 +37,22 @@ pub struct KeyboardEvent {
|
|||
pub variant: Option<Variant>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct KeySequenceInjectRequest {
|
||||
pub keys: Vec<Key>,
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub enum MouseButton {
|
||||
Left,
|
||||
Right,
|
||||
Middle,
|
||||
Button1,
|
||||
Button2,
|
||||
Button3,
|
||||
Button4,
|
||||
Button5,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub struct MouseEvent {
|
||||
pub button: MouseButton,
|
||||
pub status: Status,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
|
|
|
@ -28,6 +28,8 @@ pub enum Event {
|
|||
|
||||
// Inputs
|
||||
Keyboard(input::KeyboardEvent),
|
||||
Mouse(input::MouseEvent),
|
||||
// TODO: hotkeys
|
||||
|
||||
// Internal
|
||||
MatchesDetected(internal::MatchesDetectedEvent),
|
||||
|
|
|
@ -19,10 +19,8 @@
|
|||
|
||||
use super::super::Middleware;
|
||||
use crate::engine::{
|
||||
dispatch::Mode,
|
||||
event::{
|
||||
effect::TriggerCompensationEvent,
|
||||
input::{Key, KeySequenceInjectRequest},
|
||||
internal::CauseCompensatedMatchEvent,
|
||||
Event,
|
||||
},
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
*/
|
||||
|
||||
use super::super::Middleware;
|
||||
use crate::engine::{dispatch::Mode, event::{Event, effect::CursorHintCompensationEvent, input::{Key}, internal::RenderedEvent}};
|
||||
use crate::engine::{event::{Event, effect::CursorHintCompensationEvent, internal::RenderedEvent}};
|
||||
|
||||
pub struct CursorHintMiddleware {}
|
||||
|
||||
|
|
|
@ -137,7 +137,7 @@ fn is_event_of_interest(event: &Event) -> bool {
|
|||
}
|
||||
}
|
||||
},
|
||||
// TODO: handle mouse
|
||||
Event::Mouse(mouse_event) => mouse_event.status == Status::Pressed,
|
||||
Event::MatchInjected => true,
|
||||
_ => false,
|
||||
}
|
||||
|
@ -149,8 +149,8 @@ fn convert_to_matcher_event(event: &Event) -> Option<MatcherEvent> {
|
|||
key: keyboard_event.key.clone(),
|
||||
chars: keyboard_event.value.clone(),
|
||||
}),
|
||||
Event::Mouse(_) => Some(MatcherEvent::VirtualSeparator),
|
||||
Event::MatchInjected => Some(MatcherEvent::VirtualSeparator),
|
||||
// TODO: mouse event should act as separator
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user