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

+34
View File
@@ -338,6 +338,40 @@ pub fn accent_scheme(flavor: SchemeFlavor, accent: unlucky_design::color::Color)
unlucky_design::DesignTokens::with_accent(flavor, accent).colors
}
/// 这一屏的颜色从哪来(M250)。日志与出图都靠它说清「是谁生效」。
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Colors {
/// 用户显式填的强调色(`appearance.accent_color`)。
Accent,
/// D38 取色方案(背景图 / 壁纸取色成功,`State::derived_scheme`)。
Scheme,
/// 出厂品牌色板(`DesignTokens::brand`)。
Board,
}
/// 强调色 / 取色方案 / 出厂板 **三选一**:全仓**唯一**的优先级定义点(M250)。
///
/// 产品路径(`App::rebuild_ui`)与出图 harness(`pages::harness`)都调它。为什么必须有这一个
/// 函数:两头各抄一份两选一/三选一,迟早出现「出图上有强调色、产品里没有」或者反过来,而那种
/// 偏差在图上看不出来(图是对的,产品是错的)。
///
/// 优先级:**显式强调色 > D38 取色方案 > 出厂板**。手填的色是直接意图,取色是从图片派生的。
/// `flavor`(明暗 / 跟随系统)不在这里解析,由调用方按现有主题逻辑给。
pub fn tokens(
flavor: SchemeFlavor,
accent: Option<unlucky_design::color::Color>,
scheme: Option<Scheme>,
families: Families,
) -> (Ui, Colors) {
if let Some(accent) = accent {
(Ui::with_accent(flavor, accent, families), Colors::Accent)
} else if let Some(scheme) = scheme {
(Ui::from_scheme(scheme, families), Colors::Scheme)
} else {
(Ui::new(flavor, families), Colors::Board)
}
}
/// 令牌字重 → iced 字重。
pub fn weight_of(weight: Weight) -> iced::font::Weight {
match weight {