docs(app-iced): 按 TailShare::of 的真实分支清扫下载页面板注释(r7 三条 + 全量扫)
(i) 上轮新引入的错误声明 rescope:错误行「恒为 None / 滚动区只有 head+chips」只在**三栏档 +
带版本列表**这一支成立(has_loader_versions() 要求 problem.is_none())。**chips 档**(可用宽
< 600,TailShare::of 对 Options/Install 无条件 Shared)里 problem 可以是 Some(静态不兼容 /
列表取不到 / 空表三种),错误行会进滚动区且可能被滚走;show_versions() 为假时钉死区只剩
实例名。install.rs 与 options/view.rs 都按这两支分别写清,并注明该行为域由 M227 重设计。
(ii) install.rs 的「显式给对半分档标志」「对半分:面板吃满自己那一半」改成预算优先口径
(与同文件十行上方「不是早期的对半分」不再矛盾)。
(iii) rows.rs 三处:三栏档「照旧钉死」限定为「**不带版本列表**的选项区」;`content` 的 share
说明改成引用 TailShare::of 的真实两支,不再复述「三栏钉死 / chips 各吃一半」;
「只有对半分那一档才按整行取高」改成「只有 Shared(面板先保预算)那一档」。
全量扫附带修正:tail.rs 的 ROW_PITCH / PANEL_BUDGET 账(760 例改成 176/437、900 改成 569;
预算拆成滚动区 76 + 钉死区 153);options/model.rs 的 has_loader_versions 文档改成预算口径。
零代码零测试变更。
This commit is contained in:
1 parent
409c742aa8
commit
a16aadd467
5 files changed
+38
-23
No files matched your search
@@ -117,14 +117,21 @@ pub(super) fn panel_state(model: &Download) -> PanelState<'_> {
|
||||
/// - **滚动区**:head(版本 id + 安装按钮)+ 六枚加载器 chips;
|
||||
/// - **钉死区**:说明行(有说明时;否则是「加载器版本」标签)+ 版本菜单 + 实例名输入框。
|
||||
///
|
||||
/// 菜单与说明分别是 D30 四审 / 八审搬进钉死区的(裁切位置由钉死区高度决定,与窗宽无关);
|
||||
/// 错误行在 Shared 档恒为 `None`(`OptionsView::problem` 只在静态不兼容时出现,而那时
|
||||
/// 不画版本菜单、走的是不滚动的那一路),所以滚动区里只会有 head + chips 这两块。
|
||||
/// 菜单与说明分别是 D30 四审 / 八审搬进钉死区的(裁切位置由钉死区高度决定,与窗宽无关)。
|
||||
///
|
||||
/// **两个 Shared 分支的现实不同,别一概而论**(`rows/tail.rs::TailShare::of`):
|
||||
///
|
||||
/// - **三栏档 + 带加载器版本列表**:`has_loader_versions()` 要求 `problem.is_none()`,所以这一支
|
||||
/// 滚动区里**只会有 head + chips**,错误行与它不可达;
|
||||
/// - **chips 档(可用宽 < 600)**:`TailShare::of` 对 `Options`/`Install` 无条件 `Shared`,
|
||||
/// `problem` **可以是** `Some`(静态不兼容 / 版本列表取不到 / 空表三种),那时错误行**会在
|
||||
/// 滚动区里出现**、可能被滚走;`show_versions()` 为假时钉死区只剩实例名(没有菜单、也没有
|
||||
/// 说明那一行)。这个行为域正好是 M227 要重新设计的地方,这里只如实记录现状。
|
||||
pub(super) fn panel<'a>(ui: &'a Ui, catalog: Catalog, model: &'a Download) -> Element<'a, Message> {
|
||||
panel_with(ui, catalog, model, false)
|
||||
}
|
||||
|
||||
/// 同 [`panel`],但显式给「对半分档」标志(只有 `rows::content` 需要)。
|
||||
/// 同 [`panel`],但显式给「面板先保预算」这一档的标志(只有 `rows::content` 需要)。
|
||||
pub(super) fn panel_with<'a>(
|
||||
ui: &'a Ui,
|
||||
catalog: Catalog,
|
||||
@@ -141,7 +148,8 @@ pub(super) fn panel_with<'a>(
|
||||
let panel = container(content)
|
||||
.width(Length::Fill)
|
||||
.padding(Padding::from([ui.space(Space::X3), 0.0]));
|
||||
// 对半分档:面板吃满自己那一半,选项区的 `scrollable` 才有确定高度可吃。
|
||||
// 面板先保预算档:面板吃满自己那份(`rows/tail.rs::whole_rows` 之后剩下的高度),
|
||||
// 选项区的 `scrollable` 才有确定高度可吃。
|
||||
if shared {
|
||||
panel.height(Length::Fill).into()
|
||||
} else {
|
||||
|
||||
@@ -313,7 +313,7 @@ impl OptionsView {
|
||||
/// 判据与 `view::show_versions` 同源(原版没有、静态不兼容没有、取不到也没有),
|
||||
/// 但这里是**纯模型查询**:`rows::TailShare::of` 要在装配前就知道面板会不会长高。
|
||||
/// 用途(M222 D30 r1 S1):带版本列表的选项区在三栏档实测把版本列表从 6 行压到 2.4 行,
|
||||
/// 于是这类面板改走「列表与面板对半分、面板自己可滚」。
|
||||
/// 于是这类面板改走 `TailShare::Shared`:面板先吃预算、列表按整行吃剩下的。
|
||||
#[must_use]
|
||||
pub fn has_loader_versions(&self) -> bool {
|
||||
self.loader != Loader::Vanilla
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
//!
|
||||
//! - **钉死档**(原版等不带版本列表的面板)走另一条路:标签、说明、菜单、实例名都在同一列里
|
||||
//! 顺序铺开(`04` 基线图就是这一档,不能改);
|
||||
//! - 不兼容时的原因行(Error 色)在滚动区末尾;
|
||||
//! - 不兼容时的原因行(Error 色)在滚动区末尾(**chips 档**可达;三栏档 + 带版本列表时
|
||||
//! `problem` 恒为 `None`,所以那支看不到它);
|
||||
//! - 说明只有 LiteLoader 有(`Key::DownloadOptionsLiteLoaderVanillaOnly`)。
|
||||
//!
|
||||
//! ## 为什么加载器是**六枚一行**(M222 D30 r1 实测订正)
|
||||
@@ -73,14 +74,17 @@ pub(super) fn version_menu_height(items: usize) -> f32 {
|
||||
///
|
||||
/// `scroll` = 面板此刻是不是「自己可滚」的那一档(`rows::TailShare::Shared`)。是的话:
|
||||
///
|
||||
/// - **滚动区**:head(版本 id + 安装按钮)+ 六枚加载器 chips + 错误行;
|
||||
/// - **滚动区**:head(版本 id + 安装按钮)+ 六枚加载器 chips(**chips 档**还可能有错误行,见下);
|
||||
/// - **钉死区**:说明行(有说明时;否则是「加载器版本」标签)+ 版本菜单 + 实例名输入框。
|
||||
///
|
||||
/// 为什么菜单也要钉(D30 四审):裁切位置由**钉死区高度**决定,与窗宽无关(1180 与 720 都切在
|
||||
/// 同一个 y)。之前只钉实例名,菜单就正好落在切线上——760 下菜单容器 642–706 只有 18px 可见、
|
||||
/// 条目文字一格都没画出来。把菜单一起钉住之后,它不再依赖首屏剩余高度分配,可达性由结构保证;
|
||||
/// 滚动区里只有 head 与 chips 两块,用户可见内容**不会被滚走**(错误行在 Shared 档恒为
|
||||
/// `None`:静态不兼容时不画版本菜单、走的是上面 `!scroll` 那条路)。
|
||||
/// **两个 Shared 分支不一样**(`rows/tail.rs::TailShare::of`):
|
||||
/// - 三栏档 + 带版本列表:`has_loader_versions()` 要求 `problem.is_none()` ⇒ 滚动区只有
|
||||
/// head + chips,错误行不可达;
|
||||
/// - chips 档(可用宽 < 600,`of` 对 `Options`/`Install` 无条件 Shared):`problem` 可以是
|
||||
/// `Some`,错误行**会进滚动区**、可能被滚走;`show_versions()` 为假时钉死区只剩实例名。
|
||||
/// D30 八审实测:滚动区可见高 ≈96–104px,内容(head 40 + chips 32 + 间距 4)≈76px ⇒
|
||||
/// 1180×760 下 head(墨迹 462–501)与六枚 chips(506–537,32px 四角闭合)完整在首屏。
|
||||
pub(crate) fn section<'a>(
|
||||
@@ -159,7 +163,7 @@ pub(crate) fn section<'a>(
|
||||
return plain.into();
|
||||
}
|
||||
|
||||
// 滚动区只剩 head + 六枚 chips(方案 B,D30 六审裁决)。
|
||||
// 滚动区只剩 head + 六枚 chips(方案 B,D30 六审裁决;chips 档还可能有错误行,见 `section` 文档)。
|
||||
//
|
||||
// 为什么把「安装选项」标签与中性说明都撤出滚动区:
|
||||
// 五审 82px → 六审 103px 的视口里,head(40) + 标签(17) + chips(32) + 两处间距(16) = 105px,
|
||||
|
||||
@@ -29,7 +29,8 @@
|
||||
//! 都在面板钉死区,见 `options/view.rs::section`)。
|
||||
//! 同样的 760 高窗口里:三栏档列表还剩 158px(3 整行),chips 档只剩 18px。
|
||||
//!
|
||||
//! 修法是 [`TailShare`] 两档:三栏档照旧钉死(面板整块在屏内),chips 档**且面板真的占高度**
|
||||
//! 修法是 [`TailShare`] 两档:**不带加载器版本列表**的选项区在三栏档照旧钉死(面板整块在屏内),
|
||||
//! chips 档**且面板真的占高度**
|
||||
//! (选项区展开 / 安装中)时改成「**面板先保预算、剩下按整行给列表**」
|
||||
//! (`tail::whole_rows` + `PANEL_BUDGET = 300`):1180×760 下列表 **176px = 4 整行**,
|
||||
//! 面板拿走其余(≈307px)。实例名那格**已经钉死**在面板底部、不需要滚(M222 `6f87c8b`)。
|
||||
@@ -85,8 +86,9 @@ pub(crate) use tail::{whole_rows, TailShare};
|
||||
|
||||
/// 列表列(三栏档与 chips 档共用一份)。
|
||||
///
|
||||
/// `share` 决定「列表」与「尾部面板」怎么分这块高度:三栏档钉死面板、chips 档各吃一半
|
||||
/// (见 [`TailShare`] 与模块文档「尾巴不能把列表压成缝」)。
|
||||
/// `share` 决定「列表」与「尾部面板」怎么分这块高度(真实分支见 `tail::TailShare::of`):
|
||||
/// `Pinned` = 面板按内容高钉在底部、列表吃剩下的;`Shared` = 面板先吃 `tail::PANEL_BUDGET`、
|
||||
/// 列表按**整行**吃剩下的(`tail::whole_rows`)。哪些组合走哪一支由那一处决定,这里不重复判。
|
||||
pub(super) fn content<'a>(
|
||||
ui: &'a Ui,
|
||||
catalog: Catalog,
|
||||
@@ -103,8 +105,8 @@ pub(super) fn content<'a>(
|
||||
} else if visible.is_empty() {
|
||||
states::empty(ui, catalog)
|
||||
} else {
|
||||
// 只有「列表与面板对半分」那一档才按整行取高:钉死档(面板矮)实测已经是整行
|
||||
// (04 图 278px),取整反而会把它从 6 行缩到 5 行。
|
||||
// 只有 `Shared`(面板先保预算)那一档才按整行取高:`Pinned` 档(面板矮)实测已经
|
||||
// 是整行(`04` 图),取整反而会把它从 6 行缩到 5 行。
|
||||
let height = if matches!(share, TailShare::Shared) {
|
||||
list_height
|
||||
} else {
|
||||
@@ -271,7 +273,7 @@ fn list<'a>(
|
||||
.scroller_width(frame::SCROLLBAR_WIDTH)
|
||||
.margin(frame::SCROLLBAR_MARGIN),
|
||||
))
|
||||
// `Some` = 三栏档按**整行**取高(见 `tail::whole_rows`);`None` = chips 档照旧 Fill。
|
||||
// `Some` = 三栏档的 `Shared` 分支按**整行**取高(见 `tail::whole_rows`);`None` = 其它(含 chips 档)用 Fill。
|
||||
.height(height.map_or(Length::Fill, Length::Fixed))
|
||||
.style(frame::scroll_style(ui))
|
||||
.into()
|
||||
|
||||
@@ -60,20 +60,21 @@ impl TailShare {
|
||||
///
|
||||
/// 列表是 `Fill + scrollable` 时,视口高度不是节距整数倍就会切在某一行中间——D30 r2 实测
|
||||
/// `01` 是 245px(5.3 行),英文态露出 6px 竖干、中文态露出「预览版」上半截。三栏档的
|
||||
/// 「列表与面板对半分」那一档现在按整行取高([`whole_rows`]),底缘落在行边界上。
|
||||
/// `Shared`(面板先保预算)那一支现在按整行取高([`whole_rows`]),底缘落在行边界上。
|
||||
pub(crate) const ROW_PITCH: f32 = 44.0;
|
||||
|
||||
/// 列表以外、列内要扣掉的固定占位(**列顶 156 → 列表顶 253**,D30 三审实测 = 97)。
|
||||
///
|
||||
/// 1180×760:正文列 580 ⇒ floor((580−97)/2 / 44) × 44 = **220px = 5 整行**,分隔线落在 481。
|
||||
/// 1180×900:floor((720−97)/2 / 44) × 44 = **308px = 7 整行**(三审在 900 高实测过:旧标定
|
||||
/// 会在 y529–530 复发残影,新标定不复发)。**改搜索条 / 表头高度时要同步这个数。**
|
||||
/// 1180×760:正文列 580 ⇒ floor((580−97−300) / 44) × 44 = **176px = 4 整行**,分隔线落在 437。
|
||||
/// 1180×900:floor((720−97−300) / 44) × 44 = **308px = 7 整行**(八审实测分隔线 569)。
|
||||
/// **改搜索条 / 表头高度时要同步这个数。**
|
||||
pub(crate) const LIST_CHROME: f32 = 97.0;
|
||||
|
||||
/// 面板(滚动区 + 钉死区)的**最小预算**。
|
||||
///
|
||||
/// 滚动区要装下 head 40 + 标签 16 + 六枚 chips 32 + 说明单行 20 + 间距约 20 ≈ 128;
|
||||
/// 钉死区 = 菜单 64 + 实例名 56 + 间距 16 ≈ 136。取 300 是两者之和的整档。
|
||||
/// 滚动区(八审后只剩 head 40 + 六枚 chips 32 + 间距 4 = **76**);
|
||||
/// 钉死区 = 说明/标签行 17 + 间距 8 + 菜单 64 + 间距 8 + 实例名 56 ≈ **153**。
|
||||
/// 取 300 覆盖两者(76 + 153 = 229)再留余量给 chips 底边框与滚动条。
|
||||
/// D30 五审实测:上一版「对半分」把滚动区压到 82px——宽档切「安装选项」字身、六枚 chip
|
||||
/// 0 像素;窄档 24px 全被留白吃掉。
|
||||
pub(crate) const PANEL_BUDGET: f32 = 300.0;
|
||||
|
||||
Reference in new issue
Block a user