fix(app-iced): M125 r2 —— chips 档「还没选版本」不再对半切;宽度表换成实测值

r1 复审 p2-1:`TailShare::of` 只判档位,于是 chips 档「刚进页面」(面板只有一行
提示)也被五五分——700×760 下列表 8 个版本只显示 4 个、下半块 ≈160px 空画布,
而修前(main)这一态是 7 整行。修法:判据加**面板形态**,`Hint` 在任何档位都钉死,
`Chips` + `Options`/`Install` 才共享。实测回到 7 整行(与 main 同一水位)。

守门:新增 `options_shot/ready.rs`(`ULL_DL_READY_SHOT`,不设 `ULL_DL_DEMO` 出的
700×760 图):列表区至少读出 6 个版本号。它在 r1 的图上**红**(4 个,原生输出见
mission 报告),在修后图上绿(7 个)。三条旧守门照旧(chips / compact / wide),
chips 与 compact 换修前图仍红。

r1 复审 p2-2:宽度表的实测值改正(同一张 736 图逐项量):
`1.21` 26(余 6)、`1.20` 28(余 4)、`24w` **29**(余 3)、`All versions` 墨迹画到
x=247(裁切边 248,只差 1px)⇒ 桶标签余量是 **3~6px** 而不是 6;「短标签『全部』= 32
零余量」这条论证的对比强度随之写准(比桶标签的 3~6px 更薄)。
`rails/major.rs` 的表格、`options_shot/compact.rs` 的测试文档一并改成实测值;
「墨迹右边界」那条反例也从 216..244 改成实测 216..247。

r1 复审 p3-1:第二级「全部版本」的图标从网格(与第一级同字形同药丸、像素级同形)
换成文档/清单字形 `IconKind::Logs`,理由与「图标集里没有版本/历史字形」写进
`major_shape` 文档。

r1 复审 p3-2:chips 档最多三层滚动(列表 / 面板 / loader 菜单)作为**已知风险**
登记在 `install.rs` 文档里,并写明为什么「把实例名移出滚动区」本轮不做(要拆
`options::section`,动三个文件,而且改完仍无法验证滚轮冒泡——没有通道)。
This commit is contained in:
AskaEth committed 2026-11-05 16:43:35 +08:00
1 parent 9c623a6fd3
commit 0f26ed3753
9 files changed
+283 -58

No files matched your search

@@ -41,6 +41,8 @@ const WIDE_SHOT: &str = "ULL_DL_OPTIONS_SHOT";
const CHIPS_SHOT: &str = "ULL_DL_CHIPS_SHOT";
/// 736 宽那张(`04-options-fabric-en-light-compact736.png`)——Compact 档主版本栏用。
const COMPACT_SHOT: &str = "ULL_DL_COMPACT_SHOT";
/// 700 宽、**不设 `ULL_DL_DEMO`**(= `ready`,还没选版本)那张——r1 复审 P2-1 的守门用。
const READY_SHOT: &str = "ULL_DL_READY_SHOT";
fn ui() -> Ui {
Ui::with_platform(SchemeFlavor::Light, Platform::Windows, FAMILIES)
@@ -183,6 +185,34 @@ impl Shot {
(start, end - start + 1)
}
/// `[from, to)` 里在 `[left, right)` 有墨迹的**条数**(两条之间空 ≥ 8 行才算两条)。
///
/// 用它数「读得出几个版本号」:一行版本号的文本墨迹约 11px 高、行距 44,中间空 30+ ⇒
/// 一条对应一行。被压扁时整块只剩一条。
fn ink_bands(
&self,
left: usize,
right: usize,
from: usize,
to: usize,
background: [u8; 3],
) -> usize {
let mut bands = 0;
let mut gap = usize::MAX;
for y in from..to.min(self.height) {
let inked = (left..right).any(|x| self.at(x, y) != background);
if inked {
if gap >= 8 {
bands += 1;
}
gap = 0;
} else {
gap = gap.saturating_add(1);
}
}
bands
}
/// 列表列里、`from` 起的**第一条薄通栏横线**的 y(`divider::full` 画的那条 1px 线)。
///
/// 用它量「版本列表到哪儿为止」:尾部面板上沿有一条通栏分隔线,它上面的高度就是列表拿到的。
@@ -350,3 +380,5 @@ fn an_options_shot_shows_both_rails_and_the_whole_panel() {
mod chips;
mod compact;
mod ready;