@@ -114,7 +114,7 @@ cfg_if::cfg_if! {
114
114
115
115
fn default_renderer_factory (
116
116
shared_backend_data : & Rc < SharedBackendData > ,
117
- ) -> Box < dyn WinitCompatibleRenderer > {
117
+ ) -> Result < Box < dyn WinitCompatibleRenderer > , PlatformError > {
118
118
cfg_if:: cfg_if! {
119
119
if #[ cfg( enable_skia_renderer) ] {
120
120
renderer:: skia:: WinitSkiaRenderer :: new_suspended( shared_backend_data)
@@ -152,17 +152,16 @@ fn try_create_window_with_fallback_renderer(
152
152
]
153
153
. into_iter ( )
154
154
. find_map ( |renderer_factory| {
155
- WinitWindowAdapter :: new (
155
+ Some ( WinitWindowAdapter :: new (
156
156
shared_backend_data. clone ( ) ,
157
- renderer_factory ( & shared_backend_data) ,
157
+ renderer_factory ( & shared_backend_data) . ok ( ) ? ,
158
158
attrs. clone ( ) ,
159
159
None ,
160
160
#[ cfg( any( enable_accesskit, muda) ) ]
161
161
_proxy. clone ( ) ,
162
162
#[ cfg( all( muda, target_os = "macos" ) ) ]
163
163
muda_enable_default_menu_bar,
164
- )
165
- . ok ( )
164
+ ) )
166
165
} )
167
166
}
168
167
@@ -591,7 +590,8 @@ impl SharedBackendData {
591
590
/// ```
592
591
pub struct Backend {
593
592
requested_graphics_api : Option < RequestedGraphicsAPI > ,
594
- renderer_factory_fn : fn ( & Rc < SharedBackendData > ) -> Box < dyn WinitCompatibleRenderer > ,
593
+ renderer_factory_fn :
594
+ fn ( & Rc < SharedBackendData > ) -> Result < Box < dyn WinitCompatibleRenderer > , PlatformError > ,
595
595
event_loop_state : RefCell < Option < crate :: event_loop:: EventLoopState > > ,
596
596
shared_data : Rc < SharedBackendData > ,
597
597
custom_application_handler : RefCell < Option < Box < dyn crate :: CustomApplicationHandler > > > ,
@@ -668,26 +668,30 @@ impl i_slint_core::platform::Platform for Backend {
668
668
attrs = hook ( attrs) ;
669
669
}
670
670
671
- let adapter = WinitWindowAdapter :: new (
672
- self . shared_data . clone ( ) ,
673
- ( self . renderer_factory_fn ) ( & self . shared_data ) ,
674
- attrs. clone ( ) ,
675
- self . requested_graphics_api . clone ( ) ,
676
- #[ cfg( any( enable_accesskit, muda) ) ]
677
- self . shared_data . event_loop_proxy . clone ( ) ,
678
- #[ cfg( all( muda, target_os = "macos" ) ) ]
679
- self . muda_enable_default_menu_bar_bar ,
680
- )
681
- . or_else ( |e| {
682
- try_create_window_with_fallback_renderer (
683
- & self . shared_data ,
684
- attrs,
685
- & self . shared_data . event_loop_proxy . clone ( ) ,
686
- #[ cfg( all( muda, target_os = "macos" ) ) ]
687
- self . muda_enable_default_menu_bar_bar ,
688
- )
689
- . ok_or_else ( || format ! ( "Winit backend failed to find a suitable renderer: {e}" ) )
690
- } ) ?;
671
+ let adapter = ( self . renderer_factory_fn ) ( & self . shared_data ) . map_or_else (
672
+ |e| {
673
+ try_create_window_with_fallback_renderer (
674
+ & self . shared_data ,
675
+ attrs. clone ( ) ,
676
+ & self . shared_data . event_loop_proxy . clone ( ) ,
677
+ #[ cfg( all( muda, target_os = "macos" ) ) ]
678
+ self . muda_enable_default_menu_bar_bar ,
679
+ )
680
+ . ok_or_else ( || format ! ( "Winit backend failed to find a suitable renderer: {e}" ) )
681
+ } ,
682
+ |renderer| {
683
+ Ok ( WinitWindowAdapter :: new (
684
+ self . shared_data . clone ( ) ,
685
+ renderer,
686
+ attrs. clone ( ) ,
687
+ self . requested_graphics_api . clone ( ) ,
688
+ #[ cfg( any( enable_accesskit, muda) ) ]
689
+ self . shared_data . event_loop_proxy . clone ( ) ,
690
+ #[ cfg( all( muda, target_os = "macos" ) ) ]
691
+ self . muda_enable_default_menu_bar_bar ,
692
+ ) )
693
+ } ,
694
+ ) ?;
691
695
Ok ( adapter)
692
696
}
693
697
0 commit comments