fix(download): 窄档面板加专属预算,首屏露出 head+六枚 chip+说明、实例名回到 56px(M227)

720×760(chips 档)原先走 `TailShare::Shared`:面板与列表各吃 Fill 的一半,面板钉死区
(说明 + 菜单 + 实例名 ≈180px)把它吃穿 ⇒ 滚动区视口 0,head(版本 id + 安装按钮)、
六枚加载器 chip、说明一个像素都不在屏,实例名被挤成 35px 且降部被自身边框裁掉
(M222 D30 五审 `artifacts/m222/visual-verdict-r5-hold.md`)。

改法(把 M222 在 1180 档验证过的「面板先保预算、列表吃整行」落到窄档):

- `TailShare` 拆出第三支 `Narrow`(chips 档 + 面板占高度),`of()` 的三条 arm 与
  `Shared` 的机制注释按 r8 finding 重写(旧文档只写 M125 那一条条件);
- 新增 `CHIPS_STACK` 121 / `CHIPS_LIST_CHROME` 119 / `CHIPS_PANEL_BUDGET` 192 与
  `narrow_rows()`:720/760 下面板先拿预算,列表 = **132px = 3 整行**(M125 像素守门的下限);
- `options::section` 三分支:窄档钉死区**只留实例名**,head / 六枚 chip / 说明 / 版本菜单
  进滚动区(滚动区 120px ≥ 首屏 104,菜单露容器上沿 + 滚动条可见);
- `TailShare::list_height()` 把「列表吃多少」收到一处,两个装配点共用(三栏档行为不变)。

取舍:窄档列表 4 整行 → 3 整行;菜单从钉死改为可滚。理由(459px 里「钉住菜单」+「3 整行
列表」互斥)写在 `rows/tail.rs::CHIPS_PANEL_BUDGET`。

实测(tiny-skia 出图 + 自写 measure.py,DevDocs/artifacts/m227/):
720×760 分隔线 559→514、滚动区 0→120、head 539–578、chips 583–614(32px)、说明 623–634
(8.98:1 浅 / 10.83:1 深)、实例名 668–723 = 56px(inset 12/9/17);
700×760(options-fabric)实例名从「完全不在屏」回到 56px;四条像素守门全绿;
1180×760 浅/深/中 与 1180×900 **逐像素零变化**。
This commit is contained in:
AskaEth committed 2026-11-10 23:07:19 +08:00
1 parent 6c060a09e2
commit a70d5f8010
9 files changed
+331 -159

No files matched your search

+6 -10
View File
@@ -173,7 +173,7 @@ pub fn view<'a>(
view_sized(ui, metrics, model, lang, 760.0)
}
/// 同 [`view`],但显式给**窗口高度**(版本列表要按整行取高,见 [`rows::whole_rows`])。
/// 同 [`view`],但显式给**窗口高度**(版本列表要按整行取高,见 [`rows::TailShare::list_height`])。
pub fn view_sized<'a>(
ui: &'a Ui,
metrics: FrameMetrics,
@@ -247,18 +247,14 @@ fn body<'a>(
rails::three_column(ui, catalog, model, rails, body_height)
} else {
// 三栏不成立(可用宽 < 600):类型与主版本原样退回顶部 chips,列表吃掉整条可用宽。
// 高度分法跟着档位走:chips 档多花两行 chip,面板必须收回自己的一半(M125 缺陷 1)。
// 高度分法跟着档位走:chips 档多花两行 chip,面板必须收回自己的预算(M125 缺陷 1)。
// M227:这一档也改成「面板先保预算、列表按整行吃剩下的」——预算比三栏档紧得多
// (`rows::CHIPS_PANEL_BUDGET` 192 vs `PANEL_BUDGET` 300),清单见 `rows/tail.rs`。
let share = rows::TailShare::of(rails.tier, &install::panel_state(model));
column![
rails::stacked_chips(ui, catalog, model),
divider::full(ui),
rows::content(
ui,
catalog,
model,
rows::TailShare::of(rails.tier, &install::panel_state(model)),
// chips 档不按整行取高:实测那里已经是 4.0 整行、零残影,别动。
None,
),
rows::content(ui, catalog, model, share, share.list_height(body_height)),
]
.spacing(ui.space(Space::X2))
.width(Length::Fill)