Skip to content

feat: 替换点阵字体为FreeType矢量渲染,支持运行时字体/字号/字重、行边距切换、后台排版线程及页面锚点恢复#30

Closed
jingxbw-work wants to merge 2 commits intoOpenSiFli:mainfrom
jingxbw-work:main
Closed

Conversation

@jingxbw-work
Copy link
Copy Markdown
Contributor

主要改动

将点阵字体引擎替换为 FreeType 矢量字体渲染,支持从 TF 卡加载 TTF 字体文件,实现运行时字体/字号/行距切换。新增后台排版线程和字体预热线程提升翻页响应速度,通过互斥锁和页面锚点机制保证并发安全和设置切换后的阅读位置恢复。

新增文件

  • lib/epdiy/font_ft.c/.h — FreeType 矢量字体引擎,替代旧版 font.c 点阵方案;含 LRU 字形缓存(3MB)、CMap 缓存(4096 条)、可变字体 wght 轴支持、异步预热线程
  • src/ft_dfs_bridge.c — FreeType 文件 I/O 桥接层,内置 64KB 低区预读 + 16×4KB LRU 多槽缓冲,减少 SD 卡随机读取
  • src/font_manager.c/.h — 字体管理器,启动时扫描 /fonts 目录,支持运行时切换字体,失败时自动回退到内置字体
  • src/reading_settings.cpp/.h — 阅读设置页面(长按 K2 进入),可调字体、字号、字重、行距、边距;持久化到 TF 卡 /settings.cfg
  • font/SConscript + tools/font_converter.py — 构建时将 TTF 文件转换为带 .font_data section 属性的 C 数组,链接到 PSRAM

修改文件

核心逻辑

  • src/main.cpp — 设置页面集成(READING_SETTINGS 状态)、锚点保存/恢复(进入设置前保存、退出后恢复阅读位置)、电池刷屏优化(仅百分比或充电状态变化时刷新)、SD 卡电源保护(后台排版线程或字体预热线程运行时不断电)
  • lib/Epub/EpubList/EpubReader.cpp/.h — 后台排版线程(优先级 24、32KB 栈),仅在 render() 末尾统一启动,消除 prev() 向前翻章时的竞态;字体切换时通过页面锚点(PageAnchor)恢复阅读位置;next() 翻到未排好的页时等待后台线程而非同步阻塞
  • lib/Epub/RubbishHtmlParser/RubbishHtmlParser.cpp/.h — 互斥锁保护 pages 向量读写(block 排版不持锁、分页 push_back 持锁);新增 PageAnchor 结构体和锚点查找接口(get_page_anchor/find_page_by_anchor);分页底部溢出修复(分页条件从 m_layout_y + m_layout_line_height 改为 m_layout_y + 2 * m_layout_line_height

适配改动

  • src/epub_fonts.c — 移除点阵字体头文件引用,改为 FreeType dummy stubs
  • src/epub_mem.c — 新增 FreeType 内存分配适配(ft_smalloc/ft_sfree/ft_srealloc/ft_scalloc 指向 PSRAM 堆)
  • src/boards/SF32Paper.cpp — SD 卡电源管理接口
  • src/boards/controls/Actions.h — 新增 LONG_SELECT 动作
  • src/boards/controls/SF32_ButtonControls.cpp — 长按检测逻辑
  • lib/Epub/Renderer/EpdiyFrameBufferRenderer.hdraw_text 改用 FreeType API(get_line_height 调用 epd_font_ft_get_line_height

构建与链接

  • project/SConscriptsrc/SConscript — 加入新源文件
  • project/proj.conf — 项目配置更新
  • link.lds*epub_fonts.o (.text* .rodata*)*(.font_data)
  • link.sctfont.o (+RO)font_ft.o (+RO)

删除文件

  • lib/epdiy/font.c — 旧版点阵字体引擎
  • Fonts/ 目录(bold_font.hbold_italic_font.hitalic_font.hregular_font.h)— 旧版点阵字体头文件

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.

1 participant