docs(app-iced): 扫掉 r5 的五处文档漂移(返工链留下的旧描述)

1. install.rs 模块文档:删掉「钉页脚本轮没做」(6f87c8b 已做:钉死区现在是菜单 + 实例名),
   三层滚动的第 3 层改引 `version_menu_height`(VERSION_ROWS 已改),并写明「选项区自己滚」
   这层是 M222 之后才有的、`Options` 态不再套外层 scrollable(只有 `Install` 态用)。
2. rows.rs:五个 loader chip → 六枚;「实例名那一格滚一下就到」→ 已钉死;分法描述改成
   「面板先保预算 + 列表按整行」(PANEL_BUDGET / whole_rows)。
3. rows/tail.rs 的 TailShare 表:两半各 Fill → 面板先吃预算;补上「带加载器版本列表」这一例外行;
   判据注释改成「像素由 window_height 算」(view_sized 已接)。
4. rows/tail.rs 的 M222 分支注释:删「仍欠一项 S1b」(107d619 已修、26ec3f4 已换预算公式),
   写清现在 1180×760 = 176px/4 行、900 = 308px/7 行。
5. options/view.rs 控件树示意:改成当前真实顺序(滚动区 = head + chips;钉死区 = 说明/标签 +
   菜单 + 实例名),并补上钉死档另走一条路的说明。
This commit is contained in:
AskaEth committed 2026-11-10 19:34:15 +08:00
1 parent 7ea3dbf8f0
commit e2e3c39f61
4 files changed
+40 -34

No files matched your search

