fix(app-iced): 修 about_center 的平移项(模态从「斜滑」回到「绕中心缩放」)+ 补几何断言

复审 r3 的 P1:about_center 写成 T(-c)·S·T(c),按 iced_core 的「先右后左」算出来是
p → s·p − (1−s)c,不动点在 (−cx,−cy)(窗口外的镜像点)⇒ 卡片开框时从左上斜滑约
(1−s)·c,而不是绕中心缩放。改成 T(c)·S·T(-c)(= s·p + (1−s)c,不动点就是 c),注释同步。

根因是 zoom.rs 里 0 条 #[test](矩阵从没被断言过,967 条全绿抓不住)。新增
tests::about_center_keeps_the_center_fixed:中心不动(<1e-3)、尺寸 = 倍率、缩小时左上角
收向中心;三组矩形 × 三档倍率。把 translate 换回去即红。

顺带补齐「抓得住/抓不住」:components/motion/** 与 motion_sync.rs、platform/motion.rs 里
31 条用例现在全部两侧都有(脚本核对 missing=0)。
This commit is contained in:
AskaEth committed 2026-11-12 10:50:04 +08:00
1 parent b6127b4735
commit add8617494
4 files changed
+86 -6

No files matched your search

@@ -310,6 +310,10 @@ fn none_scale_is_strictly_zero_not_merely_small() {
// ------------------------------------------------------------------ 触发判据
/// 重复绘制**永远不会**重新起跑(否则每帧都重启动画 = 永远停不下来)。
///
/// 抓得住:把「标识没变 ⇒ 不起跑」的判断写错(比如每个 view 都 `play_page`)——30 次重复绘制后
/// `is_animating()` 仍为真、帧泵永远停不下来,本条红。
/// 抓不住:真实屏幕上"重画是否真的只是重画"(那要看 iced 的订阅表,归 `app::subscription` 的用例)。
#[test]
fn repeated_paints_never_restart_the_animation() {
let mut pump = standard();
@@ -324,6 +328,9 @@ fn repeated_paints_never_restart_the_animation() {
}
/// 不归 pages 画的屏(账户 / AI 独立页)**不起跑**;回到某一屏照样跑。
///
/// 抓得住:把 `screen == None` 也当成一次换页起跑(会白跑几百毫秒的帧却没人采样)。
/// 抓不住:账户页 / AI 页自己的渲染(它们不走 `pages::render`,不归本 pump 管)。
#[test]
fn screens_rendered_elsewhere_never_start_a_track() {
let mut pump = standard();