1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package monitors_example
import "core:fmt"
import win "../window"
main :: proc() {
fmt.println("Monitor Information Demo")
fmt.println("========================")
loop, err := win.create_event_loop()
if err != .None {
fmt.eprintln("Failed to create event loop:", err)
return
}
defer win.destroy_event_loop(loop)
// Get all monitors
monitors := win.get_monitors(loop)
fmt.printfln("\nFound %d monitor(s):\n", len(monitors))
for monitor, i in monitors {
info := win.get_monitor_info(loop, monitor)
primary_str := info.is_primary ? " (Primary)" : ""
fmt.printfln("Monitor %d: %s%s", i + 1, info.name, primary_str)
fmt.printfln(" Position: (%d, %d)", info.position.x, info.position.y)
fmt.printfln(" Physical size: %d x %d mm", info.size_mm.width, info.size_mm.height)
fmt.printfln(" Scale factor: %.2f", info.scale_factor)
fmt.printfln(" Current mode: %dx%d @ %dHz (%d-bit)",
info.current_mode.size.width,
info.current_mode.size.height,
info.current_mode.refresh_rate,
info.current_mode.bit_depth)
// Get workarea
workarea := win.get_monitor_workarea(loop, monitor)
fmt.printfln(" Workarea: (%d, %d) %dx%d",
workarea.position.x, workarea.position.y,
workarea.size.width, workarea.size.height)
// Get all video modes
modes := win.get_video_modes(loop, monitor)
defer delete(modes)
fmt.printfln(" Supported modes: %d", len(modes))
// Print first few modes
for mode, j in modes {
if j >= 5 {
fmt.printfln(" ... and %d more", len(modes) - 5)
break
}
fmt.printfln(" %dx%d @ %dHz",
mode.size.width, mode.size.height, mode.refresh_rate)
}
fmt.println()
}
// Get primary monitor specifically
primary := win.get_primary_monitor(loop)
if primary != nil {
name := win.get_monitor_name(primary)
fmt.printfln("Primary monitor: %s", name)
scale_x, scale_y := win.get_monitor_content_scale(loop, primary)
fmt.printfln("Content scale: %.2f x %.2f", scale_x, scale_y)
}
}