@@ -57,7 +57,7 @@ pub enum WinitWindowEventResult {
57
57
mod renderer {
58
58
use std:: sync:: Arc ;
59
59
60
- use i_slint_core:: { graphics :: RequestedGraphicsAPI , platform:: PlatformError } ;
60
+ use i_slint_core:: platform:: PlatformError ;
61
61
use winit:: event_loop:: ActiveEventLoop ;
62
62
63
63
pub trait WinitCompatibleRenderer {
@@ -74,7 +74,6 @@ mod renderer {
74
74
& self ,
75
75
active_event_loop : & ActiveEventLoop ,
76
76
window_attributes : winit:: window:: WindowAttributes ,
77
- requested_graphics_api : Option < RequestedGraphicsAPI > ,
78
77
) -> Result < Arc < winit:: window:: Window > , PlatformError > ;
79
78
}
80
79
@@ -145,7 +144,11 @@ fn try_create_window_with_fallback_renderer(
145
144
renderer:: skia:: WinitSkiaRenderer :: new_suspended,
146
145
#[ cfg( feature = "renderer-femtovg-wgpu" ) ]
147
146
renderer:: femtovg:: WGPUFemtoVGRenderer :: new_suspended,
148
- #[ cfg( all( feature = "renderer-femtovg" , supports_opengl) ) ]
147
+ #[ cfg( all(
148
+ feature = "renderer-femtovg" ,
149
+ supports_opengl,
150
+ not( feature = "renderer-femtovg-wgpu" )
151
+ ) ) ]
149
152
renderer:: femtovg:: GlutinFemtoVGRenderer :: new_suspended,
150
153
#[ cfg( feature = "renderer-software" ) ]
151
154
renderer:: sw:: WinitSoftwareRenderer :: new_suspended,
@@ -156,7 +159,6 @@ fn try_create_window_with_fallback_renderer(
156
159
shared_backend_data. clone ( ) ,
157
160
renderer_factory ( & shared_backend_data) . ok ( ) ?,
158
161
attrs. clone ( ) ,
159
- None ,
160
162
#[ cfg( any( enable_accesskit, muda) ) ]
161
163
_proxy. clone ( ) ,
162
164
#[ cfg( all( muda, target_os = "macos" ) ) ]
@@ -363,7 +365,10 @@ impl BackendBuilder {
363
365
364
366
// Initialize the winit event loop and propagate errors if for example `DISPLAY` or `WAYLAND_DISPLAY` isn't set.
365
367
366
- let shared_data = Rc :: new ( SharedBackendData :: new ( event_loop_builder) ?) ;
368
+ let shared_data = Rc :: new ( SharedBackendData :: new (
369
+ event_loop_builder,
370
+ self . requested_graphics_api . clone ( ) ,
371
+ ) ?) ;
367
372
368
373
let renderer_factory_fn = match (
369
374
self . renderer_name . as_deref ( ) ,
@@ -373,7 +378,7 @@ impl BackendBuilder {
373
378
( Some ( "gl" ) , maybe_graphics_api) | ( Some ( "femtovg" ) , maybe_graphics_api) => {
374
379
// If a graphics API was requested, double check that it's GL. FemtoVG doesn't support Metal, etc.
375
380
if let Some ( api) = maybe_graphics_api {
376
- i_slint_core:: graphics:: RequestedOpenGLVersion :: try_from ( api. clone ( ) ) ?;
381
+ i_slint_core:: graphics:: RequestedOpenGLVersion :: try_from ( api) ?;
377
382
}
378
383
renderer:: femtovg:: GlutinFemtoVGRenderer :: new_suspended
379
384
}
@@ -401,7 +406,7 @@ impl BackendBuilder {
401
406
( Some ( "skia-opengl" ) , maybe_graphics_api @ _) => {
402
407
// If a graphics API was requested, double check that it's GL. FemtoVG doesn't support Metal, etc.
403
408
if let Some ( api) = maybe_graphics_api {
404
- i_slint_core:: graphics:: RequestedOpenGLVersion :: try_from ( api. clone ( ) ) ?;
409
+ i_slint_core:: graphics:: RequestedOpenGLVersion :: try_from ( api) ?;
405
410
}
406
411
renderer:: skia:: WinitSkiaRenderer :: new_opengl_suspended
407
412
}
@@ -434,7 +439,7 @@ impl BackendBuilder {
434
439
renderer:: skia:: WinitSkiaRenderer :: factory_for_graphics_api( Some ( _requested_graphics_api) ) ?
435
440
} else if #[ cfg( all( feature = "renderer-femtovg" , supports_opengl) ) ] {
436
441
// If a graphics API was requested, double check that it's GL. FemtoVG doesn't support Metal, etc.
437
- i_slint_core:: graphics:: RequestedOpenGLVersion :: try_from( _requested_graphics_api. clone ( ) ) ?;
442
+ i_slint_core:: graphics:: RequestedOpenGLVersion :: try_from( _requested_graphics_api) ?;
438
443
renderer:: femtovg:: GlutinFemtoVGRenderer :: new_suspended
439
444
} else {
440
445
return Err ( format!( "Graphics API use requested by the compile-time enabled renderers don't support that" ) . into( ) )
@@ -444,7 +449,6 @@ impl BackendBuilder {
444
449
} ;
445
450
446
451
Ok ( Backend {
447
- requested_graphics_api : self . requested_graphics_api ,
448
452
renderer_factory_fn,
449
453
event_loop_state : Default :: default ( ) ,
450
454
window_attributes_hook : self . window_attributes_hook ,
@@ -459,6 +463,7 @@ impl BackendBuilder {
459
463
}
460
464
461
465
pub ( crate ) struct SharedBackendData {
466
+ requested_graphics_api : Option < RequestedGraphicsAPI > ,
462
467
#[ cfg( enable_skia_renderer) ]
463
468
skia_context : i_slint_renderer_skia:: SkiaSharedContext ,
464
469
active_windows : RefCell < HashMap < winit:: window:: WindowId , Weak < WinitWindowAdapter > > > ,
@@ -473,7 +478,10 @@ pub(crate) struct SharedBackendData {
473
478
}
474
479
475
480
impl SharedBackendData {
476
- fn new ( mut builder : EventLoopBuilder ) -> Result < Self , PlatformError > {
481
+ fn new (
482
+ mut builder : EventLoopBuilder ,
483
+ requested_graphics_api : Option < RequestedGraphicsAPI > ,
484
+ ) -> Result < Self , PlatformError > {
477
485
#[ cfg( not( target_arch = "wasm32" ) ) ]
478
486
use raw_window_handle:: HasDisplayHandle ;
479
487
@@ -526,6 +534,7 @@ impl SharedBackendData {
526
534
. map_err ( |display_err| PlatformError :: OtherError ( display_err. into ( ) ) ) ?,
527
535
) ;
528
536
Ok ( Self {
537
+ requested_graphics_api,
529
538
#[ cfg( enable_skia_renderer) ]
530
539
skia_context : i_slint_renderer_skia:: SkiaSharedContext :: default ( ) ,
531
540
active_windows : Default :: default ( ) ,
@@ -589,7 +598,6 @@ impl SharedBackendData {
589
598
/// slint::platform::set_platform(Box::new(Backend::new().unwrap()));
590
599
/// ```
591
600
pub struct Backend {
592
- requested_graphics_api : Option < RequestedGraphicsAPI > ,
593
601
renderer_factory_fn :
594
602
fn ( & Rc < SharedBackendData > ) -> Result < Box < dyn WinitCompatibleRenderer > , PlatformError > ,
595
603
event_loop_state : RefCell < Option < crate :: event_loop:: EventLoopState > > ,
@@ -684,7 +692,6 @@ impl i_slint_core::platform::Platform for Backend {
684
692
self . shared_data . clone ( ) ,
685
693
renderer,
686
694
attrs. clone ( ) ,
687
- self . requested_graphics_api . clone ( ) ,
688
695
#[ cfg( any( enable_accesskit, muda) ) ]
689
696
self . shared_data . event_loop_proxy . clone ( ) ,
690
697
#[ cfg( all( muda, target_os = "macos" ) ) ]
0 commit comments