Browse Source

#2222 Get all fonts in the system

pull/2227/head
Jeffrey Ye 7 years ago
parent
commit
2ed745d493
  1. 7
      src/Avalonia.Visuals/Media/FontFamily.cs
  2. 5
      src/Avalonia.Visuals/Platform/IPlatformRenderInterface.cs
  3. 2
      src/Skia/Avalonia.Skia/PlatformRenderInterface.cs
  4. 13
      src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs
  5. 2
      src/Windows/Avalonia.Direct2D1/Media/Direct2D1FontCollectionCache.cs
  6. 2
      tests/Avalonia.UnitTests/MockPlatformRenderInterface.cs

7
src/Avalonia.Visuals/Media/FontFamily.cs

@ -5,6 +5,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using Avalonia.Media.Fonts;
using Avalonia.Platform;
namespace Avalonia.Media
{
@ -51,6 +52,12 @@ namespace Avalonia.Media
/// </summary>
public static FontFamily Default => new FontFamily(String.Empty);
/// <summary>
/// Represents all font families in the system
/// </summary>
public static IEnumerable<FontFamily> SystemFontFamilies =>
AvaloniaLocator.Current.GetService<IPlatformRenderInterface>().InstalledFontNames.Select(name => new FontFamily(name));
/// <summary>
/// Gets the primary family name of the font family.
/// </summary>

5
src/Avalonia.Visuals/Platform/IPlatformRenderInterface.cs

@ -13,6 +13,11 @@ namespace Avalonia.Platform
/// </summary>
public interface IPlatformRenderInterface
{
/// <summary>
/// Get all installed fonts in the system
/// </summary>
IEnumerable<string> InstalledFontNames { get; }
/// <summary>
/// Creates a formatted text implementation.
/// </summary>

2
src/Skia/Avalonia.Skia/PlatformRenderInterface.cs

@ -19,6 +19,8 @@ namespace Avalonia.Skia
{
private GRContext GrContext { get; }
public IEnumerable<string> InstalledFontNames => SKFontManager.Default.FontFamilies;
public PlatformRenderInterface()
{
var gl = AvaloniaLocator.Current.GetService<IWindowingPlatformGlFeature>();

13
src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs

@ -41,6 +41,19 @@ namespace Avalonia.Direct2D1
public static SharpDX.DXGI.Device1 DxgiDevice { get; private set; }
public IEnumerable<string> InstalledFontNames
{
get
{
var cache = Direct2D1FontCollectionCache.s_installedFontCollection;
var length = cache.FontFamilyCount;
for (int i = 0; i < length; i++)
{
var names = cache.GetFontFamily(i).FamilyNames;
yield return names.GetString(0);
}
}
}
private static readonly object s_initLock = new object();
private static bool s_initialized = false;

2
src/Windows/Avalonia.Direct2D1/Media/Direct2D1FontCollectionCache.cs

@ -7,7 +7,7 @@ namespace Avalonia.Direct2D1.Media
internal static class Direct2D1FontCollectionCache
{
private static readonly ConcurrentDictionary<FontFamilyKey, SharpDX.DirectWrite.FontCollection> s_cachedCollections;
private static readonly SharpDX.DirectWrite.FontCollection s_installedFontCollection;
internal static readonly SharpDX.DirectWrite.FontCollection s_installedFontCollection;
static Direct2D1FontCollectionCache()
{

2
tests/Avalonia.UnitTests/MockPlatformRenderInterface.cs

@ -9,6 +9,8 @@ namespace Avalonia.UnitTests
{
public class MockPlatformRenderInterface : IPlatformRenderInterface
{
public IEnumerable<string> InstalledFontNames => Mock.Of<IEnumerable<string>>();
public IFormattedTextImpl CreateFormattedText(
string text,
Typeface typeface,

Loading…
Cancel
Save