@@ -58,43 +58,37 @@ impl WinitWindows {
58
58
// AccessKit adapter is initialized.
59
59
winit_window_attributes = winit_window_attributes. with_visible ( false ) ;
60
60
61
- winit_window_attributes = match window. mode {
62
- WindowMode :: BorderlessFullscreen ( monitor_selection) => winit_window_attributes
63
- . with_fullscreen ( Some ( Fullscreen :: Borderless ( select_monitor (
64
- monitors,
65
- event_loop. primary_monitor ( ) ,
66
- None ,
67
- & monitor_selection,
68
- ) ) ) ) ,
69
- mode @ ( WindowMode :: Fullscreen ( _) | WindowMode :: SizedFullscreen ( _) ) => {
70
- let videomode = match mode {
71
- WindowMode :: Fullscreen ( monitor_selection) => get_best_videomode (
72
- & select_monitor (
73
- monitors,
74
- event_loop. primary_monitor ( ) ,
75
- None ,
76
- & monitor_selection,
77
- )
78
- . unwrap_or_else ( || {
79
- panic ! ( "Could not find monitor for {:?}" , monitor_selection)
80
- } ) ,
81
- ) ,
82
- WindowMode :: SizedFullscreen ( monitor_selection) => get_fitting_videomode (
83
- & select_monitor (
84
- monitors,
85
- event_loop. primary_monitor ( ) ,
86
- None ,
87
- & monitor_selection,
88
- )
89
- . unwrap_or_else ( || {
90
- panic ! ( "Could not find monitor for {:?}" , monitor_selection)
91
- } ) ,
92
- window. width ( ) as u32 ,
93
- window. height ( ) as u32 ,
94
- ) ,
95
- _ => unreachable ! ( ) ,
96
- } ;
61
+ let maybe_selected_monitor = & match window. mode {
62
+ WindowMode :: BorderlessFullscreen ( monitor_selection)
63
+ | WindowMode :: Fullscreen ( monitor_selection)
64
+ | WindowMode :: SizedFullscreen ( monitor_selection) => select_monitor (
65
+ monitors,
66
+ event_loop. primary_monitor ( ) ,
67
+ None ,
68
+ & monitor_selection,
69
+ ) ,
70
+ WindowMode :: Windowed => None ,
71
+ } ;
97
72
73
+ winit_window_attributes = match window. mode {
74
+ WindowMode :: BorderlessFullscreen ( _) => winit_window_attributes
75
+ . with_fullscreen ( Some ( Fullscreen :: Borderless ( maybe_selected_monitor. clone ( ) ) ) ) ,
76
+ WindowMode :: Fullscreen ( _) => {
77
+ let select_monitor = & maybe_selected_monitor
78
+ . clone ( )
79
+ . expect ( "Unable to get monitor." ) ;
80
+ let videomode = get_best_videomode ( select_monitor) ;
81
+ winit_window_attributes. with_fullscreen ( Some ( Fullscreen :: Exclusive ( videomode) ) )
82
+ }
83
+ WindowMode :: SizedFullscreen ( _) => {
84
+ let select_monitor = & maybe_selected_monitor
85
+ . clone ( )
86
+ . expect ( "Unable to get monitor." ) ;
87
+ let videomode = get_fitting_videomode (
88
+ select_monitor,
89
+ window. width ( ) as u32 ,
90
+ window. height ( ) as u32 ,
91
+ ) ;
98
92
winit_window_attributes. with_fullscreen ( Some ( Fullscreen :: Exclusive ( videomode) ) )
99
93
}
100
94
WindowMode :: Windowed => {
@@ -107,11 +101,10 @@ impl WinitWindows {
107
101
) {
108
102
winit_window_attributes = winit_window_attributes. with_position ( position) ;
109
103
}
110
-
111
104
let logical_size = LogicalSize :: new ( window. width ( ) , window. height ( ) ) ;
112
105
if let Some ( sf) = window. resolution . scale_factor_override ( ) {
113
- winit_window_attributes
114
- . with_inner_size ( logical_size . to_physical :: < f64 > ( sf . into ( ) ) )
106
+ let inner_size = logical_size . to_physical :: < f64 > ( sf . into ( ) ) ;
107
+ winit_window_attributes . with_inner_size ( inner_size )
115
108
} else {
116
109
winit_window_attributes. with_inner_size ( logical_size)
117
110
}
@@ -134,6 +127,24 @@ impl WinitWindows {
134
127
winit_window_attributes. with_skip_taskbar ( window. skip_taskbar ) ;
135
128
}
136
129
130
+ let display_info = DisplayInfo {
131
+ window_physical_resolution : (
132
+ window. resolution . physical_width ( ) ,
133
+ window. resolution . physical_height ( ) ,
134
+ ) ,
135
+ window_logical_resolution : ( window. resolution . width ( ) , window. resolution . height ( ) ) ,
136
+ monitor_name : maybe_selected_monitor
137
+ . as_ref ( )
138
+ . and_then ( MonitorHandle :: name) ,
139
+ scale_factor : maybe_selected_monitor
140
+ . as_ref ( )
141
+ . map ( MonitorHandle :: scale_factor) ,
142
+ refresh_rate_millihertz : maybe_selected_monitor
143
+ . as_ref ( )
144
+ . and_then ( MonitorHandle :: refresh_rate_millihertz) ,
145
+ } ;
146
+ bevy_log:: debug!( "{display_info}" ) ;
147
+
137
148
#[ cfg( any(
138
149
target_os = "linux" ,
139
150
target_os = "dragonfly" ,
@@ -449,3 +460,38 @@ pub fn select_monitor(
449
460
Entity ( entity) => monitors. find_entity ( * entity) ,
450
461
}
451
462
}
463
+
464
+ struct DisplayInfo {
465
+ window_physical_resolution : ( u32 , u32 ) ,
466
+ window_logical_resolution : ( f32 , f32 ) ,
467
+ monitor_name : Option < String > ,
468
+ scale_factor : Option < f64 > ,
469
+ refresh_rate_millihertz : Option < u32 > ,
470
+ }
471
+
472
+ impl core:: fmt:: Display for DisplayInfo {
473
+ fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
474
+ write ! ( f, "Display information:" ) ?;
475
+ write ! (
476
+ f,
477
+ " Window physical resolution: {}x{}" ,
478
+ self . window_physical_resolution. 0 , self . window_physical_resolution. 1
479
+ ) ?;
480
+ write ! (
481
+ f,
482
+ " Window logical resolution: {}x{}" ,
483
+ self . window_logical_resolution. 0 , self . window_logical_resolution. 1
484
+ ) ?;
485
+ write ! (
486
+ f,
487
+ " Monitor name: {}" ,
488
+ self . monitor_name. as_deref( ) . unwrap_or( "" )
489
+ ) ?;
490
+ write ! ( f, " Scale factor: {}" , self . scale_factor. unwrap_or( 0. ) ) ?;
491
+ let millihertz = self . refresh_rate_millihertz . unwrap_or ( 0 ) ;
492
+ let hertz = millihertz / 1000 ;
493
+ let extra_millihertz = millihertz % 1000 ;
494
+ write ! ( f, " Refresh rate (Hz): {}.{:03}" , hertz, extra_millihertz) ?;
495
+ Ok ( ( ) )
496
+ }
497
+ }
0 commit comments