src-gpui/src/frontend 包含窗口布局、虚拟表格、图表、菜单、对话框和各页面。Desktop 持有界面状态,采样与系统操作由原生宿主调度。
数据、排序与偏好
model 以 PID 和创建时间标识进程,生成应用分组与进程树。各页面独立保存选择、筛选和排序。collation 用 Windows 的 ICU 按界面语言生成排序键,数字按数值比较,字母忽略大小写与重音。暂停排序期间行位置固定,数值继续更新。
lists 生成服务、启动项与连接的表格行。连接数据每两秒读取一次,进程名称和图标来自采样。后台线程根据新连接或所属进程变化准备行,界面线程接收结果。再次进入时,筛选、搜索、排序和备注仍匹配的缓存可直接显示。
界面偏好在内存中立即生效,由后台线程写入磁盘,退出前完成写入。tableSort.<表> 保存各表排序,services.filter 和 connections.filter 分别保存服务与连接的筛选条件。
表格、滚动与提示
tables 用 DataTable 虚拟化可见行。进程表的名称列固定在左侧,其他列按保存的顺序排列。自动宽度测量表头、汇总值和最多 96 行可见内容,同一布局范围内只扩宽。拖列表头或滚动期间冻结宽度,汇总值在各自列内裁剪并同步滚动。
scrollbar 从滚动句柄取得范围与偏移,在内容边缘绘制滑块。拖动可直接定位,单击轨道翻过 87.5% 的视口。虚拟表格的纵向滚轮、横向滚轮和 Shift+滚轮共用平滑滚动,内层到达边缘后再由外层处理。实现见 GPUI 补丁。
tips 由每张表统一跟踪指针,只让指针下的行报告名称、读数或说明的位置。停留 500 ms 后由独立视图显示提示;按键、按下鼠标、滚动或离开时隐藏。菜单由 menus 在指针附近布局,靠近窗口边缘时调整方向。方向键可移动焦点和进入子菜单,Esc 返回。
区域绘制与曲线
regions 分别缓存标题栏、导航、页面、表格和进程页的概况带与详情窗格。区域内的滚动或悬停只重绘相关区域。服务、启动和连接页若只有状态栏变化,页面继续重放缓存。新的列表行、传感器状态、弹窗或布局变化按需重建相应内容。
切换页面和性能设备时,先按目标位置布局,绘制时再滑入。详情窗格和多核网格用实时变换重放画面,图表与所属区域在同一帧移动和裁剪。ChartLayer 在滚动帧平移缓存的曲线纹理,更新数据或绘制样式时重新栅格化。图层、显存预算和量程变化见曲线与时间轴。
对话框与输入
对话框打开时居中。异步查询返回或展开说明时,顶部保持在原位置,高度在 167 ms 内过渡到新值;达到窗口可用高度后在框内滚动。调整窗口大小会重新居中。
widgets::text_field 统一文本框的焦点与边框样式。数字框支持单击和长按增减,方向键步进后立即提交。进程页的 SearchComposer 在列表获得文字输入时为输入法保留输入上下文。开始组字后将文字和焦点交给搜索框;取消时恢复原内容与焦点。弹窗、菜单与已聚焦的输入框优先处理按键。
缩放与排版
appearance 使用 Window::set_content_zoom 将界面缩放与 Windows DPI 合并,布局、绘制和命中测试共用坐标。字体大小按 13 px 基准单独换算。概况带根据卡片宽度调整大号数字和单位,辅助指标在卡片内分配空间。窄窗口的标题栏先收起按钮文字,再将页面控件和搜索框分行排列。
theme 从 theme.json 读取色板、字体和行高。西文使用 Segoe UI Variable,大号数字使用 Display 光学尺寸,简体中文回退至微软雅黑 UI。选中标签和分组标题使用 500 字重。提示框单独设置系统提示字体和行高。正文默认行高为字号的 1.4 倍,换行采用 UAX #14 与 ICU 的中日文调整规则。
云母窗口将 DirectWrite 的子像素覆盖率按亮度加权为灰阶遮罩,合成时应用系统对比度和伽马。整窗实色模式可按系统设置使用 RGB ClearType。区域级 ClearType 方案及取舍见窗口外观。
inline 用等宽占位将按钮和键帽嵌入一行文字,使控件随文本整体换行。数字与单位、标题与型号按首行基线对齐,基线取整到设备像素。相关补丁见 GPUI 和 Windows 平台层。