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
这是应用程序的外观:
但是,如果我从Visual Studio中运行它,应用程序将如下所示:
如果我从装有4.2.4或4.6.2等较旧版本的Mono的终端运行该应用程序,该应用程序也会以粗体显示。
我的猜测是Visual Studio进行了一些准备工作,类似于将macOS的应用程序捆绑到.app中,而这一部分以某种方式破坏了新macOS中的字体。
答案 0 :(得分:0)
问题似乎与Mojave是最后一个支持32位应用程序的macOS有关。我尝试的项目是在Windows GTK#上以32位构建的,因此只能在32位模式下工作。看起来在新版Mono版本中,GTK#也可以在64模式下工作。
因此,当我从命令行启动应用程序时,尽管该应用程序是在32位模式下构建的,但它仍以64模式运行。当Visual Studio for macOS以32位模式运行该应用程序时。
在32位模式下运行时,macOS首次显示该应用程序未针对该macOS进行优化,而是以任何一种方式运行。但是在内部,负责文本渲染的Pango部分出现了问题。我不确定到底是什么,但是在编译项目时切换到64位模式使它可以工作。