screens_info/
screens_info.rs

1use fltk::{
2    app::Screen,
3    draw::{Coordinates, Rect},
4};
5type Coord = Coordinates<i32>;
6
7fn main() {
8    let screens = Screen::all_screens();
9    println!("Number of detected screens = {}\n", screens.len());
10    assert_eq![screens.len(), Screen::count() as usize];
11
12    println!("Is scaling supported:");
13    println!("- at all = {}", Screen::scaling_supported());
14    println!("- separately = {}", Screen::scaling_supported_separately());
15
16    let coord: Coord = [100, 100].into();
17    let rect: Rect = [100, 100, 100, 100].into();
18
19    // uncomment these lines to see out-of-boundaries errors:
20    // let coord: Coord = [-100, 10_000].into();
21    // let rect: Rect = [-100, 100, 10_000, 10_000].into();
22
23    println!("\nScreen found:");
24    println!("- at {coord:?} = {:?}", Screen::new_at(coord));
25    println!("- inside {rect:?} = {:?}", Screen::new_inside(rect));
26
27    println!("\nWork area:");
28    println!("- at {coord:?} = {:?}", Screen::work_area_at(coord));
29    println!("- under the mouse = {:?}", Screen::work_area_mouse());
30
31    println!("\nXYWH:");
32    println!("- at {coord:?} = {:?}", Screen::xywh_at(coord));
33    println!("- inside {rect:?} = {:?}", Screen::xywh_inside(rect));
34    println!("- under the mouse = {:?}", Screen::xywh_mouse());
35
36    println!("\nFor each screen:");
37    for s in screens {
38        println!("+ {s:?}");
39        println!("  - work area = {:?}:", s.work_area());
40        println!("  - dpi = {:?}", s.dpi());
41        println!("  - scale = {:?}", s.scale());
42    }
43}