Request a redraw only on relevant events
This commit is contained in:
parent
c0a5dc980e
commit
49dbf2c146
@ -119,16 +119,19 @@ pub fn main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Event::MainEventsCleared => {
|
Event::MainEventsCleared => {
|
||||||
// We update iced
|
// If there are events pending
|
||||||
let _ = state.update(
|
if !state.is_queue_empty() {
|
||||||
None,
|
// We update iced
|
||||||
viewport.logical_size(),
|
let _ = state.update(
|
||||||
&mut renderer,
|
None,
|
||||||
&mut debug,
|
viewport.logical_size(),
|
||||||
);
|
&mut renderer,
|
||||||
|
&mut debug,
|
||||||
|
);
|
||||||
|
|
||||||
// and request a redraw
|
// and request a redraw
|
||||||
window.request_redraw();
|
window.request_redraw();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Event::RedrawRequested(_) => {
|
Event::RedrawRequested(_) => {
|
||||||
if resized {
|
if resized {
|
||||||
|
@ -95,6 +95,10 @@ pub fn run<A, E, C>(
|
|||||||
|
|
||||||
event_loop.run(move |event, _, control_flow| match event {
|
event_loop.run(move |event, _, control_flow| match event {
|
||||||
event::Event::MainEventsCleared => {
|
event::Event::MainEventsCleared => {
|
||||||
|
if state.is_queue_empty() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let command = runtime.enter(|| {
|
let command = runtime.enter(|| {
|
||||||
state.update(
|
state.update(
|
||||||
clipboard.as_ref().map(|c| c as _),
|
clipboard.as_ref().map(|c| c as _),
|
||||||
|
@ -88,6 +88,13 @@ where
|
|||||||
self.queued_messages.push(message);
|
self.queued_messages.push(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns whether the event queue of the [`State`] is empty or not.
|
||||||
|
///
|
||||||
|
/// [`State`]: struct.State.html
|
||||||
|
pub fn is_queue_empty(&self) -> bool {
|
||||||
|
self.queued_events.is_empty() && self.queued_messages.is_empty()
|
||||||
|
}
|
||||||
|
|
||||||
/// Processes all the queued events and messages, rebuilding and redrawing
|
/// Processes all the queued events and messages, rebuilding and redrawing
|
||||||
/// the widgets of the linked [`Program`] if necessary.
|
/// the widgets of the linked [`Program`] if necessary.
|
||||||
///
|
///
|
||||||
@ -102,10 +109,6 @@ where
|
|||||||
renderer: &mut P::Renderer,
|
renderer: &mut P::Renderer,
|
||||||
debug: &mut Debug,
|
debug: &mut Debug,
|
||||||
) -> Option<Command<P::Message>> {
|
) -> Option<Command<P::Message>> {
|
||||||
if self.queued_events.is_empty() && self.queued_messages.is_empty() {
|
|
||||||
return None;
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut user_interface = build_user_interface(
|
let mut user_interface = build_user_interface(
|
||||||
&mut self.program,
|
&mut self.program,
|
||||||
self.cache.take().unwrap(),
|
self.cache.take().unwrap(),
|
||||||
|
@ -150,6 +150,10 @@ pub fn run<A, E, C>(
|
|||||||
|
|
||||||
event_loop.run(move |event, _, control_flow| match event {
|
event_loop.run(move |event, _, control_flow| match event {
|
||||||
event::Event::MainEventsCleared => {
|
event::Event::MainEventsCleared => {
|
||||||
|
if state.is_queue_empty() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let command = runtime.enter(|| {
|
let command = runtime.enter(|| {
|
||||||
state.update(
|
state.update(
|
||||||
clipboard.as_ref().map(|c| c as _),
|
clipboard.as_ref().map(|c| c as _),
|
||||||
|
Loading…
Reference in New Issue
Block a user