我使用 Microsoft 的Cascadia Code字体并使用 DirectWrite 绘制文本,ID2D1RenderTarget::DrawTextLayout
使用IDWriteTextLayout::SetDrawingEffect(CreateSolidColorBrush(...))
.
Cascadia Code 有一个“大于或等于”(=>) 的连字,它绘制为单个箭头字形。如果我选择了一半的字形,则使用 HitTestTextRange 绘制背景会突出显示正确的区域,但是将所选字符的绘图效果设置为与未选择的一侧不同的颜色不起作用。使用第二个字符的绘图效果绘制整个字形,导致一侧绘制为白底白字或蓝底黑字。GetClusterMetrics 为其返回两个单独的集群。相反,如果我有一些像 ممم 这样的阿拉伯语文本,它可能使用替代字体,它会绘制为连字,但其中的单个字符将绘制为不同的颜色。
实施 IDWriteTextRenderer 是处理这种情况的最佳方法还是有更简单的方法?
此外,将记事本或 Visual Studio Code 中 Cascadia Code 支持的连字与我的应用程序进行比较表明,大多数连字都是按应有的方式绘制的,但少数不是。-~(减号)在记事本、VS Code、我的应用程序和 Windows SDK 的 PadWrite 示例应用程序中绘制为单个符号,但 /\ 在前两个中仅绘制为倒 V。像 >==>==> 这样的“无限箭头”同样被分解。我需要使用什么设置来启用所有这些设置吗?