Harbor

branch main
showing the latest snapshot on main
monitors.odin 2.2 KB · Plain text
window/examples/monitors.odin 0644 Raw
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)
    }
}