Compare commits
2 commits
master
...
dev/mkrueg
Author | SHA1 | Date | |
---|---|---|---|
![]() |
84a1ea6cfd | ||
![]() |
39876de698 |
2 changed files with 36 additions and 18 deletions
|
@ -191,6 +191,14 @@ pub enum Event {
|
|||
modifiers: Modifiers,
|
||||
},
|
||||
|
||||
/// A key was repeated while pressed.
|
||||
KeyRepeat {
|
||||
key: Key,
|
||||
|
||||
/// The state of the modifier keys at the time of the event.
|
||||
modifiers: Modifiers,
|
||||
},
|
||||
|
||||
/// The mouse or touch moved to a new place.
|
||||
PointerMoved(Pos2),
|
||||
|
||||
|
|
|
@ -164,26 +164,36 @@ impl InputState {
|
|||
let mut keys_down = self.keys_down;
|
||||
let mut scroll_delta = Vec2::ZERO;
|
||||
let mut zoom_factor_delta = 1.0;
|
||||
new.events.retain(|event| match event {
|
||||
Event::Key { key, pressed, .. } => {
|
||||
for event in &mut new.events {
|
||||
match event {
|
||||
Event::Key {
|
||||
key,
|
||||
pressed,
|
||||
modifiers,
|
||||
} => {
|
||||
if *pressed {
|
||||
// We only retain presses that are novel (i.e. the first Press event, not those generated by key-repeat)
|
||||
keys_down.insert(*key)
|
||||
// key repeats are represented by KeyRepeat.
|
||||
if !keys_down.insert(*key) {
|
||||
*event = Event::KeyRepeat {
|
||||
key: *key,
|
||||
modifiers: *modifiers,
|
||||
};
|
||||
}
|
||||
} else {
|
||||
keys_down.remove(key);
|
||||
true
|
||||
}
|
||||
}
|
||||
Event::Scroll(delta) => {
|
||||
scroll_delta += *delta;
|
||||
true
|
||||
}
|
||||
Event::Zoom(factor) => {
|
||||
zoom_factor_delta *= *factor;
|
||||
true
|
||||
}
|
||||
_ => true,
|
||||
});
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
InputState {
|
||||
pointer,
|
||||
touch_states: self.touch_states,
|
||||
|
|
Loading…
Reference in a new issue