From 03b34931383e701c39c653a7662a616fe21a0947 Mon Sep 17 00:00:00 2001
From: Héctor Ramón Jiménez <hector0193@gmail.com>
Date: Thu, 14 Oct 2021 16:07:22 +0700
Subject: Remove trait-specific draw logic in `iced_native`

---
 winit/src/application.rs | 27 ++++++---------------------
 1 file changed, 6 insertions(+), 21 deletions(-)

(limited to 'winit/src')

diff --git a/winit/src/application.rs b/winit/src/application.rs
index ab9a70a0..70562627 100644
--- a/winit/src/application.rs
+++ b/winit/src/application.rs
@@ -5,7 +5,6 @@ pub use state::State;
 
 use crate::clipboard::{self, Clipboard};
 use crate::conversion;
-use crate::mouse;
 use crate::{
     Color, Command, Debug, Error, Executor, Mode, Proxy, Runtime, Settings,
     Size, Subscription,
@@ -253,9 +252,8 @@ async fn run_instance<A, E, C>(
         &mut debug,
     ));
 
-    let mut primitive =
-        user_interface.draw(&mut renderer, state.cursor_position());
-    let mut mouse_interaction = mouse::Interaction::default();
+    // TODO
+    // let mut mouse_interaction = mouse::Interaction::default();
 
     let mut events = Vec::new();
     let mut messages = Vec::new();
@@ -319,8 +317,7 @@ async fn run_instance<A, E, C>(
                 }
 
                 debug.draw_started();
-                primitive =
-                    user_interface.draw(&mut renderer, state.cursor_position());
+                user_interface.draw(&mut renderer, state.cursor_position());
                 debug.draw_finished();
 
                 window.request_redraw();
@@ -359,8 +356,7 @@ async fn run_instance<A, E, C>(
                     debug.layout_finished();
 
                     debug.draw_started();
-                    primitive = user_interface
-                        .draw(&mut renderer, state.cursor_position());
+                    user_interface.draw(&mut renderer, state.cursor_position());
                     debug.draw_finished();
 
                     compositor.configure_surface(
@@ -372,27 +368,16 @@ async fn run_instance<A, E, C>(
                     viewport_version = current_viewport_version;
                 }
 
-                match compositor.draw(
+                match compositor.present(
                     &mut renderer,
                     &mut surface,
                     state.viewport(),
                     state.background_color(),
-                    &primitive,
                     &debug.overlay(),
                 ) {
-                    Ok(new_mouse_interaction) => {
+                    Ok(()) => {
                         debug.render_finished();
 
-                        if new_mouse_interaction != mouse_interaction {
-                            window.set_cursor_icon(
-                                conversion::mouse_interaction(
-                                    new_mouse_interaction,
-                                ),
-                            );
-
-                            mouse_interaction = new_mouse_interaction;
-                        }
-
                         // TODO: Handle animations!
                         // Maybe we can use `ControlFlow::WaitUntil` for this.
                     }
-- 
cgit 


From be97a5d502df8c8b23704f5a8a0d425f4eff2215 Mon Sep 17 00:00:00 2001
From: Héctor Ramón Jiménez <hector0193@gmail.com>
Date: Mon, 18 Oct 2021 16:43:18 +0700
Subject: Introduce `mouse_interaction` method to `Widget` trait

---
 winit/src/application.rs | 27 ++++++++++++++++++++++-----
 1 file changed, 22 insertions(+), 5 deletions(-)

(limited to 'winit/src')

diff --git a/winit/src/application.rs b/winit/src/application.rs
index 70562627..9d787933 100644
--- a/winit/src/application.rs
+++ b/winit/src/application.rs
@@ -5,6 +5,7 @@ pub use state::State;
 
 use crate::clipboard::{self, Clipboard};
 use crate::conversion;
+use crate::mouse;
 use crate::{
     Color, Command, Debug, Error, Executor, Mode, Proxy, Runtime, Settings,
     Size, Subscription,
@@ -252,9 +253,7 @@ async fn run_instance<A, E, C>(
         &mut debug,
     ));
 
-    // TODO
-    // let mut mouse_interaction = mouse::Interaction::default();
-
+    let mut mouse_interaction = mouse::Interaction::default();
     let mut events = Vec::new();
     let mut messages = Vec::new();
 
@@ -317,9 +316,18 @@ async fn run_instance<A, E, C>(
                 }
 
                 debug.draw_started();
-                user_interface.draw(&mut renderer, state.cursor_position());
+                let new_mouse_interaction =
+                    user_interface.draw(&mut renderer, state.cursor_position());
                 debug.draw_finished();
 
+                if new_mouse_interaction != mouse_interaction {
+                    window.set_cursor_icon(conversion::mouse_interaction(
+                        new_mouse_interaction,
+                    ));
+
+                    mouse_interaction = new_mouse_interaction;
+                }
+
                 window.request_redraw();
             }
             event::Event::PlatformSpecific(event::PlatformSpecific::MacOS(
@@ -356,7 +364,16 @@ async fn run_instance<A, E, C>(
                     debug.layout_finished();
 
                     debug.draw_started();
-                    user_interface.draw(&mut renderer, state.cursor_position());
+                    let new_mouse_interaction = user_interface
+                        .draw(&mut renderer, state.cursor_position());
+
+                    if new_mouse_interaction != mouse_interaction {
+                        window.set_cursor_icon(conversion::mouse_interaction(
+                            new_mouse_interaction,
+                        ));
+
+                        mouse_interaction = new_mouse_interaction;
+                    }
                     debug.draw_finished();
 
                     compositor.configure_surface(
-- 
cgit