Шрифты в GTK # на macOS 10.14 Мохаве выглядит жирным шрифтом - PullRequest
0 голосов
/ 08 октября 2018

Что-то странное начало происходить с 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 Community для macOS версии 7.6.8 и последнююМоно, которое идет с ним, версия 5.12.0.309.

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

mono GtkKeyScan.exe

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

App normal look

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

App bold fonts look

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

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

1 Ответ

0 голосов
/ 18 октября 2018

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

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

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

...