以下是使用IDWriteTextLayout
尺寸为 250x100 的布局。它仅包含 150 个阿拉伯字母 U+062A,没有空格,使用 Calibri 24(正常重量/样式/拉伸)。蓝色框显示 250x100 布局区域(文本溢出,因为我没有设置修剪模式),绿色框显示来自指标的布局尺寸,粉红色框考虑了悬垂指标,灰色框来自点击测试每个角色。
将其与以下内容进行比较,唯一的区别是我调用IDWriteTextLayout::SetTypography
并传递了一个空IDWriteTypography
对象,该对象是由创建的IDWriteFactory::CreateTypography
,根本没有修改。
单看文本的外观,每行的最后一个字符都采用了阿拉伯语“结束”上下文形式,我相信这通常适用于单词的最后一个字符(我不懂阿拉伯语)。我目前只能猜测是 DirectWrite 中的一个错误,这导致文本实际上挂在指定的布局区域和指标返回的区域之外(它挂在框外的量似乎等于添加的额外宽度通过上下文形式的变化)。
从其他实验来看,似乎设置一个空IDWriteTypography
对象具有禁用所有可能的字体功能的效果。因此,通过禁用一些默认情况下显然启用的印刷字体功能,我让它在行尾使用“结束”形式的字符,即使它们不在单词的末尾。哪个字体功能正在控制这种行为?我尝试调整实例以启用(将其值设置为 1)文档IDWriteTypography
中列出的每个字体功能,一次一个,并且它们都不会导致旧外观。相关功能是实际使用整数值而不是布尔值的功能之一吗?
我的目标是出于不相关的原因IDWriteTypography
在我的对象上使用一个对象IDWriteTextLayout
,但要避免将文本挂在布局区域之外。因此,或者,是否有其他方法可以解决这种行为?