fix(app-iced): 复审 r1 的四条 p2 + 三条小事(M250)

- p2-1 删死状态:`Accent::scheme` 字段 / `scheme()` 取值口 / `set_flavor` 重派生全仓零读者,
  且注释谎称「Ui 的唯一入口」。色值 `color` 与深浅无关,`Ui` 由 `rebuild_ui` 重算,
  所以整条删掉,`new/set/reset` 也不再收 `flavor`
- p2-2 规则只定义一次:新增 `theme::tokens(flavor, accent, scheme, families) -> (Ui, Colors)`,
  `App::rebuild_ui` 与出图 harness 都调它(harness 传 scheme=None,如实说明不覆盖 D38 分支);
  README 改成「同一条规则、不是同一个调用点」
- p2-3 逐键不闪红:`Accent` 区分「显示中的错」与 `pending`。只有**不可能再变合法**(非 hex / 超 6 位)
  才立刻亮;位数不足先挂 pending,等 `commit()`(点到别的外观控件)或配置读回才亮
- p2-4 订正 `app/state.rs:151` 那句反话(强调色现在是 UI 写入字段)
- 小事:hint 文案改「中性表面与错误色不随强调色变」;`Digit{ch}` 里的不可见字符显示成 U+XXXX;
  8 颗色块补 tooltip(hex 原文,Overlay 底)

判据:新用例 `accent_errors_only_appear_when_they_are_actionable` 覆盖「输入中不亮 / 提交后亮 /
配置读回立刻亮」三态;gallery 出图逐字节与重构前相同(规则搬迁没改像素)。
This commit is contained in:
AskaEth committed 2026-11-11 15:46:10 +08:00
1 parent c609827c49
commit 14282f3325
10 files changed
+261 -78

No files matched your search

+13 -12
View File
@@ -53,36 +53,37 @@ impl App {
// 面板 α(D36)在这里注入 `Ui`:全仓所有表面色都从 `Ui::layer` 出去,所以这是**唯一**
// 生效点(外壳 / 三页卡片 / 外观分组卡片 / 空态图标块自动同源,调用点没有机会各处自乘)。
let panel_alpha = self.appearance.effective_panel_alpha();
self.ui = match (
// 三选一规则只在 `theme::tokens` 里写一遍:出图 harness 也调它(两头各抄一份迟早
// 出现「图上有强调色、产品里没有」,而那种偏差在图上看不出来)。
let (ui, colors) = crate::theme::tokens(
self.appearance.flavor(),
self.appearance.accent.color(),
self.appearance.derived_scheme(),
) {
(Some(accent), _) => {
self.appearance.derived_scheme().copied(),
self.families,
);
match colors {
crate::theme::Colors::Accent => {
// M250:一行里同时给「强调色生效了」与「取色方案被谁压住」,两件事都能读出来。
diag!(
"[appearance] accent={} → Ui::with_accent(只换 primary/secondary/tertiary;\
取色方案 palette={} 被显式强调色压住)",
"[appearance] accent={} → Ui::with_accent(只换 primary/secondary/tertiary;取色方案 palette={} 被压住)",
self.appearance.accent.log_token(),
self.appearance.palette_level()
);
Ui::with_accent(self.appearance.flavor(), accent, self.families)
}
(None, Some(scheme)) => {
crate::theme::Colors::Scheme => {
diag!(
"[appearance] palette={} → Ui::from_scheme(取色方案接管 49 个角色)",
self.appearance.palette_level()
);
Ui::from_scheme(*scheme, self.families)
}
(None, None) => {
crate::theme::Colors::Board => {
// 非法值:**保持出厂板**,但错行留在设置页(不静默),日志里也留一条。
if let Some(error) = self.appearance.accent.error() {
diag!("[appearance] accent 非法({error:?})→ 出厂板,错行见设置页");
}
Ui::new(self.appearance.flavor(), self.families)
}
}
.with_panel_alpha(panel_alpha);
self.ui = ui.with_panel_alpha(panel_alpha);
}
/// 按设置文件里的主题模式切一次外观;`--theme` 显式给了就不动。