+14 -10
View File
@@ -14,22 +14,26 @@
//! (`rows::TailShare::Shared`)——但只在**面板真的占高度**时(`Options` / `Install`);
//! 只画一行提示的 `Hint` 态仍钉死,否则 8 个版本的列表会被砍到 4 行(r1 复审 P2-1)。
//!
//! ## 已知风险:chips 档最多会同时出现**三层**滚动(r1 复审 P3-2,未验)
//! ## 面板的滚动分层(M222 D30 六轮打磨后的实际形态)
//!
//! ```text
//! 版本行列表 scrollable ← 第 1 层(任何档位都在)
//! └ 面板 scrollable(chips 档才有) ← 第 2 层
//! └ 加载器版本 menu 的 scrollable ← 第 3 层(`options/view.rs` 的 `VERSION_ROWS`)
//! └ 选项区 scrollable(Shared 档才有) ← 第 2 层(`options/view.rs::section`,只装 head + chips)
//! └ 加载器版本 menu 的 scrollable ← 第 3 层(`options/view.rs::version_menu_height`)
//! ```
//!
//! **鼠标落在第 3 层上滚轮会不会冒泡到第 2 层,本仓没有实测通道**(静态图拍不到滚动嵌套)。
//! iced 的 `scrollable` 在指针悬停于内层时由内层消费滚动,所以「滚到底之后继续滚会带动外层」
//! 属于**未验证行为**;两个方向的坏结果分别是「面板卡住滚不动」与「一滚就跳到外层」。
//! **选项区自己滚**这一层是 M222 S7/S1b 之后才有的:`rows::content` 对 `PanelState::Options`
//! 不再整块套外层 `scrollable`(只有 `Install` 态还用外层那层)。
//!
//! 缓解方案(本轮**没做**,理由:不是一处小改)——把「实例名」那一格从面板的滚动区里移出去,
//! 做成面板的固定页脚:那要把 `options::section` 拆成「可滚的上半块 + 钉死的下半块」,
//! 动 `options/view.rs` / `install.rs` / `rows.rs` 三处,而且改完仍然**无法**验证滚轮冒泡
//! (没有通道),只是把风险从「某一格被挡」换成「面板永不挡那一格」。所以先登记为已知风险。
//! **鼠标落在内层上滚轮会不会冒泡到外层,本仓仍没有实测通道**(静态图拍不到滚动嵌套)。
//! iced 在指针悬停于内层时由内层消费滚动,所以「滚到底之后继续滚会带动外层」属**未验证行为**;
//! 两个方向的坏结果分别是「面板卡住滚不动」与「一滚就跳到外层」。
//!
//! ## 钉死页脚**已经做了**(M222 `6f87c8b` 起)
//!
//! `options::section` 现在是「可滚的上半块 + 钉死的下半块」:钉死区内是**加载器版本菜单 +
//! 实例名输入框**(D30 四审:菜单也钉住,否则它正好落在裁切线上)。所以「实例名被滚走」
//! 这个风险已经消除,只剩上面那条滚轮冒泡未验。
//!
//! ## 只有意图,没有乐观回显
//!
@@ -3,18 +3,21 @@
//! ## 版面(424 正文列里的四段)
//!
//! ```text
//! 1.21.9 [安装]
//! 安装选项
//! ── 滚动区(Shared 档)────────────────────────────
//! 1.12.2 [安装]
//! [原版][Forge][NeoForge][Fabric][Quilt][LiteLoader] ← 六枚一行
//! LiteLoader 只叠在原版上 —— 要叠 Forge 请运行:… ← 中性说明(只有 LiteLoader 有)
//! 加载器版本 ← 只在选了加载器时出现
//! ┌ 0.16.5 ┐ ← 官方那份列表(menu + 滚动,最多看两行项)
//! │ 0.16.4 │
//! ── 钉死区 ──────────────────────────────────────
//! Vanilla parent only — Forge goes through the CLI ← 说明行;没有说明时是「加载器版本」标签
//! ┌ 1.12.2-SNAPSHOT ┐ ← 官方那份列表(menu + 滚动,按条目数占高:1 条 64 / 2 条 112)
//! └───────────────────┘
//! [实例名 ]
//! NeoForge 需要 Minecraft 1.20.1 或更新 ← 不兼容时(Error 色)
//! ```
//!
//! - **钉死档**(原版等不带版本列表的面板)走另一条路:标签、说明、菜单、实例名都在同一列里
//! 顺序铺开(`04` 基线图就是这一档,不能改);
//! - 不兼容时的原因行(Error 色)在滚动区末尾;
//! - 说明只有 LiteLoader 有(`Key::DownloadOptionsLiteLoaderVanillaOnly`)。
//!
//! ## 为什么加载器是**六枚一行**(M222 D30 r1 实测订正)
//!
//! 这里原先写「五家一起排会溢出 ⇒ 折成两行」,那是 M105 的推算。D30 的实测图(1180×760,
+5 -3
View File
@@ -25,12 +25,14 @@
//! 可视高(行高 44),版本号一个字都读不出来,用户想换版本点不到。
//!
//! 病根是 chips 档比三栏档多花两行 chip(tabs 48 + chips 48 + 两处间距),而选项区那一块
//! 固定 ≈316px(版本行 40 + 标题 16 + 五个 loader chip 34 + 标题 16 + 菜单 112 + 实例名 56)。
//! 固定 ≈316px(版本行 40 + **六枚** loader chip 34 + 菜单 + 实例名 56;M222 之后菜单与实例名
//! 都在面板钉死区,见 `options/view.rs::section`)。
//! 同样的 760 高窗口里:三栏档列表还剩 158px(3 整行),chips 档只剩 18px。
//!
//! 修法是 [`TailShare`] 两档:三栏档照旧钉死(面板整块在屏内),chips 档**且面板真的占高度**
//! (选项区展开 / 安装中)时改成两半各 `Fill`——列表拿到 ≈182px(**4 整行**),面板拿到同样一半、
//! **自己可滚**(顶端那个实心「安装」按钮与五个 loader chip 仍在屏内,实例名那一格滚一下就到)。
//! (选项区展开 / 安装中)时改成「**面板先保预算、剩下按整行给列表**」
//! (`tail::whole_rows` + `PANEL_BUDGET = 300`):1180×760 下列表 **176px = 4 整行**,
//! 面板拿走其余(≈307px)。实例名那格**已经钉死**在面板底部、不需要滚(M222 `6f87c8b`)。
//! 「刚进页面还没选版本」(`Hint`,面板只有一行提示)**不共享**:那一态 main 本来就有
//! **7 整行**在屏(不是 8:第 8 条墨迹其实是 `Pick a version, then install` 那句 hint,
//! 横向范围对不上版本号;700×760 上放 8 行要 352px,实测只剩 309~322px),五五分会砍成
+11 -14
View File
@@ -13,18 +13,18 @@ use crate::pages::download::install::PanelState;
///
/// | 档 | 分法 | 为什么 |
/// |---|---|---|
/// | `Wide` / `Narrow` / `Compact` | [`TailShare::Pinned`]:面板按内容高钉在底部,列表吃剩下的 | 竖栏档在 760 高的窗口里列表还剩 158px(3 整行),面板整块在屏内——两样都对 |
/// | `Chips` + 面板**占高度**(选项区展开 / 安装中) | [`TailShare::Shared`]:两半各 `Fill`,面板自己可滚 | chips 档比三栏档多花两行 chip(tabs 48 + chips 48 + 间距),列表只剩 **18px**(M123 实测 0.4 行),面板 316px 全在屏内也没用——版本号读不出来就换不了版本 |
/// | `Wide` / `Narrow` / `Compact` + 面板**不带**加载器版本列表 | [`TailShare::Pinned`]:面板按内容高钉在底部,列表吃剩下的 | 原版面板矮(`04` 实测列表 6 行),整块在屏内 |
/// | 任何档 + 选项区**带加载器版本列表** | [`TailShare::Shared`]:面板先吃 [`PANEL_BUDGET`],剩下按整行给列表([`whole_rows`]) | 带版本列表的选项区实高 ≈307px,对半分(旧规则)把列表压到 110px;现在 1180×760 是 **176px = 4 整行** |
/// | `Chips` + 面板**占高度**(选项区展开 / 安装中) | [`TailShare::Shared`] | chips 档比三栏档多花两行 chip,列表只剩 **18px**(M123 实测 0.4 行)——版本号读不出来就换不了版本 |
/// | 任何档 + 只画 `Hint`(没选版本,面板只有一行) | [`TailShare::Pinned`] | 一行提示不值得对半分:700×760 下 main 是 **7 整行**在屏(不是 8——第 8 条墨迹其实是 `Pick a version, then install` 那句 hint,横向范围对不上版本号;要放 8 行得 352px,实测只剩 309~322px),对半分只剩 **4 整行**、下面留 160px 空白(r1 复审 P2-1,r2 修回 7) |
///
/// 判据是**档位**不是高度:页面的模型里只有 `window_width`(`pages/model.rs`),窗口高度
/// 没有接进页面(要接得改 `pages/mod.rs` 的入口签名,超出本页的边界)。所以这里按「哪一档
/// 的竖排 chrome 会把列表压没」来分,并在报告里登记这条判据的边界。
/// 分高方式按「档位 + 面板形态」判;**具体像素**由窗口高度算(`pages/download.rs::view_sized`
/// 把 `model.window_height` 经 `frame::body_height` 传下来,见 [`whole_rows`])。
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum TailShare {
/// 面板钉在底部(三栏档)。
Pinned,
/// 面板与列表各吃一半(chips 档)。
/// 面板先吃预算、列表按整行吃剩下的(带版本列表的选项区 / chips 档占高度时)。
Shared,
}
@@ -44,14 +44,11 @@ impl TailShare {
(VersionRailTier::Chips, PanelState::Options(_) | PanelState::Install(_)) => {
Self::Shared
}
// M222 D30 r1 S1 / r2 S7:**带加载器版本列表**的选项区在任何档位都太高。
// 三栏档(1180×760)实测:修前面板 204→372px,版本列表 6.0 行(278px)被压到
// 2.4 行(110px,底缘切在第三行图标上);改成 Shared 之后版本列表 **245px = 5.29 行**、
// 面板 237px(分隔线 y=498)。面板因此变矮,实例名会被挤出首屏 ⇒ 同一轮把它
// **钉成面板页脚**(`install::panel_with` 的 `shared` 分支 + `options::section`)。
// 仍欠一项:245px 不是行高整数倍,列表底缘仍切在第 6 行中间(S1b/S9)。
// 修它要把「分给列表的高度」从 `pages/download.rs` 传进来做 floor 取整
// (`responsive` 在 Fill 子项上拿不到确定高度,实测无效,已回退)。
// M222 D30 r1/r2:**带加载器版本列表**的选项区在任何档位都太高。三栏档修前
// 面板 204→372px,版本列表被压到 2.4 行(110px)且底缘切在第三行图标上。
// 现在走 Shared:面板先吃 `PANEL_BUDGET`,列表按**整行**取(`whole_rows`,
// 标定 44/97)⇒ 1180×760 列表 **176px = 4 整行**、面板 ≈307px;
// 900 档 308px = 7 整行。实例名与版本菜单都在面板钉死区(`options::section`)。
(_, PanelState::Options(options)) if options.has_loader_versions() => Self::Shared,
_ => Self::Pinned,
}