feat(app-iced): 页面层把卡片底接进禁用/交互控件(M237)
M234 把 `interaction::Base` 与组件侧的 `.base(..)` 接好了,但页面层仍是默认的画布底: 卡片(`Role::SurfaceContainerLow`)里的禁用按钮 / chip / 开关把 10% / 12% / 38% 叠在画布色上。 M223 记的「卡片里禁用控件 CR 1.05、形丢失」因此只在 gallery 里修好,产品页没修。 - 导出容器底:`pages::frame::BASE = Base::of(MaterialLayer::Card.surface_role())` —— 取的是 `card()` **真正画出来的那一层**(不是「反正是 surface」);`logs::panel::BASE` 是同一个常量的别名(两张卡画的是同一个材质层)。 - 接线(改前一律 `Base::CANVAS`,改后 `frame::BASE`):设置·Java(扫描 / 取消 / 设为默认 chip / 三个输入框 / 添加 / 保存 / 预置项 chip / 下载徽标);设置·通用(语言三档、主题三档、日志行 两个手写按钮 → 状态层叠 `BASE.role()`);实例详情(MODS 开关、SAVES 的重试与打开文件夹、 启动参数区的两个输入框 + 后端 chip + 保存 / 恢复);日志页(诊断卡页脚 `Copy summary`)。 详情头的启动 / 停止 / 动作行**不在卡里**,保持画布底并加注释。 - 判据:`pages/frame/tests.rs` 逐值断言「`BASE` == 卡片画出来的颜色」+ 源码结构盯 `card()` 不许改画别的材质层;`pages/settings/tests/java_shot.rs` 是**页面级像素判据**(读 1180×760 真截图、逐位匹配:卡区里「叠卡底」3136 px vs「叠画布」21 px,深色 3128 / 1); `pages/tests/base_wiring.rs` 数接线点,守像素够不到的页面(实例详情 MODS / SAVES)。 - 变异自证:撤掉「立即扫描」的 `.base(BASE)` ⇒ 像素判据红(73 px vs 3083 px,退出码 101); 撤掉诊断卡页脚的 `.base(..)` ⇒ 接线判据红(0 vs 1,退出码 101)。均已还原。 - 门禁:fmt / check -p unlucky-app-iced --all-targets / test --workspace(3344 通过,0 失败)/ clippy --workspace --all-targets -D warnings / 文件 ≤400(最大 389),全部本地过。 - 已知未尽:面板 α<1 的半透明卡(`Base` 只装一个 `Role`)、GPU 档、实例详情与日志页在 1180×760 出图里没有可量测的禁用控件(夹具缺 running,已报 finding);app_bar / adopt pick / 设置页分组列仍未导出 `BASE`;设置·下载 / 更新 / 助手、账户页、内容库、下载页仍未接线。
This commit is contained in:
1 parent
cf8a951e29
commit
3dcd5fd117
20 files changed
+518
-42
No files matched your search
@@ -23,7 +23,7 @@ use unlucky_i18n::{Catalog, Key};
|
||||
use crate::app::components::buttons::{self, Button};
|
||||
use crate::app::components::inputs::{text_field, Field, FieldVariant};
|
||||
use crate::app::components::selection::{chip, Chip};
|
||||
use crate::pages::frame::{divider, text_role_owned};
|
||||
use crate::pages::frame::{divider, text_role_owned, BASE};
|
||||
use crate::pages::Message;
|
||||
use crate::theme::Ui;
|
||||
|
||||
@@ -52,7 +52,8 @@ fn install_root<'a>(ui: &'a Ui, catalog: Catalog, state: &'a State) -> Element<'
|
||||
.variant(FieldVariant::Outlined)
|
||||
.label(catalog.text(Key::SettingsJavaInstallRoot))
|
||||
.placeholder(catalog.text(Key::SettingsJavaInstallRootPlaceholder))
|
||||
.supporting(catalog.text(Key::SettingsJavaInstallRootHint));
|
||||
.supporting(catalog.text(Key::SettingsJavaInstallRootHint))
|
||||
.base(BASE);
|
||||
let field = if prefs.validate().is_err() {
|
||||
field.error()
|
||||
} else {
|
||||
@@ -184,7 +185,8 @@ fn vendor_order<'a>(ui: &'a Ui, catalog: Catalog, state: &'a State) -> Element<'
|
||||
Button::new(
|
||||
catalog.text(Key::SettingsJavaVendorReset),
|
||||
msg(JavaMessage::ResetPriority),
|
||||
),
|
||||
)
|
||||
.base(BASE),
|
||||
));
|
||||
}
|
||||
list.into()
|
||||
@@ -215,7 +217,8 @@ fn vendor_row<'a>(
|
||||
catalog.text(Key::SettingsJavaVendorUp),
|
||||
false,
|
||||
msg(JavaMessage::MoveVendor { index, up: true }),
|
||||
),
|
||||
)
|
||||
.base(BASE),
|
||||
);
|
||||
let down = chip(
|
||||
ui,
|
||||
@@ -223,7 +226,8 @@ fn vendor_row<'a>(
|
||||
catalog.text(Key::SettingsJavaVendorDown),
|
||||
false,
|
||||
msg(JavaMessage::MoveVendor { index, up: false }),
|
||||
),
|
||||
)
|
||||
.base(BASE),
|
||||
);
|
||||
row![
|
||||
container(
|
||||
@@ -266,7 +270,8 @@ fn auto_install<'a>(ui: &'a Ui, catalog: Catalog, state: &'a State) -> Element<'
|
||||
catalog.text(Key::SettingsJavaAutoInstallOn),
|
||||
on,
|
||||
msg(JavaMessage::ToggleAutoInstall(true)),
|
||||
),
|
||||
)
|
||||
.base(BASE),
|
||||
),
|
||||
chip(
|
||||
ui,
|
||||
@@ -274,7 +279,8 @@ fn auto_install<'a>(ui: &'a Ui, catalog: Catalog, state: &'a State) -> Element<'
|
||||
catalog.text(Key::SettingsJavaAutoInstallOff),
|
||||
!on,
|
||||
msg(JavaMessage::ToggleAutoInstall(false)),
|
||||
),
|
||||
)
|
||||
.base(BASE),
|
||||
),
|
||||
]
|
||||
.spacing(ui.space(Space::X1));
|
||||
@@ -304,9 +310,12 @@ fn auto_install<'a>(ui: &'a Ui, catalog: Catalog, state: &'a State) -> Element<'
|
||||
fn actions<'a>(ui: &'a Ui, catalog: Catalog, state: &'a State) -> Element<'a, Message> {
|
||||
let label = catalog.text(Key::SettingsJavaPrefsSave);
|
||||
let save = if state.prefs.dirty() && state.storage {
|
||||
buttons::filled(ui, Button::new(label, msg(JavaMessage::SavePrefs)))
|
||||
buttons::filled(
|
||||
ui,
|
||||
Button::new(label, msg(JavaMessage::SavePrefs)).base(BASE),
|
||||
)
|
||||
} else {
|
||||
buttons::filled(ui, Button::disabled(label))
|
||||
buttons::filled(ui, Button::disabled(label).base(BASE))
|
||||
};
|
||||
let hint = if state.prefs.dirty() {
|
||||
catalog.text(Key::SettingsJavaPrefsUnsaved).to_string()
|
||||
|
||||
Reference in new issue
Block a user