112 lines
3.1 KiB
Markdown
112 lines
3.1 KiB
Markdown
# Deshab-OS 应用 Linux 预览功能
|
||||
|
|
|
|||
|
|
## 概述
|
|||
|
|
|
|||
|
|
允许在 Linux 开发机上预览 Deshab-OS 应用的 UI 效果。同一份 UI 绘制代码可以在 Linux 上通过 SDL2 后端预览,在 Deshab-OS 上通过 framebuffer 后端运行。
|
|||
|
|
|
|||
|
|
## 架构设计
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌──────────────────────────────────────────────────── ─┐
|
|||
|
|
│ 应用源代码 │
|
|||
|
|
│ (使用 da_draw_char, da_fill_rect 等绘制函数) │
|
|||
|
|
└──────────────────┬──────────────────────────────────┘
|
|||
|
|
│
|
|||
|
|
┌──────────┴──────────┐
|
|||
|
|
│ #ifdef DA_LINUX_PREVIEW │
|
|||
|
|
└──┬──────────────┬────────────┘
|
|||
|
|
│ │
|
|||
|
|
Linux 后端 Deshab-OS 后端
|
|||
|
|
|
|||
|
|
(SDL2) (framebuffer) │ │
|
|||
|
|
X11/Wayland 窗口物理显示器
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 文件结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
CODE/tools/notes/
|
|||
|
|
├── main.c # Deshab-OS 原生应用入口
|
|||
|
|
├── Makefile # Deshab-OS 编译用Makefile
|
|||
|
|
├── notes_preview.c # Linux 预览版(包含完整 dsk_entry 实现)
|
|||
|
|
├── Makefile.linux # Linux 编译用 Makefile
|
|||
|
|
├── desktop_app_linux.h # Linux SDL2 后端
|
|||
|
|
└── README_LINUX_PREVIEW.md # 本说明文档
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 使用方法
|
|||
|
|
|
|||
|
|
### 1. 在 Linux 上编译预览版
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd CODE/tools/notes
|
|||
|
|
make -f Makefile.linux
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 运行预览版
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
./notes_preview
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 退出预览
|
|||
|
|
|
|||
|
|
按 `ESC` 键关闭窗口。
|
|||
|
|
|
|||
|
|
### 4. 清理
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
make -f Makefile.linux clean
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 开发工作流
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
1. 在 Linux 上编辑代码 ↓
|
|||
|
|
2. make -f Makefile.linux 编译预览版
|
|||
|
|
↓
|
|||
|
|
3. ./notes_preview 查看 UI 效果
|
|||
|
|
↓
|
|||
|
|
4. 调试布局和渲染
|
|||
|
|
↓
|
|||
|
|
5. 测试通过后,用原生的 Makefile 编译到 Deshab-OS
|
|||
|
|
↓
|
|||
|
|
6. 在 Deshab-OS 中运行验证
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 支持的 UI 元素
|
|||
|
|
|
|||
|
|
| 元素 | Linux 预览 | Deshab-OS |
|
|||
|
|
|------|-----------|-----------|
|
|||
|
|
| 背景填充 | ✅ | ✅ |
|
|||
|
|
| 矩形填充 | ✅ | ✅ |
|
|||
|
|
| 圆角矩形 | ✅ | ✅ |
|
|||
|
|
| ASCII 字符 | ✅ | ✅ |
|
|||
|
|
| 字符串 | ✅ | ✅ |
|
|||
|
|
| 标题栏 | ✅ | ✅ |
|
|||
|
|
| 状态栏 | ✅ | ✅ |
|
|||
|
|
| 鼠标 光标 | ✅ | ✅ |
|
|||
|
|
|键盘输入 | ✅ | ✅ |
|
|||
|
|
| 鼠标移动 | ✅ | ✅ |
|
|||
|
|
|
|||
|
|
## 扩展到其他应用
|
|||
|
|
|
|||
|
|
要为其他应用(如 fileman, editor, proedit)添加 Linux 预览支持:
|
|||
|
|
|
|||
|
|
1. 复制 `notes_preview.c` 作为模板
|
|||
|
|
2. 修改 `main()` 中的 UI 逻辑
|
|||
|
|
3. 使用相同的 `desktop_app_linux.h
|
|||
|
|
|
|||
|
|
` 后端
|
|||
|
|
|
|||
|
|
## 依赖- SDL2 (`libsdl2-dev` on Debian/Ubuntu)
|
|||
|
|
- GCC 或 Clang
|
|||
|
|
- Make
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. **键盘映射**:SDL2 的键盘扫描码需要映射到 Deshab的 PS/2 扫描码
|
|||
|
|
2. **鼠标行为**:SDL2 鼠标事件转换为 Deshab 的鼠标数据包格式
|
|||
|
|
3. **字体数据**:需要从 `ascii_bitmaps.c` 获取字模数据
|
|||
|
|
4. **性能**:Linux 预览版主要用于 UI 调试,不是完整的功能测试
|