feat(app-iced): 禁用态合成底改成容器给的 Base(M234)

`interaction::disabled` 的四个入口一直收一个「底」,但 8 个调用点全传死
`Role::Surface`:卡片(SurfaceContainer)/ 面板(SurfaceContainerLow)里的禁用控件
把 10%(按钮族)/ 12%(面状控件族)叠在画布色上 —— M223「CR 1.05、形丢失」的根因。

- 新增 `interaction::Base`(画布 / 容器底的一等参数,`From<Role>` 兼容历史调用点);
  四个入口改成 `(ui, base, …)`,内部不再出现任何写死的 `Role::Surface`。
- 容器导出自己的 `BASE`:`surfaces::elevated::BASE`(卡)、`inputs::menu::PANEL_BASE`
  (菜单面板,项的 38% 与状态层都改叠它)、`navigation::drawer::BASE`。
- 控件收 `.base(..)`:Button / icon_on / Field / SearchBar / Slider / Checkbox / Radio /
  Switch / Chip / ListItem / Tabs;Fab 与 icon() 是画布默认值。
- `feedback/action.rs` 的本地 α 合成删掉,改走 `disabled_content_over_role` 并给真实容器底
  (Snackbar `InverseSurface` / Dialog `SurfaceContainerHigh`)。
- 判据:`interaction::disabled::tests`(卡片/面板/画布三档逐值)、
  `buttons::tests::base`(Button::base → StyleSpec → style_closure 接线)、
  `gallery` 新增 `disabledbase` 段 + `gallery::probe::bases` 精确像素断言
  (±10 容差区分不了 1/255 的差,所以自己数逐位相等的像素)。
- 变异自证:assemble 的调用点改回画布底后,上面两条都红(见 artifacts/m234/README.md)。

已知未尽:`crates/app-iced/src/pages/**` 不在 scope 内,页面侧「把控件放进卡片/面板」的
调用点尚未接 `.base(..)`(行为与本 mission 之前一致);`pages/…/java/tests/marker.rs`
有一行被迫更新(入口多了一个实参,语义不变 = 画布底)。
This commit is contained in:
AskaEth committed 2026-11-11 06:34:23 +08:00
1 parent a9d1cb4c44
commit 35dbefb08d
48 files changed
+1690 -496

No files matched your search

+10 -1
View File
@@ -80,6 +80,7 @@ use super::interaction::Interaction;
use super::layout;
mod buttons;
mod disabledbase;
mod feedback;
mod inputs;
mod navigation;
@@ -97,6 +98,7 @@ pub const SECTION_ENV: &str = "ULL_GALLERY_SECTION";
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
struct Sections {
buttons: bool,
disabledbase: bool,
sizes: bool,
divider: bool,
selection: bool,
@@ -109,6 +111,7 @@ impl Sections {
/// 七段全渲染(默认)。
const ALL: Self = Self {
buttons: true,
disabledbase: true,
sizes: true,
divider: true,
selection: true,
@@ -121,6 +124,7 @@ impl Sections {
fn only(name: &str) -> Option<Self> {
let mut sections = Self {
buttons: false,
disabledbase: false,
sizes: false,
divider: false,
selection: false,
@@ -130,6 +134,7 @@ impl Sections {
};
match name {
"buttons" => sections.buttons = true,
"disabledbase" => sections.disabledbase = true,
"sizes" => sections.sizes = true,
"divider" => sections.divider = true,
"selection" => sections.selection = true,
@@ -156,7 +161,7 @@ impl Sections {
return sections;
}
eprintln!(
"[gallery] {SECTION_ENV}={raw:?} 不是已知段(all|buttons|sizes|divider|selection|inputs|feedback|navigation),已回落 all"
"[gallery] {SECTION_ENV}={raw:?} 不是已知段(all|buttons|disabledbase|sizes|divider|selection|inputs|feedback|navigation),已回落 all"
);
Self::ALL
}
@@ -166,6 +171,7 @@ impl Sections {
let mut names = Vec::new();
for (on, name) in [
(self.buttons, "buttons"),
(self.disabledbase, "disabledbase"),
(self.sizes, "sizes"),
(self.divider, "divider"),
(self.selection, "selection"),
@@ -244,6 +250,9 @@ pub fn view<'a>(ui: &'a Ui) -> Element<'a, DemoMessage> {
if picked.buttons {
sections = sections.push(buttons::section(ui));
}
if picked.disabledbase {
sections = sections.push(disabledbase::section(ui));
}
if picked.sizes {
sections = sections.push(sizes::section(ui));
}