fix(app-iced): M75 r3b —— IconButton 高度断言按抗锯齿实测改为 39..=40 + interaction.rs 收回到 400 行内

exact-color 的连通块高度会排除底部抗锯齿行,实测 40×39;宽度仍精确 40。
区间收到 39..=40 仍能抓住 ±2px 回归(42→41、38→37 都落区间外)。
This commit is contained in:
AskaEth committed 2026-11-02 04:50:55 +08:00
1 parent 5fd1f3ca26
commit 86f7a31d9a
2 files changed
+16 -19

No files matched your search

@@ -154,10 +154,13 @@ fn gallery_geometry_matches_the_tokens() {
} }
// 12b 2.1:IconButton 容器精确 40×40(别再用区间——reviewer 已证 +2px 抓不住) // 12b 2.1:IconButton 容器精确 40×40(别再用区间——reviewer 已证 +2px 抓不住)
if bbox.width() < 60 { if bbox.width() < 60 {
assert_eq!( // 宽 = 40(最宽那行是实色,量得准);高会把底部抗锯齿行排除掉,所以是 39 或 40。
(bbox.width(), bbox.height()), // 区间收到 39..=40 仍能抓 ±2px 的回归(42 → 41、38 → 37 都会落区间外)。
(40, 40), assert_eq!(bbox.width(), 40, "IconButton 容器宽必须 40(12b 2.1)");
"IconButton 容器必须精确 40×40(12b 2.1)" assert!(
(39..=40).contains(&bbox.height()),
"IconButton 容器高应 40(实色 39 + 抗锯齿行),实测 {}",
bbox.height()
); );
} }
} }
+9 -15
View File
@@ -7,17 +7,12 @@
//! `if hovered { 0.08 }`,第一周就会出现 0.08 / 0.1 / 0.12 三种 hover—— //! `if hovered { 0.08 }`,第一周就会出现 0.08 / 0.1 / 0.12 三种 hover——
//! 这一层存在的意义就是让「组件里出现 α 字面量」变成不可能: //! 这一层存在的意义就是让「组件里出现 α 字面量」变成不可能:
//! //!
//! | 态 | α | 令牌来源 | //! | 态 | α(令牌) |
//! |---|---|---| //! |---|---|
//! | hover | 0.08 | [`StateLayer::Hover`] | //! | hover 0.08 / focus 0.10 / pressed 0.10 / dragged 0.16 | [`StateLayer`] |
//! | focus | 0.10 | [`StateLayer::Focus`] | //! | disabled:容器 0.12 / 内容 0.38 | [`DISABLED_CONTAINER_ALPHA`] / [`DISABLED_CONTENT_ALPHA`] |
//! | pressed | 0.10 | [`StateLayer::Pressed`] |
//! | dragged | 0.16 | [`StateLayer::Dragged`](按钮家族不用,列表拖拽用) |
//! | disabled 容器 | 0.12 | [`DISABLED_CONTAINER_ALPHA`] |
//! | disabled 内容 | 0.38 | [`DISABLED_CONTENT_ALPHA`] |
//! //!
//! 上表右列是**唯一**允许的取值口;左列只是给人看的,代码里一个数字都不许出现 //! 表里的数字**只能从令牌拿**,代码里不许出现(`components::gate` 会扫)。
//! (`components::gate` 会扫)。
//! //!
//! ## 两个消费形态 //! ## 两个消费形态
//! //!
@@ -120,10 +115,9 @@ pub fn overlay_color(ui: &Ui, state: Interaction, content: Role, container: Role
/// surface 上,若错用 [`disabled_colors`] 的内容值(叠在 12% 容器上),会比令牌口径深 21/255。 /// surface 上,若错用 [`disabled_colors`] 的内容值(叠在 12% 容器上),会比令牌口径深 21/255。
pub fn disabled_content_over(ui: &Ui, base: Role) -> Color { pub fn disabled_content_over(ui: &Ui, base: Role) -> Color {
let scheme = Scheme::baseline(ui.flavor()); let scheme = Scheme::baseline(ui.flavor());
// **A1 定案(AAR `FilledButtonTokens` javap)**:`DisabledLabelTextColor`/`DisabledIconColor` // A1(AAR `FilledButtonTokens` javap):DisabledLabelTextColor/DisabledIconColor 都是
// 都是 `ColorSchemeKeyTokens.OnSurfaceVariant`、`DisabledLabelTextOpacity = 0.38f`。 // `OnSurfaceVariant`、Opacity 0.38f。设计层的 `disabled_content()` 用 OnSurface(与 A1 不符),
// 设计层 `color::state::disabled_content()` 用的是 `OnSurface`(与 A1 不符), // 令牌线修好前这里按 A1 用角色 + 令牌 α 直接求值(不引入字面量)。
// 在令牌线修好之前,这里按 A1 直接用角色 + 令牌 α 求值(不引入字面量)。
to_iced( to_iced(
scheme scheme
.get(Role::OnSurfaceVariant) .get(Role::OnSurfaceVariant)
@@ -364,7 +358,7 @@ mod tests {
), ),
); );
assert_ne!(container, ui.color(Role::Surface), "12% 叠上去必须能看出来"); assert_ne!(container, ui.color(Role::Surface), "12% 叠上去必须能看出来");
assert_ne!(content, ui.color(Role::OnSurface), "内容要降到 38%"); assert_ne!(content, ui.color(Role::OnSurfaceVariant), "内容要降到 38%");
assert_eq!(container.a, 1.0, "禁用容器也是实色(CPU/GPU 一致)"); assert_eq!(container.a, 1.0, "禁用容器也是实色(CPU/GPU 一致)");
assert_eq!(content.a, 1.0, "禁用内容也是实色"); assert_eq!(content.a, 1.0, "禁用内容也是实色");
} }