54 lines
1.9 KiB
Markdown
54 lines
1.9 KiB
Markdown
# 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 |
|
|
|
|
## 工作原理
|
|
|
|
1. **屏幕信息获取**: 使用Xrandr扩展查询所有已连接的输出设备及其CRTC信息
|
|
2. **窗口创建**: 每个屏幕创建一个比屏幕尺寸小20像素的窗口,偏移(10,10)
|
|
3. **定时创建**: 窗口按`win_time_delay`毫秒间隔依次创建
|
|
4. **空格键控制**: 用户按空格键关闭所有窗口,进入下一轮测试
|
|
5. **窗口校验**: 每轮结束后校验窗口位置和大小(允许±5像素误差)
|
|
6. **日志记录**: 所有操作记录到`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)
|
|
```
|
|
|
|
## 调用方式
|
|
```bash
|
|
./demo
|
|
```
|
|
|
|
## 依赖
|
|
- GTK+ 3.x
|
|
- X11 + Xrandr扩展
|