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,
|
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.
|
/// The mouse or touch moved to a new place.
|
||||||
PointerMoved(Pos2),
|
PointerMoved(Pos2),
|
||||||
|
|
||||||
|
|
|
@ -164,26 +164,36 @@ impl InputState {
|
||||||
let mut keys_down = self.keys_down;
|
let mut keys_down = self.keys_down;
|
||||||
let mut scroll_delta = Vec2::ZERO;
|
let mut scroll_delta = Vec2::ZERO;
|
||||||
let mut zoom_factor_delta = 1.0;
|
let mut zoom_factor_delta = 1.0;
|
||||||
new.events.retain(|event| match event {
|
for event in &mut new.events {
|
||||||
Event::Key { key, pressed, .. } => {
|
match event {
|
||||||
|
Event::Key {
|
||||||
|
key,
|
||||||
|
pressed,
|
||||||
|
modifiers,
|
||||||
|
} => {
|
||||||
if *pressed {
|
if *pressed {
|
||||||
// We only retain presses that are novel (i.e. the first Press event, not those generated by key-repeat)
|
// 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 {
|
} else {
|
||||||
keys_down.remove(key);
|
keys_down.remove(key);
|
||||||
true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Event::Scroll(delta) => {
|
Event::Scroll(delta) => {
|
||||||
scroll_delta += *delta;
|
scroll_delta += *delta;
|
||||||
true
|
|
||||||
}
|
}
|
||||||
Event::Zoom(factor) => {
|
Event::Zoom(factor) => {
|
||||||
zoom_factor_delta *= *factor;
|
zoom_factor_delta *= *factor;
|
||||||
true
|
|
||||||
}
|
}
|
||||||
_ => true,
|
_ => {}
|
||||||
});
|
}
|
||||||
|
}
|
||||||
|
|
||||||
InputState {
|
InputState {
|
||||||
pointer,
|
pointer,
|
||||||
touch_states: self.touch_states,
|
touch_states: self.touch_states,
|
||||||
|
|
Loading…
Reference in a new issue