Open elestedt opened 4 years ago
@Gillibald As Dan suggested I've put an issue on this here.
Just tried swapping to the Fluent theme, same error.
You most likely need to install libfontconfig
libfontconfig1 is already the newest version (2.11.0-6.7).
How does your fonts.conf look like?
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- /etc/fonts/fonts.conf file to configure system font access -->
<fontconfig>
<!--
DO NOT EDIT THIS FILE.
IT WILL BE REPLACED WHEN FONTCONFIG IS UPDATED.
LOCAL CHANGES BELONG IN 'local.conf'.
The intent of this standard configuration file is to be adequate for
most environments. If you have a reasonably normal environment and
have found problems with this configuration, they are probably
things that others will also want fixed. Please submit any
problems to the fontconfig bugzilla system located at fontconfig.org
Note that the normal 'make install' procedure for fontconfig is to
replace any existing fonts.conf file with the new version. Place
any local customizations in local.conf which this file references.
Keith Packard
-->
<!-- Font directory list -->
<dir>/usr/share/fonts</dir>
<dir>/usr/X11R6/lib/X11/fonts</dir> <dir>/usr/local/share/fonts</dir>
<dir prefix="xdg">fonts</dir>
<!-- the following element will be removed in the future -->
<dir>~/.fonts</dir>
<!--
Accept deprecated 'mono' alias, replacing it with 'monospace'
-->
<match target="pattern">
<test qual="any" name="family">
<string>mono</string>
</test>
<edit name="family" mode="assign" binding="same">
<string>monospace</string>
</edit>
</match>
<!--
Accept alternate 'sans serif' spelling, replacing it with 'sans-serif'
-->
<match target="pattern">
<test qual="any" name="family">
<string>sans serif</string>
</test>
<edit name="family" mode="assign" binding="same">
<string>sans-serif</string>
</edit>
</match>
<!--
Accept deprecated 'sans' alias, replacing it with 'sans-serif'
-->
<match target="pattern">
<test qual="any" name="family">
<string>sans</string>
</test>
<edit name="family" mode="assign" binding="same">
<string>sans-serif</string>
</edit>
</match>
<!--
Ignore dpkg temporary files created in fonts directories
-->
<selectfont>
<rejectfont>
<glob>*.dpkg-tmp</glob>
</rejectfont>
</selectfont>
<selectfont>
<rejectfont>
<glob>*.dpkg-new</glob>
</rejectfont>
</selectfont>
<!--
Load local system customization file
-->
<include ignore_missing="yes">conf.d</include>
<!-- Font cache directory list -->
<cachedir>/var/cache/fontconfig</cachedir>
<cachedir prefix="xdg">fontconfig</cachedir>
<!-- the following element will be removed in the future -->
<cachedir>~/.fontconfig</cachedir>
<config>
<!--
These are the default Unicode chars that are expected to be blank
in fonts. All other blank chars are assumed to be broken and
won't appear in the resulting charsets
-->
<blank>
<int>0x0020</int> <!-- SPACE -->
<int>0x00A0</int> <!-- NO-BREAK SPACE -->
<int>0x00AD</int> <!-- SOFT HYPHEN -->
<int>0x034F</int> <!-- COMBINING GRAPHEME JOINER -->
<int>0x0600</int> <!-- ARABIC NUMBER SIGN -->
<int>0x0601</int> <!-- ARABIC SIGN SANAH -->
<int>0x0602</int> <!-- ARABIC FOOTNOTE MARKER -->
<int>0x0603</int> <!-- ARABIC SIGN SAFHA -->
<int>0x06DD</int> <!-- ARABIC END OF AYAH -->
<int>0x070F</int> <!-- SYRIAC ABBREVIATION MARK -->
<int>0x115F</int> <!-- HANGUL CHOSEONG FILLER -->
<int>0x1160</int> <!-- HANGUL JUNGSEONG FILLER -->
<int>0x1680</int> <!-- OGHAM SPACE MARK -->
<int>0x17B4</int> <!-- KHMER VOWEL INHERENT AQ -->
<int>0x17B5</int> <!-- KHMER VOWEL INHERENT AA -->
<int>0x180E</int> <!-- MONGOLIAN VOWEL SEPARATOR -->
<int>0x2000</int> <!-- EN QUAD -->
<int>0x2001</int> <!-- EM QUAD -->
<int>0x2002</int> <!-- EN SPACE -->
<int>0x2003</int> <!-- EM SPACE -->
<int>0x2004</int> <!-- THREE-PER-EM SPACE -->
<int>0x2005</int> <!-- FOUR-PER-EM SPACE -->
<int>0x2006</int> <!-- SIX-PER-EM SPACE -->
<int>0x2007</int> <!-- FIGURE SPACE -->
<int>0x2008</int> <!-- PUNCTUATION SPACE -->
<int>0x2009</int> <!-- THIN SPACE -->
<int>0x200A</int> <!-- HAIR SPACE -->
<int>0x200B</int> <!-- ZERO WIDTH SPACE -->
<int>0x200C</int> <!-- ZERO WIDTH NON-JOINER -->
<int>0x200D</int> <!-- ZERO WIDTH JOINER -->
<int>0x200E</int> <!-- LEFT-TO-RIGHT MARK -->
<int>0x200F</int> <!-- RIGHT-TO-LEFT MARK -->
<int>0x2028</int> <!-- LINE SEPARATOR -->
<int>0x2029</int> <!-- PARAGRAPH SEPARATOR -->
<int>0x202A</int> <!-- LEFT-TO-RIGHT EMBEDDING -->
<int>0x202B</int> <!-- RIGHT-TO-LEFT EMBEDDING -->
<int>0x202C</int> <!-- POP DIRECTIONAL FORMATTING -->
<int>0x202D</int> <!-- LEFT-TO-RIGHT OVERRIDE -->
<int>0x202E</int> <!-- RIGHT-TO-LEFT OVERRIDE -->
<int>0x202F</int> <!-- NARROW NO-BREAK SPACE -->
<int>0x205F</int> <!-- MEDIUM MATHEMATICAL SPACE -->
<int>0x2060</int> <!-- WORD JOINER -->
<int>0x2061</int> <!-- FUNCTION APPLICATION -->
<int>0x2062</int> <!-- INVISIBLE TIMES -->
<int>0x2063</int> <!-- INVISIBLE SEPARATOR -->
<int>0x206A</int> <!-- INHIBIT SYMMETRIC SWAPPING -->
<int>0x206B</int> <!-- ACTIVATE SYMMETRIC SWAPPING -->
<int>0x206C</int> <!-- INHIBIT ARABIC FORM SHAPING -->
<int>0x206D</int> <!-- ACTIVATE ARABIC FORM SHAPING -->
<int>0x206E</int> <!-- NATIONAL DIGIT SHAPES -->
<int>0x206F</int> <!-- NOMINAL DIGIT SHAPES -->
<int>0x2800</int> <!-- BRAILLE PATTERN BLANK -->
<int>0x3000</int> <!-- IDEOGRAPHIC SPACE -->
<int>0x3164</int> <!-- HANGUL FILLER -->
<int>0xFEFF</int> <!-- ZERO WIDTH NO-BREAK SPACE -->
<int>0xFFA0</int> <!-- HALFWIDTH HANGUL FILLER -->
<int>0xFFF9</int> <!-- INTERLINEAR ANNOTATION ANCHOR -->
<int>0xFFFA</int> <!-- INTERLINEAR ANNOTATION SEPARATOR -->
<int>0xFFFB</int> <!-- INTERLINEAR ANNOTATION TERMINATOR -->
</blank>
<!--
Rescan configuration every 30 seconds when FcFontSetList is called
-->
<rescan>
<int>30</int>
</rescan>
</config>
</fontconfig>
Running fc-list
yields a fairly long list of fonts. I tried using one of them as FontFamily on MainWindow - didn't make a difference.
What does fc-match
yield for you?
$ fc-match
DejaVuSans.ttf: "Verdana" "Book"
$
That looks okay. Next, we have to try out what could be failing on the Skia side.
What do these yield for you?
SKTypeface.Default.FamilyName
SKFontManager.Default.MatchFamily(null)
SKFontManager.Default.MatchFamily(string.Empty)
SKFontManager.Default.MatchFamily("sans")
public class App : Application
{
public override void Initialize()
{
System.Console.WriteLine("1st printout");
System.Console.Write("SkiaSharp.SKTypeface.Default.FamilyName=");
System.Console.WriteLine(SkiaSharp.SKTypeface.Default.FamilyName);
System.Console.Write("SkiaSharp.SKFontManager.Default.MatchFamily(null)=");
System.Console.WriteLine(SkiaSharp.SKFontManager.Default.MatchFamily(null));
System.Console.Write("SkiaSharp.SKFontManager.Default.MatchFamily(string.Empty)=");
System.Console.WriteLine(SkiaSharp.SKFontManager.Default.MatchFamily(string.Empty));
System.Console.Write("SkiaSharp.SKFontManager.Default.MatchFamily(\"sans\")=");
System.Console.WriteLine(SkiaSharp.SKFontManager.Default.MatchFamily("sans"));
System.Console.WriteLine("1st printout - done");
AvaloniaXamlLoader.Load(this);
System.Console.WriteLine("2st printout");
System.Console.Write("SkiaSharp.SKTypeface.Default.FamilyName=");
System.Console.WriteLine(SkiaSharp.SKTypeface.Default.FamilyName);
System.Console.Write("SkiaSharp.SKFontManager.Default.MatchFamily(null)=");
System.Console.WriteLine(SkiaSharp.SKFontManager.Default.MatchFamily(null));
System.Console.Write("SkiaSharp.SKFontManager.Default.MatchFamily(string.Empty)=");
System.Console.WriteLine(SkiaSharp.SKFontManager.Default.MatchFamily(string.Empty));
System.Console.Write("SkiaSharp.SKFontManager.Default.MatchFamily(\"sans\")=");
System.Console.WriteLine(SkiaSharp.SKFontManager.Default.MatchFamily("sans"));
System.Console.WriteLine("2st printout - done");
}
public override void OnFrameworkInitializationCompleted()
{
System.Console.WriteLine("3st printout");
System.Console.Write("SkiaSharp.SKTypeface.Default.FamilyName=");
System.Console.WriteLine(SkiaSharp.SKTypeface.Default.FamilyName);
System.Console.Write("SkiaSharp.SKFontManager.Default.MatchFamily(null)=");
System.Console.WriteLine(SkiaSharp.SKFontManager.Default.MatchFamily(null));
System.Console.Write("SkiaSharp.SKFontManager.Default.MatchFamily(string.Empty)=");
System.Console.WriteLine(SkiaSharp.SKFontManager.Default.MatchFamily(string.Empty));
System.Console.Write("SkiaSharp.SKFontManager.Default.MatchFamily(\"sans\")=");
System.Console.WriteLine(SkiaSharp.SKFontManager.Default.MatchFamily("sans"));
System.Console.WriteLine("3st printout - done");
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow = new MainWindow
{
DataContext = new MainWindowViewModel(),
};
}
base.OnFrameworkInitializationCompleted();
}
}
yields
1st printout
SkiaSharp.SKTypeface.Default.FamilyName=
SkiaSharp.SKFontManager.Default.MatchFamily(null)=
SkiaSharp.SKFontManager.Default.MatchFamily(string.Empty)=
SkiaSharp.SKFontManager.Default.MatchFamily("sans")=
1st printout - done
2st printout
SkiaSharp.SKTypeface.Default.FamilyName=
SkiaSharp.SKFontManager.Default.MatchFamily(null)=
SkiaSharp.SKFontManager.Default.MatchFamily(string.Empty)=
SkiaSharp.SKFontManager.Default.MatchFamily("sans")=
2st printout - done
3st printout
SkiaSharp.SKTypeface.Default.FamilyName=
SkiaSharp.SKFontManager.Default.MatchFamily(null)=
SkiaSharp.SKFontManager.Default.MatchFamily(string.Empty)=
SkiaSharp.SKFontManager.Default.MatchFamily("sans")=
3st printout - done
Unhandled exception. System.InvalidOperationException: Default font family name can't be null or empty.
at Avalonia.Media.FontManager..ctor(IFontManagerImpl platformImpl)
at Avalonia.Media.FontManager.get_Current()
at Avalonia.Rendering.RendererBase..ctor(Boolean useManualFpsCounting)
at Avalonia.Rendering.DeferredRenderer..ctor(IRenderRoot root, IRenderLoop renderLoop, ISceneBuilder sceneBuilder, IDispatcher dispatcher, IDeferredRendererLock rendererLock)
at Avalonia.X11.X11Window.CreateRenderer(IRenderRoot root)
at Avalonia.Controls.TopLevel..ctor(ITopLevelImpl impl, IAvaloniaDependencyResolver dependencyResolver)
at Avalonia.Controls.WindowBase..ctor(IWindowBaseImpl impl, IAvaloniaDependencyResolver dependencyResolver)
at Avalonia.Controls.WindowBase..ctor(IWindowBaseImpl impl)
at Avalonia.Controls.Window..ctor(IWindowImpl impl)
at Avalonia.Controls.Window..ctor()
at IPOCS.JMRI.CONTROL.Views.MainWindow..ctor() in C:\Users\Fredrik\git\ipocs.jmri\IPOCS.JMRI.CONTROL\Views\MainWindow.axaml.cs:line 9
at IPOCS.JMRI.CONTROL.App.OnFrameworkInitializationCompleted() in C:\Users\Fredrik\git\ipocs.jmri\IPOCS.JMRI.CONTROL\App.axaml.cs:line 53
at Avalonia.Controls.AppBuilderBase`1.Setup()
at Avalonia.Controls.AppBuilderBase`1.SetupWithLifetime(IApplicationLifetime lifetime)
at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime[T](T builder, String[] args, ShutdownMode shutdownMode)
at IPOCS.JMRI.CONTROL.Program.Main(String[] args) in C:\Users\Fredrik\git\ipocs.jmri\IPOCS.JMRI.CONTROL\Program.cs:line 13
So the font manager doesn't work at all
You could try out this custom implementation. You need to adjust it to your needs. Make sure you include the fonts as AvaloniaResource
. You can choose whatever font you like: https://github.com/AvaloniaUI/Avalonia/blob/master/tests/Avalonia.Skia.UnitTests/Media/CustomFontManagerImpl.cs
Then override this:https://github.com/AvaloniaUI/Avalonia/blob/master/src/Skia/Avalonia.Skia/SkiaPlatform.cs#L23 Just make sure to register the font manager before you attempt to show a window.
Will figure out what we can do about the font manager issue. Probably need some debug build.
You are free to use my project to try and find the cause if you want to. Not sure if it can be reproduced on anything but a raspberry pi though
$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
VERSION_CODENAME=stretch
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
I started trying, but unfortunately it's more than I have time to get working right now. Tried to get it to force load the Roboto font that seems to be bundled with the Fluent theme.
I installed sudo apt-get install ttf-mscorefonts-installer
as suggested in #1072 and then the FontManager detected a font...
Probably should be a requirement in some document somewhere that it needs to be installed.
Thanks for taking the time to look at it
I wonder what exactly gets installed. Skia should not require specific fonts to be able to match any font.
Unfortunately all I can give you right now is in Swedish, but I'll post the install log here for you :)
$ sudo apt-get install ttf-mscorefonts-installer
Läser paketlistor… Färdig
Bygger beroendeträd
Läser tillståndsinformation… Färdig
The following additional packages will be installed:
cabextract libmspack0
Följande NYA paket kommer att installeras:
cabextract libmspack0 ttf-mscorefonts-installer
0 att uppgradera, 3 att nyinstallera, 0 att ta bort och 0 att inte uppgradera.
Behöver hämta 108 kB arkiv.
Efter denna åtgärd kommer ytterligare 268 kB utrymme användas på disken.
Vill du fortsätta? [J/n]
Läs:1 http://raspbian.playstar.se/raspbian stretch/main armhf libmspack0 armhf 0.5-1+deb9u3 [40,8 kB]
Läs:2 http://raspbian.playstar.se/raspbian stretch/main armhf cabextract armhf 1.6-1 [29,8 kB]
Läs:3 http://raspbian.playstar.se/raspbian stretch/contrib armhf ttf-mscorefonts-installer all 3.6 [37,4 kB]
Hämtade 108 kB på 0s (203 kB/s)
Förkonfigurerar paket ...
Väljer tidigare ej valt paket libmspack0:armhf.
(Läser databasen ... 124293 filer och kataloger installerade.)
Förbereder att packa upp .../libmspack0_0.5-1+deb9u3_armhf.deb ...
Packar upp libmspack0:armhf (0.5-1+deb9u3) ...
Väljer tidigare ej valt paket cabextract.
Förbereder att packa upp .../cabextract_1.6-1_armhf.deb ...
Packar upp cabextract (1.6-1) ...
Väljer tidigare ej valt paket ttf-mscorefonts-installer.
Förbereder att packa upp .../ttf-mscorefonts-installer_3.6_all.deb ...
Packar upp ttf-mscorefonts-installer (3.6) ...
Ställer in libmspack0:armhf (0.5-1+deb9u3) ...
Ställer in cabextract (1.6-1) ...
Hanterar utlösare för libc-bin (2.24-11+deb9u4) ...
Hanterar utlösare för man-db (2.7.6.1-2) ...
Ställer in ttf-mscorefonts-installer (3.6) ...
These fonts were provided by Microsoft "in the interest of cross-
platform compatibility". This is no longer the case, but they are
still available from third parties.
You are free to download these fonts and use them for your own use,
but you may not redistribute them in modified form, including changes
to the file name or packaging format.
--2020-08-03 21:37:31-- http://downloads.sourceforge.net/corefonts/andale32.exe
Slår upp downloads.sourceforge.net (downloads.sourceforge.net)... 216.105.38.13
Ansluter till downloads.sourceforge.net (downloads.sourceforge.net)|216.105.38.13|:80... ansluten.
HTTP-begäran skickad, väntar på svar... 301 Moved Permanently
Adress: http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/andale32.exe [följer]
--2020-08-03 21:37:31-- http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/andale32.exe
Återanvänder befintlig anslutning till downloads.sourceforge.net:80.
HTTP-begäran skickad, väntar på svar... 302 Found
Adress: https://jztkft.dl.sourceforge.net/project/corefonts/the%20fonts/final/andale32.exe [följer]
--2020-08-03 21:37:31-- https://jztkft.dl.sourceforge.net/project/corefonts/the%20fonts/final/andale32.exe
Slår upp jztkft.dl.sourceforge.net (jztkft.dl.sourceforge.net)... 45.67.159.245
Ansluter till jztkft.dl.sourceforge.net (jztkft.dl.sourceforge.net)|45.67.159.245|:443... ansluten.
HTTP-begäran skickad, väntar på svar... 302 Moved Temporarily
Adress: https://downloads.sourceforge.net/project/corefonts/the%20fonts/final/andale32.exe?download&failedmirror=jztkft.dl.sourceforge.net [följer]
--2020-08-03 21:37:32-- https://downloads.sourceforge.net/project/corefonts/the%20fonts/final/andale32.exe?download&failedmirror=jztkft.dl.sourceforge.net
Ansluter till downloads.sourceforge.net (downloads.sourceforge.net)|216.105.38.13|:443... ansluten.
HTTP-begäran skickad, väntar på svar... 302 Found
Adress: https://kumisystems.dl.sourceforge.net/project/corefonts/the%20fonts/final/andale32.exe [följer]
--2020-08-03 21:37:33-- https://kumisystems.dl.sourceforge.net/project/corefonts/the%20fonts/final/andale32.exe
Slår upp kumisystems.dl.sourceforge.net (kumisystems.dl.sourceforge.net)... 148.251.120.111, 2a01:4f8:210:1057::2
Ansluter till kumisystems.dl.sourceforge.net (kumisystems.dl.sourceforge.net)|148.251.120.111|:443... ansluten.
HTTP-begäran skickad, väntar på svar... 200 OK
Längd: 198384 (194K) [application/octet-stream]
Sparar till: "./andale32.exe"
0K .......... .......... .......... .......... .......... 25% 1,16M 0s
50K .......... .......... .......... .......... .......... 51% 1,38M 0s
100K .......... .......... .......... .......... .......... 77% 3,87M 0s
150K .......... .......... .......... .......... ... 100% 291K=0,2s
2020-08-03 21:37:33 (805 KB/s) - "./andale32.exe" sparades [198384/198384]
--2020-08-03 21:37:33-- http://downloads.sourceforge.net/corefonts/arialb32.exe
Slår upp downloads.sourceforge.net (downloads.sourceforge.net)... 216.105.38.13
Ansluter till downloads.sourceforge.net (downloads.sourceforge.net)|216.105.38.13|:80... ansluten.
HTTP-begäran skickad, väntar på svar... 301 Moved Permanently
Adress: http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/arialb32.exe [följer]
--2020-08-03 21:37:34-- http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/arialb32.exe
Återanvänder befintlig anslutning till downloads.sourceforge.net:80.
HTTP-begäran skickad, väntar på svar... 302 Found
Adress: https://netix.dl.sourceforge.net/project/corefonts/the%20fonts/final/arialb32.exe [följer]
--2020-08-03 21:37:34-- https://netix.dl.sourceforge.net/project/corefonts/the%20fonts/final/arialb32.exe
Slår upp netix.dl.sourceforge.net (netix.dl.sourceforge.net)... 87.121.121.2
Ansluter till netix.dl.sourceforge.net (netix.dl.sourceforge.net)|87.121.121.2|:443... ansluten.
HTTP-begäran skickad, väntar på svar... 200 OK
Längd: 168176 (164K) [application/octet-stream]
Sparar till: "./arialb32.exe"
0K .......... .......... .......... .......... .......... 30% 397K 0s
50K .......... .......... .......... .......... .......... 60% 857K 0s
100K .......... .......... .......... .......... .......... 91% 3,99M 0s
150K .......... .... 100% 9,28M=0,2s
2020-08-03 21:37:34 (830 KB/s) - "./arialb32.exe" sparades [168176/168176]
--2020-08-03 21:37:34-- http://downloads.sourceforge.net/corefonts/arial32.exe
Slår upp downloads.sourceforge.net (downloads.sourceforge.net)... 216.105.38.13
Ansluter till downloads.sourceforge.net (downloads.sourceforge.net)|216.105.38.13|:80... ansluten.
HTTP-begäran skickad, väntar på svar... 301 Moved Permanently
Adress: http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/arial32.exe [följer]
--2020-08-03 21:37:35-- http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/arial32.exe
Återanvänder befintlig anslutning till downloads.sourceforge.net:80.
HTTP-begäran skickad, väntar på svar... 302 Found
Adress: https://kumisystems.dl.sourceforge.net/project/corefonts/the%20fonts/final/arial32.exe [följer]
--2020-08-03 21:37:35-- https://kumisystems.dl.sourceforge.net/project/corefonts/the%20fonts/final/arial32.exe
Slår upp kumisystems.dl.sourceforge.net (kumisystems.dl.sourceforge.net)... 148.251.120.111, 2a01:4f8:210:1057::2
Ansluter till kumisystems.dl.sourceforge.net (kumisystems.dl.sourceforge.net)|148.251.120.111|:443... ansluten.
HTTP-begäran skickad, väntar på svar... 200 OK
Längd: 554208 (541K) [application/octet-stream]
Sparar till: "./arial32.exe"
0K .......... .......... .......... .......... .......... 9% 1,46M 0s
50K .......... .......... .......... .......... .......... 18% 1,40M 0s
100K .......... .......... .......... .......... .......... 27% 3,86M 0s
150K .......... .......... .......... .......... .......... 36% 704K 0s
200K .......... .......... .......... .......... .......... 46% 3,94M 0s
250K .......... .......... .......... .......... .......... 55% 4,01M 0s
300K .......... .......... .......... .......... .......... 64% 3,92M 0s
350K .......... .......... .......... .......... .......... 73% 2,97M 0s
400K .......... .......... .......... .......... .......... 83% 3,92M 0s
450K .......... .......... .......... .......... .......... 92% 2,67M 0s
500K .......... .......... .......... .......... . 100% 4,96M=0,2s
2020-08-03 21:37:36 (2,16 MB/s) - "./arial32.exe" sparades [554208/554208]
--2020-08-03 21:37:36-- http://downloads.sourceforge.net/corefonts/comic32.exe
Slår upp downloads.sourceforge.net (downloads.sourceforge.net)... 216.105.38.13
Ansluter till downloads.sourceforge.net (downloads.sourceforge.net)|216.105.38.13|:80... ansluten.
HTTP-begäran skickad, väntar på svar... 301 Moved Permanently
Adress: http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/comic32.exe [följer]
--2020-08-03 21:37:36-- http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/comic32.exe
Återanvänder befintlig anslutning till downloads.sourceforge.net:80.
HTTP-begäran skickad, väntar på svar... 302 Found
Adress: https://jztkft.dl.sourceforge.net/project/corefonts/the%20fonts/final/comic32.exe [följer]
--2020-08-03 21:37:36-- https://jztkft.dl.sourceforge.net/project/corefonts/the%20fonts/final/comic32.exe
Slår upp jztkft.dl.sourceforge.net (jztkft.dl.sourceforge.net)... 45.67.159.245
Ansluter till jztkft.dl.sourceforge.net (jztkft.dl.sourceforge.net)|45.67.159.245|:443... ansluten.
HTTP-begäran skickad, väntar på svar... 302 Moved Temporarily
Adress: https://downloads.sourceforge.net/project/corefonts/the%20fonts/final/comic32.exe?download&failedmirror=jztkft.dl.sourceforge.net [följer]
--2020-08-03 21:37:36-- https://downloads.sourceforge.net/project/corefonts/the%20fonts/final/comic32.exe?download&failedmirror=jztkft.dl.sourceforge.net
Ansluter till downloads.sourceforge.net (downloads.sourceforge.net)|216.105.38.13|:443... ansluten.
HTTP-begäran skickad, väntar på svar... 302 Found
Adress: https://netcologne.dl.sourceforge.net/project/corefonts/the%20fonts/final/comic32.exe [följer]
--2020-08-03 21:37:37-- https://netcologne.dl.sourceforge.net/project/corefonts/the%20fonts/final/comic32.exe
Slår upp netcologne.dl.sourceforge.net (netcologne.dl.sourceforge.net)... 78.35.24.46, 2001:4dd0:1234:6::5f
Ansluter till netcologne.dl.sourceforge.net (netcologne.dl.sourceforge.net)|78.35.24.46|:443... ansluten.
HTTP-begäran skickad, väntar på svar... 200 OK
Längd: 246008 (240K) [application/octet-stream]
Sparar till: "./comic32.exe"
0K .......... .......... .......... .......... .......... 20% 1,39M 0s
50K .......... .......... .......... .......... .......... 41% 1,70M 0s
100K .......... .......... .......... .......... .......... 62% 4,55M 0s
150K .......... .......... .......... .......... .......... 83% 1,38M 0s
200K .......... .......... .......... .......... 100% 5,30M=0,1s
2020-08-03 21:37:38 (2,00 MB/s) - "./comic32.exe" sparades [246008/246008]
--2020-08-03 21:37:38-- http://downloads.sourceforge.net/corefonts/courie32.exe
Slår upp downloads.sourceforge.net (downloads.sourceforge.net)... 216.105.38.13
Ansluter till downloads.sourceforge.net (downloads.sourceforge.net)|216.105.38.13|:80... ansluten.
HTTP-begäran skickad, väntar på svar... 301 Moved Permanently
Adress: http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/courie32.exe [följer]
--2020-08-03 21:37:38-- http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/courie32.exe
Återanvänder befintlig anslutning till downloads.sourceforge.net:80.
HTTP-begäran skickad, väntar på svar... 302 Found
Adress: https://kumisystems.dl.sourceforge.net/project/corefonts/the%20fonts/final/courie32.exe [följer]
--2020-08-03 21:37:38-- https://kumisystems.dl.sourceforge.net/project/corefonts/the%20fonts/final/courie32.exe
Slår upp kumisystems.dl.sourceforge.net (kumisystems.dl.sourceforge.net)... 148.251.120.111, 2a01:4f8:210:1057::2
Ansluter till kumisystems.dl.sourceforge.net (kumisystems.dl.sourceforge.net)|148.251.120.111|:443... ansluten.
HTTP-begäran skickad, väntar på svar... 200 OK
Längd: 646368 (631K) [application/octet-stream]
Sparar till: "./courie32.exe"
0K .......... .......... .......... .......... .......... 7% 1,15M 0s
50K .......... .......... .......... .......... .......... 15% 1,39M 0s
100K .......... .......... .......... .......... .......... 23% 3,87M 0s
150K .......... .......... .......... .......... .......... 31% 712K 0s
200K .......... .......... .......... .......... .......... 39% 4,01M 0s
250K .......... .......... .......... .......... .......... 47% 4,06M 0s
300K .......... .......... .......... .......... .......... 55% 3,95M 0s
350K .......... .......... .......... .......... .......... 63% 3,04M 0s
400K .......... .......... .......... .......... .......... 71% 3,95M 0s
450K .......... .......... .......... .......... .......... 79% 3,31M 0s
500K .......... .......... .......... .......... .......... 87% 4,01M 0s
550K .......... .......... .......... .......... .......... 95% 1,81M 0s
600K .......... .......... .......... . 100% 5,06M=0,3s
2020-08-03 21:37:39 (2,16 MB/s) - "./courie32.exe" sparades [646368/646368]
--2020-08-03 21:37:39-- http://downloads.sourceforge.net/corefonts/georgi32.exe
Slår upp downloads.sourceforge.net (downloads.sourceforge.net)... 216.105.38.13
Ansluter till downloads.sourceforge.net (downloads.sourceforge.net)|216.105.38.13|:80... ansluten.
HTTP-begäran skickad, väntar på svar... 301 Moved Permanently
Adress: http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/georgi32.exe [följer]
--2020-08-03 21:37:39-- http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/georgi32.exe
Återanvänder befintlig anslutning till downloads.sourceforge.net:80.
HTTP-begäran skickad, väntar på svar... 302 Found
Adress: https://deac-riga.dl.sourceforge.net/project/corefonts/the%20fonts/final/georgi32.exe [följer]
--2020-08-03 21:37:39-- https://deac-riga.dl.sourceforge.net/project/corefonts/the%20fonts/final/georgi32.exe
Slår upp deac-riga.dl.sourceforge.net (deac-riga.dl.sourceforge.net)... 89.111.52.100
Ansluter till deac-riga.dl.sourceforge.net (deac-riga.dl.sourceforge.net)|89.111.52.100|:443... ansluten.
HTTP-begäran skickad, väntar på svar... 302 Moved Temporarily
Adress: https://downloads.sourceforge.net/project/corefonts/the%20fonts/final/georgi32.exe?download&failedmirror=deac-riga.dl.sourceforge.net [följer]
--2020-08-03 21:37:40-- https://downloads.sourceforge.net/project/corefonts/the%20fonts/final/georgi32.exe?download&failedmirror=deac-riga.dl.sourceforge.net
Ansluter till downloads.sourceforge.net (downloads.sourceforge.net)|216.105.38.13|:443... ansluten.
HTTP-begäran skickad, väntar på svar... 302 Found
Adress: https://kumisystems.dl.sourceforge.net/project/corefonts/the%20fonts/final/georgi32.exe [följer]
--2020-08-03 21:37:41-- https://kumisystems.dl.sourceforge.net/project/corefonts/the%20fonts/final/georgi32.exe
Slår upp kumisystems.dl.sourceforge.net (kumisystems.dl.sourceforge.net)... 148.251.120.111, 2a01:4f8:210:1057::2
Ansluter till kumisystems.dl.sourceforge.net (kumisystems.dl.sourceforge.net)|148.251.120.111|:443... ansluten.
HTTP-begäran skickad, väntar på svar... 200 OK
Längd: 392440 (383K) [application/octet-stream]
Sparar till: "./georgi32.exe"
0K .......... .......... .......... .......... .......... 13% 1,15M 0s
50K .......... .......... .......... .......... .......... 26% 1,39M 0s
100K .......... .......... .......... .......... .......... 39% 3,95M 0s
150K .......... .......... .......... .......... .......... 52% 718K 0s
200K .......... .......... .......... .......... .......... 65% 3,98M 0s
250K .......... .......... .......... .......... .......... 78% 4,01M 0s
300K .......... .......... .......... .......... .......... 91% 4,05M 0s
350K .......... .......... .......... ... 100% 4,06M=0,2s
2020-08-03 21:37:41 (1,83 MB/s) - "./georgi32.exe" sparades [392440/392440]
--2020-08-03 21:37:41-- http://downloads.sourceforge.net/corefonts/impact32.exe
Slår upp downloads.sourceforge.net (downloads.sourceforge.net)... 216.105.38.13
Ansluter till downloads.sourceforge.net (downloads.sourceforge.net)|216.105.38.13|:80... ansluten.
HTTP-begäran skickad, väntar på svar... 301 Moved Permanently
Adress: http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/impact32.exe [följer]
--2020-08-03 21:37:41-- http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/impact32.exe
Återanvänder befintlig anslutning till downloads.sourceforge.net:80.
HTTP-begäran skickad, väntar på svar... 302 Found
Adress: https://netix.dl.sourceforge.net/project/corefonts/the%20fonts/final/impact32.exe [följer]
--2020-08-03 21:37:42-- https://netix.dl.sourceforge.net/project/corefonts/the%20fonts/final/impact32.exe
Slår upp netix.dl.sourceforge.net (netix.dl.sourceforge.net)... 87.121.121.2
Ansluter till netix.dl.sourceforge.net (netix.dl.sourceforge.net)|87.121.121.2|:443... ansluten.
HTTP-begäran skickad, väntar på svar... 200 OK
Längd: 173288 (169K) [application/octet-stream]
Sparar till: "./impact32.exe"
0K .......... .......... .......... .......... .......... 29% 399K 0s
50K .......... .......... .......... .......... .......... 59% 860K 0s
100K .......... .......... .......... .......... .......... 88% 3,51M 0s
150K .......... ......... 100% 4,84M=0,2s
2020-08-03 21:37:42 (840 KB/s) - "./impact32.exe" sparades [173288/173288]
--2020-08-03 21:37:42-- http://downloads.sourceforge.net/corefonts/times32.exe
Slår upp downloads.sourceforge.net (downloads.sourceforge.net)... 216.105.38.13
Ansluter till downloads.sourceforge.net (downloads.sourceforge.net)|216.105.38.13|:80... ansluten.
HTTP-begäran skickad, väntar på svar... 301 Moved Permanently
Adress: http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/times32.exe [följer]
--2020-08-03 21:37:43-- http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/times32.exe
Återanvänder befintlig anslutning till downloads.sourceforge.net:80.
HTTP-begäran skickad, väntar på svar... 302 Found
Adress: https://netcologne.dl.sourceforge.net/project/corefonts/the%20fonts/final/times32.exe [följer]
--2020-08-03 21:37:43-- https://netcologne.dl.sourceforge.net/project/corefonts/the%20fonts/final/times32.exe
Slår upp netcologne.dl.sourceforge.net (netcologne.dl.sourceforge.net)... 78.35.24.46, 2001:4dd0:1234:6::5f
Ansluter till netcologne.dl.sourceforge.net (netcologne.dl.sourceforge.net)|78.35.24.46|:443... ansluten.
HTTP-begäran skickad, väntar på svar... 200 OK
Längd: 661728 (646K) [application/octet-stream]
Sparar till: "./times32.exe"
0K .......... .......... .......... .......... .......... 7% 1,41M 0s
50K .......... .......... .......... .......... .......... 15% 1,69M 0s
100K .......... .......... .......... .......... .......... 23% 4,32M 0s
150K .......... .......... .......... .......... .......... 30% 1,46M 0s
200K .......... .......... .......... .......... .......... 38% 4,08M 0s
250K .......... .......... .......... .......... .......... 46% 3,35M 0s
300K .......... .......... .......... .......... .......... 54% 2,01M 0s
350K .......... .......... .......... .......... .......... 61% 2,96M 0s
400K .......... .......... .......... .......... .......... 69% 2,10M 0s
450K .......... .......... .......... .......... .......... 77% 4,15M 0s
500K .......... .......... .......... .......... .......... 85% 1,96M 0s
550K .......... .......... .......... .......... .......... 92% 2,15M 0s
600K .......... .......... .......... .......... ...... 100% 3,89M=0,3s
2020-08-03 21:37:43 (2,34 MB/s) - "./times32.exe" sparades [661728/661728]
--2020-08-03 21:37:43-- http://downloads.sourceforge.net/corefonts/trebuc32.exe
Slår upp downloads.sourceforge.net (downloads.sourceforge.net)... 216.105.38.13
Ansluter till downloads.sourceforge.net (downloads.sourceforge.net)|216.105.38.13|:80... ansluten.
HTTP-begäran skickad, väntar på svar... 301 Moved Permanently
Adress: http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/trebuc32.exe [följer]
--2020-08-03 21:37:44-- http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/trebuc32.exe
Återanvänder befintlig anslutning till downloads.sourceforge.net:80.
HTTP-begäran skickad, väntar på svar... 302 Found
Adress: https://netix.dl.sourceforge.net/project/corefonts/the%20fonts/final/trebuc32.exe [följer]
--2020-08-03 21:37:44-- https://netix.dl.sourceforge.net/project/corefonts/the%20fonts/final/trebuc32.exe
Slår upp netix.dl.sourceforge.net (netix.dl.sourceforge.net)... 87.121.121.2
Ansluter till netix.dl.sourceforge.net (netix.dl.sourceforge.net)|87.121.121.2|:443... ansluten.
HTTP-begäran skickad, väntar på svar... 200 OK
Längd: 357200 (349K) [application/octet-stream]
Sparar till: "./trebuc32.exe"
0K .......... .......... .......... .......... .......... 14% 400K 1s
50K .......... .......... .......... .......... .......... 28% 849K 0s
100K .......... .......... .......... .......... .......... 43% 3,62M 0s
150K .......... .......... .......... .......... .......... 57% 1,21M 0s
200K .......... .......... .......... .......... .......... 71% 3,64M 0s
250K .......... .......... .......... .......... .......... 86% 3,77M 0s
300K .......... .......... .......... .......... ........ 100% 949K=0,3s
2020-08-03 21:37:45 (1,08 MB/s) - "./trebuc32.exe" sparades [357200/357200]
--2020-08-03 21:37:45-- http://downloads.sourceforge.net/corefonts/verdan32.exe
Slår upp downloads.sourceforge.net (downloads.sourceforge.net)... 216.105.38.13
Ansluter till downloads.sourceforge.net (downloads.sourceforge.net)|216.105.38.13|:80... ansluten.
HTTP-begäran skickad, väntar på svar... 301 Moved Permanently
Adress: http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/verdan32.exe [följer]
--2020-08-03 21:37:45-- http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/verdan32.exe
Återanvänder befintlig anslutning till downloads.sourceforge.net:80.
HTTP-begäran skickad, väntar på svar... 302 Found
Adress: https://netix.dl.sourceforge.net/project/corefonts/the%20fonts/final/verdan32.exe [följer]
--2020-08-03 21:37:45-- https://netix.dl.sourceforge.net/project/corefonts/the%20fonts/final/verdan32.exe
Slår upp netix.dl.sourceforge.net (netix.dl.sourceforge.net)... 87.121.121.2
Ansluter till netix.dl.sourceforge.net (netix.dl.sourceforge.net)|87.121.121.2|:443... ansluten.
HTTP-begäran skickad, väntar på svar... 200 OK
Längd: 351992 (344K) [application/octet-stream]
Sparar till: "./verdan32.exe"
0K .......... .......... .......... .......... .......... 14% 397K 1s
50K .......... .......... .......... .......... .......... 29% 861K 0s
100K .......... .......... .......... .......... .......... 43% 3,65M 0s
150K .......... .......... .......... .......... .......... 58% 1,19M 0s
200K .......... .......... .......... .......... .......... 72% 3,29M 0s
250K .......... .......... .......... .......... .......... 87% 791K 0s
300K .......... .......... .......... .......... ... 100% 4,11M=0,3s
2020-08-03 21:37:46 (1,03 MB/s) - "./verdan32.exe" sparades [351992/351992]
--2020-08-03 21:37:46-- http://downloads.sourceforge.net/corefonts/webdin32.exe
Slår upp downloads.sourceforge.net (downloads.sourceforge.net)... 216.105.38.13
Ansluter till downloads.sourceforge.net (downloads.sourceforge.net)|216.105.38.13|:80... ansluten.
HTTP-begäran skickad, väntar på svar... 301 Moved Permanently
Adress: http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/webdin32.exe [följer]
--2020-08-03 21:37:46-- http://downloads.sourceforge.net/project/corefonts/the%20fonts/final/webdin32.exe
Återanvänder befintlig anslutning till downloads.sourceforge.net:80.
HTTP-begäran skickad, väntar på svar... 302 Found
Adress: https://netix.dl.sourceforge.net/project/corefonts/the%20fonts/final/webdin32.exe [följer]
--2020-08-03 21:37:47-- https://netix.dl.sourceforge.net/project/corefonts/the%20fonts/final/webdin32.exe
Slår upp netix.dl.sourceforge.net (netix.dl.sourceforge.net)... 87.121.121.2
Ansluter till netix.dl.sourceforge.net (netix.dl.sourceforge.net)|87.121.121.2|:443... ansluten.
HTTP-begäran skickad, väntar på svar... 200 OK
Längd: 185072 (181K) [application/octet-stream]
Sparar till: "./webdin32.exe"
0K .......... .......... .......... .......... .......... 27% 399K 0s
50K .......... .......... .......... .......... .......... 55% 859K 0s
100K .......... .......... .......... .......... .......... 82% 3,82M 0s
150K .......... .......... .......... 100% 4,38M=0,2s
2020-08-03 21:37:47 (890 KB/s) - "./webdin32.exe" sparades [185072/185072]
andale32.exe: OK
Extracting cabinet: andale32.exe
extracting fontinst.inf
extracting andale.inf
extracting fontinst.exe
extracting AndaleMo.TTF
extracting ADVPACK.DLL
extracting W95INF32.DLL
extracting W95INF16.DLL
All done, no errors.
arialb32.exe: OK
Extracting cabinet: arialb32.exe
extracting fontinst.exe
extracting fontinst.inf
extracting AriBlk.TTF
All done, no errors.
arial32.exe: OK
Extracting cabinet: arial32.exe
extracting FONTINST.EXE
extracting fontinst.inf
extracting Ariali.TTF
extracting Arialbd.TTF
extracting Arialbi.TTF
extracting Arial.TTF
All done, no errors.
comic32.exe: OK
Extracting cabinet: comic32.exe
extracting fontinst.inf
extracting Comicbd.TTF
extracting Comic.TTF
extracting fontinst.exe
All done, no errors.
courie32.exe: OK
Extracting cabinet: courie32.exe
extracting cour.ttf
extracting courbd.ttf
extracting courbi.ttf
extracting fontinst.inf
extracting couri.ttf
extracting fontinst.exe
All done, no errors.
georgi32.exe: OK
Extracting cabinet: georgi32.exe
extracting fontinst.inf
extracting Georgiaz.TTF
extracting Georgiab.TTF
extracting Georgiai.TTF
extracting Georgia.TTF
extracting fontinst.exe
All done, no errors.
impact32.exe: OK
Extracting cabinet: impact32.exe
extracting fontinst.exe
extracting Impact.TTF
extracting fontinst.inf
All done, no errors.
times32.exe: OK
Extracting cabinet: times32.exe
extracting fontinst.inf
extracting Times.TTF
extracting Timesbd.TTF
extracting Timesbi.TTF
extracting Timesi.TTF
extracting FONTINST.EXE
All done, no errors.
trebuc32.exe: OK
Extracting cabinet: trebuc32.exe
extracting FONTINST.EXE
extracting trebuc.ttf
extracting Trebucbd.ttf
extracting trebucbi.ttf
extracting trebucit.ttf
extracting fontinst.inf
All done, no errors.
verdan32.exe: OK
Extracting cabinet: verdan32.exe
extracting fontinst.exe
extracting fontinst.inf
extracting Verdanab.TTF
extracting Verdanai.TTF
extracting Verdanaz.TTF
extracting Verdana.TTF
All done, no errors.
webdin32.exe: OK
Extracting cabinet: webdin32.exe
extracting fontinst.exe
extracting Webdings.TTF
extracting fontinst.inf
extracting Licen.TXT
All done, no errors.
Hanterar utlösare för fontconfig (2.11.0-6.7) ...
i use arch btw ArchLinux here, same issue. Fixed by installing this package and running fc-cache --force
.
All that package contains are fonts and licenses, and the fonts installed are as follows:
AndaleMo.TTF Arialbd.TTF Comic.TTF Georgiab.TTF
Impact.TTF Timesbi.TTF Verdana.TTF Verdanaz.TTF
courbd.ttf trebuc.ttf AriBlk.TTF Arialbi.TTF
Comicbd.TTF Georgiai.TTF Times.TTF Timesi.TTF
Verdanab.TTF Webdings.TTF courbi.ttf trebucbi.ttf
Arial.TTF Ariali.TTF Georgia.TTF Georgiaz.TTF
Timesbd.TTF Trebucbd.ttf Verdanai.TTF cour.ttf
couri.ttf trebucit.ttf
After further testing it looks like something in the font management chain really likes Verdana font for whatever reason, and if Verdana (all of its variants) goes missing it tries to look for any available variants of the Arial font, furthermore - when Arial is removed the previously mentioned InvalidOperationException
is thrown.
Ciao guys I've suffered the same problem and could not resolve it, though I've tried to resintall ttf-mscorefonts-installer. Any new suggestions to handle this issue? Thanks very much.
This issue is also happening when the system language is set to Korean or Japanese and probably any other language with non-Latin characters as well. (tested on a fresh Ubuntu 20.10 VM x86_64)
I can fix this font loading issue by launching my app with a modified locale environment variable:
LC_ALL=C ./YourAvaloniaExecutable
Apparently also happens with Chinese locale.
If someone would like to fix it we'd offer a 0.03 BTC bounty.
There is a temporary workaround. You can register a custom font manager in your AppBuilder https://github.com/AvaloniaUI/Avalonia/blob/master/tests/Avalonia.Skia.UnitTests/Media/CustomFontManagerImpl.cs
That font manager defines an embedded font as the default.
I also have this problem on a computer with Galaxy Kylin operating system arm architecture. I solved this problem in the following way. The solution to this problem is known through the test examples and source code provided by avalonia.
First step: Use fonts as resources of the Avalonia project and set them as embedded resources. AvaloniaApplication1.csproj:
<ItemGroup>
<EmbeddedResource Include="Assets\Fonts\msyh.ttc" />
<EmbeddedResource Include="Assets\Fonts\msyhbd.ttc" />
<EmbeddedResource Include="Assets\Fonts\msyhl.ttc" />
</ItemGroup>
Second step: Create a new class as a custom font manager.
public class CustomFontManagerImpl : IFontManagerImpl
{
private readonly Typeface[] _customTypefaces;
private readonly string _defaultFamilyName;
//Load font resources in the project, you can load multiple font resources
private readonly Typeface _defaultTypeface =
new Typeface("resm:AvaloniaApplication1.Assets.Fonts.msyh#微软雅黑");
public CustomFontManagerImpl()
{
_customTypefaces = new[] { _defaultTypeface };
_defaultFamilyName = _defaultTypeface.FontFamily.FamilyNames.PrimaryFamilyName;
}
public string GetDefaultFontFamilyName()
{
return _defaultFamilyName;
}
public IEnumerable<string> GetInstalledFontFamilyNames(bool checkForUpdates = false)
{
return _customTypefaces.Select(x => x.FontFamily.Name);
}
private readonly string[] _bcp47 = { CultureInfo.CurrentCulture.ThreeLetterISOLanguageName, CultureInfo.CurrentCulture.TwoLetterISOLanguageName };
public bool TryMatchCharacter(int codepoint, FontStyle fontStyle, FontWeight fontWeight, FontFamily fontFamily,
CultureInfo culture, out Typeface typeface)
{
foreach (var customTypeface in _customTypefaces)
{
if (customTypeface.GlyphTypeface.GetGlyph((uint)codepoint) == 0)
{
continue;
}
typeface = new Typeface(customTypeface.FontFamily.Name, fontStyle, fontWeight);
return true;
}
var fallback = SKFontManager.Default.MatchCharacter(fontFamily?.Name, (SKFontStyleWeight)fontWeight,
SKFontStyleWidth.Normal, (SKFontStyleSlant)fontStyle, _bcp47, codepoint);
typeface = new Typeface(fallback?.FamilyName ?? _defaultFamilyName, fontStyle, fontWeight);
return true;
}
public IGlyphTypefaceImpl CreateGlyphTypeface(Typeface typeface)
{
SKTypeface skTypeface;
switch (typeface.FontFamily.Name)
{
case FontFamily.DefaultFontFamilyName:
case "微软雅黑": //font family name
skTypeface = SKTypeface.FromFamilyName(_defaultTypeface.FontFamily.Name); break;
default:
skTypeface = SKTypeface.FromFamilyName(typeface.FontFamily.Name,
(SKFontStyleWeight)typeface.Weight, SKFontStyleWidth.Normal, (SKFontStyleSlant)typeface.Style);
break;
}
return new GlyphTypefaceImpl(skTypeface);
}
}
Third step: Override the RegisterServices() function in the App.axaml.cs file to register a custom font management object. App.axaml.cs:
/// <summary>
/// override RegisterServices register custom service
/// </summary>
public override void RegisterServices()
{
AvaloniaLocator.CurrentMutable.Bind<IFontManagerImpl>().ToConstant(new CustomFontManagerImpl());
base.RegisterServices();
}
Through the above three steps, I have solved this problem, I hope to help you.
Ciao guys I've suffered the same problem and could not resolve it, though I've tried to resintall ttf-mscorefonts-installer. Any new suggestions to handle this issue? Thanks very much.
Finally I've got this problem resolved by installing the ubuntu-restricted-extra package. Hope this hint would help you guys
Ciao guys I've suffered the same problem and could not resolve it, though I've tried to resintall ttf-mscorefonts-installer. Any new suggestions to handle this issue? Thanks very much.
Finally I've got this problem resolved by installing the ubuntu-restricted-extra package. Hope this hint would help you guys
Hey, I'm creating a Snap, but how can I add this to the snap?
Ciao guys I've suffered the same problem and could not resolve it, though I've tried to resintall ttf-mscorefonts-installer. Any new suggestions to handle this issue? Thanks very much.
Finally I've got this problem resolved by installing the ubuntu-restricted-extra package. Hope this hint would help you guys
Hey, I'm creating a Snap, but how can I add this to the snap?
I'm sorry that I'm a new linux programmer and know less about making a package.
I also have this problem on a computer with Galaxy Kylin operating system arm architecture. I solved this problem in the following way. The solution to this problem is known through the test examples and source code provided by avalonia.
- First step: Use fonts as resources of the Avalonia project and set them as embedded resources. AvaloniaApplication1.csproj:
<ItemGroup> <EmbeddedResource Include="Assets\Fonts\msyh.ttc" /> <EmbeddedResource Include="Assets\Fonts\msyhbd.ttc" /> <EmbeddedResource Include="Assets\Fonts\msyhl.ttc" /> </ItemGroup>
- Second step: Create a new class as a custom font manager.
public class CustomFontManagerImpl : IFontManagerImpl { private readonly Typeface[] _customTypefaces; private readonly string _defaultFamilyName; //Load font resources in the project, you can load multiple font resources private readonly Typeface _defaultTypeface = new Typeface("resm:AvaloniaApplication1.Assets.Fonts.msyh#微软雅黑"); public CustomFontManagerImpl() { _customTypefaces = new[] { _defaultTypeface }; _defaultFamilyName = _defaultTypeface.FontFamily.FamilyNames.PrimaryFamilyName; } public string GetDefaultFontFamilyName() { return _defaultFamilyName; } public IEnumerable<string> GetInstalledFontFamilyNames(bool checkForUpdates = false) { return _customTypefaces.Select(x => x.FontFamily.Name); } private readonly string[] _bcp47 = { CultureInfo.CurrentCulture.ThreeLetterISOLanguageName, CultureInfo.CurrentCulture.TwoLetterISOLanguageName }; public bool TryMatchCharacter(int codepoint, FontStyle fontStyle, FontWeight fontWeight, FontFamily fontFamily, CultureInfo culture, out Typeface typeface) { foreach (var customTypeface in _customTypefaces) { if (customTypeface.GlyphTypeface.GetGlyph((uint)codepoint) == 0) { continue; } typeface = new Typeface(customTypeface.FontFamily.Name, fontStyle, fontWeight); return true; } var fallback = SKFontManager.Default.MatchCharacter(fontFamily?.Name, (SKFontStyleWeight)fontWeight, SKFontStyleWidth.Normal, (SKFontStyleSlant)fontStyle, _bcp47, codepoint); typeface = new Typeface(fallback?.FamilyName ?? _defaultFamilyName, fontStyle, fontWeight); return true; } public IGlyphTypefaceImpl CreateGlyphTypeface(Typeface typeface) { SKTypeface skTypeface; switch (typeface.FontFamily.Name) { case FontFamily.DefaultFontFamilyName: case "微软雅黑": //font family name skTypeface = SKTypeface.FromFamilyName(_defaultTypeface.FontFamily.Name); break; default: skTypeface = SKTypeface.FromFamilyName(typeface.FontFamily.Name, (SKFontStyleWeight)typeface.Weight, SKFontStyleWidth.Normal, (SKFontStyleSlant)typeface.Style); break; } return new GlyphTypefaceImpl(skTypeface); } }
- Third step: Override the RegisterServices() function in the App.axaml.cs file to register a custom font management object. App.axaml.cs:
/// <summary> /// override RegisterServices register custom service /// </summary> public override void RegisterServices() { AvaloniaLocator.CurrentMutable.Bind<IFontManagerImpl>().ToConstant(new CustomFontManagerImpl()); base.RegisterServices(); }
Through the above three steps, I have solved this problem, I hope to help you.
Hello, how i can get this file
Apparently also happens with Chinese locale.
maybe happens for all CJK
Setting the language to English can solve this problem.
I also have this problem on a computer with Galaxy Kylin operating system arm architecture. I solved this problem in the following way. The solution to this problem is known through the test examples and source code provided by avalonia.
- First step: Use fonts as resources of the Avalonia project and set them as embedded resources. AvaloniaApplication1.csproj:
<ItemGroup> <EmbeddedResource Include="Assets\Fonts\msyh.ttc" /> <EmbeddedResource Include="Assets\Fonts\msyhbd.ttc" /> <EmbeddedResource Include="Assets\Fonts\msyhl.ttc" /> </ItemGroup>
- Second step: Create a new class as a custom font manager.
public class CustomFontManagerImpl : IFontManagerImpl { private readonly Typeface[] _customTypefaces; private readonly string _defaultFamilyName; //Load font resources in the project, you can load multiple font resources private readonly Typeface _defaultTypeface = new Typeface("resm:AvaloniaApplication1.Assets.Fonts.msyh#微软雅黑"); public CustomFontManagerImpl() { _customTypefaces = new[] { _defaultTypeface }; _defaultFamilyName = _defaultTypeface.FontFamily.FamilyNames.PrimaryFamilyName; } public string GetDefaultFontFamilyName() { return _defaultFamilyName; } public IEnumerable<string> GetInstalledFontFamilyNames(bool checkForUpdates = false) { return _customTypefaces.Select(x => x.FontFamily.Name); } private readonly string[] _bcp47 = { CultureInfo.CurrentCulture.ThreeLetterISOLanguageName, CultureInfo.CurrentCulture.TwoLetterISOLanguageName }; public bool TryMatchCharacter(int codepoint, FontStyle fontStyle, FontWeight fontWeight, FontFamily fontFamily, CultureInfo culture, out Typeface typeface) { foreach (var customTypeface in _customTypefaces) { if (customTypeface.GlyphTypeface.GetGlyph((uint)codepoint) == 0) { continue; } typeface = new Typeface(customTypeface.FontFamily.Name, fontStyle, fontWeight); return true; } var fallback = SKFontManager.Default.MatchCharacter(fontFamily?.Name, (SKFontStyleWeight)fontWeight, SKFontStyleWidth.Normal, (SKFontStyleSlant)fontStyle, _bcp47, codepoint); typeface = new Typeface(fallback?.FamilyName ?? _defaultFamilyName, fontStyle, fontWeight); return true; } public IGlyphTypefaceImpl CreateGlyphTypeface(Typeface typeface) { SKTypeface skTypeface; switch (typeface.FontFamily.Name) { case FontFamily.DefaultFontFamilyName: case "微软雅黑": //font family name skTypeface = SKTypeface.FromFamilyName(_defaultTypeface.FontFamily.Name); break; default: skTypeface = SKTypeface.FromFamilyName(typeface.FontFamily.Name, (SKFontStyleWeight)typeface.Weight, SKFontStyleWidth.Normal, (SKFontStyleSlant)typeface.Style); break; } return new GlyphTypefaceImpl(skTypeface); } }
- Third step: Override the RegisterServices() function in the App.axaml.cs file to register a custom font management object. App.axaml.cs:
/// <summary> /// override RegisterServices register custom service /// </summary> public override void RegisterServices() { AvaloniaLocator.CurrentMutable.Bind<IFontManagerImpl>().ToConstant(new CustomFontManagerImpl()); base.RegisterServices(); }
Through the above three steps, I have solved this problem, I hope to help you.
Hello, how i can get this file
https://wiki.archlinux.org/title/Microsoft_fonts#Extracting_fonts_from_a_Windows_ISO
LANG=en_US.UTF-8 dotnet run
is solve my problem. hope can help you~
I just had a report of this issue from a Japanese user https://groups.google.com/g/sparksdr/c/-VDuxF11y64 . Is the custom font manager still the best solution?
It is the only currently available solution that guarantees you a working default font in case fontconfig fails to match a default for current locale.
Not that custom font manager is not enough. Our backend still fails to load fonts with broken SKTypeface.Default.
The custom font manager solution seems to be working on ubuntu 20.04lts with Japanese locale. I've embedded Roboto (as that is all the ui uses) and Noto sans in the hope it can provide fallbacks for the case of characters typed in that might not be in Roboto and this appears to work. This setup makes sense to me as I don't want my app broken by some hard to control oddity or missing font in a users linux setup. I wonder if being able to set a default font and not throwing the exception if set would be useful both as a workaround for this issue and to give more control as to exactly which fonts are used.
Y ideally there is an option to configure this with the help of the AppBuilder
In creating a custom font manager I think I found a bug here https://github.com/AvaloniaUI/Avalonia/blob/d87fc7b9d081fd1502b843ea6ee0bb3886fb0484/tests/Avalonia.Skia.UnitTests/Media/CustomFontManagerImpl.cs#L73 the Typeface searched for is not the same as the one added and has a different FontFamily reference so fails an Equals test.
I also hit this issue on Arch Linux ARM, with a similar output as https://github.com/AvaloniaUI/Avalonia/issues/4427#issuecomment-668123755
Have you tried to use LC_ALL
to override current localization settings?
@Gillibald My locale is en_US.UTF8, setting LC_ALL didn't seem to help. I should mention that this is WSL2 as well
What is the result of fc-match
? Just the empty pattern is what Skia is using to get the default font.
❯ fc-match
NotoSans-Regular.ttf: "Noto Sans" "Regular"
The only advice that seems to universally fix the issue is to install ms fonts and run fc-cache --force
. The issue is hidden somewhere deep in Skia font management code, we don't know what happens there and why.
I'm afraid that writing a custom font manager with manual libfontconfig interop is our only choice.
If it helps, here's my font configuration (this hasn't been modified from what Arch Linux installs) fontconf.zip
On my manjaro linux device, to install ms fonts and run fc-cache --force
doesn't work
❯ fc-match NotoSans-Regular.ttf: "Noto Sans" "Regular"
Also having this issue on Arch with a program by @s5bug with the same fc-match
output, going to try and follow the Arch Wiki's instructions on installing MS Fonts (specifically the one on copying the fonts from a Windows partition) and test again. I will update the comment below with info.
Edit:
$ sudo cp -v /media/whovian/Windows/Windows/Fonts/* /usr/share/fonts/WindowsFonts/
$ sudo fc-cache --force
$ fc-match
verdana.ttf: "Verdana" "Regular"
And now the program by s5bug works!
Version: 0.10-preview2
I upgraded project IPOCS.JMRI.CONTROL, located at https://github.com/GMJS/ipocs.jmri, to preview2 (not committed and pushed yet) and made a build for
linux-arm
usingdotnet publish IPOCS.JMRI.CONTROL -c Release -r linux-arm
. Upon trying to run this on a raspberry pi I'm getting the exception: