From d7f6ed7c7365c1b4c4fe2deb56e53e8812c688e4 Mon Sep 17 00:00:00 2001 From: Andrii Kurdiumov Date: Mon, 16 May 2022 02:52:31 +0600 Subject: [PATCH 1/3] Initial probe of the type --- .../PresentationCore/MS/internal/FontCache/DWriteFactory.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.DotNet.Wpf/src/PresentationCore/MS/internal/FontCache/DWriteFactory.cs b/src/Microsoft.DotNet.Wpf/src/PresentationCore/MS/internal/FontCache/DWriteFactory.cs index 8713ed41453..b71e68279e1 100644 --- a/src/Microsoft.DotNet.Wpf/src/PresentationCore/MS/internal/FontCache/DWriteFactory.cs +++ b/src/Microsoft.DotNet.Wpf/src/PresentationCore/MS/internal/FontCache/DWriteFactory.cs @@ -50,7 +50,8 @@ internal static Text.TextInterface.FontCollection SystemFontCollection { if (_systemFontCollection == null) { - _systemFontCollection = DWriteFactory.Instance.GetSystemFontCollection(); + var x = Instance.DWriteFactoryAddRef; + _systemFontCollection = Instance.GetSystemFontCollection(); } } } From af6deac8f6e9b5bec323435c5bf4cd467e48f5e5 Mon Sep 17 00:00:00 2001 From: Andrii Kurdiumov Date: Mon, 16 May 2022 03:14:42 +0600 Subject: [PATCH 2/3] Move code out of C++ --- .../MS/internal/FontCache/DWriteFactory.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.DotNet.Wpf/src/PresentationCore/MS/internal/FontCache/DWriteFactory.cs b/src/Microsoft.DotNet.Wpf/src/PresentationCore/MS/internal/FontCache/DWriteFactory.cs index b71e68279e1..94668d916d9 100644 --- a/src/Microsoft.DotNet.Wpf/src/PresentationCore/MS/internal/FontCache/DWriteFactory.cs +++ b/src/Microsoft.DotNet.Wpf/src/PresentationCore/MS/internal/FontCache/DWriteFactory.cs @@ -40,7 +40,7 @@ internal static Text.TextInterface.Factory Instance } } - internal static Text.TextInterface.FontCollection SystemFontCollection + internal static unsafe Text.TextInterface.FontCollection SystemFontCollection { get { @@ -50,8 +50,13 @@ internal static Text.TextInterface.FontCollection SystemFontCollection { if (_systemFontCollection == null) { - var x = Instance.DWriteFactoryAddRef; - _systemFontCollection = Instance.GetSystemFontCollection(); + var dwriteFactory = Instance.DWriteFactoryAddRef; + IDWriteFontCollection* dwriteFontCollection = null; + var checkForUpdates = false; + var hr = dwriteFactory->GetSystemFontCollection(&dwriteFontCollection, checkForUpdates); + System.GC.KeepAlive(this); + _systemFontCollection = new FontCollection(dwriteFontCollection); + dwriteFactory->Release(); } } } From 3289e18c55be27690dda78021a1aab82cbc6f5ed Mon Sep 17 00:00:00 2001 From: Andrii Kurdiumov Date: Mon, 16 May 2022 09:15:02 +0600 Subject: [PATCH 3/3] Explicitly specify namespace --- .../src/PresentationCore/MS/internal/FontCache/DWriteFactory.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.DotNet.Wpf/src/PresentationCore/MS/internal/FontCache/DWriteFactory.cs b/src/Microsoft.DotNet.Wpf/src/PresentationCore/MS/internal/FontCache/DWriteFactory.cs index 94668d916d9..04c59e281a2 100644 --- a/src/Microsoft.DotNet.Wpf/src/PresentationCore/MS/internal/FontCache/DWriteFactory.cs +++ b/src/Microsoft.DotNet.Wpf/src/PresentationCore/MS/internal/FontCache/DWriteFactory.cs @@ -55,7 +55,7 @@ internal static unsafe Text.TextInterface.FontCollection SystemFontCollection var checkForUpdates = false; var hr = dwriteFactory->GetSystemFontCollection(&dwriteFontCollection, checkForUpdates); System.GC.KeepAlive(this); - _systemFontCollection = new FontCollection(dwriteFontCollection); + _systemFontCollection = new MS.Internal.Text.TextInterface.FontCollection(dwriteFontCollection); dwriteFactory->Release(); } }