运行页签补齐全屏预览与可收起的信息栏 #497
Reference in New Issue
Block a user
Delete Branch "feat/run-view-chrome-cleanup"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
运行页右下角没有把游戏画面放大到整屏的入口;运行视窗下方常驻「信息展示 / 数值微调」两张卡片,没选中资源时就是两块空白(验收现场那半条「空信息栏白占一块高度」)。
落地方式
apps/ai-game-creator-shell/src/features/project-workspace/useElementFullscreen.ts,走标准元素级 Fullscreen API,全屏对象是画面那一格.game-run-preview——不接 Tauri 窗口级全屏(那是把整块工作台连对话栏一起放大的「全屏应用」,不是「全屏预览画面」)。按钮贴在画面右下角(深色半透明圆钮,压在任何游戏配色上都看得清),全屏后仍在原位,点它或按Esc都能退出;按钮态只认fullscreenchange,不靠点击那一帧的乐观值。宿主没有requestFullscreen、或被fullscreenEnabled === false关掉时整枚入口不渲染,不留点了没反应的按钮。.game-run-panels改成「有内容才存在」。判据只有「有没有内容」(当前 = 存在资源选中态:在资源画布或浮层资源面板里选中一张资源后切到运行页签仍保留,信息展示渲染它的只读字段;运行画面上的「点选素材」只往对话插入引用,不改选中):内容从无到有自动展开、从有到无自动收起。手动态按资源 id 在渲染期派生(不挂 effect 回写):只对做出动作时的那张资源有效,换到别的资源回到默认,同一张资源清空后选回仍记得上次状态,且「刚有内容」那一帧就已经是展开态。收起态只剩一行 26px 的开合按钮,条目卡片的156px最小高度不再变成空白色块;只有一栏内容时卡片铺满整行。label / input样式声明一并删除;登记表接进来时与内容一起回归。这一条覆盖 PRD §3.4 原先「保留两个面板标题、不得因空内容压缩」的口径。全屏回归修复(同日收口,
16361bfbe)验收时发现「退出全屏后画布仍保持全屏比例」。用一次性页面挂真组件 + 客户端真实注入的尺寸桥(
src-tauri/src/preview.rs的PREVIEW_FIT_BRIDGE_SCRIPT)在 Chromium 复现:根因不在全屏,而在尺寸上报回灌:自适应游戏页把「内容尺寸 = 视口」原样报回来,宿主把它当「内容高水位」,
resolveLocalGamePreviewFitLayout的max(容器, 内容)就把画布钉在全屏那一帧;退出后 iframe 视口不再变化 ⇒ 桥不再上报 ⇒ 永远回不去。修法:内容尺寸与它被接受时的容器尺寸在两条轴上相等(<1px)时不算高水位,直接按容器取画布;真比容器高的页面(内容 ≠ 视口,桥注入的原始动机)仍按原生尺寸等比缩小。回归用例
tests/localGamePreviewFrame.test.ts→returns the fitted iframe to the container after the host viewport shrinks(改前必红:1416px vs 1015px)。残余边界(明确不修):某个固定尺寸页面恰好等于它被接受时的容器尺寸、且缩小容器后上报的内容尺寸再不变,会一直按容器取画布(页面自身溢出被裁)。评审建议的「内容尺寸没变也把记录改认新容器」实现后实测回退——退出全屏那一帧的过渡上报(内容=放大前旧值、视口=缩小后容器)会被误认成固有尺寸,主 bug 原样复现且同样永久。两者在宿主数据上不可区分,按 AGC 常态选自适应优先。根治在桥/协议侧(尺寸消息多带「本页是否视口耦合」信号),属独立变更。
前后对照
验证
fullbleed与fixed两种游戏页):全屏往返后画布回到容器尺寸;信息栏四态 190px → 26px → 190px → 无栏。npm run ai-game-creator-shell:check:web:tsc+ 1813 项 / 182 文件通过(合并上游斜杠命令退役提交后的口径,合并前该套件为 1924 项)。tests/runPreviewFullscreen.test.tsx(2 例,补出 jsdom 缺失的 Fullscreen API);tests/localGamePreviewFrame.test.ts抽出renderFittedFrame夹具并补 2 条全屏/回灌用例(均验过改前必红);AGC 子集补「信息栏有内容自动展开 / 手动收起 / 再展开」,并把「没有内容时运行页仍渲染两张卡片」的旧断言改成整栏不渲染。npm run check:encoding、npm run check:doc-index、git diff --check全部通过。评审
三个只读 reviewer 并行评审,问题全部闭环:P0(信息栏按钮字段名与派生不一致导致收起失效,已修 + 三重复验)、P2(回声回退的固定尺寸残余,已按实测裁掉更差方案并记录)、P3×2(补 scale 与固定尺寸用例;删掉恒真的「数值微调面板不存在」断言;修正三份文档里「判据 = 资源选中态」的口径)。全屏链路其余结论保持无问题。
文档
PRD §3.4、
docs/technical/【技术方案】AI游戏创作智能体App实施计划-2026-06-24.md运行表现层条目、docs/project-memory/shared-memory/decision-log.md(2026-09-23 条目四条决策 + 2026-08-23 适配条目补一条收口说明)已同步。不在本次范围
8e6ee50ad 运行页收口收口(运行页不挂该侧栏),本次未再改动。