40 lines
3.2 KiB
Markdown
40 lines
3.2 KiB
Markdown
# 05 · 标签、窗口、默认页与开发工具
|
||
|
||
## 三层身份
|
||
|
||
| 层次 | 负责什么 | 不负责什么 |
|
||
| --- | --- | --- |
|
||
| 托管 Page / ManagedWindow | 页面内容、打开/关闭、所属窗口、脚本覆盖行为和对象可达性 | 像素级 hover、原生按钮位置 |
|
||
| 已发布 Tab / Frame / Window Envelope | 传输不透明 ID、标题、活动状态、窗口命令和版本 | 保留 VM 堆对象 |
|
||
| TesseraApp / tabs::Motion / winit Window | 绘制、命中、拖动、滚动、原生资源及即时交互 | 执行业务回调、复制业务对象图 |
|
||
|
||

|
||
|
||
[放大 SVG](uml/rendered/windows.svg) · [编辑 UML 源码](uml/windows.puml)
|
||
|
||
该图是**可达性与展示状态的说明**,不是一个源码 enum。关闭原生窗口、移除 Page 展示和回收对象不是同一动作。跨窗口拖放携带来源/目标窗口、布局版本、插入位置等元数据,worker 拒绝过期目标,再更新托管 registry;GUI 不直接移动堆对象。可编辑来源:[windows.puml](uml/windows.puml)。
|
||
|
||
## 已完成的标签行为
|
||
|
||
- 启动有一个默认 Page;`+`、Cmd/Ctrl+T 新建,Cmd/Ctrl+W 关闭活动页。
|
||
- 顶部与左侧宿主区域共用背景;内容区单独作为页面表面,未实现用户暂不需要的左右页面分栏。
|
||
- 40 逻辑像素栏高、32 像素标签、88–208 像素宽度;保留高密度和鼠标/触控板滚动,移除两侧点击箭头。
|
||
- 非活动标签之间有短竖线,活动/hover 邻边按状态隐藏或渐变。
|
||
- 新建/关闭/自动揭示使用独立几何动画;hover 背景、关闭按钮和分隔线使用 160ms 颜色过渡,点击选中即时生效。
|
||
- macOS 原生红黄绿保留系统行为,并与标签中心线对齐;工具栏空白处可拖动和双击放大/还原。
|
||
|
||
`native_chrome.rs` 通过 AppKit 操作现有窗口与系统按钮。双击使用 NSEvent.clickCount 和 NSWindow.performZoom,而不是画一个假的最大化动画。读取系统偏好:最小化/禁用遵循分支;Fill 目前映射到公开 zoom API,没有调用 Chrome 使用的私有 `_zoomFill`,不保证复刻所有新系统平铺边距。
|
||
|
||
## 默认页与四个工具页
|
||
|
||
默认页源码是 [start_page.endor](../../src/bridge/ui_bridge/start_page.endor),位于独立私有模块;创建页、共享计数和组合示例都是真实 Endor 对象操作。它不覆盖用户程序 globals,也没有把四个工具页当作默认内容。
|
||
|
||
Console、Sources、Network、Settings 各自有独立页面实现和窗口内交互状态。目前通过 `ui.developerTools("Console")` 等入口与现有快捷键进入,工具发现菜单仍延后。四页不是新平台业务模块,也不代表已经接入云服务。
|
||
|
||
- Console:真实 VM 输入、输出和本机请求活动;不是只显示介绍的文本区域。
|
||
- Sources:当前源码/Console transcript、AST 与选择;云文件 provider 默认未连接。
|
||
- Network:仅本 Tessera API 请求的有界记录,不是浏览器或操作系统抓包。
|
||
- Settings:内存内主题强调色;没有跨进程持久化。
|
||
|
||
源码位置:`shell/developer_tools/`。宿主管理控件在 `shell/system_ui/`,和 guest 的 Button/Block 类型有明确区别。
|