Fix key press event

This commit is contained in:
Jose Palazon 2022-11-22 14:48:21 +00:00
parent bde47c9957
commit 324104c7c3

View file

@ -138,7 +138,11 @@ impl Default for InputState {
impl InputState { impl InputState {
#[must_use] #[must_use]
pub fn begin_frame(mut self, new: RawInput, requested_repaint_last_frame: bool) -> InputState { pub fn begin_frame(
mut self,
mut new: RawInput,
requested_repaint_last_frame: bool,
) -> InputState {
let time = new.time.unwrap_or(self.time + new.predicted_dt as f64); let time = new.time.unwrap_or(self.time + new.predicted_dt as f64);
let unstable_dt = (time - self.time) as f32; let unstable_dt = (time - self.time) as f32;
@ -160,24 +164,26 @@ 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;
for event in &new.events { new.events.retain(|event| match event {
match event { Event::Key { key, pressed, .. } => {
Event::Key { key, pressed, .. } => { if *pressed {
if *pressed { //return false (thus filtering out the Event) if the key already existed in the set of pressed keys
keys_down.insert(*key); keys_down.insert(*key)
} else { } else {
keys_down.remove(key); keys_down.remove(key);
} true
} }
Event::Scroll(delta) => {
scroll_delta += *delta;
}
Event::Zoom(factor) => {
zoom_factor_delta *= *factor;
}
_ => {}
} }
} Event::Scroll(delta) => {
scroll_delta += *delta;
true
}
Event::Zoom(factor) => {
zoom_factor_delta *= *factor;
true
}
_ => true,
});
InputState { InputState {
pointer, pointer,
touch_states: self.touch_states, touch_states: self.touch_states,
@ -280,7 +286,7 @@ impl InputState {
self.num_presses(desired_key) > 0 self.num_presses(desired_key) > 0
} }
/// How many times were the given key pressed this frame? /// How many times was the given key pressed this frame?
pub fn num_presses(&self, desired_key: Key) -> usize { pub fn num_presses(&self, desired_key: Key) -> usize {
self.events self.events
.iter() .iter()