mirror of
https://github.com/emilk/egui.git
synced 2026-08-31 13:50:04 -04:00
Fix key pressed event (#2334)
* Fix key press event * Add example with key presses * Changelog line for key_press fix * PR review improvements * Add PR link in changelog Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
This commit is contained in:
@@ -138,7 +138,11 @@ impl Default for InputState {
|
||||
|
||||
impl InputState {
|
||||
#[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 unstable_dt = (time - self.time) as f32;
|
||||
|
||||
@@ -160,24 +164,26 @@ impl InputState {
|
||||
let mut keys_down = self.keys_down;
|
||||
let mut scroll_delta = Vec2::ZERO;
|
||||
let mut zoom_factor_delta = 1.0;
|
||||
for event in &new.events {
|
||||
match event {
|
||||
Event::Key { key, pressed, .. } => {
|
||||
if *pressed {
|
||||
keys_down.insert(*key);
|
||||
} else {
|
||||
keys_down.remove(key);
|
||||
}
|
||||
new.events.retain(|event| match event {
|
||||
Event::Key { key, pressed, .. } => {
|
||||
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)
|
||||
} else {
|
||||
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 {
|
||||
pointer,
|
||||
touch_states: self.touch_states,
|
||||
@@ -285,7 +291,7 @@ impl InputState {
|
||||
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 {
|
||||
self.events
|
||||
.iter()
|
||||
|
||||
Reference in New Issue
Block a user