mirror of
https://github.com/sourcegit-scm/sourcegit.git
synced 2024-12-23 20:47:25 -08:00
enhance: calculate monospace fonts in background to avoid delay for preference window (#30)
This commit is contained in:
parent
ff2e0d7928
commit
8f3f011d81
1 changed files with 42 additions and 24 deletions
|
@ -2,24 +2,27 @@ using System;
|
|||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Avalonia.Collections;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Input;
|
||||
using Avalonia.Interactivity;
|
||||
using Avalonia.Media;
|
||||
using Avalonia.Platform.Storage;
|
||||
using Avalonia.Threading;
|
||||
|
||||
namespace SourceGit.Views
|
||||
{
|
||||
public partial class Preference : Window
|
||||
{
|
||||
public List<FontFamily> InstalledFonts
|
||||
public AvaloniaList<FontFamily> InstalledFonts
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
public List<FontFamily> InstalledMonospaceFonts
|
||||
public AvaloniaList<FontFamily> InstalledMonospaceFonts
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
|
@ -66,37 +69,52 @@ namespace SourceGit.Views
|
|||
var pref = ViewModels.Preference.Instance;
|
||||
DataContext = pref;
|
||||
|
||||
InstalledFonts = new List<FontFamily>();
|
||||
InstalledFonts = new AvaloniaList<FontFamily>();
|
||||
InstalledFonts.Add(new FontFamily("fonts:SourceGit#JetBrains Mono"));
|
||||
InstalledFonts.AddRange(FontManager.Current.SystemFonts);
|
||||
InstalledFonts.Remove(FontManager.Current.DefaultFontFamily);
|
||||
InstalledFonts.Add(FontManager.Current.DefaultFontFamily);
|
||||
|
||||
InstalledMonospaceFonts = new List<FontFamily>();
|
||||
InstalledMonospaceFonts = new AvaloniaList<FontFamily>();
|
||||
InstalledMonospaceFonts.Add(new FontFamily("fonts:SourceGit#JetBrains Mono"));
|
||||
foreach (var font in FontManager.Current.SystemFonts)
|
||||
|
||||
var curMonoFont = pref.MonospaceFont;
|
||||
if (!string.IsNullOrEmpty(curMonoFont) && curMonoFont != "fonts:SourceGit#JetBrains Mono")
|
||||
{
|
||||
var typeface = new Typeface(font);
|
||||
var testI = new FormattedText(
|
||||
"i",
|
||||
CultureInfo.CurrentCulture,
|
||||
FlowDirection.LeftToRight,
|
||||
typeface,
|
||||
12,
|
||||
Brushes.White);
|
||||
var testW = new FormattedText(
|
||||
"W",
|
||||
CultureInfo.CurrentCulture,
|
||||
FlowDirection.LeftToRight,
|
||||
typeface,
|
||||
12,
|
||||
Brushes.White);
|
||||
if (testI.Width == testW.Width)
|
||||
{
|
||||
InstalledMonospaceFonts.Add(font);
|
||||
}
|
||||
InstalledMonospaceFonts.Add(new FontFamily(curMonoFont));
|
||||
}
|
||||
|
||||
Task.Run(() =>
|
||||
{
|
||||
var sysMonoFonts = new List<FontFamily>();
|
||||
foreach (var font in FontManager.Current.SystemFonts)
|
||||
{
|
||||
if (font.ToString() == curMonoFont) continue;
|
||||
|
||||
var typeface = new Typeface(font);
|
||||
var testI = new FormattedText(
|
||||
"i",
|
||||
CultureInfo.CurrentCulture,
|
||||
FlowDirection.LeftToRight,
|
||||
typeface,
|
||||
12,
|
||||
Brushes.White);
|
||||
var testW = new FormattedText(
|
||||
"W",
|
||||
CultureInfo.CurrentCulture,
|
||||
FlowDirection.LeftToRight,
|
||||
typeface,
|
||||
12,
|
||||
Brushes.White);
|
||||
if (testI.Width == testW.Width)
|
||||
{
|
||||
sysMonoFonts.Add(font);
|
||||
}
|
||||
}
|
||||
|
||||
Dispatcher.UIThread.Post(() => InstalledMonospaceFonts.AddRange(sysMonoFonts));
|
||||
});
|
||||
|
||||
var ver = string.Empty;
|
||||
if (pref.IsGitConfigured)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue