Шрифты в GTK# на macOS 10.14 Mojave выглядят жирными

Что-то странное начало происходить с macOS Mojave. У меня есть приложение GTK #, которое использует моно в macOS, и оно работало нормально в течение многих лет. Теперь все шрифты в приложении стали выделяться полужирным шрифтом. Я создал небольшое тестовое приложение, чтобы проверить возможные причины этого, но я не пойду дальше.

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 для macOS версии 7.6.8 и последнюю версию моно версии 5.12.0.309.

Если я соберу приложение и запущу его из командной строки, используя

моно GtkKeyScan.exe

Вот как выглядит приложение:

Обычный вид приложения

Но если я запускаю его из Visual Studio, приложение выглядит так:

Приложение выглядит жирным шрифтом

Приложение отображается жирным шрифтом также, если я запускаю приложение из терминала с более старой версией Mono, например 4.2.4 или 4.6.2.

Я предполагаю, что Visual Studio делает некоторую подготовку, аналогичную тому, когда приложение для macOS объединяется в .app, и эта часть каким-то образом нарушает шрифты в новой macOS.


person flipm0de    schedule 08.10.2018    source источник


Ответы (1)


Похоже, проблема связана с тем, что Mojave — последняя macOS, поддерживающая 32-битные приложения. Проект, который я пробовал, был построен в 32-битном режиме, так как в Windows GTK# может работать только в 32-битном режиме. Похоже, что в новых версиях Mono GTK# работает и в 64-режиме.

Поэтому, когда я запускаю приложение из командной строки, оно каким-то образом работает в режиме 64, несмотря на то, что приложение было создано в 32-битном режиме. В то время как Visual Studio для macOS запускает приложение в 32-разрядном режиме.

При работе в 32-битном режиме macOS в первый раз показывает, что приложение не оптимизировано для этой macOS, и запускает его в любом случае. Но внутренне что-то ломается в части Pango, отвечающей за отрисовку текста. Я не уверен, что именно, но переключение в 64-битный режим при компиляции проекта заставило его работать.

person flipm0de    schedule 18.10.2018