gpt4 book ai didi

winapi - 字体如何告诉操作系统 "I AM a MONSPACED/FIXED-WIDTH FONT"?

转载 作者:行者123 更新时间:2023-12-04 17:43:59 31 4
gpt4 key购买 nike

在第一个时,我只想知道,为什么在Windows 10上的IDE Pycharm,虽然“仅显示单次字体”检查,但在编辑器的字体选择对话框中未列出许多字体[设置/编辑器/颜色和字体/font],也是薄荷糖。

我不知道 pycharm 是怎么做的,但是 mintty 使用了 win32 API“L​​OGFONT”。

那么,windows 操作系统如何知道字体是否为等宽(固定宽度)?

IE。:
“source code pro”被列出,“source code pro black/extralight/light……不是;

列出了“fira 代码”,但未列出 fira 代码 light/medium/retina;

并且,如果“仅显示等宽”,则不会在此处列出其他一些等宽字体。

似乎pycharm仅在选中“仅显示等宽字体”时才识别字体系列名称

在 OSX(Mavericks) 中,它有点复杂:如果选中了“仅显示等宽字体”,pycharm 仍然可以获得系列名称,但如果安装了粗细加权字体版本,则它无法知道默认的字体粗细。

然后,我尝试修改一些字体,顺便在font forge 中查看原始字体的'file-info',但我不知道哪个部分真正影响了WINDOWS 或PYCHARM(IDEA/INTELIJ/by JDK)事实上?)知道哪种字体是等宽的。

在“OS/2”部分,任何提到的固定宽度/等宽/等宽参数都被检查,但没有任何帮助,并且在 Windows pycharm 中仍然无法检测到它们。

所以,最后,我真的想知道,TTF 文件或任何其他字体文件类型使用哪个参数来告诉 [windows/osx/mac os/linux] 操作系统“我是等宽的”?

最佳答案

PyCharm 和所有 JetBrains IDEA 套件都不使用字体标志来识别等宽字体。相反,他们使用以下算法确定字体是否是等宽的:

  • 'l' , 'W'' '常规变体的字符宽度相同,大小为 12?
  • 'l' , 'W'' '粗体字符的宽度相同
    作为 12 码的常规变体?
  • 'l' , 'W'' '斜体变体的字符相同
    宽度作为尺寸 12 的常规变体?
  • 'l' , 'W'' '粗斜体变体的字符
    与尺寸 12 的常规变体宽度相同?

  • 如果上述任何宽度计算返回不一致的答案,字体将被列为非等宽字体。

    要解决此问题,您应该安装您尝试使用的字体的粗体变体。如果字体的粗体版本不可用,IntelliJ 的字体渲染器将自动生成影响字符宽度的字体,因此会导致等宽检查失败。

    来源 : The IntelliJ Community Edition Source Code (为简洁起见,摘录缩短,并根据 Apache 2.0 许可而非 StackOverflow 的 CC-BY-SA 许可获得许可。)
    private static int getFontWidth(Font font, int mask) {
    int width = getCharWidth(font, ' ');
    return width == getCharWidth(font, 'l')
    && width == getCharWidth(font, 'W') ? width : 0;
    }

    FontInfo构造函数。
    int width = getFontWidth(font, Font.PLAIN);
    if (!plainOnly) {
    if (width != 0 && width != getFontWidth(font, Font.BOLD)) width = 0;
    if (width != 0 && width != getFontWidth(font, Font.ITALIC)) width = 0;
    if (width != 0 && width != getFontWidth(font, Font.BOLD | Font.ITALIC)) width = 0;
    }
    boolean isMonospaced = width > 0;

    关于winapi - 字体如何告诉操作系统 "I AM a MONSPACED/FIXED-WIDTH FONT"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43178286/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com