Fix missing repaint after `consume_key` (#7134)
Usually input events automatically trigger a repaint. But since consume_key would remove the event egui would think there were no events and not trigger a repaint. This fixes it by setting a flag on InputState on consume_key. * related: https://github.com/rerun-io/rerun/issues/10165
This commit is contained in:
parent
5bc19f3ca3
commit
4c04996a72
|
|
@ -492,6 +492,7 @@ impl ContextImpl {
|
||||||
pixels_per_point,
|
pixels_per_point,
|
||||||
self.memory.options.input_options,
|
self.memory.options.input_options,
|
||||||
);
|
);
|
||||||
|
let repaint_after = viewport.input.wants_repaint_after();
|
||||||
|
|
||||||
let screen_rect = viewport.input.screen_rect;
|
let screen_rect = viewport.input.screen_rect;
|
||||||
|
|
||||||
|
|
@ -553,6 +554,10 @@ impl ContextImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
self.update_fonts_mut();
|
self.update_fonts_mut();
|
||||||
|
|
||||||
|
if let Some(delay) = repaint_after {
|
||||||
|
self.request_repaint_after(delay, viewport_id, RepaintCause::new());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Load fonts unless already loaded.
|
/// Load fonts unless already loaded.
|
||||||
|
|
@ -2398,10 +2403,7 @@ impl ContextImpl {
|
||||||
|
|
||||||
if repaint_needed {
|
if repaint_needed {
|
||||||
self.request_repaint(ended_viewport_id, RepaintCause::new());
|
self.request_repaint(ended_viewport_id, RepaintCause::new());
|
||||||
} else if let Some(delay) = viewport.input.wants_repaint_after() {
|
|
||||||
self.request_repaint_after(delay, ended_viewport_id, RepaintCause::new());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
|
|
||||||
let all_viewport_ids = self.all_viewport_ids();
|
let all_viewport_ids = self.all_viewport_ids();
|
||||||
|
|
|
||||||
|
|
@ -597,10 +597,14 @@ impl InputState {
|
||||||
(self.time - self.last_scroll_time) as f32
|
(self.time - self.last_scroll_time) as f32
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The [`crate::Context`] will call this at the end of each frame to see if we need a repaint.
|
/// The [`crate::Context`] will call this at the beginning of each frame to see if we need a repaint.
|
||||||
///
|
///
|
||||||
/// Returns how long to wait for a repaint.
|
/// Returns how long to wait for a repaint.
|
||||||
pub fn wants_repaint_after(&self) -> Option<Duration> {
|
///
|
||||||
|
/// NOTE: It's important to call this immediately after [`Self::begin_pass`] since calls to
|
||||||
|
/// [`Self::consume_key`] will remove events from the vec, meaning those key presses wouldn't
|
||||||
|
/// cause a repaint.
|
||||||
|
pub(crate) fn wants_repaint_after(&self) -> Option<Duration> {
|
||||||
if self.pointer.wants_repaint()
|
if self.pointer.wants_repaint()
|
||||||
|| self.unprocessed_scroll_delta.abs().max_elem() > 0.2
|
|| self.unprocessed_scroll_delta.abs().max_elem() > 0.2
|
||||||
|| self.unprocessed_scroll_delta_for_zoom.abs() > 0.2
|
|| self.unprocessed_scroll_delta_for_zoom.abs() > 0.2
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue