代码之家  ›  专栏  ›  技术社区  ›  Zoë Peterson RRUZ

DirectWrite用多种颜色绘制连字?

  •  0
  • Zoë Peterson RRUZ  · 技术社区  · 3 年前

    我正在使用微软的 Cascadia Code 使用DirectWrite编写字体和绘图文本 ID2D1RenderTarget::DrawTextLayout ,使用以下颜色对单个字形进行着色 IDWriteTextLayout::SetDrawingEffect(CreateSolidColorBrush(...)) .

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

    Notepad vs App comparison

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

    此外,将记事本或Visual Studio Code中支持的Cascadia Code连字与我的应用程序进行比较后发现,大多数连字都是按原样绘制的,但也有少数连字不是。-~(减号)在记事本、VS Code、我的应用程序和Windows SDK的PadWrite示例应用程序中绘制为单个符号,但/\在前两个中只绘制为倒V。“无限箭头”如>==>==>同样被拆散。是否有一个我需要使用的设置来启用所有这些功能?

    0 回复  |  直到 3 年前
    推荐文章