committed by
GitHub
101 changed files with 540 additions and 253 deletions
@ -0,0 +1,64 @@ |
|||
<Style |
|||
xmlns="https://github.com/avaloniaui" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:sys="clr-namespace:System;assembly=netstandard"> |
|||
<Style.Resources> |
|||
<Color x:Key="ThemeAccentColor">#CC119EDA</Color> |
|||
<Color x:Key="ThemeAccentColor2">#99119EDA</Color> |
|||
<Color x:Key="ThemeAccentColor3">#66119EDA</Color> |
|||
<Color x:Key="ThemeAccentColor4">#33119EDA</Color> |
|||
<Color x:Key="ThemeForegroundLowColor">#FF808080</Color> |
|||
<Color x:Key="HighlightForegroundColor">#FFFFFFFF</Color> |
|||
<Color x:Key="ErrorColor">#FFFF0000</Color> |
|||
<Color x:Key="ErrorLowColor">#10FF0000</Color> |
|||
<SolidColorBrush x:Key="HighlightForegroundBrush" Color="{StaticResource HighlightForegroundColor}" /> |
|||
<SolidColorBrush x:Key="ThemeForegroundLowBrush" Color="{StaticResource ThemeForegroundLowColor}" /> |
|||
<SolidColorBrush x:Key="ThemeAccentBrush2" Color="{StaticResource ThemeAccentColor2}" /> |
|||
<SolidColorBrush x:Key="ThemeAccentBrush3" Color="{StaticResource ThemeAccentColor3}" /> |
|||
<SolidColorBrush x:Key="ThemeAccentBrush4" Color="{StaticResource ThemeAccentColor4}" /> |
|||
<SolidColorBrush x:Key="ThemeAccentBrush" Color="{StaticResource ThemeAccentColor}" /> |
|||
<SolidColorBrush x:Key="ErrorBrush" Color="{StaticResource ErrorColor}" /> |
|||
<SolidColorBrush x:Key="ErrorLowBrush" Color="{StaticResource ErrorLowColor}" /> |
|||
<SolidColorBrush |
|||
x:Key="NotificationCardBackgroundBrush" |
|||
Opacity="0.75" |
|||
Color="#444444" /> |
|||
<SolidColorBrush |
|||
x:Key="NotificationCardInformationBackgroundBrush" |
|||
Opacity="0.75" |
|||
Color="#007ACC" /> |
|||
<SolidColorBrush |
|||
x:Key="NotificationCardSuccessBackgroundBrush" |
|||
Opacity="0.75" |
|||
Color="#1F9E45" /> |
|||
<SolidColorBrush |
|||
x:Key="NotificationCardWarningBackgroundBrush" |
|||
Opacity="0.75" |
|||
Color="#FDB328" /> |
|||
<SolidColorBrush |
|||
x:Key="NotificationCardErrorBackgroundBrush" |
|||
Opacity="0.75" |
|||
Color="#BD202C" /> |
|||
<SolidColorBrush x:Key="ThemeControlTransparentBrush" Color="Transparent" /> |
|||
<SolidColorBrush |
|||
x:Key="DatePickerFlyoutPresenterHighlightFill" |
|||
Opacity="0.4" |
|||
Color="{StaticResource ThemeAccentColor}" /> |
|||
<SolidColorBrush |
|||
x:Key="TimePickerFlyoutPresenterHighlightFill" |
|||
Opacity="0.4" |
|||
Color="{StaticResource ThemeAccentColor}" /> |
|||
<Thickness x:Key="ThemeBorderThickness">1</Thickness> |
|||
<sys:Double x:Key="ThemeDisabledOpacity">0.5</sys:Double> |
|||
|
|||
<sys:Double x:Key="FontSizeSmall">10</sys:Double> |
|||
<sys:Double x:Key="FontSizeNormal">12</sys:Double> |
|||
<sys:Double x:Key="FontSizeLarge">16</sys:Double> |
|||
|
|||
<sys:Double x:Key="ScrollBarThickness">18</sys:Double> |
|||
<sys:Double x:Key="ScrollBarThumbThickness">8</sys:Double> |
|||
|
|||
<sys:Double x:Key="IconElementThemeHeight">20</sys:Double> |
|||
<sys:Double x:Key="IconElementThemeWidth">20</sys:Double> |
|||
</Style.Resources> |
|||
</Style> |
|||
@ -1,82 +1,38 @@ |
|||
<Style xmlns="https://github.com/avaloniaui" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:sys="clr-namespace:System;assembly=netstandard"> |
|||
<Style |
|||
xmlns="https://github.com/avaloniaui" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
xmlns:sys="clr-namespace:System;assembly=netstandard"> |
|||
<Style.Resources> |
|||
|
|||
<Color x:Key="ThemeAccentColor">#CC119EDA</Color> |
|||
<Color x:Key="ThemeAccentColor2">#99119EDA</Color> |
|||
<Color x:Key="ThemeAccentColor3">#66119EDA</Color> |
|||
<Color x:Key="ThemeAccentColor4">#33119EDA</Color> |
|||
|
|||
<Color x:Key="ThemeBackgroundColor">#FFFFFFFF</Color> |
|||
<Color x:Key="ThemeBorderLowColor">#FFAAAAAA</Color> |
|||
<Color x:Key="ThemeBorderMidColor">#FF888888</Color> |
|||
<Color x:Key="ThemeBorderHighColor">#FF333333</Color> |
|||
|
|||
|
|||
<Color x:Key="ThemeControlLowColor">#FF868999</Color> |
|||
<Color x:Key="ThemeControlMidColor">#FFF5F5F5</Color> |
|||
<Color x:Key="ThemeControlMidHighColor">#FFC2C3C9</Color> |
|||
<Color x:Key="ThemeControlHighColor">#FF686868</Color> |
|||
<Color x:Key="ThemeControlVeryHighColor">#FF5B5B5B</Color> |
|||
|
|||
<Color x:Key="ThemeControlHighlightLowColor">#FFF0F0F0</Color> |
|||
<Color x:Key="ThemeControlHighlightMidColor">#FFD0D0D0</Color> |
|||
<Color x:Key="ThemeControlHighlightHighColor">#FF808080</Color> |
|||
<Color x:Key="ThemeForegroundColor">#FF000000</Color> |
|||
<Color x:Key="ThemeForegroundLowColor">#FF808080</Color> |
|||
|
|||
<Color x:Key="HighlightColor">#FF086F9E</Color> |
|||
<Color x:Key="HighlightForegroundColor">#FFFFFFFF</Color> |
|||
<Color x:Key="ErrorColor">#FFFF0000</Color> |
|||
<Color x:Key="ErrorLowColor">#10FF0000</Color> |
|||
|
|||
<SolidColorBrush x:Key="ThemeBackgroundBrush" Color="{DynamicResource ThemeBackgroundColor}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ThemeBorderLowBrush" Color="{DynamicResource ThemeBorderLowColor}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ThemeBorderMidBrush" Color="{DynamicResource ThemeBorderMidColor}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ThemeBorderHighBrush" Color="{DynamicResource ThemeBorderHighColor}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ThemeControlLowBrush" Color="{DynamicResource ThemeControlLowColor}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ThemeControlMidBrush" Color="{DynamicResource ThemeControlMidColor}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ThemeControlMidHighBrush" Color="{DynamicResource ThemeControlMidHighColor}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ThemeControlHighBrush" Color="{DynamicResource ThemeControlHighColor}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ThemeControlVeryHighBrush" Color="{DynamicResource ThemeControlVeryHighColor}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ThemeControlHighlightLowBrush" Color="{DynamicResource ThemeControlHighlightLowColor}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ThemeControlHighlightMidBrush" Color="{DynamicResource ThemeControlHighlightMidColor}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ThemeControlHighlightHighBrush" Color="{DynamicResource ThemeControlHighlightHighColor}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ThemeForegroundBrush" Color="{DynamicResource ThemeForegroundColor}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ThemeForegroundLowBrush" Color="{DynamicResource ThemeForegroundLowColor}"></SolidColorBrush> |
|||
|
|||
<SolidColorBrush x:Key="HighlightBrush" Color="{DynamicResource HighlightColor}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="HighlightForegroundBrush" Color="{DynamicResource HighlightForegroundColor}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ThemeAccentBrush" Color="{DynamicResource ThemeAccentColor}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ThemeAccentBrush2" Color="{DynamicResource ThemeAccentColor2}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ThemeAccentBrush3" Color="{DynamicResource ThemeAccentColor3}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ThemeAccentBrush4" Color="{DynamicResource ThemeAccentColor4}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ErrorBrush" Color="{DynamicResource ErrorColor}"></SolidColorBrush> |
|||
<SolidColorBrush x:Key="ErrorLowBrush" Color="{DynamicResource ErrorLowColor}"></SolidColorBrush> |
|||
|
|||
<SolidColorBrush x:Key="NotificationCardBackgroundBrush" Color="#444444" Opacity="0.75"/> |
|||
<SolidColorBrush x:Key="NotificationCardInformationBackgroundBrush" Color="#007ACC" Opacity="0.75"/> |
|||
<SolidColorBrush x:Key="NotificationCardSuccessBackgroundBrush" Color="#1F9E45" Opacity="0.75"/> |
|||
<SolidColorBrush x:Key="NotificationCardWarningBackgroundBrush" Color="#FDB328" Opacity="0.75"/> |
|||
<SolidColorBrush x:Key="NotificationCardErrorBackgroundBrush" Color="#BD202C" Opacity="0.75"/> |
|||
|
|||
<SolidColorBrush x:Key="DatePickerFlyoutPresenterHighlightFill" Color="{DynamicResource ThemeAccentColor}" Opacity="0.4" /> |
|||
<SolidColorBrush x:Key="TimePickerFlyoutPresenterHighlightFill" Color="{DynamicResource ThemeAccentColor}" Opacity="0.4" /> |
|||
|
|||
<SolidColorBrush x:Key="ThemeControlTransparentBrush" Color="Transparent" /> |
|||
|
|||
<Thickness x:Key="ThemeBorderThickness">1</Thickness> |
|||
<sys:Double x:Key="ThemeDisabledOpacity">0.5</sys:Double> |
|||
|
|||
<sys:Double x:Key="FontSizeSmall">10</sys:Double> |
|||
<sys:Double x:Key="FontSizeNormal">12</sys:Double> |
|||
<sys:Double x:Key="FontSizeLarge">16</sys:Double> |
|||
|
|||
<sys:Double x:Key="ScrollBarThickness">18</sys:Double> |
|||
<sys:Double x:Key="ScrollBarThumbThickness">8</sys:Double> |
|||
|
|||
<sys:Double x:Key="IconElementThemeHeight">20</sys:Double> |
|||
<sys:Double x:Key="IconElementThemeWidth">20</sys:Double> |
|||
<SolidColorBrush x:Key="ThemeBackgroundBrush" Color="{StaticResource ThemeBackgroundColor}" /> |
|||
<SolidColorBrush x:Key="ThemeBorderLowBrush" Color="{StaticResource ThemeBorderLowColor}" /> |
|||
<SolidColorBrush x:Key="ThemeBorderMidBrush" Color="{StaticResource ThemeBorderMidColor}" /> |
|||
<SolidColorBrush x:Key="ThemeBorderHighBrush" Color="{StaticResource ThemeBorderHighColor}" /> |
|||
<SolidColorBrush x:Key="ThemeControlLowBrush" Color="{StaticResource ThemeControlLowColor}" /> |
|||
<SolidColorBrush x:Key="ThemeControlMidBrush" Color="{StaticResource ThemeControlMidColor}" /> |
|||
<SolidColorBrush x:Key="ThemeControlMidHighBrush" Color="{StaticResource ThemeControlMidHighColor}" /> |
|||
<SolidColorBrush x:Key="ThemeControlHighBrush" Color="{StaticResource ThemeControlHighColor}" /> |
|||
<SolidColorBrush x:Key="ThemeControlVeryHighBrush" Color="{StaticResource ThemeControlVeryHighColor}" /> |
|||
<SolidColorBrush x:Key="ThemeControlHighlightLowBrush" Color="{StaticResource ThemeControlHighlightLowColor}" /> |
|||
<SolidColorBrush x:Key="ThemeControlHighlightMidBrush" Color="{StaticResource ThemeControlHighlightMidColor}" /> |
|||
<SolidColorBrush x:Key="ThemeControlHighlightHighBrush" Color="{StaticResource ThemeControlHighlightHighColor}" /> |
|||
<SolidColorBrush x:Key="ThemeForegroundBrush" Color="{StaticResource ThemeForegroundColor}" /> |
|||
|
|||
<SolidColorBrush x:Key="HighlightBrush" Color="{StaticResource HighlightColor}" /> |
|||
</Style.Resources> |
|||
</Style> |
|||
|
|||
@ -0,0 +1,166 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using Avalonia.Controls; |
|||
using Avalonia.Markup.Xaml; |
|||
using Avalonia.Markup.Xaml.Styling; |
|||
using Avalonia.Styling; |
|||
#nullable enable |
|||
|
|||
namespace Avalonia.Themes.Default |
|||
{ |
|||
public class SimpleTheme : AvaloniaObject, IStyle, IResourceProvider |
|||
{ |
|||
public static readonly StyledProperty<SimpleThemeMode> ModeProperty = |
|||
AvaloniaProperty.Register<SimpleTheme, SimpleThemeMode>(nameof(Mode)); |
|||
|
|||
private readonly Uri _baseUri; |
|||
private bool _isLoading; |
|||
private IStyle? _loaded; |
|||
private Styles _sharedStyles = new(); |
|||
private Styles _simpleDark = new(); |
|||
private Styles _simpleLight = new(); |
|||
/// <summary>
|
|||
/// Initializes a new instance of the <see cref="SimpleTheme"/> class.
|
|||
/// </summary>
|
|||
/// <param name="baseUri">The base URL for the XAML context.</param>
|
|||
public SimpleTheme(Uri baseUri) |
|||
{ |
|||
_baseUri = baseUri; |
|||
InitStyles(_baseUri); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Initializes a new instance of the <see cref="SimpleTheme"/> class.
|
|||
/// </summary>
|
|||
/// <param name="serviceProvider">The XAML service provider.</param>
|
|||
public SimpleTheme(IServiceProvider serviceProvider) |
|||
{ |
|||
var service = serviceProvider.GetService(typeof(IUriContext)); |
|||
if (service == null) |
|||
{ |
|||
throw new Exception("There is no service object of type IUriContext!"); |
|||
} |
|||
_baseUri = ((IUriContext)service).BaseUri; |
|||
InitStyles(_baseUri); |
|||
} |
|||
|
|||
public event EventHandler OwnerChanged |
|||
{ |
|||
add |
|||
{ |
|||
if (Loaded is IResourceProvider rp) |
|||
{ |
|||
rp.OwnerChanged += value; |
|||
} |
|||
} |
|||
remove |
|||
{ |
|||
if (Loaded is IResourceProvider rp) |
|||
{ |
|||
rp.OwnerChanged -= value; |
|||
} |
|||
} |
|||
} |
|||
|
|||
IReadOnlyList<IStyle> IStyle.Children => _loaded?.Children ?? Array.Empty<IStyle>(); |
|||
|
|||
bool IResourceNode.HasResources => (Loaded as IResourceProvider)?.HasResources ?? false; |
|||
|
|||
public IStyle Loaded |
|||
{ |
|||
get |
|||
{ |
|||
if (_loaded == null) |
|||
{ |
|||
_isLoading = true; |
|||
|
|||
if (Mode == SimpleThemeMode.Light) |
|||
{ |
|||
_loaded = new Styles { _sharedStyles, _simpleLight }; |
|||
} |
|||
else if (Mode == SimpleThemeMode.Dark) |
|||
{ |
|||
_loaded = new Styles { _sharedStyles, _simpleDark }; |
|||
} |
|||
_isLoading = false; |
|||
} |
|||
|
|||
return _loaded!; |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Gets or sets the mode of the fluent theme (light, dark).
|
|||
/// </summary>
|
|||
public SimpleThemeMode Mode |
|||
{ |
|||
get => GetValue(ModeProperty); |
|||
set => SetValue(ModeProperty, value); |
|||
} |
|||
public IResourceHost? Owner => (Loaded as IResourceProvider)?.Owner; |
|||
|
|||
void IResourceProvider.AddOwner(IResourceHost owner) => (Loaded as IResourceProvider)?.AddOwner(owner); |
|||
|
|||
void IResourceProvider.RemoveOwner(IResourceHost owner) => (Loaded as IResourceProvider)?.RemoveOwner(owner); |
|||
|
|||
public SelectorMatchResult TryAttach(IStyleable target, IStyleHost? host) => Loaded.TryAttach(target, host); |
|||
|
|||
public bool TryGetResource(object key, out object? value) |
|||
{ |
|||
if (!_isLoading && Loaded is IResourceProvider p) |
|||
{ |
|||
return p.TryGetResource(key, out value); |
|||
} |
|||
|
|||
value = null; |
|||
return false; |
|||
} |
|||
|
|||
protected override void OnPropertyChanged<T>(AvaloniaPropertyChangedEventArgs<T> change) |
|||
{ |
|||
base.OnPropertyChanged(change); |
|||
if (change.Property == ModeProperty) |
|||
{ |
|||
if (Mode == SimpleThemeMode.Dark) |
|||
{ |
|||
(Loaded as Styles)![1] = _simpleDark[0]; |
|||
} |
|||
else |
|||
{ |
|||
(Loaded as Styles)![1] = _simpleLight[0]; |
|||
} |
|||
} |
|||
} |
|||
|
|||
private void InitStyles(Uri baseUri) |
|||
{ |
|||
_sharedStyles = new Styles |
|||
{ |
|||
new StyleInclude(baseUri) |
|||
{ |
|||
Source = new Uri("avares://Avalonia.Themes.Default/DefaultTheme.xaml") |
|||
}, |
|||
new StyleInclude(baseUri) |
|||
{ |
|||
Source = new Uri("avares://Avalonia.Themes.Default/Accents/Base.xaml") |
|||
} |
|||
}; |
|||
_simpleLight = new Styles |
|||
{ |
|||
new StyleInclude(baseUri) |
|||
{ |
|||
Source = new Uri("avares://Avalonia.Themes.Default/Accents/BaseLight.xaml") |
|||
} |
|||
}; |
|||
|
|||
_simpleDark = new Styles |
|||
{ |
|||
new StyleInclude(baseUri) |
|||
{ |
|||
Source = new Uri("avares://Avalonia.Themes.Default/Accents/BaseDark.xaml") |
|||
} |
|||
}; |
|||
} |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,8 @@ |
|||
namespace Avalonia.Themes.Default |
|||
{ |
|||
public enum SimpleThemeMode |
|||
{ |
|||
Light, |
|||
Dark |
|||
} |
|||
} |
|||
@ -1,8 +1,10 @@ |
|||
<Application xmlns="https://github.com/avaloniaui" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|||
x:Class="Avalonia.DesignerSupport.TestApp.App"> |
|||
<Application |
|||
x:Class="Avalonia.DesignerSupport.TestApp.App" |
|||
xmlns="https://github.com/avaloniaui" |
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> |
|||
<Application.Styles> |
|||
<StyleInclude Source="resm:Avalonia.Themes.Default.DefaultTheme.xaml?assembly=Avalonia.Themes.Default"/> |
|||
<StyleInclude Source="resm:Avalonia.Themes.Default.Accents.BaseLight.xaml?assembly=Avalonia.Themes.Default"/> |
|||
<StyleInclude Source="avares://Avalonia.Themes.Default/DefaultTheme.xaml" /> |
|||
<StyleInclude Source="avares://Avalonia.Themes.Default/Accents/Base.xaml" /> |
|||
<StyleInclude Source="avares://Avalonia.Themes.Default/Accents/BaseLight.xaml" /> |
|||
</Application.Styles> |
|||
</Application> |
|||
|
|||
@ -0,0 +1,56 @@ |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
using Avalonia.Controls; |
|||
using Avalonia.Controls.Shapes; |
|||
using Avalonia.Media; |
|||
using Avalonia.Media.Imaging; |
|||
using Xunit; |
|||
|
|||
#if AVALONIA_SKIA
|
|||
namespace Avalonia.Skia.RenderTests |
|||
#else
|
|||
namespace Avalonia.Direct2D1.RenderTests.Media |
|||
#endif
|
|||
{ |
|||
public class StreamGeometryTests : TestBase |
|||
{ |
|||
public StreamGeometryTests() |
|||
: base(@"Media\StreamGeometry") |
|||
{ |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task PreciseEllipticArc_Produces_Valid_Arcs_In_All_Directions() |
|||
{ |
|||
var grid = new Avalonia.Controls.Primitives.UniformGrid() { Columns = 2, Rows = 4, Width = 320, Height = 400 }; |
|||
foreach (var sweepDirection in new[] { SweepDirection.Clockwise, SweepDirection.CounterClockwise }) |
|||
foreach (var isLargeArc in new[] { false, true }) |
|||
foreach (var isPrecise in new[] { false, true }) |
|||
{ |
|||
Point Pt(double x, double y) => new Point(x, y); |
|||
Size Sz(double w, double h) => new Size(w, h); |
|||
var streamGeometry = new StreamGeometry(); |
|||
using (var context = streamGeometry.Open()) |
|||
{ |
|||
context.BeginFigure(Pt(20, 20), true); |
|||
|
|||
if(isPrecise) |
|||
context.PreciseArcTo(Pt(40, 40), Sz(20, 20), 0, isLargeArc, sweepDirection); |
|||
else |
|||
context.ArcTo(Pt(40, 40), Sz(20, 20), 0, isLargeArc, sweepDirection); |
|||
context.LineTo(Pt(40, 20)); |
|||
context.LineTo(Pt(20, 20)); |
|||
context.EndFigure(true); |
|||
} |
|||
var pathShape = new Avalonia.Controls.Shapes.Path(); |
|||
pathShape.Data = streamGeometry; |
|||
pathShape.Stroke = new SolidColorBrush(Colors.CornflowerBlue); |
|||
pathShape.Fill = new SolidColorBrush(Colors.Gold); |
|||
pathShape.StrokeThickness = 2; |
|||
pathShape.Margin = new Thickness(20); |
|||
grid.Children.Add(pathShape); |
|||
} |
|||
await RenderToFile(grid); |
|||
} |
|||
} |
|||
} |
|||
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 5.7 KiB |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue