@@ -31,6 +31,7 @@ pub struct MouseArea<
3131 on_mouse_enter : Option < Message > ,
3232 on_mouse_move : Option < Box < dyn Fn ( Point ) -> Message > > ,
3333 on_mouse_exit : Option < Message > ,
34+ interaction : Option < mouse:: Interaction > ,
3435}
3536
3637impl < ' a , Message , Theme , Renderer > MouseArea < ' a , Message , Theme , Renderer > {
@@ -99,6 +100,16 @@ impl<'a, Message, Theme, Renderer> MouseArea<'a, Message, Theme, Renderer> {
99100 self . on_mouse_exit = Some ( message) ;
100101 self
101102 }
103+
104+ /// The version of the cursor to use when hovering.
105+ #[ must_use]
106+ pub fn mouse_interaction (
107+ mut self ,
108+ interaction : mouse:: Interaction ,
109+ ) -> Self {
110+ self . interaction = Some ( interaction) ;
111+ self
112+ }
102113}
103114
104115/// Local state of the [`MouseArea`].
@@ -123,6 +134,7 @@ impl<'a, Message, Theme, Renderer> MouseArea<'a, Message, Theme, Renderer> {
123134 on_mouse_enter : None ,
124135 on_mouse_move : None ,
125136 on_mouse_exit : None ,
137+ interaction : None ,
126138 }
127139 }
128140}
@@ -214,6 +226,14 @@ where
214226 viewport : & Rectangle ,
215227 renderer : & Renderer ,
216228 ) -> mouse:: Interaction {
229+ if !cursor. is_over ( layout. bounds ( ) ) {
230+ return mouse:: Interaction :: default ( ) ;
231+ }
232+
233+ if let Some ( interaction) = self . interaction {
234+ return interaction;
235+ }
236+
217237 self . content . as_widget ( ) . mouse_interaction (
218238 & tree. children [ 0 ] ,
219239 layout,
0 commit comments