Browse Source

Full support for relative uris

pull/2145/head
Benedikt Schroeder 8 years ago
parent
commit
1d19e28e9b
  1. 4
      samples/ControlCatalog/Pages/TextBoxPage.xaml
  2. 6
      src/Avalonia.Visuals/Media/FontFamily.cs
  3. 11
      src/Avalonia.Visuals/Media/Fonts/FontFamilyKey.cs
  4. 13
      src/Avalonia.Visuals/Media/Fonts/FontFamilyLoader.cs
  5. 6
      tests/Avalonia.Visuals.UnitTests/Media/Fonts/FontFamilyKeyTests.cs

4
samples/ControlCatalog/Pages/TextBoxPage.xaml

@ -44,8 +44,8 @@
<StackPanel Orientation="Vertical" Spacing="8">
<TextBlock Classes="h2">res fonts</TextBlock>
<TextBox Width="200" Text="Custom font regular" FontWeight="Normal" FontStyle="Normal" FontFamily="/Assets/Fonts#Source Sans Pro"/>
<TextBox Width="200" Text="Custom font bold" FontWeight="Bold" FontStyle="Normal" FontFamily="/Assets/Fonts#Source Sans Pro"/>
<TextBox Width="200" Text="Custom font regular" FontWeight="Normal" FontStyle="Normal" FontFamily="avares://ControlCatalog/Assets/Fonts#Source Sans Pro"/>
<TextBox Width="200" Text="Custom font bold" FontWeight="Bold" FontStyle="Normal" FontFamily="avares://ControlCatalog/Assets/Fonts#Source Sans Pro"/>
<TextBox Width="200" Text="Custom font italic" FontWeight="Normal" FontStyle="Italic" FontFamily="/Assets/Fonts/SourceSansPro-Italic.ttf#Source Sans Pro"/>
<TextBox Width="200" Text="Custom font italic bold" FontWeight="Bold" FontStyle="Italic" FontFamily="/Assets/Fonts/SourceSansPro-*.ttf#Source Sans Pro"/>
</StackPanel>

6
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)

11
src/Avalonia.Visuals/Media/Fonts/FontFamilyKey.cs

@ -28,7 +28,7 @@ namespace Avalonia.Media.Fonts
public Uri Source { get; }
/// <summary>
///
/// A base URI to use if <see cref="Source"/> is relative
/// </summary>
public Uri BaseUri { get; }
@ -93,14 +93,9 @@ namespace Avalonia.Media.Fonts
/// </returns>
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();

13
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
{

6
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);
}
}
}

Loading…
Cancel
Save