Properly print outputs in monitor_list example
#![allow(clippy::single_match)]
use simple_logger::SimpleLogger;
+use winit::dpi::{PhysicalPosition, PhysicalSize};
+use winit::monitor::MonitorHandle;
use winit::{event_loop::EventLoop, window::WindowBuilder};
fn main() {
@@ -8,6 +10,49 @@ fn main() {
let event_loop = EventLoop::new();
let window = WindowBuilder::new().build(&event_loop).unwrap();
- dbg!(window.available_monitors().collect::<Vec<_>>());
- dbg!(window.primary_monitor());
+ if let Some(mon) = window.primary_monitor() {
+ print_info("Primary output", mon);
+ }
+
+ for mon in window.available_monitors() {
+ if Some(&mon) == window.primary_monitor().as_ref() {
+ continue;
+ }
+
+ println!();
+ print_info("Output", mon);
+ }
+}
+
+fn print_info(intro: &str, monitor: MonitorHandle) {
+ if let Some(name) = monitor.name() {
+ println!("{intro}: {name}");
+ } else {
+ println!("{intro}: [no name]");
+ }
+
+ let PhysicalSize { width, height } = monitor.size();
+ print!(" Current mode: {width}x{height}");
+ if let Some(m_hz) = monitor.refresh_rate_millihertz() {
+ println!(" @ {}.{} Hz", m_hz / 1000, m_hz % 1000);
+ } else {
+ println!();
+ }
+
+ let PhysicalPosition { x, y } = monitor.position();
+ println!(" Position: {x},{y}");
+
+ println!(" Scale factor: {}", monitor.scale_factor());
+
+ println!(" Available modes (width x height x bit-depth):");
+ for mode in monitor.video_modes() {
+ let PhysicalSize { width, height } = mode.size();
+ let bits = mode.bit_depth();
+ let m_hz = mode.refresh_rate_millihertz();
+ println!(
+ " {width}x{height}x{bits} @ {}.{} Hz",
+ m_hz / 1000,
+ m_hz % 1000
+ );
+ }
}
