Skip to content

feat(input): 测不准文字末尾的情形一律换位置不隐藏 —— 缩放祖先回落右下角,字体加载完、站点改样式后重新对齐(#668) - #720

Merged
Teeeeeeeerry merged 2 commits into
mainfrom
feat/668-dot-fallback-cases
Oct 7, 2026
Merged

Teeeeeeeerry merged 2 commits into
mainfrom
feat/668-dot-fallback-cases

Conversation

@Teeeeeeeerry

Copy link
Copy Markdown
Owner

问题

#665 保留了“量不出来就回落框内侧右下角”这条路,但会量不准的几种情形并没有走到它:

  • 祖先带 transform 缩放:镜像量出的是没缩放的排版距离,圆点被画到错的位置。回落位置本身也按没缩放的尺寸算,会落到框外。
  • 网页字体在停手之后才加载完:文字变宽了,圆点还停在旧末尾。
  • 站点在输入过程中或停手后改了框的样式或尺寸:圆点同样停在旧位置。

根因

  • 测量只在框没有渲染时返回 null,没有识别缩放。
  • 可见区域把排版尺寸(client*)直接加在屏幕坐标上。
  • 重算只挂在输入、滚动、窗口尺寸上,字体加载与框的样式、尺寸变化都不触发。

修复

验证

  • TC-E2E-139: 把 #reply 包进 scale(0.5) 的容器。圆点出现在屏幕上框的内侧右下角,误差不超过 1px;它在最上层,点下去照常翻译写回。修复前横向差 91px。
  • TC-E2E-140:
    • 测试字体(每个字形 1em 宽,由 fontTools 生成,放在夹具目录)由用例控制下载时机:停手后才放行下载,圆点右移到新末尾。
    • 改行内字号后重新对齐。
    • 经样式表把框改窄(不碰框的属性)后,圆点落到下面的行。
    • 修复前字体加载后差 46px。
  • 单元测试: 新增 2 条,都走回落分支观察。一条是字体加载完成后重新对齐,一条是站点改了 style / class 后重新对齐。
  • 测试结果:
    • pnpm test:115 个文件、1426 条,全部通过。
    • pnpm typecheck 通过。
    • pnpm test:e2e:core:97 条通过,2 条跳过。

Closes #668

Teeeeeeeerry and others added 2 commits October 7, 2026 13:00
- 祖先带 transform 时,镜像量出的是没缩放的排版距离:屏幕尺寸与排版尺寸
  差出 1px 以上即认定量不准,交给回落(ADR-0006:换位置,不是不显示)。
- 回落与钳制用的可见区域按屏幕尺寸与排版尺寸之比换算,缩放下回落位置
  仍在框内侧右下角。
- 停手之后网页字体才加载完(document.fonts 的 loadingdone)、站点改了框的
  行内样式或 class、经样式表或父容器改了框的尺寸,都重新对齐一次;还在
  等停手时不量,沿用 #670 的时机。

端到端用的测试字体(每个字形 1em 宽的方块)由 fontTools 生成,放在夹具
目录,由用例控制它何时下载完成。

Co-Authored-By: zhexuancai-uts <261878103+zhexuancai-uts@users.noreply.github.com>
Co-Authored-By: zhexuancai-uts <261878103+zhexuancai-uts@users.noreply.github.com>
@Teeeeeeeerry
Teeeeeeeerry merged commit 9f4d9b0 into main Oct 7, 2026
6 checks passed
@Teeeeeeeerry
Teeeeeeeerry deleted the feat/668-dot-fallback-cases branch October 7, 2026 02:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

输入翻译:测不出文字末尾时回落框内侧右下角(#633)

1 participant