macOS 10.14 Mojave上GTK#中的字体看起来粗体

时间:2018-10-08 10:31:21

标签: macos mono monodevelop gtk# visual-studio-mac

macOS Mojave开始发生一些奇怪的事情。我有一个在macOS上使用mono的GTK#应用,多年来运行良好。现在,应用程序中的所有字体开始以粗体显示。我已经创建了一个小型测试应用程序来测试可能的原因,但是我对此不做进一步介绍。

using System;
using Gtk;

namespace GtkKeyScan
{
    class Program
    {
        private static Label lblCount;
        private static DateTime? scanStart;

        static void Main (string [] args)
        {
            if (Environment.OSVersion.Platform != PlatformID.Unix)
                GLib.Thread.Init ();

            Application.Init ();

            var dlg = new Dialog { WindowPosition = WindowPosition.CenterAlways, WidthRequest = 200 };

            lblCount = new Label { Text = "Press key to see the code" };
            dlg.VBox.PackStart (lblCount, true, true, 10);

            var btnClear = new Button { Label = "Clear", WidthRequest = 110, HeightRequest = 34, CanFocus = false };
            btnClear.Clicked += btnClear_Clicked;
            dlg.VBox.PackStart (btnClear, false, true, 10);

            dlg.KeyPressEvent += ent_KeyPressEvent;
            dlg.ShowAll ();
            dlg.Run ();
        }

        static void btnClear_Clicked (object sender, EventArgs e)
        {
            lblCount.Text = "";
            scanStart = null;
        }

        [GLib.ConnectBefore]
        static void ent_KeyPressEvent (object o, KeyPressEventArgs args)
        {
            if (!string.IsNullOrWhiteSpace (lblCount.Text))
                lblCount.Text += "\n";

            lblCount.Text += args.Event.Key.ToString ();

            if (scanStart == null)
                scanStart = DateTime.Now;
            else
                lblCount.Text += " +" + (int) (DateTime.Now - scanStart.Value).TotalMilliseconds + "ms";

            args.RetVal = true;
        }
    }
}

我正在使用最新的Visual Studio Community for macOS版本7.6.8和它随附的最新Mono版本5.12.0.309。

如果我构建应用程序并使用

从命令行运行它
  

mono GtkKeyScan.exe

这是应用程序的外观:

App normal look

但是,如果我从Visual Studio中运行它,应用程序将如下所示:

App bold fonts look

如果我从装有4.2.4或4.6.2等较旧版本的Mono的终端运行该应用程序,该应用程序也会以粗体显示。

我的猜测是Visual Studio进行了一些准备工作,类似于将macOS的应用程序捆绑到.app中,而这一部分以某种方式破坏了新macOS中的字体。

1 个答案:

答案 0 :(得分:0)

问题似乎与Mojave是最后一个支持32位应用程序的macOS有关。我尝试的项目是在Windows GTK#上以32位构建的,因此只能在32位模式下工作。看起来在新版Mono版本中,GTK#也可以在64模式下工作。

因此,当我从命令行启动应用程序时,尽管该应用程序是在32位模式下构建的,但它仍以64模式运行。当Visual Studio for macOS以32位模式运行该应用程序时。

在32位模式下运行时,macOS首次显示该应用程序未针对该macOS进行优化,而是以任何一种方式运行。但是在内部,负责文本渲染的Pango部分出现了问题。我不确定到底是什么,但是在编译项目时切换到64位模式使它可以工作。