From 1d19e28e9b839faaa63f6e9bba0748227a168188 Mon Sep 17 00:00:00 2001 From: Benedikt Schroeder Date: Wed, 28 Nov 2018 14:17:50 +0100 Subject: [PATCH] Full support for relative uris --- samples/ControlCatalog/Pages/TextBoxPage.xaml | 4 ++-- src/Avalonia.Visuals/Media/FontFamily.cs | 6 +++--- src/Avalonia.Visuals/Media/Fonts/FontFamilyKey.cs | 11 +++-------- .../Media/Fonts/FontFamilyLoader.cs | 13 ++++++------- .../Media/Fonts/FontFamilyKeyTests.cs | 6 +----- 5 files changed, 15 insertions(+), 25 deletions(-) diff --git a/samples/ControlCatalog/Pages/TextBoxPage.xaml b/samples/ControlCatalog/Pages/TextBoxPage.xaml index 67b60568e5..0c0a4d705b 100644 --- a/samples/ControlCatalog/Pages/TextBoxPage.xaml +++ b/samples/ControlCatalog/Pages/TextBoxPage.xaml @@ -44,8 +44,8 @@ res fonts - - + + diff --git a/src/Avalonia.Visuals/Media/FontFamily.cs b/src/Avalonia.Visuals/Media/FontFamily.cs index d32db4ef28..0ba25e6c0d 100644 --- a/src/Avalonia.Visuals/Media/FontFamily.cs +++ b/src/Avalonia.Visuals/Media/FontFamily.cs @@ -114,9 +114,9 @@ namespace Avalonia.Media case 2: { - var uri = s.StartsWith("/") - ? new Uri(s, UriKind.Relative) - : new Uri(s, UriKind.RelativeOrAbsolute); + var uri = segments[0].StartsWith("/") + ? new Uri(segments[0], UriKind.Relative) + : new Uri(segments[0], UriKind.RelativeOrAbsolute); return uri.IsAbsoluteUri ? new FontFamily(segments[1], uri) diff --git a/src/Avalonia.Visuals/Media/Fonts/FontFamilyKey.cs b/src/Avalonia.Visuals/Media/Fonts/FontFamilyKey.cs index 67b53cf8b4..2803b942ad 100644 --- a/src/Avalonia.Visuals/Media/Fonts/FontFamilyKey.cs +++ b/src/Avalonia.Visuals/Media/Fonts/FontFamilyKey.cs @@ -28,7 +28,7 @@ namespace Avalonia.Media.Fonts public Uri Source { get; } /// - /// + /// A base URI to use if is relative /// public Uri BaseUri { get; } @@ -93,14 +93,9 @@ namespace Avalonia.Media.Fonts /// public override string ToString() { - if (Source.IsAbsoluteUri) + if (!Source.IsAbsoluteUri && BaseUri != null) { - return Source.ToString(); - } - - if (BaseUri != null) - { - return BaseUri + "/" + Source; + return string.Empty + BaseUri + Source; } return Source.ToString(); diff --git a/src/Avalonia.Visuals/Media/Fonts/FontFamilyLoader.cs b/src/Avalonia.Visuals/Media/Fonts/FontFamilyLoader.cs index e1eabf7237..623125164c 100644 --- a/src/Avalonia.Visuals/Media/Fonts/FontFamilyLoader.cs +++ b/src/Avalonia.Visuals/Media/Fonts/FontFamilyLoader.cs @@ -71,7 +71,7 @@ namespace Avalonia.Media.Fonts else { compareTo = location.AbsolutePath + fileName.Split('*').First(); - } + } var matchingResources = availableResources.Where( x => x.AbsolutePath.Contains(compareTo) @@ -95,7 +95,7 @@ namespace Avalonia.Media.Fonts var pathSegments = fontFamilyKey.Source.OriginalString.Split('/'); - var fileNameWithExtension = pathSegments.Last().Split('#').First(); + var fileNameWithExtension = pathSegments.Last(); var fileNameSegments = fileNameWithExtension.Split('.'); @@ -103,11 +103,10 @@ namespace Avalonia.Media.Fonts if (fontFamilyKey.BaseUri != null) { - location = new Uri( - fontFamilyKey.BaseUri, - fontFamilyKey.Source.OriginalString.Split('#') - .First() - .Replace(fileNameWithExtension, string.Empty)); + var relativePath = fontFamilyKey.Source.OriginalString + .Replace(fileNameWithExtension, string.Empty); + + location = new Uri(fontFamilyKey.BaseUri, relativePath); } else { diff --git a/tests/Avalonia.Visuals.UnitTests/Media/Fonts/FontFamilyKeyTests.cs b/tests/Avalonia.Visuals.UnitTests/Media/Fonts/FontFamilyKeyTests.cs index 38ad9e1866..b57ba781ed 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/Fonts/FontFamilyKeyTests.cs +++ b/tests/Avalonia.Visuals.UnitTests/Media/Fonts/FontFamilyKeyTests.cs @@ -23,8 +23,6 @@ namespace Avalonia.Visuals.UnitTests.Media.Fonts var fontFamilyKey = new FontFamilyKey(source); Assert.Equal(new Uri("resm:Avalonia.Visuals.UnitTests"), fontFamilyKey.Source); - - Assert.Null(fontFamilyKey.FileName); } [Fact] @@ -34,9 +32,7 @@ namespace Avalonia.Visuals.UnitTests.Media.Fonts var fontFamilyKey = new FontFamilyKey(source); - Assert.Equal(new Uri("resm:Avalonia.Visuals.UnitTests"), fontFamilyKey.Source); - - Assert.Equal("MyFont.ttf", fontFamilyKey.FileName); + Assert.Equal(new Uri("resm:Avalonia.Visuals.UnitTests.MyFont.ttf"), fontFamilyKey.Source); } } }