@@ -258,12 +258,11 @@ struct Overlay<'a, 'b, Message, Renderer, Event> {
258
258
impl < ' a , ' b , Message , Renderer , Event >
259
259
Overlay < ' a , ' b , Message , Renderer , Event >
260
260
{
261
- fn with_overlay < T > (
261
+ fn with_overlay_maybe < T > (
262
262
& self ,
263
263
f : impl FnOnce ( & overlay:: Element < ' _ , Event , Renderer > ) -> T ,
264
- ) -> T {
265
- f ( self
266
- . instance
264
+ ) -> Option < T > {
265
+ self . instance
267
266
. state
268
267
. borrow ( )
269
268
. as_ref ( )
@@ -273,13 +272,13 @@ impl<'a, 'b, Message, Renderer, Event>
273
272
. unwrap ( )
274
273
. borrow_overlay ( )
275
274
. as_ref ( )
276
- . unwrap ( ) )
275
+ . map ( f )
277
276
}
278
277
279
- fn with_overlay_mut < T > (
278
+ fn with_overlay_mut_maybe < T > (
280
279
& self ,
281
280
f : impl FnOnce ( & mut overlay:: Element < ' _ , Event , Renderer > ) -> T ,
282
- ) -> T {
281
+ ) -> Option < T > {
283
282
self . instance
284
283
. state
285
284
. borrow_mut ( )
@@ -289,7 +288,7 @@ impl<'a, 'b, Message, Renderer, Event>
289
288
cache
290
289
. as_mut ( )
291
290
. unwrap ( )
292
- . with_overlay_mut ( |overlay| f ( overlay. as_mut ( ) . unwrap ( ) ) )
291
+ . with_overlay_mut ( |overlay| overlay. as_mut ( ) . map ( f ) )
293
292
} )
294
293
}
295
294
}
@@ -305,11 +304,12 @@ where
305
304
bounds : Size ,
306
305
position : Point ,
307
306
) -> layout:: Node {
308
- self . with_overlay ( |overlay| {
307
+ self . with_overlay_maybe ( |overlay| {
309
308
let vector = position - overlay. position ( ) ;
310
309
311
310
overlay. layout ( renderer, bounds) . translate ( vector)
312
311
} )
312
+ . unwrap_or_default ( )
313
313
}
314
314
315
315
fn draw (
@@ -319,9 +319,9 @@ where
319
319
layout : Layout < ' _ > ,
320
320
cursor_position : Point ,
321
321
) {
322
- self . with_overlay ( |overlay| {
322
+ self . with_overlay_maybe ( |overlay| {
323
323
overlay. draw ( renderer, style, layout, cursor_position) ;
324
- } )
324
+ } ) ;
325
325
}
326
326
327
327
fn mouse_interaction (
@@ -330,9 +330,10 @@ where
330
330
cursor_position : Point ,
331
331
viewport : & Rectangle ,
332
332
) -> mouse:: Interaction {
333
- self . with_overlay ( |overlay| {
333
+ self . with_overlay_maybe ( |overlay| {
334
334
overlay. mouse_interaction ( layout, cursor_position, viewport)
335
335
} )
336
+ . unwrap_or_default ( )
336
337
}
337
338
338
339
fn hash_layout ( & self , state : & mut Hasher , position : Point ) {
@@ -342,7 +343,7 @@ where
342
343
( position. x as u32 ) . hash ( state) ;
343
344
( position. y as u32 ) . hash ( state) ;
344
345
345
- self . with_overlay ( |overlay| {
346
+ self . with_overlay_maybe ( |overlay| {
346
347
overlay. hash_layout ( state) ;
347
348
} ) ;
348
349
}
@@ -359,16 +360,18 @@ where
359
360
let mut local_messages = Vec :: new ( ) ;
360
361
let mut local_shell = Shell :: new ( & mut local_messages) ;
361
362
362
- let event_status = self . with_overlay_mut ( |overlay| {
363
- overlay. on_event (
364
- event,
365
- layout,
366
- cursor_position,
367
- renderer,
368
- clipboard,
369
- & mut local_shell,
370
- )
371
- } ) ;
363
+ let event_status = self
364
+ . with_overlay_mut_maybe ( |overlay| {
365
+ overlay. on_event (
366
+ event,
367
+ layout,
368
+ cursor_position,
369
+ renderer,
370
+ clipboard,
371
+ & mut local_shell,
372
+ )
373
+ } )
374
+ . unwrap_or_else ( || iced_native:: event:: Status :: Ignored ) ;
372
375
373
376
if !local_messages. is_empty ( ) {
374
377
let mut component =
0 commit comments