| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
修:正文「字体堆叠」——上游 gpui-base 行内排版测量用错字体,本地打补丁 用户截图里被标红、字压在一起的那几块正文,逐像素量 + 程序内日志两头对下来, 根因不在 RWork 的样式配置,而在 gpui-base 的行内排版:**测量与绘制用了不同的 字体**。 - InlineFlow 的 measured-layout 闭包是**布局阶段**才被回调的,那时元素与父元素 用 with_text_style 压进样式栈的字族已经出栈,闭包里的 window.text_style() 退回默认字体(比例字体:汉字 1.0em=15px、空格 4.28px); - 同一次绘制的 Inline 在元素树里拿到的是宿主设的 Maple Mono NF CN (汉字 1.2em=18px、空格 9px); - 于是每个含汉字的片段被少算约 18% 的宽度,**下一个片段压在上一个片段的尾部** ——正是用户看到的叠字。纯 ASCII 的行内代码片段不受影响(run 里写死了字族)。 证据(同一段文字,两条路径的字形位置与字形 id 逐字对照): 0,9.25,13.5,18,33,48… vs 0,9,18,27,45,63…,id 也完全不同;全库 1834 个片段, 含汉字的宽度比值中位数 0.822,纯 ASCII 全是 1.000。 改法:把 request_layout 那一刻的组合文字样式抓下来交给闭包(3 行)。 按「两边都要」落地: 1. 本地副本 vendor/gpui-base + 根清单的 [patch.crates-io],构建与发布自动 带修复;副本自带测试跟着门禁跑,tests/vendor_patch.rs 兜底防止更新副本时 把补丁覆盖掉; 2. UPSTREAM_REPORT.md:量化数据、影响面、复现办法与建议的 diff,可直接提上游。 修后同一段会话重扫:含汉字的比值中位数回到 1.000,测量与绘制的字形逐字一致。 | 1 个月前 | |
修:正文「字体堆叠」——上游 gpui-base 行内排版测量用错字体,本地打补丁 用户截图里被标红、字压在一起的那几块正文,逐像素量 + 程序内日志两头对下来, 根因不在 RWork 的样式配置,而在 gpui-base 的行内排版:**测量与绘制用了不同的 字体**。 - InlineFlow 的 measured-layout 闭包是**布局阶段**才被回调的,那时元素与父元素 用 with_text_style 压进样式栈的字族已经出栈,闭包里的 window.text_style() 退回默认字体(比例字体:汉字 1.0em=15px、空格 4.28px); - 同一次绘制的 Inline 在元素树里拿到的是宿主设的 Maple Mono NF CN (汉字 1.2em=18px、空格 9px); - 于是每个含汉字的片段被少算约 18% 的宽度,**下一个片段压在上一个片段的尾部** ——正是用户看到的叠字。纯 ASCII 的行内代码片段不受影响(run 里写死了字族)。 证据(同一段文字,两条路径的字形位置与字形 id 逐字对照): 0,9.25,13.5,18,33,48… vs 0,9,18,27,45,63…,id 也完全不同;全库 1834 个片段, 含汉字的宽度比值中位数 0.822,纯 ASCII 全是 1.000。 改法:把 request_layout 那一刻的组合文字样式抓下来交给闭包(3 行)。 按「两边都要」落地: 1. 本地副本 vendor/gpui-base + 根清单的 [patch.crates-io],构建与发布自动 带修复;副本自带测试跟着门禁跑,tests/vendor_patch.rs 兜底防止更新副本时 把补丁覆盖掉; 2. UPSTREAM_REPORT.md:量化数据、影响面、复现办法与建议的 diff,可直接提上游。 修后同一段会话重扫:含汉字的比值中位数回到 1.000,测量与绘制的字形逐字一致。 | 1 个月前 | |
修:正文「字体堆叠」——上游 gpui-base 行内排版测量用错字体,本地打补丁 用户截图里被标红、字压在一起的那几块正文,逐像素量 + 程序内日志两头对下来, 根因不在 RWork 的样式配置,而在 gpui-base 的行内排版:**测量与绘制用了不同的 字体**。 - InlineFlow 的 measured-layout 闭包是**布局阶段**才被回调的,那时元素与父元素 用 with_text_style 压进样式栈的字族已经出栈,闭包里的 window.text_style() 退回默认字体(比例字体:汉字 1.0em=15px、空格 4.28px); - 同一次绘制的 Inline 在元素树里拿到的是宿主设的 Maple Mono NF CN (汉字 1.2em=18px、空格 9px); - 于是每个含汉字的片段被少算约 18% 的宽度,**下一个片段压在上一个片段的尾部** ——正是用户看到的叠字。纯 ASCII 的行内代码片段不受影响(run 里写死了字族)。 证据(同一段文字,两条路径的字形位置与字形 id 逐字对照): 0,9.25,13.5,18,33,48… vs 0,9,18,27,45,63…,id 也完全不同;全库 1834 个片段, 含汉字的宽度比值中位数 0.822,纯 ASCII 全是 1.000。 改法:把 request_layout 那一刻的组合文字样式抓下来交给闭包(3 行)。 按「两边都要」落地: 1. 本地副本 vendor/gpui-base + 根清单的 [patch.crates-io],构建与发布自动 带修复;副本自带测试跟着门禁跑,tests/vendor_patch.rs 兜底防止更新副本时 把补丁覆盖掉; 2. UPSTREAM_REPORT.md:量化数据、影响面、复现办法与建议的 diff,可直接提上游。 修后同一段会话重扫:含汉字的比值中位数回到 1.000,测量与绘制的字形逐字一致。 | 1 个月前 | |
修:正文「字体堆叠」——上游 gpui-base 行内排版测量用错字体,本地打补丁 用户截图里被标红、字压在一起的那几块正文,逐像素量 + 程序内日志两头对下来, 根因不在 RWork 的样式配置,而在 gpui-base 的行内排版:**测量与绘制用了不同的 字体**。 - InlineFlow 的 measured-layout 闭包是**布局阶段**才被回调的,那时元素与父元素 用 with_text_style 压进样式栈的字族已经出栈,闭包里的 window.text_style() 退回默认字体(比例字体:汉字 1.0em=15px、空格 4.28px); - 同一次绘制的 Inline 在元素树里拿到的是宿主设的 Maple Mono NF CN (汉字 1.2em=18px、空格 9px); - 于是每个含汉字的片段被少算约 18% 的宽度,**下一个片段压在上一个片段的尾部** ——正是用户看到的叠字。纯 ASCII 的行内代码片段不受影响(run 里写死了字族)。 证据(同一段文字,两条路径的字形位置与字形 id 逐字对照): 0,9.25,13.5,18,33,48… vs 0,9,18,27,45,63…,id 也完全不同;全库 1834 个片段, 含汉字的宽度比值中位数 0.822,纯 ASCII 全是 1.000。 改法:把 request_layout 那一刻的组合文字样式抓下来交给闭包(3 行)。 按「两边都要」落地: 1. 本地副本 vendor/gpui-base + 根清单的 [patch.crates-io],构建与发布自动 带修复;副本自带测试跟着门禁跑,tests/vendor_patch.rs 兜底防止更新副本时 把补丁覆盖掉; 2. UPSTREAM_REPORT.md:量化数据、影响面、复现办法与建议的 diff,可直接提上游。 修后同一段会话重扫:含汉字的比值中位数回到 1.000,测量与绘制的字形逐字一致。 | 1 个月前 | |
修:正文「字体堆叠」——上游 gpui-base 行内排版测量用错字体,本地打补丁 用户截图里被标红、字压在一起的那几块正文,逐像素量 + 程序内日志两头对下来, 根因不在 RWork 的样式配置,而在 gpui-base 的行内排版:**测量与绘制用了不同的 字体**。 - InlineFlow 的 measured-layout 闭包是**布局阶段**才被回调的,那时元素与父元素 用 with_text_style 压进样式栈的字族已经出栈,闭包里的 window.text_style() 退回默认字体(比例字体:汉字 1.0em=15px、空格 4.28px); - 同一次绘制的 Inline 在元素树里拿到的是宿主设的 Maple Mono NF CN (汉字 1.2em=18px、空格 9px); - 于是每个含汉字的片段被少算约 18% 的宽度,**下一个片段压在上一个片段的尾部** ——正是用户看到的叠字。纯 ASCII 的行内代码片段不受影响(run 里写死了字族)。 证据(同一段文字,两条路径的字形位置与字形 id 逐字对照): 0,9.25,13.5,18,33,48… vs 0,9,18,27,45,63…,id 也完全不同;全库 1834 个片段, 含汉字的宽度比值中位数 0.822,纯 ASCII 全是 1.000。 改法:把 request_layout 那一刻的组合文字样式抓下来交给闭包(3 行)。 按「两边都要」落地: 1. 本地副本 vendor/gpui-base + 根清单的 [patch.crates-io],构建与发布自动 带修复;副本自带测试跟着门禁跑,tests/vendor_patch.rs 兜底防止更新副本时 把补丁覆盖掉; 2. UPSTREAM_REPORT.md:量化数据、影响面、复现办法与建议的 diff,可直接提上游。 修后同一段会话重扫:含汉字的比值中位数回到 1.000,测量与绘制的字形逐字一致。 | 1 个月前 | |
修:正文「字体堆叠」——上游 gpui-base 行内排版测量用错字体,本地打补丁 用户截图里被标红、字压在一起的那几块正文,逐像素量 + 程序内日志两头对下来, 根因不在 RWork 的样式配置,而在 gpui-base 的行内排版:**测量与绘制用了不同的 字体**。 - InlineFlow 的 measured-layout 闭包是**布局阶段**才被回调的,那时元素与父元素 用 with_text_style 压进样式栈的字族已经出栈,闭包里的 window.text_style() 退回默认字体(比例字体:汉字 1.0em=15px、空格 4.28px); - 同一次绘制的 Inline 在元素树里拿到的是宿主设的 Maple Mono NF CN (汉字 1.2em=18px、空格 9px); - 于是每个含汉字的片段被少算约 18% 的宽度,**下一个片段压在上一个片段的尾部** ——正是用户看到的叠字。纯 ASCII 的行内代码片段不受影响(run 里写死了字族)。 证据(同一段文字,两条路径的字形位置与字形 id 逐字对照): 0,9.25,13.5,18,33,48… vs 0,9,18,27,45,63…,id 也完全不同;全库 1834 个片段, 含汉字的宽度比值中位数 0.822,纯 ASCII 全是 1.000。 改法:把 request_layout 那一刻的组合文字样式抓下来交给闭包(3 行)。 按「两边都要」落地: 1. 本地副本 vendor/gpui-base + 根清单的 [patch.crates-io],构建与发布自动 带修复;副本自带测试跟着门禁跑,tests/vendor_patch.rs 兜底防止更新副本时 把补丁覆盖掉; 2. UPSTREAM_REPORT.md:量化数据、影响面、复现办法与建议的 diff,可直接提上游。 修后同一段会话重扫:含汉字的比值中位数回到 1.000,测量与绘制的字形逐字一致。 | 1 个月前 | |
修:正文「字体堆叠」——上游 gpui-base 行内排版测量用错字体,本地打补丁 用户截图里被标红、字压在一起的那几块正文,逐像素量 + 程序内日志两头对下来, 根因不在 RWork 的样式配置,而在 gpui-base 的行内排版:**测量与绘制用了不同的 字体**。 - InlineFlow 的 measured-layout 闭包是**布局阶段**才被回调的,那时元素与父元素 用 with_text_style 压进样式栈的字族已经出栈,闭包里的 window.text_style() 退回默认字体(比例字体:汉字 1.0em=15px、空格 4.28px); - 同一次绘制的 Inline 在元素树里拿到的是宿主设的 Maple Mono NF CN (汉字 1.2em=18px、空格 9px); - 于是每个含汉字的片段被少算约 18% 的宽度,**下一个片段压在上一个片段的尾部** ——正是用户看到的叠字。纯 ASCII 的行内代码片段不受影响(run 里写死了字族)。 证据(同一段文字,两条路径的字形位置与字形 id 逐字对照): 0,9.25,13.5,18,33,48… vs 0,9,18,27,45,63…,id 也完全不同;全库 1834 个片段, 含汉字的宽度比值中位数 0.822,纯 ASCII 全是 1.000。 改法:把 request_layout 那一刻的组合文字样式抓下来交给闭包(3 行)。 按「两边都要」落地: 1. 本地副本 vendor/gpui-base + 根清单的 [patch.crates-io],构建与发布自动 带修复;副本自带测试跟着门禁跑,tests/vendor_patch.rs 兜底防止更新副本时 把补丁覆盖掉; 2. UPSTREAM_REPORT.md:量化数据、影响面、复现办法与建议的 diff,可直接提上游。 修后同一段会话重扫:含汉字的比值中位数回到 1.000,测量与绘制的字形逐字一致。 | 1 个月前 | |
修:正文「字体堆叠」——上游 gpui-base 行内排版测量用错字体,本地打补丁 用户截图里被标红、字压在一起的那几块正文,逐像素量 + 程序内日志两头对下来, 根因不在 RWork 的样式配置,而在 gpui-base 的行内排版:**测量与绘制用了不同的 字体**。 - InlineFlow 的 measured-layout 闭包是**布局阶段**才被回调的,那时元素与父元素 用 with_text_style 压进样式栈的字族已经出栈,闭包里的 window.text_style() 退回默认字体(比例字体:汉字 1.0em=15px、空格 4.28px); - 同一次绘制的 Inline 在元素树里拿到的是宿主设的 Maple Mono NF CN (汉字 1.2em=18px、空格 9px); - 于是每个含汉字的片段被少算约 18% 的宽度,**下一个片段压在上一个片段的尾部** ——正是用户看到的叠字。纯 ASCII 的行内代码片段不受影响(run 里写死了字族)。 证据(同一段文字,两条路径的字形位置与字形 id 逐字对照): 0,9.25,13.5,18,33,48… vs 0,9,18,27,45,63…,id 也完全不同;全库 1834 个片段, 含汉字的宽度比值中位数 0.822,纯 ASCII 全是 1.000。 改法:把 request_layout 那一刻的组合文字样式抓下来交给闭包(3 行)。 按「两边都要」落地: 1. 本地副本 vendor/gpui-base + 根清单的 [patch.crates-io],构建与发布自动 带修复;副本自带测试跟着门禁跑,tests/vendor_patch.rs 兜底防止更新副本时 把补丁覆盖掉; 2. UPSTREAM_REPORT.md:量化数据、影响面、复现办法与建议的 diff,可直接提上游。 修后同一段会话重扫:含汉字的比值中位数回到 1.000,测量与绘制的字形逐字一致。 | 1 个月前 | |
修:正文「字体堆叠」——上游 gpui-base 行内排版测量用错字体,本地打补丁 用户截图里被标红、字压在一起的那几块正文,逐像素量 + 程序内日志两头对下来, 根因不在 RWork 的样式配置,而在 gpui-base 的行内排版:**测量与绘制用了不同的 字体**。 - InlineFlow 的 measured-layout 闭包是**布局阶段**才被回调的,那时元素与父元素 用 with_text_style 压进样式栈的字族已经出栈,闭包里的 window.text_style() 退回默认字体(比例字体:汉字 1.0em=15px、空格 4.28px); - 同一次绘制的 Inline 在元素树里拿到的是宿主设的 Maple Mono NF CN (汉字 1.2em=18px、空格 9px); - 于是每个含汉字的片段被少算约 18% 的宽度,**下一个片段压在上一个片段的尾部** ——正是用户看到的叠字。纯 ASCII 的行内代码片段不受影响(run 里写死了字族)。 证据(同一段文字,两条路径的字形位置与字形 id 逐字对照): 0,9.25,13.5,18,33,48… vs 0,9,18,27,45,63…,id 也完全不同;全库 1834 个片段, 含汉字的宽度比值中位数 0.822,纯 ASCII 全是 1.000。 改法:把 request_layout 那一刻的组合文字样式抓下来交给闭包(3 行)。 按「两边都要」落地: 1. 本地副本 vendor/gpui-base + 根清单的 [patch.crates-io],构建与发布自动 带修复;副本自带测试跟着门禁跑,tests/vendor_patch.rs 兜底防止更新副本时 把补丁覆盖掉; 2. UPSTREAM_REPORT.md:量化数据、影响面、复现办法与建议的 diff,可直接提上游。 修后同一段会话重扫:含汉字的比值中位数回到 1.000,测量与绘制的字形逐字一致。 | 1 个月前 | |
修:正文「字体堆叠」——上游 gpui-base 行内排版测量用错字体,本地打补丁 用户截图里被标红、字压在一起的那几块正文,逐像素量 + 程序内日志两头对下来, 根因不在 RWork 的样式配置,而在 gpui-base 的行内排版:**测量与绘制用了不同的 字体**。 - InlineFlow 的 measured-layout 闭包是**布局阶段**才被回调的,那时元素与父元素 用 with_text_style 压进样式栈的字族已经出栈,闭包里的 window.text_style() 退回默认字体(比例字体:汉字 1.0em=15px、空格 4.28px); - 同一次绘制的 Inline 在元素树里拿到的是宿主设的 Maple Mono NF CN (汉字 1.2em=18px、空格 9px); - 于是每个含汉字的片段被少算约 18% 的宽度,**下一个片段压在上一个片段的尾部** ——正是用户看到的叠字。纯 ASCII 的行内代码片段不受影响(run 里写死了字族)。 证据(同一段文字,两条路径的字形位置与字形 id 逐字对照): 0,9.25,13.5,18,33,48… vs 0,9,18,27,45,63…,id 也完全不同;全库 1834 个片段, 含汉字的宽度比值中位数 0.822,纯 ASCII 全是 1.000。 改法:把 request_layout 那一刻的组合文字样式抓下来交给闭包(3 行)。 按「两边都要」落地: 1. 本地副本 vendor/gpui-base + 根清单的 [patch.crates-io],构建与发布自动 带修复;副本自带测试跟着门禁跑,tests/vendor_patch.rs 兜底防止更新副本时 把补丁覆盖掉; 2. UPSTREAM_REPORT.md:量化数据、影响面、复现办法与建议的 diff,可直接提上游。 修后同一段会话重扫:含汉字的比值中位数回到 1.000,测量与绘制的字形逐字一致。 | 1 个月前 | |
修:正文「字体堆叠」——上游 gpui-base 行内排版测量用错字体,本地打补丁 用户截图里被标红、字压在一起的那几块正文,逐像素量 + 程序内日志两头对下来, 根因不在 RWork 的样式配置,而在 gpui-base 的行内排版:**测量与绘制用了不同的 字体**。 - InlineFlow 的 measured-layout 闭包是**布局阶段**才被回调的,那时元素与父元素 用 with_text_style 压进样式栈的字族已经出栈,闭包里的 window.text_style() 退回默认字体(比例字体:汉字 1.0em=15px、空格 4.28px); - 同一次绘制的 Inline 在元素树里拿到的是宿主设的 Maple Mono NF CN (汉字 1.2em=18px、空格 9px); - 于是每个含汉字的片段被少算约 18% 的宽度,**下一个片段压在上一个片段的尾部** ——正是用户看到的叠字。纯 ASCII 的行内代码片段不受影响(run 里写死了字族)。 证据(同一段文字,两条路径的字形位置与字形 id 逐字对照): 0,9.25,13.5,18,33,48… vs 0,9,18,27,45,63…,id 也完全不同;全库 1834 个片段, 含汉字的宽度比值中位数 0.822,纯 ASCII 全是 1.000。 改法:把 request_layout 那一刻的组合文字样式抓下来交给闭包(3 行)。 按「两边都要」落地: 1. 本地副本 vendor/gpui-base + 根清单的 [patch.crates-io],构建与发布自动 带修复;副本自带测试跟着门禁跑,tests/vendor_patch.rs 兜底防止更新副本时 把补丁覆盖掉; 2. UPSTREAM_REPORT.md:量化数据、影响面、复现办法与建议的 diff,可直接提上游。 修后同一段会话重扫:含汉字的比值中位数回到 1.000,测量与绘制的字形逐字一致。 | 1 个月前 | |
修:正文「字体堆叠」——上游 gpui-base 行内排版测量用错字体,本地打补丁 用户截图里被标红、字压在一起的那几块正文,逐像素量 + 程序内日志两头对下来, 根因不在 RWork 的样式配置,而在 gpui-base 的行内排版:**测量与绘制用了不同的 字体**。 - InlineFlow 的 measured-layout 闭包是**布局阶段**才被回调的,那时元素与父元素 用 with_text_style 压进样式栈的字族已经出栈,闭包里的 window.text_style() 退回默认字体(比例字体:汉字 1.0em=15px、空格 4.28px); - 同一次绘制的 Inline 在元素树里拿到的是宿主设的 Maple Mono NF CN (汉字 1.2em=18px、空格 9px); - 于是每个含汉字的片段被少算约 18% 的宽度,**下一个片段压在上一个片段的尾部** ——正是用户看到的叠字。纯 ASCII 的行内代码片段不受影响(run 里写死了字族)。 证据(同一段文字,两条路径的字形位置与字形 id 逐字对照): 0,9.25,13.5,18,33,48… vs 0,9,18,27,45,63…,id 也完全不同;全库 1834 个片段, 含汉字的宽度比值中位数 0.822,纯 ASCII 全是 1.000。 改法:把 request_layout 那一刻的组合文字样式抓下来交给闭包(3 行)。 按「两边都要」落地: 1. 本地副本 vendor/gpui-base + 根清单的 [patch.crates-io],构建与发布自动 带修复;副本自带测试跟着门禁跑,tests/vendor_patch.rs 兜底防止更新副本时 把补丁覆盖掉; 2. UPSTREAM_REPORT.md:量化数据、影响面、复现办法与建议的 diff,可直接提上游。 修后同一段会话重扫:含汉字的比值中位数回到 1.000,测量与绘制的字形逐字一致。 | 1 个月前 | |
修:正文「字体堆叠」——上游 gpui-base 行内排版测量用错字体,本地打补丁 用户截图里被标红、字压在一起的那几块正文,逐像素量 + 程序内日志两头对下来, 根因不在 RWork 的样式配置,而在 gpui-base 的行内排版:**测量与绘制用了不同的 字体**。 - InlineFlow 的 measured-layout 闭包是**布局阶段**才被回调的,那时元素与父元素 用 with_text_style 压进样式栈的字族已经出栈,闭包里的 window.text_style() 退回默认字体(比例字体:汉字 1.0em=15px、空格 4.28px); - 同一次绘制的 Inline 在元素树里拿到的是宿主设的 Maple Mono NF CN (汉字 1.2em=18px、空格 9px); - 于是每个含汉字的片段被少算约 18% 的宽度,**下一个片段压在上一个片段的尾部** ——正是用户看到的叠字。纯 ASCII 的行内代码片段不受影响(run 里写死了字族)。 证据(同一段文字,两条路径的字形位置与字形 id 逐字对照): 0,9.25,13.5,18,33,48… vs 0,9,18,27,45,63…,id 也完全不同;全库 1834 个片段, 含汉字的宽度比值中位数 0.822,纯 ASCII 全是 1.000。 改法:把 request_layout 那一刻的组合文字样式抓下来交给闭包(3 行)。 按「两边都要」落地: 1. 本地副本 vendor/gpui-base + 根清单的 [patch.crates-io],构建与发布自动 带修复;副本自带测试跟着门禁跑,tests/vendor_patch.rs 兜底防止更新副本时 把补丁覆盖掉; 2. UPSTREAM_REPORT.md:量化数据、影响面、复现办法与建议的 diff,可直接提上游。 修后同一段会话重扫:含汉字的比值中位数回到 1.000,测量与绘制的字形逐字一致。 | 1 个月前 | |
修:正文「字体堆叠」——上游 gpui-base 行内排版测量用错字体,本地打补丁 用户截图里被标红、字压在一起的那几块正文,逐像素量 + 程序内日志两头对下来, 根因不在 RWork 的样式配置,而在 gpui-base 的行内排版:**测量与绘制用了不同的 字体**。 - InlineFlow 的 measured-layout 闭包是**布局阶段**才被回调的,那时元素与父元素 用 with_text_style 压进样式栈的字族已经出栈,闭包里的 window.text_style() 退回默认字体(比例字体:汉字 1.0em=15px、空格 4.28px); - 同一次绘制的 Inline 在元素树里拿到的是宿主设的 Maple Mono NF CN (汉字 1.2em=18px、空格 9px); - 于是每个含汉字的片段被少算约 18% 的宽度,**下一个片段压在上一个片段的尾部** ——正是用户看到的叠字。纯 ASCII 的行内代码片段不受影响(run 里写死了字族)。 证据(同一段文字,两条路径的字形位置与字形 id 逐字对照): 0,9.25,13.5,18,33,48… vs 0,9,18,27,45,63…,id 也完全不同;全库 1834 个片段, 含汉字的宽度比值中位数 0.822,纯 ASCII 全是 1.000。 改法:把 request_layout 那一刻的组合文字样式抓下来交给闭包(3 行)。 按「两边都要」落地: 1. 本地副本 vendor/gpui-base + 根清单的 [patch.crates-io],构建与发布自动 带修复;副本自带测试跟着门禁跑,tests/vendor_patch.rs 兜底防止更新副本时 把补丁覆盖掉; 2. UPSTREAM_REPORT.md:量化数据、影响面、复现办法与建议的 diff,可直接提上游。 修后同一段会话重扫:含汉字的比值中位数回到 1.000,测量与绘制的字形逐字一致。 | 1 个月前 | |
修:正文「字体堆叠」——上游 gpui-base 行内排版测量用错字体,本地打补丁 用户截图里被标红、字压在一起的那几块正文,逐像素量 + 程序内日志两头对下来, 根因不在 RWork 的样式配置,而在 gpui-base 的行内排版:**测量与绘制用了不同的 字体**。 - InlineFlow 的 measured-layout 闭包是**布局阶段**才被回调的,那时元素与父元素 用 with_text_style 压进样式栈的字族已经出栈,闭包里的 window.text_style() 退回默认字体(比例字体:汉字 1.0em=15px、空格 4.28px); - 同一次绘制的 Inline 在元素树里拿到的是宿主设的 Maple Mono NF CN (汉字 1.2em=18px、空格 9px); - 于是每个含汉字的片段被少算约 18% 的宽度,**下一个片段压在上一个片段的尾部** ——正是用户看到的叠字。纯 ASCII 的行内代码片段不受影响(run 里写死了字族)。 证据(同一段文字,两条路径的字形位置与字形 id 逐字对照): 0,9.25,13.5,18,33,48… vs 0,9,18,27,45,63…,id 也完全不同;全库 1834 个片段, 含汉字的宽度比值中位数 0.822,纯 ASCII 全是 1.000。 改法:把 request_layout 那一刻的组合文字样式抓下来交给闭包(3 行)。 按「两边都要」落地: 1. 本地副本 vendor/gpui-base + 根清单的 [patch.crates-io],构建与发布自动 带修复;副本自带测试跟着门禁跑,tests/vendor_patch.rs 兜底防止更新副本时 把补丁覆盖掉; 2. UPSTREAM_REPORT.md:量化数据、影响面、复现办法与建议的 diff,可直接提上游。 修后同一段会话重扫:含汉字的比值中位数回到 1.000,测量与绘制的字形逐字一致。 | 1 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 |