Axis events should now behave correctly when used with modifiers
This commit is contained in:
parent
b0bf01c5cd
commit
150db1b8f2
2 changed files with 40 additions and 22 deletions
|
@ -109,10 +109,10 @@ fn parse_raw_config(raw_config: RawConfig) -> (Bindings, Combinations, HashMap<S
|
|||
mapped_modifiers.custom.extend(custom_modifiers);
|
||||
|
||||
let abs = [
|
||||
"DPAD_UP",
|
||||
"DPAD_DOWN",
|
||||
"DPAD_LEFT",
|
||||
"DPAD_RIGHT",
|
||||
"BTN_DPAD_UP",
|
||||
"BTN_DPAD_DOWN",
|
||||
"BTN_DPAD_LEFT",
|
||||
"BTN_DPAD_RIGHT",
|
||||
"LSTICK_UP",
|
||||
"LSTICK_DOWN",
|
||||
"LSTICK_LEFT",
|
||||
|
@ -213,7 +213,7 @@ fn merge_axis_bindings(mut bindings: Bindings) -> Bindings {
|
|||
pad_y.extend(bindings.axis.get("BTN_DPAD_DOWN")
|
||||
.unwrap_or(&Vec::new()));
|
||||
bindings.axis.insert("BTN_DPAD_X".to_string(), pad_x);
|
||||
bindings.axis.insert("BTN_DPAD_y".to_string(), pad_y);
|
||||
bindings.axis.insert("BTN_DPAD_Y".to_string(), pad_y);
|
||||
|
||||
let mut lstick_x: Vec<Key> = bindings.axis.get("LSTICK_LEFT")
|
||||
.unwrap_or(&Vec::new()).clone();
|
||||
|
|
|
@ -104,6 +104,8 @@ impl EventReader {
|
|||
pub async fn event_loop(&self) {
|
||||
let mut lstick_values = HashMap::from([("x", 0), ("y", 0)]);
|
||||
let mut rstick_values = HashMap::from([("x", 0), ("y", 0)]);
|
||||
let mut ltrigger_value = 0;
|
||||
let mut rtrigger_value = 0;
|
||||
let mut stream = self.stream.lock().await;
|
||||
while let Some(Ok(event)) = stream.next().await {
|
||||
match (event.event_type(), RelativeAxisType(event.code()), AbsoluteAxisType(event.code())) {
|
||||
|
@ -236,13 +238,23 @@ impl EventReader {
|
|||
},
|
||||
(EventType::ABSOLUTE, _, AbsoluteAxisType::ABS_Z) => {
|
||||
let clamped_value = if event.value() > 0 { 1 } else { 0 };
|
||||
let clamped_event = InputEvent::new_now(event.event_type(), event.code(), clamped_value);
|
||||
self.convert_axis_events(clamped_event, &"BTN_TL2".to_string(), false).await;
|
||||
if clamped_value == 1 && ltrigger_value == 0 {
|
||||
ltrigger_value = 1;
|
||||
let clamped_event = InputEvent::new_now(event.event_type(), event.code(), clamped_value);
|
||||
self.convert_axis_events(clamped_event, &"BTN_TL2".to_string(), false).await;
|
||||
} else if clamped_value == 0 {
|
||||
ltrigger_value = 0;
|
||||
}
|
||||
},
|
||||
(EventType::ABSOLUTE, _, AbsoluteAxisType::ABS_RZ) => {
|
||||
let clamped_value = if event.value() > 0 { 1 } else { 0 };
|
||||
let clamped_event = InputEvent::new_now(event.event_type(), event.code(), clamped_value);
|
||||
self.convert_axis_events(clamped_event, &"BTN_TR2".to_string(), false).await;
|
||||
if clamped_value == 1 && rtrigger_value == 0 {
|
||||
rtrigger_value = 1;
|
||||
let clamped_event = InputEvent::new_now(event.event_type(), event.code(), clamped_value);
|
||||
self.convert_axis_events(clamped_event, &"BTN_TR2".to_string(), false).await;
|
||||
} else if clamped_value == 0 {
|
||||
rtrigger_value = 0;
|
||||
}
|
||||
},
|
||||
_ => {self.emit_default_event(event).await;}
|
||||
}
|
||||
|
@ -260,7 +272,8 @@ impl EventReader {
|
|||
self.emit_event_without_modifiers(event_list, &modifiers, event.value()).await;
|
||||
return
|
||||
}
|
||||
} else if let Some(command_hashmap) = path.combinations.keys_sh.get(&Key(event.code())) {
|
||||
}
|
||||
if let Some(command_hashmap) = path.combinations.keys_sh.get(&Key(event.code())) {
|
||||
if let Some(command_list) = command_hashmap.get(&modifiers) {
|
||||
if event.value() == 1 {self.spawn_subprocess(command_list).await};
|
||||
return
|
||||
|
@ -268,11 +281,13 @@ impl EventReader {
|
|||
}
|
||||
if let Some(event_list) = path.bindings.keys.get(&Key(event.code())) {
|
||||
self.emit_event(event_list, event.value()).await;
|
||||
} else if let Some(command_list) = path.bindings.keys_sh.get(&Key(event.code())) {
|
||||
if event.value() == 1 {self.spawn_subprocess(command_list).await};
|
||||
} else {
|
||||
self.emit_default_event(event).await;
|
||||
return
|
||||
}
|
||||
if let Some(command_list) = path.bindings.keys_sh.get(&Key(event.code())) {
|
||||
if event.value() == 1 {self.spawn_subprocess(command_list).await};
|
||||
return
|
||||
}
|
||||
self.emit_default_event(event).await;
|
||||
}
|
||||
|
||||
async fn convert_axis_events(&self, event: InputEvent, event_string: &String, send_zero: bool) {
|
||||
|
@ -280,28 +295,31 @@ impl EventReader {
|
|||
let modifiers = self.modifiers.lock().await.clone();
|
||||
if let Some(event_hashmap) = path.combinations.axis.get(event_string) {
|
||||
if let Some(event_list) = event_hashmap.get(&modifiers) {
|
||||
self.emit_event_without_modifiers(event_list, &modifiers, event.value()).await;
|
||||
self.emit_event_without_modifiers(event_list, &modifiers, event.value().abs()).await;
|
||||
if send_zero {
|
||||
self.emit_event_without_modifiers(event_list, &modifiers, 0).await;
|
||||
}
|
||||
return
|
||||
}
|
||||
} else if let Some(command_hashmap) = path.combinations.axis_sh.get(event_string) {
|
||||
}
|
||||
if let Some(command_hashmap) = path.combinations.axis_sh.get(event_string) {
|
||||
if let Some(command_list) = command_hashmap.get(&modifiers) {
|
||||
if event.value() == 1 {self.spawn_subprocess(command_list).await};
|
||||
if event.value().abs() == 1 {self.spawn_subprocess(command_list).await};
|
||||
return
|
||||
}
|
||||
}
|
||||
if let Some(event_list) = path.bindings.axis.get(event_string) {
|
||||
self.emit_event(event_list, event.value()).await;
|
||||
self.emit_event(event_list, event.value().abs()).await;
|
||||
if send_zero {
|
||||
self.emit_event_without_modifiers(event_list, &modifiers, 0).await;
|
||||
}
|
||||
} else if let Some(command_list) = path.bindings.axis_sh.get(event_string) {
|
||||
if event.value() == 1 {self.spawn_subprocess(command_list).await};
|
||||
} else {
|
||||
self.emit_default_event(event).await;
|
||||
return
|
||||
}
|
||||
if let Some(command_list) = path.bindings.axis_sh.get(event_string) {
|
||||
if event.value().abs() == 1 {self.spawn_subprocess(command_list).await};
|
||||
return
|
||||
}
|
||||
self.emit_default_event(event).await;
|
||||
}
|
||||
|
||||
async fn emit_event(&self, event_list: &Vec<Key>, value: i32) {
|
||||
|
|
Loading…
Add table
Reference in a new issue