Repository navigation
v2.1.8
v2.1.8
动画补上两处「看不见」的地方:切换标签页整页左右滑入,悬停气泡与底部提示条淡入;淡入的基准从「向黑压暗」改成「向页面底色混合」。
| # | 内容 |
|---|---|
| 切标签 = 整页横滑 | 用户:「切换标签也要有一个左右滑动的动画」。原先标签切换是瞬间换掉分屏树的根(split.h:切标签页只是换 root),0 帧过渡。现在按「新标签在旧标签的左边还是右边」定方向:往后的标签从右推进来、往前的从左进。做法是在交给帧差之前重写这一帧的正文:每条行定位(ESC<行>;<列>H)的列号加上本帧位移,落到屏外的格子直接不发 ⇒ 行宽永远不超过屏宽(不会折行溢出),命中的矩形、输入时序一个字节都没动。只有空格的铺底/清行 chunk 故意不参与位移,所以页面没推进来的那一截是干净的底色,不会露出上一页的残留。位移与亮度共用同一条缓动曲线、同一个 15ms 分片 ⇒ 收尾同帧,不会出现「亮到位了还在滑」。 |
| 淡入改成「向底色混合」 | 用户:「气泡的淡入完全没有看出来」。查下来是两件事叠一起:① 悬停气泡(render_settings_tooltip)与底部 toast 原先一帧动画都没有(状态键刻意排除 hover,它们按设计就是瞬现瞬隐),② 旧的淡入是「向黑压暗」,小浮层是实心底色画在页面上,压暗 25% 仍然是个完整的框。现在 c = 底色 + (c - 底色) × 进度:浮层/气泡第一帧几乎与页面同色,是真的「浮出来」。增益 1000 时该式是整数恒等 ⇒ 静止那一帧逐字节不变;只认 3 位十进制分量的写法,没有新增字面量颜色,g_theme_refs 不用登记。 |
| 气泡 / toast 只淡它自己那几行 | 状态键加两位「本帧画没画气泡 / toast」,于是从无到有的那一帧起一段 110ms 淡入;指针在行与行之间扫过去不重播(键不变 ⇒ 不会一路闪),消失仍是即时(淡出在终端里只会读成整屏闪一下)。动画期间只重写气泡/toast 占的那几行的颜色数字,其余行一格不动。 |
| 动画触发点上移到帧尾 | v2.1.7 的起动画挂在 render_settings_panel 出口,切标签时整帧可能根本没有面板 ⇒ 整段判断移到 render_screen 帧尾(theme_remap 之后,混合基准才是主题色)。分屏时也不会再出现「一个窗格的分支把状态冲掉 ⇒ 动画自我重启、屏幕永远留暗色」。[general] anim = off 时这些代码一帧都不执行。 |
| 回归判据 | tests/verify_pane_palette.py 的 R 组扩到 26 条判据(24×100 主档 + 12×100 / 24×40 两档,连多档一起跑出 28 行结果):滑动不数像素,而是拿「整屏文本套一条闭式位移公式」找唯一解(方向与列数一起出来);淡入用「off 与 normal 两次捕获的逐行颜色差集合」;「标签栏只跟着亮、不跟着滑」用「按行定位切段之后数可见字节」;再加一条「动画帧的字节流里不许出现 NUL」—— 动画会改写长度,长度与内容不吻合时缓冲尾巴会被当成光标段发给终端(画面看着正常,因为终端把 NUL 吞了,只有数字节才抓得住)。整套判据拿去跑 v2.1.7 的二进制 ⇒ 恰好且只有 R8 / R8b / R10b / R11 / R12 / R12b / R12c / R13 八条红;拿去跑本轮修 NUL 之前的那一版 ⇒ 只有 NUL 那条红。判据一律不读 C 的实现细节,也不放宽判据掩盖回归。没装 libvterm-dev 的机器(CI 的 macOS runner)上,要拿真实帧回放的屏幕级几条打 SKIP 而不是拿空帧假红、也不是拿 None == None 假绿;字节级的两条(CUP 列号、NUL)照常硬判 —— (TERMUX_NO_VTERM=1 在本机复现过一遍:SKIP 与硬判的分界正如预期)。anim 的毫秒数那条换了两次量法才站得住:① 原来数「最后 12 帧里出现过几种颜色」,慢机器上三档一起撞在窗口上限(CI macOS 实测 7 / 10 / 10);② 换成「一次翻页 + 整场窗口数压色帧数」,又多出一个假倒挂 —— 时长越长,越多收尾帧「淡到与真色四舍五入相同」就不计数了(macOS 实测 4 / 7 / 6,200ms 反而比 110ms 少);③ 定稿是分两头量:60 与 110 用压色帧数(两台机器都是 4 < 7),110 与 200 用整场帧数(本机 2 < 6 < 9 ≤ 15,只要求「不少于一秒里一直在重绘」)。两头都写进判据名里,日志上能看出哪一环是按什么量的 |