From 2df1e32aae1d2fbda00a8fef7374e460c5244efd Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Tue, 30 Mar 2021 18:32:56 +0200 Subject: [PATCH] Expose max/min for slider controls etc. --- native/Avalonia.Native/src/OSX/automation.mm | 29 ++++++++++++++++++-- src/Avalonia.Native/AvnAutomationPeer.cs | 6 ++-- src/Avalonia.Native/avn.idl | 6 ++-- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/native/Avalonia.Native/src/OSX/automation.mm b/native/Avalonia.Native/src/OSX/automation.mm index c3ca182b91..b1a2b9e94e 100644 --- a/native/Avalonia.Native/src/OSX/automation.mm +++ b/native/Avalonia.Native/src/OSX/automation.mm @@ -157,6 +157,27 @@ public: return [super accessibilityValue]; } +- (id)accessibilityMinValue +{ + if (_peer->IsRangeValueProvider()) + { + return [NSNumber numberWithDouble:_peer->RangeValueProvider_GetMinimum()]; + } + + return [super accessibilityMinValue]; +} + +- (id)accessibilityMaxValue +{ + if (_peer->IsRangeValueProvider()) + { + return [NSNumber numberWithDouble:_peer->RangeValueProvider_GetMaximum()]; + } + + return [super accessibilityMaxValue]; +} + + - (NSArray *)accessibilityChildren { if (_children == nullptr && _peer != nullptr) @@ -226,7 +247,7 @@ public: { if (!_peer->IsExpandCollapseProvider()) return NO; - return _peer->ExpandCollapseProvider_IsExpanded(); + return _peer->ExpandCollapseProvider_GetIsExpanded(); } - (void)setAccessibilityExpanded:(BOOL)accessibilityExpanded @@ -284,7 +305,7 @@ public: { if (selector == @selector(accessibilityPerformShowMenu)) { - return _peer->IsExpandCollapseProvider() && _peer->ExpandCollapseProvider_ShowsMenu(); + return _peer->IsExpandCollapseProvider() && _peer->ExpandCollapseProvider_GetShowsMenu(); } else if (selector == @selector(isAccessibilityExpanded)) { @@ -295,7 +316,9 @@ public: return _peer->IsInvokeProvider() || _peer->IsExpandCollapseProvider(); } else if (selector == @selector(accessibilityPerformIncrement) || - selector == @selector(accessibilityPerformDecrement)) + selector == @selector(accessibilityPerformDecrement) || + selector == @selector(accessibilityMinValue) || + selector == @selector(accessibilityMaxValue)) { return _peer->IsRangeValueProvider(); } diff --git a/src/Avalonia.Native/AvnAutomationPeer.cs b/src/Avalonia.Native/AvnAutomationPeer.cs index 81ed94bda9..dee7658d33 100644 --- a/src/Avalonia.Native/AvnAutomationPeer.cs +++ b/src/Avalonia.Native/AvnAutomationPeer.cs @@ -78,14 +78,14 @@ namespace Avalonia.Native public int IsExpandCollapseProvider() => (_inner is IExpandCollapseProvider).AsComBool(); - public int ExpandCollapseProvider_IsExpanded() => ((IExpandCollapseProvider)_inner).ExpandCollapseState switch + public int ExpandCollapseProvider_GetIsExpanded() => ((IExpandCollapseProvider)_inner).ExpandCollapseState switch { ExpandCollapseState.Expanded => 1, ExpandCollapseState.PartiallyExpanded => 1, _ => 0, }; - public int ExpandCollapseProvider_ShowsMenu() => ((IExpandCollapseProvider)_inner).ShowsMenu.AsComBool(); + public int ExpandCollapseProvider_GetShowsMenu() => ((IExpandCollapseProvider)_inner).ShowsMenu.AsComBool(); public void ExpandCollapseProvider_Expand() => ((IExpandCollapseProvider)_inner).Expand(); public void ExpandCollapseProvider_Collapse() => ((IExpandCollapseProvider)_inner).Collapse(); @@ -94,6 +94,8 @@ namespace Avalonia.Native public int IsRangeValueProvider() => (_inner is IRangeValueProvider).AsComBool(); public double RangeValueProvider_GetValue() => ((IRangeValueProvider)_inner).Value; + public double RangeValueProvider_GetMinimum() => ((IRangeValueProvider)_inner).Minimum; + public double RangeValueProvider_GetMaximum() => ((IRangeValueProvider)_inner).Maximum; public double RangeValueProvider_GetSmallChange() => ((IRangeValueProvider)_inner).SmallChange; public double RangeValueProvider_GetLargeChange() => ((IRangeValueProvider)_inner).LargeChange; public void RangeValueProvider_SetValue(double value) => ((IRangeValueProvider)_inner).SetValue(value); diff --git a/src/Avalonia.Native/avn.idl b/src/Avalonia.Native/avn.idl index 8585ee63f2..73494d3e43 100644 --- a/src/Avalonia.Native/avn.idl +++ b/src/Avalonia.Native/avn.idl @@ -817,8 +817,8 @@ interface IAvnAutomationPeer : IUnknown IAvnAutomationPeer* RootProvider_GetPeerFromPoint(AvnPoint point); bool IsExpandCollapseProvider(); - bool ExpandCollapseProvider_IsExpanded(); - bool ExpandCollapseProvider_ShowsMenu(); + bool ExpandCollapseProvider_GetIsExpanded(); + bool ExpandCollapseProvider_GetShowsMenu(); void ExpandCollapseProvider_Expand(); void ExpandCollapseProvider_Collapse(); @@ -827,6 +827,8 @@ interface IAvnAutomationPeer : IUnknown bool IsRangeValueProvider(); double RangeValueProvider_GetValue(); + double RangeValueProvider_GetMinimum(); + double RangeValueProvider_GetMaximum(); double RangeValueProvider_GetSmallChange(); double RangeValueProvider_GetLargeChange(); void RangeValueProvider_SetValue(double value);