| File: System\Windows\Forms\Scrolling\ScrollBar.ScrollBarChildAccessibleObject.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms\System.Windows.Forms.csproj (System.Windows.Forms) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Drawing; using Windows.Win32.System.Variant; using Windows.Win32.UI.Accessibility; namespace System.Windows.Forms; public partial class ScrollBar { internal class ScrollBarChildAccessibleObject : AccessibleObject { internal ScrollBar OwningScrollBar { get; private set; } public ScrollBarChildAccessibleObject(ScrollBar owningScrollBar) { OwningScrollBar = owningScrollBar; } public override Rectangle Bounds { get { if (!OwningScrollBar.IsHandleCreated || !IsDisplayed) { return Rectangle.Empty; } // The "GetChildId" method returns to the id of the ScrollBar element, // which allows to use the native "accLocation" method to get the "Bounds" property return ParentInternal.SystemIAccessible.TryGetLocation(GetChildId()); } } public override string? DefaultAction => GetDefaultActionInternal().ToNullableStringAndFree(); private protected override bool IsInternal => true; internal override BSTR GetDefaultActionInternal() => ParentInternal.SystemIAccessible.TryGetDefaultAction(GetChildId()); public override string? Description => GetDescriptionInternal().ToNullableStringAndFree(); internal override unsafe BSTR GetDescriptionInternal() => ParentInternal.SystemIAccessible.TryGetDescription(GetChildId()); public override string? Name => GetNameInternal().ToNullableStringAndFree(); internal override BSTR GetNameInternal() => ParentInternal.SystemIAccessible.TryGetName(GetChildId()); public override AccessibleRole Role => ParentInternal.SystemIAccessible.TryGetRole(GetChildId()); public override AccessibleStates State => ParentInternal.SystemIAccessible.TryGetState(GetChildId()); internal override IRawElementProviderFragmentRoot.Interface FragmentRoot => ParentInternal; internal virtual bool IsDisplayed => OwningScrollBar.Visible; internal ScrollBarAccessibleObject ParentInternal => (ScrollBarAccessibleObject)OwningScrollBar.AccessibilityObject; internal override int[] RuntimeId => [ RuntimeIDFirstItem, (int)OwningScrollBar.InternalHandle, GetChildId() ]; internal override IRawElementProviderFragment.Interface? FragmentNavigate(NavigateDirection direction) => direction switch { NavigateDirection.NavigateDirection_Parent => ParentInternal, _ => base.FragmentNavigate(direction) }; internal override VARIANT GetPropertyValue(UIA_PROPERTY_ID propertyID) => propertyID switch { UIA_PROPERTY_ID.UIA_ControlTypePropertyId => (VARIANT)(int)UIA_CONTROLTYPE_ID.UIA_ButtonControlTypeId, UIA_PROPERTY_ID.UIA_HasKeyboardFocusPropertyId => VARIANT.False, UIA_PROPERTY_ID.UIA_IsEnabledPropertyId => (VARIANT)OwningScrollBar.Enabled, UIA_PROPERTY_ID.UIA_IsKeyboardFocusablePropertyId => VARIANT.False, _ => base.GetPropertyValue(propertyID) }; internal override void Invoke() { if (OwningScrollBar.IsHandleCreated && IsDisplayed) { // The "GetChildId" method returns to the id of the ScrollBar element, // which allows to use the native "accDoDefaultAction" method when the "Invoke" method is called ParentInternal.SystemIAccessible.TryDoDefaultAction(GetChildId()); } } internal override bool IsPatternSupported(UIA_PATTERN_ID patternId) => patternId switch { UIA_PATTERN_ID.UIA_LegacyIAccessiblePatternId => true, _ => base.IsPatternSupported(patternId) }; } }