我目前正在使用 FreeType + Harfbuzz 渲染文本,现在正在尝试引入垂直文本渲染(主要针对东亚脚本)。
我面临的问题是我无法弄清楚一列文本应该有多宽。对于水平文本,我们可以使用
ascent - descent
找出行高,但由于在垂直文本的情况下未提供这些值(“上升”/“下降”分别是字形的左侧和右侧部分),我有不知道我的文本栏应该有多宽。
我尝试使用 bbox 宽度作为字体,但不同字体之间的框变化很大,没有提供好的信息。
我认为这个网站可能有用:
我认为这可能是一个反复试验的情况,但是您也可以尝试以下步骤:
获取一系列垂直文本并将其输入 Harfbuzz 以获得字形和字形位置
获取生成的字形位置并使用 hb_font_subtract_glyph_origin_for_direction 中的值调整它们
应从每个字形的 y 位置中减去 vmtx 表的顶部方位
然后应从 y- 中减去每个字形的最大 y 范围 每个字形的位置
如果我想要中心基线,则应通过 vmtx 表中的 vertTypoDescender 进一步调整 x 位置
在这些位置绘制字形