复审原话:harness.rs:43-45 那段「设置页外观区的滑块 / 文本框 / 裸 iced::button 都不消费 forced」**正是 M282/M284 放弃像素验收的原始理由**——M285 之后后半句已经是假的,留着它下一 个 agent 会再推一遍同一个死胡同。 - pages/harness.rs:参数清单补 --force-state=rest|hover|pressed;那段改成现状(裸 button 已 经消费:外观 11 处 choice + 语言/主题 chip + 日志 action_button 走 settings::resolve_state; components::buttons::Button 三组走 forced_button;仍不消费的只剩滑块 / 文本框 / 色块), 并明确「别把它改回去」。 - examples/pages_demo.rs:用法表补 --force-state / --appearance / --passthrough(此前 --force-state=bogus 先报约束、却打出一张没有该参数的用法表)。 实测:`--force-state=bogus` → exit 2,用法表里含 [--force-state=rest|hover|pressed]。 顺带 r1 p3-1(机制说法订正):forced_button 的文档写清真实优先级 —— Button::forced() 是 `self.state.or(没有消息 ⇒ Disabled)`,**state 在前**,所以 disabled 也能被 .state() 盖掉; 并加一条单测钉住实际结果(forced_button(Button::disabled(..), Some(Hovered)) ⇒ state: Some(Hovered))。今天 7 个站点都写在启用分支里所以安全,但**别**把它套到 if..else 外面。 行数:settings/mod.rs 396 → 397(先算过余量,未破 400);harness.rs 321 → 330; pages_demo.rs 37 → 39。判据 1 复验:重出 5 张 rest 图,md5 与基线逐张相同。
40 lines
1.4 KiB
Rust
40 lines
1.4 KiB
Rust
//! 页面骨架截图入口(M84 `PAGEFRAME` 的验收通道)。
|
||
//!
|
||
//! ```text
|
||
//! cargo run -p unlucky-app-iced --example pages_demo -- \
|
||
//! --screen=instances --width=1180 --height=760 \
|
||
//! --screenshot=out.png --screenshot-theme=light --software-renderer
|
||
//! ```
|
||
//!
|
||
//! 参数解析与 iced 接线都在 `unlucky_app_iced::pages::harness` 里:**本 example 只是入口**,
|
||
//! 它也刻意不接 `cli.rs`(那边归 M75)。详细口径见 `pages::harness` 的模块文档。
|
||
|
||
use std::process::ExitCode;
|
||
|
||
use unlucky_app_iced::pages::harness::{self, Request};
|
||
|
||
fn main() -> ExitCode {
|
||
let request = match Request::parse(std::env::args().skip(1)) {
|
||
Ok(request) => request,
|
||
Err(message) => {
|
||
eprintln!("[cli] {message}");
|
||
eprintln!(
|
||
"用法:pages_demo [--screen=instances|download|settings|logs] [--width <px>] \
|
||
[--height <px>] [--theme=light|dark] [--screenshot-theme=light|dark] \
|
||
[--screenshot <png>] [--renderer=auto|gpu|cpu] [--software-renderer] \
|
||
[--scale-factor <f32>] [--appearance=real|demo] [--passthrough=on|off] \
|
||
[--force-state=rest|hover|pressed]"
|
||
);
|
||
return ExitCode::from(2);
|
||
}
|
||
};
|
||
|
||
match harness::run(request) {
|
||
Ok(()) => ExitCode::SUCCESS,
|
||
Err(message) => {
|
||
eprintln!("[run] {message}");
|
||
ExitCode::FAILURE
|
||
}
|
||
}
|
||
}
|