misc: refactor converters to inherit from MarkupValueConverter and update namespaces.
This commit is contained in:
@@ -4,7 +4,6 @@
|
||||
xmlns:u="https://irihi.tech/ursa"
|
||||
xmlns:iri="https://irihi.tech/shared"
|
||||
xmlns:converters="clr-namespace:Ursa.Themes.Semi.Converters">
|
||||
<converters:TreeLevelToPaddingConverter x:Key="LevelToPaddingConverter" />
|
||||
<ControlTheme x:Key="{x:Type u:Anchor}" TargetType="{x:Type u:Anchor}">
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
<Setter Property="VerticalAlignment" Value="Top" />
|
||||
@@ -51,7 +50,7 @@
|
||||
Content="{TemplateBinding Header}"
|
||||
ContentTemplate="{TemplateBinding HeaderTemplate}">
|
||||
<ContentPresenter.Padding>
|
||||
<MultiBinding Converter="{StaticResource LevelToPaddingConverter}">
|
||||
<MultiBinding Converter="{converters:TreeLevelToPaddingConverter}">
|
||||
<Binding Path="Level" RelativeSource="{RelativeSource AncestorType={x:Type u:AnchorItem}}" />
|
||||
<DynamicResource ResourceKey="AnchorIndent" />
|
||||
</MultiBinding>
|
||||
|
||||
@@ -28,8 +28,6 @@
|
||||
</StackPanel>
|
||||
</Design.PreviewWith>
|
||||
|
||||
<converters:BadgeContentOverflowConverter x:Key="BadgeContentConverter" />
|
||||
|
||||
<ControlTheme x:Key="{x:Type u:Badge}" TargetType="{x:Type u:Badge}">
|
||||
<!-- Set a very large corner radius to achieve pill look. -->
|
||||
<Setter Property="CornerRadius" Value="{DynamicResource BadgeCornerRadius}" />
|
||||
@@ -85,7 +83,7 @@
|
||||
TextElement.Foreground="{TemplateBinding Foreground}"
|
||||
ContentTemplate="{TemplateBinding HeaderTemplate}">
|
||||
<ContentPresenter.Content>
|
||||
<MultiBinding Converter="{StaticResource BadgeContentConverter}">
|
||||
<MultiBinding Converter="{converters:BadgeContentOverflowConverter}">
|
||||
<Binding Path="Header" RelativeSource="{RelativeSource TemplatedParent}" />
|
||||
<Binding Path="OverflowCount" RelativeSource="{RelativeSource TemplatedParent}" />
|
||||
</MultiBinding>
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
<Button Theme="{DynamicResource BorderlessButton}" Classes="Danger" Content="Button" />
|
||||
</StackPanel>
|
||||
</Design.PreviewWith>
|
||||
<converters:BooleansToOpacityConverter x:Key="OpacityConverter" />
|
||||
<ControlTheme x:Key="{x:Type u:IconButton}" TargetType="u:IconButton">
|
||||
<Setter Property="Padding" Value="{DynamicResource ButtonDefaultPadding}" />
|
||||
<Setter Property="MinHeight" Value="{DynamicResource ButtonDefaultHeight}" />
|
||||
@@ -75,7 +74,7 @@
|
||||
ContentTemplate="{TemplateBinding IconTemplate}"
|
||||
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
|
||||
Foreground="{Binding #PART_ContentPresenter.Foreground}"
|
||||
Opacity="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=!IsLoading, Converter={StaticResource OpacityConverter}}">
|
||||
Opacity="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=!IsLoading, Converter={converters:BooleansToOpacityConverter}}">
|
||||
<ContentPresenter.DataTemplates>
|
||||
<DataTemplate DataType="Geometry">
|
||||
<PathIcon
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
<u:LoadingIcon Classes="Large" />
|
||||
</StackPanel>
|
||||
</Design.PreviewWith>
|
||||
<converters:BrushToColorConverter x:Key="BrushToColorConverter" />
|
||||
<ControlTheme x:Key="{x:Type u:LoadingIcon}" TargetType="u:LoadingIcon">
|
||||
<Setter Property="IsLoading" Value="True" />
|
||||
<Setter Property="Foreground" Value="{DynamicResource LoadingIconForeground}" />
|
||||
@@ -29,8 +28,8 @@
|
||||
<ConicGradientBrush Angle="50">
|
||||
<GradientStops>
|
||||
<GradientStop Offset="0.4" Color="Transparent" />
|
||||
<GradientStop Offset="0.8" Color="{Binding Foreground, Converter={StaticResource BrushToColorConverter}, RelativeSource={RelativeSource TemplatedParent}}" />
|
||||
<GradientStop Offset="1.0" Color="{Binding Foreground, Converter={StaticResource BrushToColorConverter}, RelativeSource={RelativeSource TemplatedParent}}" />
|
||||
<GradientStop Offset="0.8" Color="{Binding Foreground, Converter={converters:BrushToColorConverter}, RelativeSource={RelativeSource TemplatedParent}}" />
|
||||
<GradientStop Offset="1.0" Color="{Binding Foreground, Converter={converters:BrushToColorConverter}, RelativeSource={RelativeSource TemplatedParent}}" />
|
||||
</GradientStops>
|
||||
</ConicGradientBrush>
|
||||
</Arc.Stroke>
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:u="https://irihi.tech/ursa"
|
||||
xmlns:converters="clr-namespace:Ursa.Themes.Semi.Converters">
|
||||
<converters:NavMenuMarginConverter x:Key="NavMarginConverter" />
|
||||
|
||||
<ControlTheme x:Key="{x:Type u:NavMenu}" TargetType="u:NavMenu">
|
||||
<Setter Property="Grid.IsSharedSizeScope" Value="True" />
|
||||
@@ -67,7 +66,7 @@
|
||||
HorizontalAlignment="Stretch"
|
||||
VerticalAlignment="Center">
|
||||
<Grid.Margin>
|
||||
<MultiBinding Converter="{StaticResource NavMarginConverter}">
|
||||
<MultiBinding Converter="{converters:NavMenuMarginConverter}">
|
||||
<Binding Path="SubMenuIndent" RelativeSource="{RelativeSource TemplatedParent}" />
|
||||
<Binding Path="Level" RelativeSource="{RelativeSource TemplatedParent}" />
|
||||
<Binding Path="IsHorizontalCollapsed" RelativeSource="{RelativeSource TemplatedParent}" />
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
using System.Globalization;
|
||||
using Avalonia.Data.Converters;
|
||||
using Irihi.Avalonia.Shared.Converters;
|
||||
|
||||
namespace Ursa.Themes.Semi.Converters;
|
||||
|
||||
public class BooleansToOpacityConverter : IValueConverter
|
||||
public class BooleansToOpacityConverter : MarkupValueConverter
|
||||
{
|
||||
public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
public override object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
if (value is bool b)
|
||||
{
|
||||
@@ -14,9 +14,4 @@ public class BooleansToOpacityConverter : IValueConverter
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
using System.Globalization;
|
||||
using Avalonia.Data.Converters;
|
||||
using Avalonia.Media;
|
||||
using Irihi.Avalonia.Shared.Converters;
|
||||
|
||||
namespace Ursa.Themes.Semi.Converters;
|
||||
|
||||
public class BrushToColorConverter : IValueConverter
|
||||
public class BrushToColorConverter : MarkupValueConverter
|
||||
{
|
||||
public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
public override object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
if (value is ISolidColorBrush b)
|
||||
{
|
||||
@@ -15,9 +15,4 @@ public class BrushToColorConverter : IValueConverter
|
||||
|
||||
return Colors.Transparent;
|
||||
}
|
||||
|
||||
public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,15 @@
|
||||
using System.Globalization;
|
||||
using Avalonia.Data.Converters;
|
||||
using Irihi.Avalonia.Shared.Converters;
|
||||
|
||||
namespace Ursa.Themes.Semi.Converters;
|
||||
|
||||
public class ClockHandLengthConverter(double ratio) : IValueConverter
|
||||
public class ClockHandLengthConverter(double ratio) : MarkupValueConverter
|
||||
{
|
||||
public static ClockHandLengthConverter Hour { get; } = new(1 - 0.618);
|
||||
public static ClockHandLengthConverter Minute { get; } = new(0.618);
|
||||
public static ClockHandLengthConverter Second { get; } = new(1);
|
||||
|
||||
public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
public override object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
if (value is double d)
|
||||
{
|
||||
@@ -18,9 +18,4 @@ public class ClockHandLengthConverter(double ratio) : IValueConverter
|
||||
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
using System.Globalization;
|
||||
using Avalonia.Data.Converters;
|
||||
using Avalonia.Layout;
|
||||
using Irihi.Avalonia.Shared.Converters;
|
||||
|
||||
namespace Ursa.Themes.Semi.Converters;
|
||||
|
||||
public class FormContentHeightToAlignmentConverter : IValueConverter
|
||||
public class FormContentHeightToAlignmentConverter : MarkupValueConverter
|
||||
{
|
||||
public static FormContentHeightToAlignmentConverter Instance = new(32);
|
||||
public double Threshold { get; set; }
|
||||
@@ -21,15 +21,9 @@ public class FormContentHeightToAlignmentConverter : IValueConverter
|
||||
Threshold = threshold;
|
||||
}
|
||||
|
||||
|
||||
public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
public override object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
if (value is not double d) return VerticalAlignment.Center;
|
||||
return d > Threshold ? VerticalAlignment.Top : VerticalAlignment.Center;
|
||||
}
|
||||
|
||||
public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
using System.Globalization;
|
||||
using Avalonia;
|
||||
using Avalonia.Data.Converters;
|
||||
using Irihi.Avalonia.Shared.Converters;
|
||||
|
||||
namespace Ursa.Themes.Semi.Converters;
|
||||
|
||||
public class FormContentHeightToMarginConverter : IValueConverter
|
||||
public class FormContentHeightToMarginConverter : MarkupValueConverter
|
||||
{
|
||||
public static FormContentHeightToMarginConverter Instance = new();
|
||||
public double Threshold { get; set; }
|
||||
@@ -21,14 +21,9 @@ public class FormContentHeightToMarginConverter : IValueConverter
|
||||
Threshold = threshold;
|
||||
}
|
||||
|
||||
public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
public override object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
if (value is not double d) return new Thickness(0);
|
||||
return d > Threshold ? new Thickness(0, 8, 8, 0) : new Thickness(0, 0, 8, 0);
|
||||
}
|
||||
|
||||
public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
using System.Globalization;
|
||||
using Avalonia;
|
||||
using Avalonia.Data.Converters;
|
||||
using Irihi.Avalonia.Shared.Converters;
|
||||
|
||||
namespace Ursa.Themes.Semi.Converters;
|
||||
|
||||
public class NavMenuMarginConverter : IMultiValueConverter
|
||||
public class NavMenuMarginConverter : MarkupMultiValueConverter
|
||||
{
|
||||
public object? Convert(IList<object?> values, Type targetType, object? parameter, CultureInfo culture)
|
||||
public override object? Convert(IList<object?> values, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
if (values[0] is double indent && values[1] is int level && values[2] is bool b)
|
||||
{
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
using System.Globalization;
|
||||
using Avalonia;
|
||||
using Avalonia.Data.Converters;
|
||||
using Irihi.Avalonia.Shared.Converters;
|
||||
|
||||
namespace Ursa.Themes.Semi.Converters;
|
||||
|
||||
public class TreeLevelToPaddingConverter : IMultiValueConverter
|
||||
public class TreeLevelToPaddingConverter : MarkupMultiValueConverter
|
||||
{
|
||||
public object? Convert(IList<object?> values, Type targetType, object? parameter, CultureInfo culture)
|
||||
public override object? Convert(IList<object?> values, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
if (values[0] is int i && values[1] is Thickness indent)
|
||||
{
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
using System.Globalization;
|
||||
using Avalonia.Data.Converters;
|
||||
using Irihi.Avalonia.Shared.Converters;
|
||||
|
||||
namespace Ursa.Converters;
|
||||
|
||||
public class BadgeContentOverflowConverter : IMultiValueConverter
|
||||
public class BadgeContentOverflowConverter : MarkupMultiValueConverter
|
||||
{
|
||||
public object? Convert(IList<object?> values, Type targetType, object? parameter, CultureInfo culture)
|
||||
public override object? Convert(IList<object?> values, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
var overflowMark = parameter as string ?? "+";
|
||||
if (double.TryParse(values[0]?.ToString(), out var b) && values[1] is int count and > 0)
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
using System.Globalization;
|
||||
using Avalonia.Controls.Templates;
|
||||
using Avalonia.Data.Converters;
|
||||
using Irihi.Avalonia.Shared.Converters;
|
||||
|
||||
namespace Ursa.Converters;
|
||||
|
||||
public class SelectionBoxTemplateConverter : IMultiValueConverter
|
||||
public class SelectionBoxTemplateConverter : MarkupMultiValueConverter
|
||||
{
|
||||
public static SelectionBoxTemplateConverter Instance { get; } = new();
|
||||
|
||||
public object? Convert(IList<object?> values, Type targetType, object? parameter, CultureInfo culture)
|
||||
public override object? Convert(IList<object?> values, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
for (int i = 0; i < values.Count; i++)
|
||||
{
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Avalonia" Version="$(AvaloniaVersion)"/>
|
||||
<PackageReference Include="Irihi.Avalonia.Shared" Version="0.3.0" />
|
||||
<PackageReference Include="Irihi.Avalonia.Shared.Contracts" Version="0.3.0" />
|
||||
<PackageReference Include="Irihi.Avalonia.Shared" Version="0.3.1" />
|
||||
<PackageReference Include="Irihi.Avalonia.Shared.Contracts" Version="0.3.1" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
Reference in New Issue
Block a user