Skip to content

Releases: funnywwh/zbrowser

0.8.1

09 Nov 06:05

Choose a tag to compare

ZBrowser v0.8.1-alpha Release Notes

🎉 版本概述

ZBrowser v0.8.1-alpha 是一个重要的文本渲染质量提升版本,主要实现了完整的 TrueType Hinting 支持和小字体抗锯齿优化,显著改善了小尺寸文本的清晰度和可读性。

✨ 主要特性

1. TrueType Hinting 完整实现

实现了完整的 TrueType Hinting 解释器,支持 100+ TrueType 指令,大幅提升小字体渲染质量。

核心功能

  • HintingInterpreter 虚拟机:完整的 TrueType 指令执行引擎
  • 栈操作:PUSH、POP、DUP、CLEAR 等基础栈操作
  • 数学运算:ADD、SUB、MUL、DIV、ABS、NEG 等算术指令
  • 逻辑运算:LT、GT、EQ、AND、OR 等逻辑判断指令
  • 图形状态管理:向量设置、rounding 状态控制
  • 点操作:MIAP、IP、MD、GC 等字形点坐标调整
  • 存储区和 CVT 操作:WS、RS、RCVT、WCVTP 等数据存储和读取

技术细节

  • 支持 fpgm、prep、cvt 表的解析和加载
  • 完整的指令执行流程,包括错误处理
  • 边界情况处理(空指令、栈溢出、无效指令、除零等)
  • 整数溢出保护(point_index 和 cvt_index 有效性检查)

测试覆盖

  • 26 个测试用例,覆盖所有核心功能
  • 包括正常情况、边界条件和错误处理测试
  • 100% 测试通过率

2. 小字体抗锯齿优化

根据字体大小动态调整抗锯齿参数,显著改善小字体(特别是中文字符)的渲染质量。

优化策略

  • 动态参数调整:根据字体大小(< 20px vs ≥ 20px)使用不同的抗锯齿参数
  • 覆盖度优化
    • 小字体最小覆盖度:0.75(大字体:0.95)
    • 小字体边缘覆盖度:0.7(大字体:0.9)
    • 小字体内部阈值:0.6(大字体:0.8)
  • MSDF 参数优化
    • 小字体 MSDF 范围:0.6(大字体:0.75)
    • 小字体 MSDF 权重:0.2(大字体:0.3)
  • 边缘平滑优化
    • 小字体边缘因子:0.65(大字体:0.75)
    • 小字体平滑因子:0.15(大字体:0.2)

效果

  • 小字体笔画更细,避免过粗
  • 中文字符横线渲染更清晰
  • 整体文本可读性提升

🔧 技术改进

字体模块增强

  • 新增 hinting.zig 模块,实现完整的 TrueType Hinting 解释器
  • 扩展 ttf.zig,支持 fpgm、prep、cvt 表解析
  • 优化 glyph.zig,集成 hinting 执行和动态抗锯齿参数

代码质量

  • 修复整数溢出问题(point_index 和 cvt_index 有效性检查)
  • 完善的错误处理机制
  • 全面的测试覆盖(330 个测试用例,全部通过)

📊 测试统计

  • 总测试数:330 个测试用例
  • 测试通过率:100% (330/330)
  • 内存泄漏:0 个
  • Hinting 模块测试:26 个测试用例

🐛 Bug 修复

  • 修复整数溢出问题:在 hinting 解释器中添加 point_index 和 cvt_index 的有效性检查,防止 panic
  • 修复小字体笔画过粗问题:通过动态调整抗锯齿参数,改善小字体渲染质量

📦 文件变更

新增文件

  • src/font/hinting.zig - TrueType Hinting 解释器实现
  • tests/font/hinting_test.zig - Hinting 模块测试用例
  • output.png - 渲染结果示例

修改文件

  • src/font/ttf.zig - 添加 fpgm、prep、cvt 表解析方法
  • src/font/font.zig - 添加 hinting 表访问接口
  • src/font/glyph.zig - 集成 hinting 执行和动态抗锯齿参数
  • src/render/cpu_backend.zig - 初始化 hinting 解释器
  • build.zig - 添加 hinting 模块依赖
  • test.zig - 添加 hinting 测试模块

🚀 使用示例

// 使用示例与之前版本相同
// Hinting 和抗锯齿优化会自动应用
var browser = try Browser.init(allocator);
defer browser.deinit();

try browser.loadHTML(html_content);
try browser.addStylesheet(css_content);
try browser.renderToPNG(width, height, "output.png");

📝 文档更新

  • 更新 README.md:添加 TrueType Hinting 和小字体优化说明
  • 更新 docs/PLAN.md:标记阶段 5(字体模块)为已完成
  • 更新 tests/MISSING_TESTS.md:更新测试统计

🔮 下一步计划

  • Flexbox 布局完整实现
  • Grid 布局完整实现
  • JavaScript 引擎实现
  • DOM API 实现
  • CSS 动画支持

🙏 致谢

感谢所有贡献者和测试者的支持!


版本号: v0.8.1-alpha
发布日期: 2025-01-XX
Zig 版本要求: 0.15.2+
测试状态: ✅ 330/330 测试通过

0

Full Changelog: https://github.com/funnywwh/zbrowser/commits/0.8.1