文档 v1.0 desktop/interaction.md

交互与动效设计

全部动效时长、曲线与弹簧参数的最终规格。wmshell 与 compositord 两端数值必须一致,以这份为准。

桌面全部动效时长、曲线、弹簧参数与交互行为的最终规格。动效参数由 wmshell/QML 侧与 compositord 材质过渡共用,两端数值必须一致,以本文档为准。

  • 文档版本:1.0
  • 定稿日期:2026-09-05

动效 token

token 用途
duration.instant 100ms 悬停着色、按压反馈
duration.fast 200ms 菜单展开、指示点变化
duration.normal 300ms 面板滑入、窗口切换动画
duration.slow 600ms 主题深浅切换(全 token 连续插值)
curve.standard cubic-bezier(0.2, 0, 0, 1) 一般过渡
curve.emphasized cubic-bezier(0.3, 0, 0, 1) 面板、主题、窗口动画
spring.dock-zoom stiffness 420 / damping 26 Dock 图标邻近放大
spring.window-snap stiffness 380 / damping 30 窗口最大化/恢复、对齐吸附

Dock

  • 悬浮玻璃岛,水平居中;图标 44px、间距 8px,规格见 visual-language.md。
  • 邻近放大:指针 80px(dock.zoom-radius)范围内图标放大,最大 1.35×,按指针距离高斯衰减影响邻居,弹簧 spring.dock-zoom。
  • 点击行为:未运行则启动;有窗口则聚焦最近的窗口;窗口全部最小化则恢复并聚焦。
  • 运行中应用图标下方 4px 指示点,聚焦窗口应用为 8px 长条。
  • 启动器:Dock 末位 ⊕ 图标,打开全屏应用网格(scrim 压暗 + 玻璃图标格,Super 同效)。

顶部状态条

区域 位置 行为
状态区 左段 网络/音量/电池聚合图标;点击下拉快捷中心(Wi-Fi、蓝牙、音量滑杆、亮度滑杆)
时钟 中段 时间与日期;点击展开通知中心 + 日历
托盘 右段 后台应用托盘图标
电源 右段末 点击弹出锁屏/重启/关机菜单

窗口操作(Soke Window Manager 策略)

操作 规格
拖动 按住标题栏拖动;拖至屏幕上缘停留 400ms 预览最大化,松手落位,下拉即恢复
缩放 八向边缘热区 6px;最小窗口 320×200
最大化/恢复 双击标题栏,或 Super+↑ / Super+↓,弹簧 spring.window-snap
控制圆点 右上三枚 12px 玻璃圆珠:关闭、最小化、最大化;悬停 200ms 内着色(关闭 #E5484D、最小化 #F5A524、最大化 #46A758),着色与点击热区同步,无需等待
聚焦 点击聚焦并置顶;「焦点跟随指针」为设置可选项,默认关闭
工作区 4 个固定工作区;Super+Ctrl+←/→ 或三指横滑切换;窗口可指定固定在某工作区
边缘对齐 拖动至左/右缘停留 400ms 预览半屏平铺,松手落位

手势(inputd 识别后转发)

手势 动作
三指横滑 切换工作区,桌面随位移跟手,松手按位移过半判定
两指滚动 内容滚动
捏合 映射 Ctrl+滚轮(缩放)

快捷键

动作
Super 启动器
Super+D 显示桌面
Super+↑ / ↓ 窗口最大化 / 恢复
Alt+Tab 窗口切换(按聚焦时间倒序)
Super+Ctrl+← / → 切换工作区
Ctrl+Alt+T 终端
PrtSc 截图工具(第二期实现)

通知

  • 位置:屏幕右上角、顶部状态条下方滑入(400ms,curve.emphasized)。
  • 卡片:玻璃材质(高级别),应用图标 + 标题 + 正文两行截断 + 操作按钮至多 2 个。
  • 停留 5s 后自动收入通知中心;鼠标悬停暂停计时。
  • 通知中心:点击时钟区域展开,含日历与历史通知,逐条清除与全部清除。
  • 勿扰:通知中心内一键开关;开启后仅记录不弹出。
  • 同一应用连续通知合并计数,卡片顶部显示 ×N。

主题切换

深/浅档切换时,全部色彩与材质 token 在 float 域逐帧连续插值 600ms(duration.slow),无闪屏、无档位跳变;判定与滞回机制见 visual-language.md。