Avalonia icon indicating copy to clipboard operation
Avalonia copied to clipboard

Custom Font throws exception on macOS

Open laolarou726 opened this issue 1 year ago • 0 comments

Describe the bug Custom Font in Avalonia throws Exceptions on the macOS platform. But on the windows, the font displays as expected.

Unhandled exception. System.InvalidOperationException: Could not create glyph typeface for: Minecraft Ten.
   at Avalonia.Skia.FontManagerImpl.CreateGlyphTypeface(Typeface typeface) in /_/src/Skia/Avalonia.Skia/FontManagerImpl.cs:line 146
   at Avalonia.Media.FontManager.GetOrAddGlyphTypeface(Typeface typeface) in /_/src/Avalonia.Visuals/Media/FontManager.cs:line 94
   at Avalonia.Media.TextFormatting.TextCharacters.TryGetRunProperties(ReadOnlySlice`1 text, Typeface typeface, Typeface defaultTypeface, Int32& count) in /_/src/Avalonia.Visuals/Media/TextFormatting/TextCharacters.cs:line 129
   at Avalonia.Media.TextFormatting.TextCharacters.CreateShapeableRun(ReadOnlySlice`1 text, TextRunProperties defaultProperties) in /_/src/Avalonia.Visuals/Media/TextFormatting/TextCharacters.cs:line 62
   at Avalonia.Media.TextFormatting.TextCharacters.GetShapeableCharacters() in /_/src/Avalonia.Visuals/Media/TextFormatting/TextCharacters.cs:line 40
   at Avalonia.Media.TextFormatting.TextFormatterImpl.FetchTextRuns(ITextSource textSource, Int32 firstTextSourceIndex, TextLineBreak previousLineBreak, TextLineBreak& nextLineBreak) in /_/src/Avalonia.Visuals/Media/TextFormatting/TextFormatterImpl.cs:line 280
   at Avalonia.Media.TextFormatting.TextFormatterImpl.FormatLine(ITextSource textSource, Int32 firstTextSourceIndex, Double paragraphWidth, TextParagraphProperties paragraphProperties, TextLineBreak previousLineBreak) in /_/src/Avalonia.Visuals/Media/TextFormatting/TextFormatterImpl.cs:line 39
   at Avalonia.Media.TextFormatting.TextLayout.UpdateLayout() in /_/src/Avalonia.Visuals/Media/TextFormatting/TextLayout.cs:line 223
   at Avalonia.Controls.TextBlock.CreateTextLayout(Size constraint, String text) in /_/src/Avalonia.Controls/TextBlock.cs:line 475
   at Avalonia.Controls.TextBlock.get_TextLayout() in /_/src/Avalonia.Controls/TextBlock.cs:line 166
   at Avalonia.Controls.TextBlock.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/TextBlock.cs:line 512
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 549
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 386
   at Avalonia.Controls.StackPanel.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/StackPanel.cs:line 207
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 549
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 386
   at Avalonia.Controls.Grid.MeasureOverride(Size constraint) in /_/src/Avalonia.Controls/Grid.cs:line 230
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 549
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 386
   at Avalonia.Layout.LayoutHelper.MeasureChild(ILayoutable control, Size availableSize, Thickness padding) in /_/src/Avalonia.Layout/LayoutHelper.cs:line 46
   at Avalonia.Controls.Border.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/Border.cs:line 187
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 549
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 386
   at Avalonia.Layout.LayoutHelper.MeasureChild(ILayoutable control, Size availableSize, Thickness padding) in /_/src/Avalonia.Layout/LayoutHelper.cs:line 46
   at Avalonia.Controls.Presenters.ContentPresenter.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/Presenters/ContentPresenter.cs:line 366
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 549
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 386
   at Avalonia.Layout.Layoutable.MeasureOverride(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 625
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 549
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 386
   at Avalonia.Controls.Grid.MeasureCell(Int32 cell, Boolean forceInfinityV) in /_/src/Avalonia.Controls/Grid.cs:line 1108
   at Avalonia.Controls.Grid.MeasureCellsGroup(Int32 cellsHead, Size referenceSize, Boolean ignoreDesiredSizeU, Boolean forceInfinityV, Boolean& hasDesiredSizeUChanged) in /_/src/Avalonia.Controls/Grid.cs:line 1005
   at Avalonia.Controls.Grid.MeasureOverride(Size constraint) in /_/src/Avalonia.Controls/Grid.cs:line 489
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 549
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 386
   at Avalonia.Layout.FlowLayoutAlgorithm.MeasureElement(ILayoutable element, Int32 index, Size availableSize, VirtualizingLayoutContext context) in /_/src/Avalonia.Layout/FlowLayoutAlgorithm.cs:line 153
   at Avalonia.Layout.StackLayout.GetAverageElementSize(Size availableSize, VirtualizingLayoutContext context, StackLayoutState stackLayoutState) in /_/src/Avalonia.Layout/StackLayout.cs:line 349
   at Avalonia.Layout.StackLayout.GetAnchorForRealizationRect(Size availableSize, VirtualizingLayoutContext context) in /_/src/Avalonia.Layout/StackLayout.cs:line 240
   at Avalonia.Layout.StackLayout.Avalonia.Layout.IFlowLayoutAlgorithmDelegates.Algorithm_GetAnchorForRealizationRect(Size availableSize, VirtualizingLayoutContext context) in /_/src/Avalonia.Layout/StackLayout.cs:line 166
   at Avalonia.Layout.FlowLayoutAlgorithm.GetAnchorIndex(Size availableSize, Boolean isWrapping, Double minItemSpacing, String layoutId) in /_/src/Avalonia.Layout/FlowLayoutAlgorithm.cs:line 238
   at Avalonia.Layout.FlowLayoutAlgorithm.Measure(Size availableSize, VirtualizingLayoutContext context, Boolean isWrapping, Double minItemSpacing, Double lineSpacing, Int32 maxItemsPerLine, ScrollOrientation orientation, Boolean disableVirtualization, String layoutId) in /_/src/Avalonia.Layout/FlowLayoutAlgorithm.cs:line 102
   at Avalonia.Layout.StackLayout.MeasureOverride(VirtualizingLayoutContext context, Size availableSize) in /_/src/Avalonia.Layout/StackLayout.cs:line 290
   at Avalonia.Layout.AttachedLayout.Measure(LayoutContext context, Size availableSize) in /_/src/Avalonia.Layout/AttachedLayout.cs:line 130
   at Avalonia.Controls.ItemsRepeater.MeasureOverride(Size availableSize) in /_/src/Avalonia.Controls/Repeater/ItemsRepeater.cs:line 321
   at Avalonia.Layout.Layoutable.MeasureCore(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 549
   at Avalonia.Layout.Layoutable.Measure(Size availableSize) in /_/src/Avalonia.Layout/Layoutable.cs:line 386
   at Avalonia.Layout.LayoutManager.Measure(ILayoutable control) in /_/src/Avalonia.Layout/LayoutManager.cs:line 285
   at Avalonia.Layout.LayoutManager.ExecuteMeasurePass() in /_/src/Avalonia.Layout/LayoutManager.cs:line 261
   at Avalonia.Layout.LayoutManager.InnerLayoutPass() in /_/src/Avalonia.Layout/LayoutManager.cs:line 243
   at Avalonia.Layout.LayoutManager.ExecuteLayoutPass() in /_/src/Avalonia.Layout/LayoutManager.cs:line 145
   at Avalonia.Threading.JobRunner.RunJobs(Nullable`1 priority) in /_/src/Avalonia.Base/Threading/JobRunner.cs:line 37
   at Avalonia.Native.PlatformThreadingInterface.SignaledCallback.Signaled(Int32 priority, Int32 priorityContainsMeaningfulValue) in /_/src/Avalonia.Native/PlatformThreadingInterface.cs:line 39
   at Avalonia.Native.Interop.Impl.__MicroComIAvnSignaledCallbackVTable.Signaled(Void* this, Int32 priority, Int32 priorityContainsMeaningfulValue) in /_/src/Avalonia.Native/Interop.Generated.cs:line 4336

To Reproduce Steps to reproduce the behavior:

  1. Add a custom font to the project
  2. Set its build operation to "Avalonia Resource"
  3. Create a new TextBlock with following XAML:
<TextBlock FontFamily="/Assets/Font/MinecraftTen-VGORe.ttf#Minecraft Ten">
    TEXT
</TextBlock>
  1. Compile the project target to OSX-X64
  2. Run this program on the macOS
  3. Error shows

Expected behavior A TextBlock control with custom font should appear on the window

Screenshots image

Desktop (please complete the following information):

  • OS: macOS
  • Version: 12.5 Monterey

laolarou726 avatar Aug 11 '22 13:08 laolarou726