summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--widget/src/button.rs7
-rw-r--r--widget/src/lazy/responsive.rs23
-rw-r--r--winit/src/program.rs92
3 files changed, 49 insertions, 73 deletions
diff --git a/widget/src/button.rs b/widget/src/button.rs
index 64f2b793..9eac2e4c 100644
--- a/widget/src/button.rs
+++ b/widget/src/button.rs
@@ -17,7 +17,6 @@
//! }
//! ```
use crate::core::border::{self, Border};
-use crate::core::event::{self, Event};
use crate::core::layout;
use crate::core::mouse;
use crate::core::overlay;
@@ -28,8 +27,8 @@ use crate::core::widget::tree::{self, Tree};
use crate::core::widget::Operation;
use crate::core::window;
use crate::core::{
- Background, Clipboard, Color, Element, Layout, Length, Padding, Rectangle,
- Shadow, Shell, Size, Theme, Vector, Widget,
+ Background, Clipboard, Color, Element, Event, Layout, Length, Padding,
+ Rectangle, Shadow, Shell, Size, Theme, Vector, Widget,
};
/// A generic widget that produces a message when pressed.
@@ -295,7 +294,7 @@ where
viewport,
);
- if shell.event_status() == event::Status::Captured {
+ if shell.is_event_captured() {
return;
}
diff --git a/widget/src/lazy/responsive.rs b/widget/src/lazy/responsive.rs
index a8abbce8..f9bd0334 100644
--- a/widget/src/lazy/responsive.rs
+++ b/widget/src/lazy/responsive.rs
@@ -82,18 +82,21 @@ where
new_size: Size,
view: &dyn Fn(Size) -> Element<'a, Message, Theme, Renderer>,
) {
- let is_tree_empty =
- tree.tag == tree::Tag::stateless() && tree.children.is_empty();
+ if self.size != new_size {
+ self.element = view(new_size);
+ self.size = new_size;
+ self.layout = None;
- if !is_tree_empty && self.size == new_size {
- return;
- }
-
- self.element = view(new_size);
- self.size = new_size;
- self.layout = None;
+ tree.diff(&self.element);
+ } else {
+ let is_tree_empty =
+ tree.tag == tree::Tag::stateless() && tree.children.is_empty();
- tree.diff(&self.element);
+ if is_tree_empty {
+ self.layout = None;
+ tree.diff(&self.element);
+ }
+ }
}
fn resolve<R, T>(
diff --git a/winit/src/program.rs b/winit/src/program.rs
index fb30ccd9..d7afb969 100644
--- a/winit/src/program.rs
+++ b/winit/src/program.rs
@@ -818,6 +818,39 @@ async fn run_instance<P, C>(
continue;
};
+ let physical_size = window.state.physical_size();
+
+ if physical_size.width == 0 || physical_size.height == 0
+ {
+ continue;
+ }
+
+ if window.viewport_version
+ != window.state.viewport_version()
+ {
+ let logical_size = window.state.logical_size();
+
+ debug.layout_started();
+ let ui = user_interfaces
+ .remove(&id)
+ .expect("Remove user interface");
+
+ let _ = user_interfaces.insert(
+ id,
+ ui.relayout(logical_size, &mut window.renderer),
+ );
+ debug.layout_finished();
+
+ compositor.configure_surface(
+ &mut window.surface,
+ physical_size.width,
+ physical_size.height,
+ );
+
+ window.viewport_version =
+ window.state.viewport_version();
+ }
+
let redraw_event = core::Event::Window(
window::Event::RedrawRequested(Instant::now()),
);
@@ -877,65 +910,6 @@ async fn run_instance<P, C>(
}
}
- let physical_size = window.state.physical_size();
-
- if physical_size.width == 0 || physical_size.height == 0
- {
- continue;
- }
-
- if window.viewport_version
- != window.state.viewport_version()
- {
- let logical_size = window.state.logical_size();
-
- debug.layout_started();
- let ui = user_interfaces
- .remove(&id)
- .expect("Remove user interface");
-
- let _ = user_interfaces.insert(
- id,
- ui.relayout(logical_size, &mut window.renderer),
- );
- debug.layout_finished();
-
- debug.draw_started();
- let new_mouse_interaction = user_interfaces
- .get_mut(&id)
- .expect("Get user interface")
- .draw(
- &mut window.renderer,
- window.state.theme(),
- &renderer::Style {
- text_color: window.state.text_color(),
- },
- window.state.cursor(),
- );
- debug.draw_finished();
-
- if new_mouse_interaction != window.mouse_interaction
- {
- window.raw.set_cursor(
- conversion::mouse_interaction(
- new_mouse_interaction,
- ),
- );
-
- window.mouse_interaction =
- new_mouse_interaction;
- }
-
- compositor.configure_surface(
- &mut window.surface,
- physical_size.width,
- physical_size.height,
- );
-
- window.viewport_version =
- window.state.viewport_version();
- }
-
debug.render_started();
match compositor.present(
&mut window.renderer,