diff --git a/MainDemo.Wpf/ComboBoxes.xaml b/MainDemo.Wpf/ComboBoxes.xaml index 8ad717f90b..8101944257 100644 --- a/MainDemo.Wpf/ComboBoxes.xaml +++ b/MainDemo.Wpf/ComboBoxes.xaml @@ -237,7 +237,7 @@ diff --git a/MainDemo.Wpf/Fields.xaml b/MainDemo.Wpf/Fields.xaml index 99f99469bc..6ee2767681 100644 --- a/MainDemo.Wpf/Fields.xaml +++ b/MainDemo.Wpf/Fields.xaml @@ -299,7 +299,7 @@ InvalidParameters => - new[] - { - new object?[] {null, null, null, null}, - new object?[] {1.0, null, null, null}, - new object?[] {null, 1.0, null, null}, - new object?[] {null, null, 1.0, null}, - new object?[] {null, null, null, new Point()}, - new object?[] {1.0, DependencyProperty.UnsetValue, DependencyProperty.UnsetValue, DependencyProperty.UnsetValue}, - new object?[] {DependencyProperty.UnsetValue, 1.0, DependencyProperty.UnsetValue, DependencyProperty.UnsetValue}, - new object?[] {DependencyProperty.UnsetValue, DependencyProperty.UnsetValue, 1.0, DependencyProperty.UnsetValue}, - new object?[] {DependencyProperty.UnsetValue, DependencyProperty.UnsetValue, DependencyProperty.UnsetValue, new Point() }, - }; - - [StaTheory] - [MemberData(nameof(InvalidParameters))] - public void WhenParametersAreNotSetItReturnsIdentity(object? scale, object? lower, object? upper, object? offset) + public static IEnumerable InvalidParameters => + new[] { - var converter = new FloatingHintTransformConverter(); + new object?[] {null, null, null, null}, + new object?[] {1.0, null, null, null}, + new object?[] {null, 1.0, null, null}, + new object?[] {null, null, 1.0, null}, + new object?[] {null, null, null, new Point()}, + new object?[] {1.0, DependencyProperty.UnsetValue, DependencyProperty.UnsetValue, DependencyProperty.UnsetValue}, + new object?[] {DependencyProperty.UnsetValue, 1.0, DependencyProperty.UnsetValue, DependencyProperty.UnsetValue}, + new object?[] {DependencyProperty.UnsetValue, DependencyProperty.UnsetValue, 1.0, DependencyProperty.UnsetValue}, + new object?[] {DependencyProperty.UnsetValue, DependencyProperty.UnsetValue, DependencyProperty.UnsetValue, new Point() }, + }; - var result = converter.Convert(new[] { scale, lower, upper, offset }, - typeof(Transform), null, CultureInfo.CurrentUICulture); + [Theory] + [MemberData(nameof(InvalidParameters))] + public void WhenParametersAreNotSetItReturnsIdentity(object? scale, object? lower, object? upper, object? offset) + { + var converter = new FloatingHintTransformConverter(); - Assert.Equal(Transform.Identity, result); - } + var result = converter.Convert(new[] { scale, lower, upper, offset }, + typeof(Transform), null, CultureInfo.CurrentUICulture); - [StaTheory] - [InlineData(2.0, 1.5, 3.0, 3.0, 4.0)] - [InlineData(1.5, 2.0, 3.0, 2.0, 3.0)] - public void WhenParametersAreSpecifiedItReturnsTransforms(double scale, double lower, double upper, double x, double y) - { - var converter = new FloatingHintTransformConverter(); + Assert.Equal(Transform.Identity, result); + } + + [Theory] + [InlineData(2.0, 1.5, 3.0, 3.0, 4.0)] + [InlineData(1.5, 2.0, 3.0, 2.0, 3.0)] + public void WhenParametersAreSpecifiedItReturnsTransforms(double scale, double lower, double upper, double x, double y) + { + var converter = new FloatingHintTransformConverter(); - var result = (TransformGroup?)converter.Convert(new object?[] { scale, lower, upper, new Point(x, y) }, typeof(Transform), null, CultureInfo.CurrentUICulture); + var result = (TransformGroup?)converter.Convert(new object?[] { scale, lower, upper, new Point(x, y) }, typeof(Transform), null, CultureInfo.CurrentUICulture); - Assert.NotNull(result); - var scaleTransform = (ScaleTransform)result!.Children[0]; - var translateTransform = (TranslateTransform)result.Children[1]; + Assert.NotNull(result); + var scaleTransform = (ScaleTransform)result!.Children[0]; + var translateTransform = (TranslateTransform)result.Children[1]; - Assert.Equal(upper + (lower - upper) * scale, scaleTransform.ScaleX); - Assert.Equal(upper + (lower - upper) * scale, scaleTransform.ScaleY); + Assert.Equal(upper + (lower - upper) * scale, scaleTransform.ScaleX); + Assert.Equal(upper + (lower - upper) * scale, scaleTransform.ScaleY); - Assert.Equal(scale * x, translateTransform.X); - Assert.Equal(scale * y, translateTransform.Y); - } + Assert.Equal(scale * x, translateTransform.X); + Assert.Equal(scale * y, translateTransform.Y); } + [Theory] + [InlineData(2.0, 1.5, 3.0, 3.0, 4.0)] + [InlineData(1.5, 2.0, 3.0, 2.0, 3.0)] + public void WhenParametersAreSpecifiedAndScaleTransformDisabledItReturnsTransforms(double scale, double lower, double upper, double x, double y) + { + var converter = new FloatingHintTransformConverter { ApplyScaleTransform = false }; + var result = (TransformGroup?)converter.Convert(new object?[] { scale, lower, upper, new Point(x, y) }, typeof(Transform), null, CultureInfo.CurrentUICulture); + + Assert.NotNull(result); + Assert.Single(result.Children); + Assert.IsType(result.Children[0]); + } + + [Theory] + [InlineData(2.0, 1.5, 3.0, 3.0, 4.0)] + [InlineData(1.5, 2.0, 3.0, 2.0, 3.0)] + public void WhenParametersAreSpecifiedAndTranslateTransformDisabledItReturnsTransforms(double scale, double lower, double upper, double x, double y) + { + var converter = new FloatingHintTransformConverter { ApplyTranslateTransform = false }; + + var result = (TransformGroup?)converter.Convert(new object?[] { scale, lower, upper, new Point(x, y) }, typeof(Transform), null, CultureInfo.CurrentUICulture); + + Assert.NotNull(result); + Assert.Single(result.Children); + Assert.IsType(result.Children[0]); + } } diff --git a/MaterialDesignThemes.Wpf/Converters/FloatingHintTransformConverter.cs b/MaterialDesignThemes.Wpf/Converters/FloatingHintTransformConverter.cs index f54292a340..e08f43519e 100644 --- a/MaterialDesignThemes.Wpf/Converters/FloatingHintTransformConverter.cs +++ b/MaterialDesignThemes.Wpf/Converters/FloatingHintTransformConverter.cs @@ -2,40 +2,47 @@ using System.Windows.Data; using System.Windows.Media; -namespace MaterialDesignThemes.Wpf.Converters +namespace MaterialDesignThemes.Wpf.Converters; + +internal class FloatingHintTransformConverter : IMultiValueConverter { - internal class FloatingHintTransformConverter : IMultiValueConverter + public bool ApplyScaleTransform { get; set; } = true; + public bool ApplyTranslateTransform { get; set; } = true; + + public object? Convert(object?[]? values, Type targetType, object? parameter, CultureInfo culture) { - public object? Convert(object?[]? values, Type targetType, object? parameter, CultureInfo culture) + if (values?.Length != 4 + || values.Any(v => v == null) + || !double.TryParse(values[0]!.ToString(), out double scale) + || !double.TryParse(values[1]!.ToString(), out double lower) + || !double.TryParse(values[2]!.ToString(), out double upper) + || values[3] is not Point floatingOffset) { - if (values == null - || values.Length != 4 - || values.Any(v => v == null) - || !double.TryParse(values[0]?.ToString(), out double scale) - || !double.TryParse(values[1]?.ToString(), out double lower) - || !double.TryParse(values[2]?.ToString(), out double upper) - || !(values[3] is Point floatingOffset)) - { - return Transform.Identity; - } + return Transform.Identity; + } - double result = upper + (lower - upper) * scale; + double result = upper + (lower - upper) * scale; - var transformGroup = new TransformGroup(); + var transformGroup = new TransformGroup(); + if (ApplyScaleTransform) + { transformGroup.Children.Add(new ScaleTransform { ScaleX = result, ScaleY = result }); + } + if (ApplyTranslateTransform) + { transformGroup.Children.Add(new TranslateTransform { X = scale * floatingOffset.X, Y = scale * floatingOffset.Y }); - return transformGroup; } - - public object?[]? ConvertBack(object? value, Type[] targetTypes, object? parameter, CultureInfo culture) - => throw new NotImplementedException(); + return transformGroup; } + + public object?[]? ConvertBack(object? value, Type[] targetTypes, object? parameter, CultureInfo culture) + => throw new NotImplementedException(); } diff --git a/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.SmartHint.xaml b/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.SmartHint.xaml index 056e385376..16a33eb6ae 100644 --- a/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.SmartHint.xaml +++ b/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.SmartHint.xaml @@ -1,4 +1,4 @@ - - + + 1.0 - \ No newline at end of file +