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`

---
 glutin/src/application.rs | 24 ++++++------------------
 1 file changed, 6 insertions(+), 18 deletions(-)

(limited to 'glutin/src')

diff --git a/glutin/src/application.rs b/glutin/src/application.rs
index fa2192d8..508dfe04 100644
--- a/glutin/src/application.rs
+++ b/glutin/src/application.rs
@@ -1,5 +1,5 @@
 //! Create interactive, native cross-platform applications.
-use crate::{mouse, Error, Executor, Runtime};
+use crate::{Error, Executor, Runtime};
 
 pub use iced_winit::Application;
 
@@ -179,9 +179,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();
@@ -246,8 +245,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();
 
                 context.window().request_redraw();
@@ -291,8 +289,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();
 
                     context.resize(glutin::dpi::PhysicalSize::new(
@@ -305,11 +302,10 @@ async fn run_instance<A, E, C>(
                     viewport_version = current_viewport_version;
                 }
 
-                let new_mouse_interaction = compositor.draw(
+                compositor.present(
                     &mut renderer,
                     state.viewport(),
                     state.background_color(),
-                    &primitive,
                     &debug.overlay(),
                 );
 
@@ -317,14 +313,6 @@ async fn run_instance<A, E, C>(
 
                 debug.render_finished();
 
-                if new_mouse_interaction != mouse_interaction {
-                    context.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

---
 glutin/src/application.rs | 29 ++++++++++++++++++++++++-----
 1 file changed, 24 insertions(+), 5 deletions(-)

(limited to 'glutin/src')

diff --git a/glutin/src/application.rs b/glutin/src/application.rs
index 508dfe04..5d10e96a 100644
--- a/glutin/src/application.rs
+++ b/glutin/src/application.rs
@@ -1,4 +1,5 @@
 //! Create interactive, native cross-platform applications.
+use crate::mouse;
 use crate::{Error, Executor, Runtime};
 
 pub use iced_winit::Application;
@@ -179,9 +180,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();
 
@@ -245,9 +244,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 {
+                    context.window().set_cursor_icon(
+                        conversion::mouse_interaction(new_mouse_interaction),
+                    );
+
+                    mouse_interaction = new_mouse_interaction;
+                }
+
                 context.window().request_redraw();
             }
             event::Event::PlatformSpecific(event::PlatformSpecific::MacOS(
@@ -289,9 +297,20 @@ 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());
                     debug.draw_finished();
 
+                    if new_mouse_interaction != mouse_interaction {
+                        context.window().set_cursor_icon(
+                            conversion::mouse_interaction(
+                                new_mouse_interaction,
+                            ),
+                        );
+
+                        mouse_interaction = new_mouse_interaction;
+                    }
+
                     context.resize(glutin::dpi::PhysicalSize::new(
                         physical_size.width,
                         physical_size.height,
-- 
cgit