Files

205 lines
5.6 KiB
Markdown
Raw Permalink Normal View History

2026-07-29 10:26:25 +08:00
# 设计Winux-Kate桌面UI
2026-07-31 13:53:49 +08:00
## 需求
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
Deshab 桌面完全复刻 Winux-Kate(`D:\Code\Winux-Kate`)结构,不是仿照。
2026-07-29 10:26:25 +08:00
---
2026-07-31 13:53:49 +08:00
## Winux-Kate 技术栈
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
- 前端: React + TypeScript + Vite
- 后端: Rust + Tauri
- 核心组件: `window_manager.rs`, `apps.rs`, `DesktopPage.tsx`, `TaskView.tsx`
- 样式: `theme.css`, CSS Modules
2026-07-29 10:26:25 +08:00
---
2026-07-31 13:53:49 +08:00
## Kate 桌面结构
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
### 三层布局
2026-07-29 10:26:25 +08:00
```
2026-07-31 13:53:49 +08:00
┌──────────────────────────────────────────┐
│ Topbar (34px) │
│ 品牌 | WS-1|0 工作区 | DASH/IDE/DESK | PG│
├──────────────────────────────────────────┤
│ Page Host │
│ (DASHBOARD / IDE / DESKTOP / Custom) │
├──────────────────────────────────────────┤
│ Statusbar / Taskbar (24px) │
└──────────────────────────────────────────┘
2026-07-29 10:26:25 +08:00
```
2026-07-31 13:53:49 +08:00
### 页面结构
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
| 页面 | Kate 组件 | Deshab 实现 |
|------|-----------|-------------|
| **1.DASHBOARD** | 四面板布局 | TERM-01/02 + EDITOR + FILES |
| **2.IDE** | `.ide-tabs` + dot + embed-empty | dot(39FF14) + +NEW IDE 按钮 + credit |
| **3.DESKTOP** | DesktopGrid 图标 + 任务栏 | 左上网格(104px列宽,18px gap,24px pad) + 窗口 + 任务栏 |
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
### 顶栏元素
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
- 品牌: DESHAB DEAICUP STUDIO
- 工作区切换: WS-1\|0, WS-2\|1 等
- 页面切换按钮: DASH / IDE / DESK
- PG 时钟
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
### 任务栏(DESKTOP 页)
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
- 窗口项(最大120px宽度)
- ADOPT(收纳 = 所有窗口收归当前工作区并取消最小化)
- 署名 DEAICUP
- EXIT 按钮(KS_DANGER 0xFFFF4D6D 红色)
2026-07-29 10:26:25 +08:00
---
2026-07-31 13:53:49 +08:00
## Kate 色值体系(deshab_ui.h)
2026-07-29 10:26:25 +08:00
```c
2026-07-31 13:53:49 +08:00
/* 背景层级 */
#define KS_BG_PRIMARY 0xFF02040Au // 深空黑
#define KS_BG_SECONDARY 0xFF0A1428u // 次级背景
#define KS_BG_TERTIARY 0xFF101C30u // 三级背景
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
/* 文本色 */
#define KS_TEXT_PRIMARY 0xFFE8F4FCu // 接近纯白
#define KS_TEXT_DIM 0xFF90B0C8u // 暗文本(对比度10.8:1)
#define KS_TEXT_INVERT 0xFF02040Au // 反色
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
/* 强调色 */
#define KS_ACCENT 0xFF00E5FFu // 霓虹青(主强调)
#define KS_ACCENT2 0xFF39FF14u // 霓虹绿(dot标识)
#define KS_ACCENT_DIM 0xFF2A4A5Au // 暗青(hover)
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
/* 边框色 */
#define KS_BORDER 0xFF2A6070u // 对比度8.2:1
#define KS_BORDER_FOCUS 0xFF00E5FFu
#define KS_BORDER_DIM 0xFF1A2A40u
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
/* 状态色 */
#define KS_DANGER 0xFFFF4D6Du // EXIT按钮
#define KS_WARN 0xFFFFCC00u
2026-07-29 10:26:25 +08:00
```
2026-07-31 13:53:49 +08:00
### 优化后的视觉效果
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
- 面板: 仅保留背景+边框+标题栏(移除光晕+扫描线)
- `du_kate_glow_border()` 简化为单层边框
- 窗口标题栏: 纯色替代渐变
- hover 状态: 同时改变背景和边框
- active 状态: 强调色背景 + 反转文字
2026-07-29 10:26:25 +08:00
---
2026-07-31 13:53:49 +08:00
## Boot 打字机动画
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
- 标题每字符: busy_delay(2000000)
- 副标题停顿: busy_delay(2500000)
- 打字机每字符: busy_delay(125000)
- 最后停留: busy_delay(10000000)
2026-07-29 10:26:25 +08:00
---
2026-07-31 13:53:49 +08:00
## 双缓冲消除闪烁
2026-07-29 10:26:25 +08:00
```c
2026-07-31 13:53:49 +08:00
u32 *g_real_fb; // 真实 framebuffer
// g_fb.fb 指向 SPRITE_BUF_ADDR (0x7000000) sprite buffer
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
void flip_buffer(void); // 全屏 redraw 后一次性复制
void flip_rect(x, y, w, h); // 仅光标移动时局部复制(24x24)
2026-07-29 10:26:25 +08:00
```
2026-07-31 13:53:49 +08:00
主循环两条路径:
- `need_redraw` → 全屏 redraw + flip_buffer()
- `moved` → 局部 flip_rect()
2026-07-29 10:26:25 +08:00
---
2026-07-31 13:53:49 +08:00
## 性能优化
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
### 1. 亮度调整延迟应用
2026-07-29 10:26:25 +08:00
```c
static int g_bright_applied = 100;
2026-07-31 13:53:49 +08:00
// g_bright >= 100 时跳过;g_bright == g_bright_applied 时跳过
// 仅在亮度变化时处理全屏(从60Hz降到1-2次/分钟)
2026-07-29 10:26:25 +08:00
```
2026-07-31 13:53:49 +08:00
### 2. 终端增量渲染
2026-07-29 10:26:25 +08:00
```c
typedef struct {
2026-07-31 13:53:49 +08:00
u8 dirty_rows[TERM_MAX_ROWS]; // 脏行标记
int any_dirty; // 全局脏标记
2026-07-29 10:26:25 +08:00
} bash_state;
2026-07-31 13:53:49 +08:00
// any_dirty=0 时跳过绘制;只绘制 dirty_rows[r]=1 的行
2026-07-29 10:26:25 +08:00
```
2026-07-31 13:53:49 +08:00
### 3. 脏矩形渲染
2026-07-29 10:26:25 +08:00
```c
2026-07-31 13:53:49 +08:00
#define MAX_DIRTY_RECTS 16
typedef struct { int x, y, w, h, active; } dirty_rect;
// merge_dirty_rects() 合并为包围盒
// 光标移动: 只 flip 24x24 区域
// 窗口拖拽: flip 窗口区域
2026-07-29 10:26:25 +08:00
```
2026-07-31 13:53:49 +08:00
### 4. 简化视觉效果
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
- 禁用扫描线: `du_kate_scanlines()` 改为空函数
- 消除窗口圆角: `DU_RADIUS_MD/LG` 从 8/12 改为 0
- 渐变缓存: 避免重复计算
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
### 5. 加速内存复制
2026-07-29 10:26:25 +08:00
```c
2026-07-31 13:53:49 +08:00
// flip_buffer() 使用 rep movsq 批量复制
__asm__ volatile("rep movsq" : "+D"(dst), "+S"(src), "+c"(total_u64) : : "memory");
2026-07-29 10:26:25 +08:00
```
---
2026-07-31 13:53:49 +08:00
## 关键实现细节
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
### FILES 面板
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
- 过滤 ELF 可执行文件和 FIRSTINI 前缀
- 保留 user 文件: USER.CON, NETCONF.CNF, FIRSTINT.XT
- 标题: `FAT32:/USER`
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
### 桌面图标网格
2026-07-29 10:26:25 +08:00
```c
2026-07-31 13:53:49 +08:00
#define KATE_ICON_GAP 16 // 图标间隙(原18,优化后16)
// 左上网格: 104px 列宽, 从左→右排列换行
// 图标边框: KS_ACCENT(00E5FF) 青色
2026-07-29 10:26:25 +08:00
```
2026-07-31 13:53:49 +08:00
### 右键菜单
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
- "移到工作区"菜单**排除当前工作区**
- 无其他工作区时显示空态
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
### 自定义页(第 4+ 页)
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
- ide-tabs 栏: dot + 页名 + +NEW INSTANCE 按钮 + hint + credit
- 自定义页 id 从 4 开始(内置3页: DASHBOARD/IDE/DESKTOP)
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
### DASHBOARD 面板比例
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
- 左侧终端: 35%(原42%,优化后缩窄)
- 右侧 FILES/EDITOR: 65%(原58%,优化后加宽)
2026-07-29 10:26:25 +08:00
---
2026-07-31 13:53:49 +08:00
## 验证结果
2026-07-29 10:26:25 +08:00
2026-07-31 13:53:49 +08:00
- desktop.elf 编译零警告,140312 bytes(BSS 正确分离)
- QEMU 验证: 四页面 Ctrl+Tab 切换正确
- 页面按钮: DASH/IDE/DESK(精简后)
- 双缓冲: 鼠标移动和滑块拖动无闪烁