Browse Source

more refactorings

pull/7256/head
Takoooooo 5 years ago
parent
commit
9c8b68ff5d
  1. 97
      src/Avalonia.Themes.Fluent/FluentTheme.cs

97
src/Avalonia.Themes.Fluent/FluentTheme.cs

@ -21,8 +21,11 @@ namespace Avalonia.Themes.Fluent
public class FluentTheme : IStyle, IResourceProvider public class FluentTheme : IStyle, IResourceProvider
{ {
private readonly Uri _baseUri; private readonly Uri _baseUri;
private IStyle? _loaded; private Styles _fluentDark = new();
private Styles _fluentLight = new();
private Styles _sharedStyles = new();
private bool _isLoading; private bool _isLoading;
private IStyle? _loaded;
private FluentThemeMode _mode; private FluentThemeMode _mode;
/// <summary> /// <summary>
@ -32,6 +35,7 @@ namespace Avalonia.Themes.Fluent
public FluentTheme(Uri baseUri) public FluentTheme(Uri baseUri)
{ {
_baseUri = baseUri; _baseUri = baseUri;
InitStyles(baseUri);
} }
/// <summary> /// <summary>
@ -41,6 +45,7 @@ namespace Avalonia.Themes.Fluent
public FluentTheme(IServiceProvider serviceProvider) public FluentTheme(IServiceProvider serviceProvider)
{ {
_baseUri = ((IUriContext)serviceProvider.GetService(typeof(IUriContext))).BaseUri; _baseUri = ((IUriContext)serviceProvider.GetService(typeof(IUriContext))).BaseUri;
InitStyles(_baseUri);
} }
/// <summary> /// <summary>
@ -54,8 +59,8 @@ namespace Avalonia.Themes.Fluent
if (_mode != value) if (_mode != value)
{ {
_mode = value; _mode = value;
(Loaded as Styles)[3] = FluentDark[0]; (Loaded as Styles)![1] = _fluentDark[0];
(Loaded as Styles)[4] = FluentDark[1]; (Loaded as Styles)![2] = _fluentDark[1];
} }
} }
@ -73,23 +78,17 @@ namespace Avalonia.Themes.Fluent
if (_loaded == null) if (_loaded == null)
{ {
_isLoading = true; _isLoading = true;
Styles? resultStyle = new Styles(); Styles? resultStyle = new Styles() { _sharedStyles };
resultStyle.AddRange(SharedStyles);
if (Mode == FluentThemeMode.Light) if (Mode == FluentThemeMode.Light)
{ {
for (int i = 0; i < FluentLight.Count; i++) resultStyle.Add(_fluentLight[0]);
{ resultStyle.Add(_fluentLight[1]);
resultStyle.Add(FluentLight[i]);
}
} }
else if (Mode == FluentThemeMode.Dark) else if (Mode == FluentThemeMode.Dark)
{ {
for (int i = 0; i < FluentDark.Count; i++) resultStyle.Add(_fluentDark[0]);
{ resultStyle.Add(_fluentDark[1]);
resultStyle.Add(FluentDark[i]);
}
} }
_loaded = resultStyle; _loaded = resultStyle;
_isLoading = false; _isLoading = false;
@ -137,43 +136,47 @@ namespace Avalonia.Themes.Fluent
void IResourceProvider.AddOwner(IResourceHost owner) => (Loaded as IResourceProvider)?.AddOwner(owner); void IResourceProvider.AddOwner(IResourceHost owner) => (Loaded as IResourceProvider)?.AddOwner(owner);
void IResourceProvider.RemoveOwner(IResourceHost owner) => (Loaded as IResourceProvider)?.RemoveOwner(owner); void IResourceProvider.RemoveOwner(IResourceHost owner) => (Loaded as IResourceProvider)?.RemoveOwner(owner);
private static Styles SharedStyles = new Styles private void InitStyles(Uri baseUri)
{ {
new StyleInclude(new Uri("resm:Styles?assembly=Avalonia.Themes.Fluent")) _sharedStyles = new Styles
{ {
Source = new Uri("avares://Avalonia.Themes.Fluent/Accents/AccentColors.xaml") new StyleInclude(baseUri)
}, {
new StyleInclude(new Uri("resm:Styles?assembly=Avalonia.Themes.Fluent")) Source = new Uri("avares://Avalonia.Themes.Fluent/Accents/AccentColors.xaml")
{ },
Source = new Uri("avares://Avalonia.Themes.Fluent/Accents/Base.xaml") new StyleInclude(baseUri)
}, {
new StyleInclude(new Uri("resm:Styles?assembly=Avalonia.Themes.Fluent")) Source = new Uri("avares://Avalonia.Themes.Fluent/Accents/Base.xaml")
{ },
Source = new Uri("avares://Avalonia.Themes.Fluent/Controls/FluentControls.xaml") new StyleInclude(baseUri)
} {
}; Source = new Uri("avares://Avalonia.Themes.Fluent/Controls/FluentControls.xaml")
}
};
private static Styles FluentLight = new Styles _fluentLight = new Styles
{
new StyleInclude(new Uri("resm:Styles?assembly=Avalonia.Themes.Fluent"))
{
Source = new Uri("avares://Avalonia.Themes.Fluent/Accents/BaseLight.xaml")
},
new StyleInclude(new Uri("resm:Styles?assembly=Avalonia.Themes.Fluent"))
{ {
Source = new Uri("avares://Avalonia.Themes.Fluent/Accents/FluentControlResourcesLight.xaml") new StyleInclude(baseUri)
} {
}; Source = new Uri("avares://Avalonia.Themes.Fluent/Accents/BaseLight.xaml")
private static Styles FluentDark = new Styles },
{ new StyleInclude(baseUri)
new StyleInclude(new Uri("resm:Styles?assembly=Avalonia.Themes.Fluent")) {
{ Source = new Uri("avares://Avalonia.Themes.Fluent/Accents/FluentControlResourcesLight.xaml")
Source = new Uri("avares://Avalonia.Themes.Fluent/Accents/BaseDark.xaml") }
}, };
new StyleInclude(new Uri("resm:Styles?assembly=Avalonia.Themes.Fluent"))
_fluentDark = new Styles
{ {
Source = new Uri("avares://Avalonia.Themes.Fluent/Accents/FluentControlResourcesDark.xaml") new StyleInclude(baseUri)
} {
}; Source = new Uri("avares://Avalonia.Themes.Fluent/Accents/BaseDark.xaml")
},
new StyleInclude(baseUri)
{
Source = new Uri("avares://Avalonia.Themes.Fluent/Accents/FluentControlResourcesDark.xaml")
}
};
}
} }
} }

Loading…
Cancel
Save