AccessibilityUIExamples/LayoutArea/LayoutItem.swift
/* |
See LICENSE folder for this sample’s licensing information. |
Abstract: |
The object representing the accessibility element for the CustomLayoutAreaView. |
*/ |
import Cocoa |
class LayoutItem: NSAccessibilityElement, NSAccessibilityLayoutItem { |
var zOrder = 0 |
override func accessibilityIdentifier() -> String { |
return accessibilityLabel()! |
} |
var bounds: NSRect = .zero { |
didSet { |
let minSize = CustomLayoutAreaView.LayoutInfo.LayoutItemHandleSize * 3 |
if bounds.size.height < minSize { |
bounds.size.height = minSize |
} |
if bounds.size.width < minSize { |
bounds.size.width = minSize |
} |
if let parent = accessibilityParent() as? CustomLayoutAreaView { |
if !(oldValue.origin == bounds.origin) && parent.selectedLayoutItem == self { |
// A layout item was moved (bounds changed). |
NSAccessibilityPostNotification(accessibilityParent, NSAccessibilityNotificationName.selectedChildrenMoved) |
} |
} |
} |
} |
} |
// MARK: - |
extension LayoutItem { |
// MARK: NSAccessibilityLayoutItem |
override func setAccessibilityFrame(_ accessibilityFrame: NSRect) { |
var newFrame = accessibilityFrame |
if let parentView = accessibilityParent() as? CustomLayoutAreaView { |
let window = parentView.window |
newFrame = (window?.convertFromScreen(newFrame))! |
newFrame = parentView.convert(newFrame, from:nil) |
bounds = newFrame |
parentView.needsDisplay = true |
} |
} |
// MARK: NSAccessibilityElement |
override func accessibilityParent() -> Any? { |
return super.accessibilityParent() |
} |
override func accessibilityFrame() -> NSRect { |
var result = NSRect.zero |
if let accessibilityParent = accessibilityParent() as? CustomLayoutAreaView { |
result = NSAccessibilityFrameInView(accessibilityParent, bounds) |
} |
return result |
} |
override func isAccessibilityFocused() -> Bool { |
var isFocused = false |
if let accessibilityParent = accessibilityParent() as? CustomLayoutAreaView { |
if accessibilityParent.selectedLayoutItem != nil { |
isFocused = accessibilityParent.selectedLayoutItem == self |
} |
} |
return isFocused |
} |
// MARK: NSAccessibility |
override func setAccessibilityFocused(_ accessibilityFocused: Bool) { |
guard let accessibilityParent = accessibilityParent() as? CustomLayoutAreaView else { return } |
if accessibilityFocused { |
accessibilityParent.selectedLayoutItem = self |
} else { |
if let layoutItem = accessibilityParent.accessibilityFocusedUIElement as? LayoutItem { |
if layoutItem == self { |
accessibilityParent.selectedLayoutItem = self |
} |
} |
} |
} |
} |
Copyright © 2017 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2017-09-12