fix(app-iced): M100 r1 返工 —— 一次一采样 + OS 层密闭指标 + 文档口径订正
三条复审意见 + 六条 p3,全部落在原有文件里(另加两个拆分文件)。 P2-1 截图落盘「最后写入者说了算」(真竞态) `Message::Frame` 以前在 `frames >= CAPTURE_AT_FRAME` 之后每帧都发一次 `window::screenshot`, `Captured` 每次都覆盖同一文件才 `exit()`;已派发的采样不会因 exit 撤回 ⇒ 落盘内容是调度结果 (复审实测 12 次里 7 次写了两次;把窗口在两次采样之间改成 900×600,落盘就是 900×600)。 现在闸门 = `should_request_capture(frames, dispatched, capture_mode)`,派发即置位、只开一次; `Captured` 计数落盘次数并打进日志。实测 12/12 次「[shot] -> 文件」行恒为 1、`落盘次数=1`。 P2-2 密闭证据换成 OS 层 `platform/win32/transparency.rs` 加安全 getter `click_through`(unsafe 仍只在既有唯一落点); 该文件因超 400 行又拆出 `transparency/exstyle.rs`(子模块继承父模块的 `#![allow(unsafe_code)]`, `unsafe-scope` 门禁判据不受影响)。日志三态 `[caps] passthrough_ext=on|off|unknown`: `None` 记 `unknown`,绝不记 `off`。实测默认 on 12/12、`--passthrough=off` 为 off 3/3。 P2-3 头注释「下放」→「新增」,并订正「接真控件改 3 个文件」 (section 文件里的 body 绊线 + 该 section 的 `GROUP` 文件 + `tests/mod.rs` 跨 section 绊线)。 p3 六条:shell 断言说明改准(默认值那条归 cli 的测试)、harness 文档给「指针事件=0」加对照限定、 数字订正(纯搬移 234 / 新增 134)、三文件口径、ai+about 对本文件的两处必改、`Rest` 与真 Disabled 撞语义写进「抓不住」。 文档口径:「8 连跑全稳」不再当密闭证据——同 argv 开/关穿透 hash 相同(实测 0d7b4f5b 两边一样), 它只说明「帧静止 + 落盘确定」。密闭主证据是 `[caps] passthrough_ext=`。 顺带:`run()` 从 `harness.rs` 拆到 `harness/app.rs`(272 / 190 行)。搬移中丢过一条既有断言 `ensure_layered_refuses_a_missing_or_invalid_window`,被编译器 unused-import 警告抓出并复原。
This commit is contained in:
1 parent
2061296615
commit
380fac0324
13 files changed
+545
-201
No files matched your search
@@ -55,10 +55,11 @@ fn flavor_slug_is_stable_for_filenames() {
|
||||
|
||||
/// **交互模式不许被取证开关污染**(M100 的头号不变量)。
|
||||
///
|
||||
/// 抓得住:谁把 `--screenshot` 的默认值 `Some(Rest)` 顺手设成了 `Options::force_state` 的默认值
|
||||
/// (或者把默认往下挪一层,落到 `overridden` 的 `None` 分支上)——那会让**用户窗口里所有按钮
|
||||
/// 永远不显示 hover**,是产品事故,而不是取证问题。
|
||||
/// 抓不住:取证模式有没有真的压掉 hover(那是下一条)。
|
||||
/// 抓得住:`overridden` 的 `None` 分支被改坏——例如把「跟控件自己的状态走」写成了固定
|
||||
/// `Active`/`Hovered`(那会让**用户窗口里所有按钮**不再反映 hover/pressed,是产品事故)。
|
||||
/// 抓不住:**默认值被顺手设成 `Some(Rest)`** 这类错误——`overridden(None, …)` 根本不会被调用,
|
||||
/// 本条照样绿;那一条由 `cli::tests::screenshots_default_to_the_rest_state` 抓(它断言
|
||||
/// 交互模式 `force_state == None`)。两条各守一半,别拿一条当另一条的证据。
|
||||
#[test]
|
||||
fn interactive_mode_still_hovers() {
|
||||
use iced::widget::button::Status;
|
||||
@@ -77,7 +78,11 @@ fn interactive_mode_still_hovers() {
|
||||
/// 抓得住:谁把 `Rest` 接成「保留现状」(那等于没钉:系统指针 hover 照样漏进图——M99 复审实测
|
||||
/// 连跑 8 次翻盘 1 次就是这里没钉住)。
|
||||
/// 抓不住:① 不经过 `overridden` 的控件(标题栏以外的裸 `iced::button`,例如设置页「外观」区);
|
||||
/// ② 窗口到底还收不收鼠标事件(那是 harness 的 passthrough,靠出图日志的 `指针事件=N` 自证)。
|
||||
/// ② 窗口到底还收不收鼠标事件(那是 harness 的 passthrough,看 `[caps] passthrough_ext=`);
|
||||
/// ③ **`Rest` 与「真 Disabled」撞语义**:`components::buttons::assemble()` 把「无 `on_press`」的
|
||||
/// 按钮默认画成 Disabled,而 `Rest => Enabled` 会把它画成可用。当前零影响(8 处 `forced_state(`
|
||||
/// 调用点与 shell 的 caption / nav 全带消息),但将来若有人加一个**无消息**的按钮又被 `Rest` 罩住,
|
||||
/// 那张取证图会画出「一个本应禁用的按钮」而这条断言照绿。
|
||||
#[test]
|
||||
fn rest_suppresses_cursor_hover() {
|
||||
use iced::widget::button::Status;
|
||||
|
||||
Reference in new issue
Block a user