1.9 KiB
1.9 KiB
demo.c - 多屏幕信息窗口演示程序
概述
一个基于GTK+和Xrandr的多屏幕信息演示程序。在所有连接的显示器上依次创建信息窗口,显示屏幕分辨率、位置等信息,支持多轮测试和窗口位置校验。
程序结构
全局变量
| 变量 | 类型 | 说明 |
|---|---|---|
info_windows |
GtkWidget** |
各屏幕信息窗口指针数组 |
total_screens |
int |
连接的显示器总数 |
screen_widths/heights |
int* |
各屏幕宽高 |
screen_x_offsets/y_offsets |
int* |
各屏幕坐标偏移 |
screen_names |
char** |
屏幕接口名(如HDMI-1) |
current_test_round |
int |
当前测试轮次 |
total_test_rounds |
int |
总测试轮次 |
win_time_delay |
int |
窗口创建间隔(ms),默认50 |
工作原理
- 屏幕信息获取: 使用Xrandr扩展查询所有已连接的输出设备及其CRTC信息
- 窗口创建: 每个屏幕创建一个比屏幕尺寸小20像素的窗口,偏移(10,10)
- 定时创建: 窗口按
win_time_delay毫秒间隔依次创建 - 空格键控制: 用户按空格键关闭所有窗口,进入下一轮测试
- 窗口校验: 每轮结束后校验窗口位置和大小(允许±5像素误差)
- 日志记录: 所有操作记录到
screen_demo.log文件
关键函数
| 函数 | 功能 |
|---|---|
get_screen_info() |
通过Xrandr获取所有屏幕信息 |
create_info_window() |
创建单个屏幕的信息窗口 |
create_next_window() |
定时回调,依次创建窗口 |
verify_windows() |
校验窗口位置和大小 |
start_next_test_round() |
开始新一轮测试 |
on_key_press() |
空格键事件处理 |
窗口布局
窗口位置: (screen_x + 10, screen_y + 10)
窗口大小: (screen_width - 20) x (screen_height - 20)
调用方式
./demo
依赖
- GTK+ 3.x
- X11 + Xrandr扩展