📄 accessibilityobjectwrapper.mm
字号:
static NSArray* groupAttrs = nil; static NSArray* inputImageAttrs = nil; NSMutableArray* tempArray; if (attributes == nil) { attributes = [[NSArray alloc] initWithObjects: NSAccessibilityRoleAttribute, NSAccessibilitySubroleAttribute, NSAccessibilityRoleDescriptionAttribute, NSAccessibilityChildrenAttribute, NSAccessibilityHelpAttribute, NSAccessibilityParentAttribute, NSAccessibilityPositionAttribute, NSAccessibilitySizeAttribute, NSAccessibilityTitleAttribute, NSAccessibilityDescriptionAttribute, NSAccessibilityValueAttribute, NSAccessibilityFocusedAttribute, NSAccessibilityEnabledAttribute, NSAccessibilityWindowAttribute, @"AXSelectedTextMarkerRange", @"AXStartTextMarker", @"AXEndTextMarker", @"AXVisited", NSAccessibilityLinkedUIElementsAttribute, NSAccessibilitySelectedAttribute, NSAccessibilityBlockQuoteLevelAttribute, NSAccessibilityTopLevelUIElementAttribute, nil]; } if (commonMenuAttrs == nil) { commonMenuAttrs = [[NSArray alloc] initWithObjects: NSAccessibilityRoleAttribute, NSAccessibilityRoleDescriptionAttribute, NSAccessibilityChildrenAttribute, NSAccessibilityParentAttribute, NSAccessibilityEnabledAttribute, NSAccessibilityPositionAttribute, NSAccessibilitySizeAttribute, nil]; } if (anchorAttrs == nil) { tempArray = [[NSMutableArray alloc] initWithArray:attributes]; [tempArray addObject:NSAccessibilityURLAttribute]; [tempArray addObject:NSAccessibilityAccessKeyAttribute]; anchorAttrs = [[NSArray alloc] initWithArray:tempArray]; [tempArray release]; } if (webAreaAttrs == nil) { tempArray = [[NSMutableArray alloc] initWithArray:attributes]; [tempArray addObject:@"AXLinkUIElements"]; [tempArray addObject:@"AXLoaded"]; [tempArray addObject:@"AXLayoutCount"]; [tempArray addObject:NSAccessibilityURLAttribute]; webAreaAttrs = [[NSArray alloc] initWithArray:tempArray]; [tempArray release]; } if (textAttrs == nil) { tempArray = [[NSMutableArray alloc] initWithArray:attributes]; [tempArray addObject:NSAccessibilityNumberOfCharactersAttribute]; [tempArray addObject:NSAccessibilitySelectedTextAttribute]; [tempArray addObject:NSAccessibilitySelectedTextRangeAttribute]; [tempArray addObject:NSAccessibilityVisibleCharacterRangeAttribute]; [tempArray addObject:NSAccessibilityInsertionPointLineNumberAttribute]; [tempArray addObject:NSAccessibilityTitleUIElementAttribute]; [tempArray addObject:NSAccessibilityAccessKeyAttribute]; textAttrs = [[NSArray alloc] initWithArray:tempArray]; [tempArray release]; } if (listBoxAttrs == nil) { tempArray = [[NSMutableArray alloc] initWithArray:attributes]; [tempArray addObject:NSAccessibilitySelectedChildrenAttribute]; [tempArray addObject:NSAccessibilityVisibleChildrenAttribute]; [tempArray addObject:NSAccessibilityOrientationAttribute]; [tempArray addObject:NSAccessibilityTitleUIElementAttribute]; [tempArray addObject:NSAccessibilityAccessKeyAttribute]; listBoxAttrs = [[NSArray alloc] initWithArray:tempArray]; [tempArray release]; } if (rangeAttrs == nil) { tempArray = [[NSMutableArray alloc] initWithArray:attributes]; [tempArray addObject:NSAccessibilityTopLevelUIElementAttribute]; [tempArray addObject:NSAccessibilityValueAttribute]; [tempArray addObject:NSAccessibilityMinValueAttribute]; [tempArray addObject:NSAccessibilityMaxValueAttribute]; rangeAttrs = [[NSArray alloc] initWithArray:tempArray]; [tempArray release]; } if (menuBarAttrs == nil) { tempArray = [[NSMutableArray alloc] initWithArray:commonMenuAttrs]; [tempArray addObject:NSAccessibilitySelectedChildrenAttribute]; [tempArray addObject:NSAccessibilityVisibleChildrenAttribute]; [tempArray addObject:NSAccessibilityTitleUIElementAttribute]; menuBarAttrs = [[NSArray alloc] initWithArray:tempArray]; [tempArray release]; } if (menuAttrs == nil) { tempArray = [[NSMutableArray alloc] initWithArray:commonMenuAttrs]; [tempArray addObject:NSAccessibilitySelectedChildrenAttribute]; [tempArray addObject:NSAccessibilityVisibleChildrenAttribute]; [tempArray addObject:NSAccessibilityTitleUIElementAttribute]; menuAttrs = [[NSArray alloc] initWithArray:tempArray]; [tempArray release]; } if (menuItemAttrs == nil) { tempArray = [[NSMutableArray alloc] initWithArray:commonMenuAttrs]; [tempArray addObject:NSAccessibilityTitleAttribute]; [tempArray addObject:NSAccessibilityHelpAttribute]; [tempArray addObject:NSAccessibilitySelectedAttribute]; [tempArray addObject:(NSString*)kAXMenuItemCmdCharAttribute]; [tempArray addObject:(NSString*)kAXMenuItemCmdVirtualKeyAttribute]; [tempArray addObject:(NSString*)kAXMenuItemCmdGlyphAttribute]; [tempArray addObject:(NSString*)kAXMenuItemCmdModifiersAttribute]; [tempArray addObject:(NSString*)kAXMenuItemMarkCharAttribute]; [tempArray addObject:(NSString*)kAXMenuItemPrimaryUIElementAttribute]; [tempArray addObject:NSAccessibilityServesAsTitleForUIElementsAttribute]; menuItemAttrs = [[NSArray alloc] initWithArray:tempArray]; [tempArray release]; } if (menuButtonAttrs == nil) { menuButtonAttrs = [[NSArray alloc] initWithObjects:NSAccessibilityRoleAttribute, NSAccessibilityRoleDescriptionAttribute, NSAccessibilityParentAttribute, NSAccessibilityPositionAttribute, NSAccessibilitySizeAttribute, NSAccessibilityWindowAttribute, NSAccessibilityTopLevelUIElementAttribute, NSAccessibilityEnabledAttribute, NSAccessibilityFocusedAttribute, NSAccessibilityTitleAttribute, NSAccessibilityChildrenAttribute, nil]; } if (controlAttrs == nil) { tempArray = [[NSMutableArray alloc] initWithArray:attributes]; [tempArray addObject:NSAccessibilityTitleUIElementAttribute]; [tempArray addObject:NSAccessibilityAccessKeyAttribute]; controlAttrs = [[NSArray alloc] initWithArray:tempArray]; [tempArray release]; } if (tableAttrs == nil) { tempArray = [[NSMutableArray alloc] initWithArray:attributes]; [tempArray addObject:NSAccessibilityRowsAttribute]; [tempArray addObject:NSAccessibilityVisibleRowsAttribute]; [tempArray addObject:NSAccessibilityColumnsAttribute]; [tempArray addObject:NSAccessibilityVisibleColumnsAttribute]; [tempArray addObject:NSAccessibilityVisibleCellsAttribute]; [tempArray addObject:(NSString *)kAXColumnHeaderUIElementsAttribute]; [tempArray addObject:NSAccessibilityRowHeaderUIElementsAttribute]; [tempArray addObject:NSAccessibilityHeaderAttribute]; tableAttrs = [[NSArray alloc] initWithArray:tempArray]; [tempArray release]; } if (tableRowAttrs == nil) { tempArray = [[NSMutableArray alloc] initWithArray:attributes]; [tempArray addObject:NSAccessibilityIndexAttribute]; tableRowAttrs = [[NSArray alloc] initWithArray:tempArray]; [tempArray release]; } if (tableColAttrs == nil) { tempArray = [[NSMutableArray alloc] initWithArray:attributes]; [tempArray addObject:NSAccessibilityIndexAttribute]; [tempArray addObject:NSAccessibilityHeaderAttribute]; [tempArray addObject:NSAccessibilityRowsAttribute]; [tempArray addObject:NSAccessibilityVisibleRowsAttribute]; tableColAttrs = [[NSArray alloc] initWithArray:tempArray]; [tempArray release]; } if (tableCellAttrs == nil) { tempArray = [[NSMutableArray alloc] initWithArray:attributes]; [tempArray addObject:NSAccessibilityRowIndexRangeAttribute]; [tempArray addObject:NSAccessibilityColumnIndexRangeAttribute]; tableCellAttrs = [[NSArray alloc] initWithArray:tempArray]; [tempArray release]; } if (groupAttrs == nil) { tempArray = [[NSMutableArray alloc] initWithArray:attributes]; [tempArray addObject:NSAccessibilityTitleUIElementAttribute]; groupAttrs = [[NSArray alloc] initWithArray:tempArray]; [tempArray release]; } if (inputImageAttrs == nil) { tempArray = [[NSMutableArray alloc] initWithArray:controlAttrs]; [tempArray addObject:NSAccessibilityURLAttribute]; [tempArray addObject:NSAccessibilityAccessKeyAttribute]; inputImageAttrs = [[NSArray alloc] initWithArray:tempArray]; [tempArray release]; } if (m_object->isPasswordField()) return attributes; if (m_object->isWebArea()) return webAreaAttrs; if (m_object->isTextControl()) return textAttrs; if (m_object->isAnchor() || m_object->isImage()) return anchorAttrs; if (m_object->isDataTable()) return tableAttrs; if (m_object->isTableRow()) return tableRowAttrs; if (m_object->isTableColumn()) return tableColAttrs; if (m_object->isTableCell()) return tableCellAttrs; if (m_object->isListBox() || m_object->isList()) return listBoxAttrs; if (m_object->isProgressIndicator() || m_object->isSlider()) return rangeAttrs; if (m_object->isInputImage()) return inputImageAttrs; if (m_object->isControl()) return controlAttrs; if (m_object->isGroup()) return groupAttrs; if (m_object->isMenu()) return menuAttrs; if (m_object->isMenuBar()) return menuBarAttrs; if (m_object->isMenuButton()) return menuButtonAttrs; if (m_object->isMenuItem()) return menuItemAttrs; return attributes;}- (VisiblePositionRange)visiblePositionRangeForTextMarkerRange:(WebCoreTextMarkerRange*) textMarkerRange{ return VisiblePositionRange(visiblePositionForStartOfTextMarkerRange(textMarkerRange), visiblePositionForEndOfTextMarkerRange(textMarkerRange));}- (NSArray*)renderWidgetChildren{ Widget* widget = m_object->widget(); if (!widget) return nil; return [(widget->platformWidget()) accessibilityAttributeValue: NSAccessibilityChildrenAttribute];}static void convertToVector(NSArray* array, AccessibilityObject::AccessibilityChildrenVector& vector){ unsigned length = [array count]; vector.reserveInitialCapacity(length); for (unsigned i = 0; i < length; ++i) { AccessibilityObject* obj = [[array objectAtIndex:i] accessibilityObject]; if (obj) vector.append(obj); }}static NSMutableArray* convertToNSArray(const AccessibilityObject::AccessibilityChildrenVector& vector){ unsigned length = vector.size(); NSMutableArray* array = [NSMutableArray arrayWithCapacity: length]; for (unsigned i = 0; i < length; ++i) { AccessibilityObjectWrapper* wrapper = vector[i]->wrapper(); ASSERT(wrapper); if (wrapper) { // we want to return the attachment view instead of the object representing the attachment. // otherwise, we get palindrome errors in the AX hierarchy if (vector[i]->isAttachment() && [wrapper attachmentView]) [array addObject:[wrapper attachmentView]]; else [array addObject:wrapper]; } } return array;}- (WebCoreTextMarkerRange*)textMarkerRangeForSelection{ VisibleSelection selection = m_object->selection(); if (selection.isNone()) return nil; return textMarkerRangeFromVisiblePositions(selection.visibleStart(), selection.visibleEnd());}- (NSValue*)position{ IntRect rect = m_object->elementRect(); // The Cocoa accessibility API wants the lower-left corner. NSPoint point = NSMakePoint(rect.x(), rect.bottom()); FrameView* frameView = m_object->documentFrameView(); if (frameView) { NSView* view = frameView->documentView(); point = [[view window] convertBaseToScreen: [view convertPoint: point toView:nil]]; } return [NSValue valueWithPoint: point];}typedef HashMap<int, NSString*> AccessibilityRoleMap;static const AccessibilityRoleMap& createAccessibilityRoleMap(){ struct RoleEntry { AccessibilityRole value; NSString* string; }; static const RoleEntry roles[] = { { UnknownRole, NSAccessibilityUnknownRole }, { ButtonRole, NSAccessibilityButtonRole }, { RadioButtonRole, NSAccessibilityRadioButtonRole }, { CheckBoxRole, NSAccessibilityCheckBoxRole }, { SliderRole, NSAccessibilitySliderRole }, { TabGroupRole, NSAccessibilityTabGroupRole }, { TextFieldRole, NSAccessibilityTextFieldRole },
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -