diff --git a/src/AdvancedCalculator.Android/Styles/Android.axaml b/src/AdvancedCalculator.Android/Styles/Android.axaml index 30f7e04..20622f7 100644 --- a/src/AdvancedCalculator.Android/Styles/Android.axaml +++ b/src/AdvancedCalculator.Android/Styles/Android.axaml @@ -1,10 +1,12 @@ - - - 16 - 18 - 24 - 1.35 + + + + 16 + 18 + 24 + 1.35 + - - + diff --git a/src/AdvancedCalculator.Browser/Styles/Browser.axaml b/src/AdvancedCalculator.Browser/Styles/Browser.axaml index 3842c71..ee701bb 100644 --- a/src/AdvancedCalculator.Browser/Styles/Browser.axaml +++ b/src/AdvancedCalculator.Browser/Styles/Browser.axaml @@ -1,9 +1,11 @@ - - - 15 - 22 - 1.3 + + + + 15 + 22 + 1.3 + - - + diff --git a/src/AdvancedCalculator.Desktop/Styles/Desktop.axaml b/src/AdvancedCalculator.Desktop/Styles/Desktop.axaml index 7a951d8..c5ac0d9 100644 --- a/src/AdvancedCalculator.Desktop/Styles/Desktop.axaml +++ b/src/AdvancedCalculator.Desktop/Styles/Desktop.axaml @@ -1,9 +1,11 @@ - - - 13 - 1.2 - 20 + + + + 13 + 1.2 + 20 + - - + diff --git a/src/AdvancedCalculator/Converters/IsZeroConverter.cs b/src/AdvancedCalculator/Converters/IsZeroConverter.cs new file mode 100644 index 0000000..c6d30f8 --- /dev/null +++ b/src/AdvancedCalculator/Converters/IsZeroConverter.cs @@ -0,0 +1,25 @@ +using System; +using System.Globalization; +using Avalonia.Data.Converters; + +namespace AdvancedCalculator.Converters; + +public class IsZeroConverter : IValueConverter +{ + public static readonly IsZeroConverter Instance = new(); + + public object? Convert(object? value, Type targetType, object? parameter, CultureInfo? culture) + { + if (value is int i) + return i == 0; + if (value is long l) + return l == 0L; + if (value is double d) + return Math.Abs(d) < double.Epsilon; + return false; + } + + public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo? culture) + => throw new NotSupportedException(); +} + diff --git a/src/AdvancedCalculator/Converters/WidthToPaneOpenConverter.cs b/src/AdvancedCalculator/Converters/WidthToPaneOpenConverter.cs new file mode 100644 index 0000000..13ec666 --- /dev/null +++ b/src/AdvancedCalculator/Converters/WidthToPaneOpenConverter.cs @@ -0,0 +1,29 @@ +using System; +using System.Globalization; +using Avalonia.Data.Converters; + +namespace AdvancedCalculator.Converters; + +public class WidthToPaneOpenConverter : IValueConverter +{ + public static readonly WidthToPaneOpenConverter Instance = new(); + + public object? Convert(object? value, Type targetType, object? parameter, CultureInfo? culture) + { + if (value is double width) + { + double threshold = 640; + if (parameter is double p) + threshold = p; + else if (parameter is string s && double.TryParse(s, NumberStyles.Number, CultureInfo.InvariantCulture, out var parsed)) + threshold = parsed; + + return width >= threshold; + } + return true; + } + + public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo? culture) + => throw new NotSupportedException(); +} + diff --git a/src/AdvancedCalculator/Converters/WidthToSplitViewModeConverter.cs b/src/AdvancedCalculator/Converters/WidthToSplitViewModeConverter.cs new file mode 100644 index 0000000..efb420a --- /dev/null +++ b/src/AdvancedCalculator/Converters/WidthToSplitViewModeConverter.cs @@ -0,0 +1,30 @@ +using System; +using System.Globalization; +using Avalonia.Controls; +using Avalonia.Data.Converters; + +namespace AdvancedCalculator.Converters; + +public class WidthToSplitViewModeConverter : IValueConverter +{ + public static readonly WidthToSplitViewModeConverter Instance = new(); + + public object? Convert(object? value, Type targetType, object? parameter, CultureInfo? culture) + { + if (value is double width) + { + double threshold = 640; + if (parameter is double p) + threshold = p; + else if (parameter is string s && double.TryParse(s, NumberStyles.Number, CultureInfo.InvariantCulture, out var parsed)) + threshold = parsed; + + return width < threshold ? SplitViewDisplayMode.Overlay : SplitViewDisplayMode.Inline; + } + return SplitViewDisplayMode.Inline; + } + + public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo? culture) + => throw new NotSupportedException(); +} + diff --git a/src/AdvancedCalculator/Styles/Scroll.axaml b/src/AdvancedCalculator/Styles/Scroll.axaml index ea9284d..4f1e590 100644 --- a/src/AdvancedCalculator/Styles/Scroll.axaml +++ b/src/AdvancedCalculator/Styles/Scroll.axaml @@ -1,15 +1,11 @@ - + - - - - + diff --git a/src/AdvancedCalculator/Styles/Typography.axaml b/src/AdvancedCalculator/Styles/Typography.axaml index eb80272..e6d5f62 100644 --- a/src/AdvancedCalculator/Styles/Typography.axaml +++ b/src/AdvancedCalculator/Styles/Typography.axaml @@ -1,18 +1,20 @@ - - - 12 - 14 - 16 - 20 + + + + 12 + 14 + 16 + 20 - 18 - 22 - 26 + 18 + 22 + 26 - 1.1 - 1.25 - 1.4 + 1.1 + 1.25 + 1.4 + - - + diff --git a/src/AdvancedCalculator/Views/MainView.axaml b/src/AdvancedCalculator/Views/MainView.axaml index d5fc5e7..981363e 100644 --- a/src/AdvancedCalculator/Views/MainView.axaml +++ b/src/AdvancedCalculator/Views/MainView.axaml @@ -11,34 +11,16 @@ + + + - - - - + CompactPaneLength="0" + DisplayMode="{Binding $parent[Window].Bounds.Width, Converter={StaticResource WidthToSplitViewModeConverter}, ConverterParameter=640}" + IsPaneOpen="{Binding $parent[Window].Bounds.Width, Converter={StaticResource WidthToPaneOpenConverter}, ConverterParameter=640}"> @@ -50,11 +32,11 @@ - -