summaryrefslogtreecommitdiffstats
path: root/winit/src/program
diff options
context:
space:
mode:
Diffstat (limited to 'winit/src/program')
-rw-r--r--winit/src/program/state.rs5
-rw-r--r--winit/src/program/window_manager.rs16
2 files changed, 20 insertions, 1 deletions
diff --git a/winit/src/program/state.rs b/winit/src/program/state.rs
index a7fa2788..b8a58960 100644
--- a/winit/src/program/state.rs
+++ b/winit/src/program/state.rs
@@ -190,7 +190,10 @@ where
..
},
..
- } => _debug.toggle(),
+ } => {
+ _debug.toggle();
+ window.request_redraw();
+ }
_ => {}
}
}
diff --git a/winit/src/program/window_manager.rs b/winit/src/program/window_manager.rs
index 3d22e155..10a973fe 100644
--- a/winit/src/program/window_manager.rs
+++ b/winit/src/program/window_manager.rs
@@ -1,4 +1,5 @@
use crate::core::mouse;
+use crate::core::time::Instant;
use crate::core::window::Id;
use crate::core::{Point, Size};
use crate::graphics::Compositor;
@@ -62,6 +63,7 @@ where
surface,
renderer,
mouse_interaction: mouse::Interaction::None,
+ redraw_at: None,
},
);
@@ -74,6 +76,19 @@ where
self.entries.is_empty()
}
+ pub fn is_idle(&self) -> bool {
+ self.entries
+ .values()
+ .all(|window| window.redraw_at.is_none())
+ }
+
+ pub fn redraw_at(&self) -> Option<Instant> {
+ self.entries
+ .values()
+ .filter_map(|window| window.redraw_at)
+ .min()
+ }
+
pub fn first(&self) -> Option<&Window<P, C>> {
self.entries.first_key_value().map(|(_id, window)| window)
}
@@ -138,6 +153,7 @@ where
pub mouse_interaction: mouse::Interaction,
pub surface: C::Surface,
pub renderer: P::Renderer,
+ pub redraw_at: Option<Instant>,
}
impl<P, C> Window<P, C>