DirectWrite 绘制多种颜色的连字?

问题描述

我正在使用 Microsoft 的 Cascadia Code 字体并使用 ID2D1RenderTarget::DrawTextLayout 通过 DirectWrite 绘制文本,并使用 IDWriteTextLayout::SetDrawingEffect(CreateSolidColorBrush(...)) 对各个字形进行着色。

Cascadia Code 有一个“大于或等于”(=>) 的连字,绘制为单箭头字形。如果我选择了一半的字形,则使用 HitTestTextRange 绘制背景会突出显示正确的区域,但将所选字符的绘图效果设置为与未选择侧不同的颜色不起作用。使用第二个字符的绘制效果绘制整个字形,导致一侧绘制为白底白字或蓝底黑字。 GetClusterMetrics 为其返回两个单独的集群。相反,如果我有一些像 ممم 这样的阿拉伯语文本,它大概使用了替代字体,它会绘制为连字,但其中的单个字符将绘制为不同的颜色。

Notepad vs App comparison

实现 IDWriteTextRenderer 是处理这种情况的最佳方法还是有更简单的方法?

此外,将记事本或 Visual Studio Code 中 Cascadia Code 支持的连字与我的应用程序进行比较表明,大多数连字都按应有的方式绘制,但少数不是。 -~(减去波浪号)在记事本、VS Code、我的应用程序和 Windows SDK 的 PadWrite 示例应用程序中绘制为单个符号,但 /\ 仅在前两个中绘制为倒 V。像 >==>==> 这样的“无限箭头”同样被分解。是否需要使用某个设置来启用所有这些设置?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...