如何确定非等宽字体的制表符宽度(以像素为单位)?
How to determine tab width(in pixels) for non-monospace font?
我正在为我的游戏开发一个类似于 FreeType 的文本渲染器库。我不知道如何确定标签宽度。
当我处理控制字符时,我发现了一个问题,那就是我的文本渲染器不仅适用于等宽字体,而且适用于非等宽字体字体。我知道对于等宽字体,制表符对齐的宽度可以是 4 或 8 个空格,具体取决于文本渲染器的使用情况(AFAIK ,大多数编程 IDE 将制表符设置为 4 个空格;而对于创建表格,软件通常将制表符设置为 8 个空格)。但是对于非等宽字体,我应该使用哪个值?
看了很多 IDE 处理 non-monospace 字体的行为后,我找到了答案:
使用space个字符的宽度('\x20')作为制表符宽度的单位,制表符宽度应为 4 spaces 默认。
我还给了用户一个选择,让用户决定如何对齐字符 non-monospace 字体,一种是正常对齐字符正如我们看到的其他程序(如Microsoft Word,Chrome等)如何对齐non-monospace字体文本,另一种是强制对齐字符为 monospace 样式,固定每个字符的宽度值,固定宽度值是通过扫描所有字母、数字和标点符号,并找到最大值来确定的。而对于 full-width 个字符,我只是让宽度值 x 2.
我正在为我的游戏开发一个类似于 FreeType 的文本渲染器库。我不知道如何确定标签宽度。
当我处理控制字符时,我发现了一个问题,那就是我的文本渲染器不仅适用于等宽字体,而且适用于非等宽字体字体。我知道对于等宽字体,制表符对齐的宽度可以是 4 或 8 个空格,具体取决于文本渲染器的使用情况(AFAIK ,大多数编程 IDE 将制表符设置为 4 个空格;而对于创建表格,软件通常将制表符设置为 8 个空格)。但是对于非等宽字体,我应该使用哪个值?
看了很多 IDE 处理 non-monospace 字体的行为后,我找到了答案:
使用space个字符的宽度('\x20')作为制表符宽度的单位,制表符宽度应为 4 spaces 默认。
我还给了用户一个选择,让用户决定如何对齐字符 non-monospace 字体,一种是正常对齐字符正如我们看到的其他程序(如Microsoft Word,Chrome等)如何对齐non-monospace字体文本,另一种是强制对齐字符为 monospace 样式,固定每个字符的宽度值,固定宽度值是通过扫描所有字母、数字和标点符号,并找到最大值来确定的。而对于 full-width 个字符,我只是让宽度值 x 2.