Order mapping entries precedence based on number of modifiers (#262)
* Order mapping entries precedence based on number of modifiers * Fix format * Rename variables * More renaming
This commit is contained in:
parent
e0f049ab00
commit
f7e5dd1a4f
|
|
@ -61,8 +61,8 @@ impl Default for KeyMappingEntries {
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
struct Mapping {
|
struct Mapping {
|
||||||
up: [KeyMappingEntries; NUMBER_OF_KEYS],
|
key_up: [KeyMappingEntries; NUMBER_OF_KEYS],
|
||||||
down: [KeyMappingEntries; NUMBER_OF_KEYS],
|
key_down: [KeyMappingEntries; NUMBER_OF_KEYS],
|
||||||
pointer_move: KeyMappingEntries,
|
pointer_move: KeyMappingEntries,
|
||||||
mouse_scroll: KeyMappingEntries,
|
mouse_scroll: KeyMappingEntries,
|
||||||
}
|
}
|
||||||
|
|
@ -91,26 +91,26 @@ macro_rules! entry {
|
||||||
macro_rules! mapping {
|
macro_rules! mapping {
|
||||||
//[$(<action=$action:expr; message=$key:expr; $(modifiers=[$($m:ident),* $(,)?];)?>)*] => {{
|
//[$(<action=$action:expr; message=$key:expr; $(modifiers=[$($m:ident),* $(,)?];)?>)*] => {{
|
||||||
[$($entry:expr),* $(,)?] => {{
|
[$($entry:expr),* $(,)?] => {{
|
||||||
let mut up = KeyMappingEntries::key_array();
|
let mut key_up = KeyMappingEntries::key_array();
|
||||||
let mut down = KeyMappingEntries::key_array();
|
let mut key_down = KeyMappingEntries::key_array();
|
||||||
let mut pointer_move: KeyMappingEntries = Default::default();
|
let mut pointer_move: KeyMappingEntries = Default::default();
|
||||||
let mut mouse_scroll: KeyMappingEntries = Default::default();
|
let mut mouse_scroll: KeyMappingEntries = Default::default();
|
||||||
$(
|
$(
|
||||||
let arr = match $entry.trigger {
|
let arr = match $entry.trigger {
|
||||||
InputMapperMessage::KeyDown(key) => &mut down[key as usize],
|
InputMapperMessage::KeyDown(key) => &mut key_down[key as usize],
|
||||||
InputMapperMessage::KeyUp(key) => &mut up[key as usize],
|
InputMapperMessage::KeyUp(key) => &mut key_up[key as usize],
|
||||||
InputMapperMessage::PointerMove => &mut pointer_move,
|
InputMapperMessage::PointerMove => &mut pointer_move,
|
||||||
InputMapperMessage::MouseScroll => &mut mouse_scroll,
|
InputMapperMessage::MouseScroll => &mut mouse_scroll,
|
||||||
};
|
};
|
||||||
arr.push($entry);
|
arr.push($entry);
|
||||||
)*
|
)*
|
||||||
(up, down, pointer_move, mouse_scroll)
|
(key_up, key_down, pointer_move, mouse_scroll)
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Mapping {
|
impl Default for Mapping {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
let (up, down, pointer_move, mouse_scroll) = mapping![
|
let mappings = mapping![
|
||||||
entry! {action=DocumentMessage::PasteLayers, key_down=KeyV, modifiers=[KeyControl]},
|
entry! {action=DocumentMessage::PasteLayers, key_down=KeyV, modifiers=[KeyControl]},
|
||||||
entry! {action=DocumentMessage::EnableSnapping, key_down=KeyShift},
|
entry! {action=DocumentMessage::EnableSnapping, key_down=KeyShift},
|
||||||
entry! {action=DocumentMessage::DisableSnapping, key_up=KeyShift},
|
entry! {action=DocumentMessage::DisableSnapping, key_up=KeyShift},
|
||||||
|
|
@ -238,7 +238,22 @@ impl Default for Mapping {
|
||||||
entry! {action=GlobalMessage::LogDebug, key_down=Key2},
|
entry! {action=GlobalMessage::LogDebug, key_down=Key2},
|
||||||
entry! {action=GlobalMessage::LogTrace, key_down=Key3},
|
entry! {action=GlobalMessage::LogTrace, key_down=Key3},
|
||||||
];
|
];
|
||||||
Self { up, down, pointer_move, mouse_scroll }
|
|
||||||
|
let (mut key_up, mut key_down, mut pointer_move, mut mouse_scroll) = mappings;
|
||||||
|
let sort = |list: &mut KeyMappingEntries| list.0.sort_by(|u, v| v.modifiers.ones().cmp(&u.modifiers.ones()));
|
||||||
|
for list in [&mut key_up, &mut key_down] {
|
||||||
|
for sublist in list {
|
||||||
|
sort(sublist);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sort(&mut pointer_move);
|
||||||
|
sort(&mut mouse_scroll);
|
||||||
|
Self {
|
||||||
|
key_up,
|
||||||
|
key_down,
|
||||||
|
pointer_move,
|
||||||
|
mouse_scroll,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -246,8 +261,8 @@ impl Mapping {
|
||||||
fn match_message(&self, message: InputMapperMessage, keys: &KeyStates, actions: ActionList) -> Option<Message> {
|
fn match_message(&self, message: InputMapperMessage, keys: &KeyStates, actions: ActionList) -> Option<Message> {
|
||||||
use InputMapperMessage::*;
|
use InputMapperMessage::*;
|
||||||
let list = match message {
|
let list = match message {
|
||||||
KeyDown(key) => &self.down[key as usize],
|
KeyDown(key) => &self.key_down[key as usize],
|
||||||
KeyUp(key) => &self.up[key as usize],
|
KeyUp(key) => &self.key_up[key as usize],
|
||||||
PointerMove => &self.pointer_move,
|
PointerMove => &self.pointer_move,
|
||||||
MouseScroll => &self.mouse_scroll,
|
MouseScroll => &self.mouse_scroll,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -116,6 +116,13 @@ impl<const LENGTH: usize> BitVector<LENGTH> {
|
||||||
}
|
}
|
||||||
result == 0
|
result == 0
|
||||||
}
|
}
|
||||||
|
pub fn ones(&self) -> u32 {
|
||||||
|
let mut result = 0;
|
||||||
|
for storage in self.0.iter() {
|
||||||
|
result += storage.count_ones();
|
||||||
|
}
|
||||||
|
result
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<const LENGTH: usize> Default for BitVector<LENGTH> {
|
impl<const LENGTH: usize> Default for BitVector<LENGTH> {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue