⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 accessibilityobjectwrapper.mm

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 MM
📖 第 1 页 / 共 5 页
字号:
        { StaticTextRole, NSAccessibilityStaticTextRole },        { TextAreaRole, NSAccessibilityTextAreaRole },        { ScrollAreaRole, NSAccessibilityScrollAreaRole },        { PopUpButtonRole, NSAccessibilityPopUpButtonRole },        { MenuButtonRole, NSAccessibilityMenuButtonRole },        { TableRole, NSAccessibilityTableRole },        { ApplicationRole, NSAccessibilityApplicationRole },        { GroupRole, NSAccessibilityGroupRole },        { RadioGroupRole, NSAccessibilityRadioGroupRole },        { ListRole, NSAccessibilityListRole },        { ScrollBarRole, NSAccessibilityScrollBarRole },        { ValueIndicatorRole, NSAccessibilityValueIndicatorRole },        { ImageRole, NSAccessibilityImageRole },        { MenuBarRole, NSAccessibilityMenuBarRole },        { MenuRole, NSAccessibilityMenuRole },        { MenuItemRole, NSAccessibilityMenuItemRole },        { ColumnRole, NSAccessibilityColumnRole },        { RowRole, NSAccessibilityRowRole },        { ToolbarRole, NSAccessibilityToolbarRole },        { BusyIndicatorRole, NSAccessibilityBusyIndicatorRole },        { ProgressIndicatorRole, NSAccessibilityProgressIndicatorRole },        { WindowRole, NSAccessibilityWindowRole },        { DrawerRole, NSAccessibilityDrawerRole },        { SystemWideRole, NSAccessibilitySystemWideRole },        { OutlineRole, NSAccessibilityOutlineRole },        { IncrementorRole, NSAccessibilityIncrementorRole },        { BrowserRole, NSAccessibilityBrowserRole },        { ComboBoxRole, NSAccessibilityComboBoxRole },        { SplitGroupRole, NSAccessibilitySplitGroupRole },        { SplitterRole, NSAccessibilitySplitterRole },        { ColorWellRole, NSAccessibilityColorWellRole },        { GrowAreaRole, NSAccessibilityGrowAreaRole },        { SheetRole, NSAccessibilitySheetRole },        { HelpTagRole, NSAccessibilityHelpTagRole },        { MatteRole, NSAccessibilityMatteRole },         { RulerRole, NSAccessibilityRulerRole },        { RulerMarkerRole, NSAccessibilityRulerMarkerRole },        { LinkRole, NSAccessibilityLinkRole },#ifndef BUILDING_ON_TIGER                { DisclosureTriangleRole, NSAccessibilityDisclosureTriangleRole },        { GridRole, NSAccessibilityGridRole },#endif        { WebCoreLinkRole, NSAccessibilityLinkRole },         { ImageMapLinkRole, NSAccessibilityLinkRole },        { ImageMapRole, @"AXImageMap" },        { ListMarkerRole, @"AXListMarker" },        { WebAreaRole, @"AXWebArea" },        { HeadingRole, @"AXHeading" },        { ListBoxRole, NSAccessibilityListRole },        { ListBoxOptionRole, NSAccessibilityStaticTextRole },        // cells don't exist on tiger or leopard#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD)        { CellRole, NSAccessibilityGroupRole },#else        { CellRole, NSAccessibilityCellRole },#endif        { TableHeaderContainerRole, NSAccessibilityGroupRole },        { DefinitionListDefinitionRole, NSAccessibilityGroupRole },        { DefinitionListTermRole, NSAccessibilityGroupRole }            };    AccessibilityRoleMap& roleMap = *new AccessibilityRoleMap;        const unsigned numRoles = sizeof(roles) / sizeof(roles[0]);    for (unsigned i = 0; i < numRoles; ++i)        roleMap.set(roles[i].value, roles[i].string);    return roleMap;}static NSString* roleValueToNSString(AccessibilityRole value){    ASSERT(value);    static const AccessibilityRoleMap& roleMap = createAccessibilityRoleMap();    return roleMap.get(value);}- (NSString*)role{    if (m_object->isAttachment())        return [[self attachmentView] accessibilityAttributeValue:NSAccessibilityRoleAttribute];    NSString* string = roleValueToNSString(m_object->roleValue());    if (string != nil)        return string;    return NSAccessibilityUnknownRole;}- (NSString*)subrole{    if (m_object->isPasswordField())        return NSAccessibilitySecureTextFieldSubrole;        if (m_object->isAttachment()) {        NSView* attachView = [self attachmentView];        if ([[attachView accessibilityAttributeNames] containsObject:NSAccessibilitySubroleAttribute]) {            return [attachView accessibilityAttributeValue:NSAccessibilitySubroleAttribute];        }    }        if (m_object->isList()) {        AccessibilityList* listObject = static_cast<AccessibilityList*>(m_object);        if (listObject->isUnorderedList() || listObject->isOrderedList())            return NSAccessibilityContentListSubrole;        if (listObject->isDefinitionList())            return NSAccessibilityDefinitionListSubrole;    }        return nil;}- (NSString*)roleDescription{    if (!m_object)        return nil;    // attachments have the AXImage role, but a different subrole    if (m_object->isAttachment())        return [[self attachmentView] accessibilityAttributeValue:NSAccessibilityRoleDescriptionAttribute];        // FIXME 3447564: It would be better to call some AppKit API to get these strings    // (which would be the best way to localize them)        NSString* axRole = [self role];    if ([axRole isEqualToString:NSAccessibilityButtonRole])        return NSAccessibilityRoleDescription(NSAccessibilityButtonRole, [self subrole]);        if ([axRole isEqualToString:NSAccessibilityPopUpButtonRole])        return NSAccessibilityRoleDescription(NSAccessibilityPopUpButtonRole, [self subrole]);    if ([axRole isEqualToString:NSAccessibilityStaticTextRole])        return NSAccessibilityRoleDescription(NSAccessibilityStaticTextRole, [self subrole]);    if ([axRole isEqualToString:NSAccessibilityImageRole])        return NSAccessibilityRoleDescription(NSAccessibilityImageRole, [self subrole]);        if ([axRole isEqualToString:NSAccessibilityGroupRole])        return NSAccessibilityRoleDescription(NSAccessibilityGroupRole, [self subrole]);        if ([axRole isEqualToString:NSAccessibilityCheckBoxRole])        return NSAccessibilityRoleDescription(NSAccessibilityCheckBoxRole, [self subrole]);    if ([axRole isEqualToString:NSAccessibilityRadioButtonRole])        return NSAccessibilityRoleDescription(NSAccessibilityRadioButtonRole, [self subrole]);    if ([axRole isEqualToString:NSAccessibilityTextFieldRole])        return NSAccessibilityRoleDescription(NSAccessibilityTextFieldRole, [self subrole]);    if ([axRole isEqualToString:NSAccessibilityTextAreaRole])        return NSAccessibilityRoleDescription(NSAccessibilityTextAreaRole, [self subrole]);    if ([axRole isEqualToString:NSAccessibilityListRole])        return NSAccessibilityRoleDescription(NSAccessibilityListRole, [self subrole]);        if ([axRole isEqualToString:NSAccessibilityTableRole])        return NSAccessibilityRoleDescription(NSAccessibilityTableRole, [self subrole]);    if ([axRole isEqualToString:NSAccessibilityRowRole])        return NSAccessibilityRoleDescription(NSAccessibilityRowRole, [self subrole]);    if ([axRole isEqualToString:NSAccessibilityColumnRole])        return NSAccessibilityRoleDescription(NSAccessibilityColumnRole, [self subrole]);    if ([axRole isEqualToString:NSAccessibilityCellRole])        return NSAccessibilityRoleDescription(NSAccessibilityCellRole, [self subrole]);    if ([axRole isEqualToString:@"AXWebArea"])        return AXWebAreaText();        if ([axRole isEqualToString:@"AXLink"])        return AXLinkText();        if ([axRole isEqualToString:@"AXListMarker"])        return AXListMarkerText();        if ([axRole isEqualToString:@"AXImageMap"])        return AXImageMapText();    if ([axRole isEqualToString:@"AXHeading"])        return AXHeadingText();            if ([axRole isEqualToString:(NSString*)kAXMenuBarItemRole] ||        [axRole isEqualToString:NSAccessibilityMenuRole])        return nil;    if ([axRole isEqualToString:NSAccessibilityMenuButtonRole])        return NSAccessibilityRoleDescription(NSAccessibilityMenuButtonRole, [self subrole]);        return NSAccessibilityRoleDescription(NSAccessibilityUnknownRole, nil);}// FIXME: split up this function in a better way.  // suggestions: Use a hash table that maps attribute names to function calls,// or maybe pointers to member functions- (id)accessibilityAttributeValue:(NSString*)attributeName{    if (!m_object)        return nil;    m_object->updateBackingStore();        if ([attributeName isEqualToString: NSAccessibilityRoleAttribute])        return [self role];    if ([attributeName isEqualToString: NSAccessibilitySubroleAttribute])        return [self subrole];    if ([attributeName isEqualToString: NSAccessibilityRoleDescriptionAttribute])        return [self roleDescription];    if ([attributeName isEqualToString: NSAccessibilityParentAttribute]) {        if (m_object->isAccessibilityRenderObject()) {            FrameView* fv = static_cast<AccessibilityRenderObject*>(m_object)->frameViewIfRenderView();            if (fv)                return fv->platformWidget();        }                return m_object->parentObjectUnignored()->wrapper();    }    if ([attributeName isEqualToString: NSAccessibilityChildrenAttribute]) {        if (m_object->children().isEmpty()) {            NSArray* children = [self renderWidgetChildren];            if (children != nil)                return children;        }        return convertToNSArray(m_object->children());    }        if ([attributeName isEqualToString: NSAccessibilitySelectedChildrenAttribute]) {        if (m_object->isListBox()) {            AccessibilityObject::AccessibilityChildrenVector selectedChildrenCopy;            m_object->selectedChildren(selectedChildrenCopy);            return convertToNSArray(selectedChildrenCopy);        }        return nil;    }        if ([attributeName isEqualToString: NSAccessibilityVisibleChildrenAttribute]) {        if (m_object->isListBox()) {            AccessibilityObject::AccessibilityChildrenVector visibleChildrenCopy;            m_object->visibleChildren(visibleChildrenCopy);            return convertToNSArray(visibleChildrenCopy);        }        else if (m_object->isList())            return [self accessibilityAttributeValue:NSAccessibilityChildrenAttribute];        return nil;    }            if (m_object->isWebArea()) {        if ([attributeName isEqualToString: @"AXLinkUIElements"]) {            AccessibilityObject::AccessibilityChildrenVector links;            static_cast<AccessibilityRenderObject*>(m_object)->getDocumentLinks(links);            return convertToNSArray(links);        }        if ([attributeName isEqualToString: @"AXLoaded"])            return [NSNumber numberWithBool: m_object->isLoaded()];        if ([attributeName isEqualToString: @"AXLayoutCount"])            return [NSNumber numberWithInt: m_object->layoutCount()];    }        if (m_object->isTextControl()) {        if ([attributeName isEqualToString: NSAccessibilityNumberOfCharactersAttribute]) {            int length = m_object->textLength();            if (length < 0)                return nil;            return [NSNumber numberWithUnsignedInt:length];        }        if ([attributeName isEqualToString: NSAccessibilitySelectedTextAttribute]) {            String selectedText = m_object->selectedText();            if (selectedText.isNull())                return nil;            return (NSString*)selectedText;        }        if ([attributeName isEqualToString: NSAccessibilitySelectedTextRangeAttribute]) {            PlainTextRange textRange = m_object->selectedTextRange();            if (textRange.isNull())                return nil;            return [NSValue valueWithRange:NSMakeRange(textRange.start, textRange.length)];        }        // TODO: Get actual visible range. <rdar://problem/4712101>        if ([attributeName isEqualToString: NSAccessibilityVisibleCharacterRangeAttribute])            return m_object->isPasswordField() ? nil : [NSValue valueWithRange: NSMakeRange(0, m_object->textLength())];        if ([attributeName isEqualToString: NSAccessibilityInsertionPointLineNumberAttribute]) {            // if selectionEnd > 0, then there is selected text and this question should not be answered            if (m_object->isPasswordField() || m_object->selectionEnd() > 0)                return nil;            int lineNumber = m_object->lineForPosition(m_object->visiblePositionForIndex(m_object->selectionStart(), true));            if (lineNumber < 0)                return nil;            return [NSNumber numberWithInt:lineNumber];        }    }        if ([attributeName isEqualToString: NSAccessibilityURLAttribute]) {        KURL url = m_object->url();        if (url.isNull())            return nil;        return (NSURL*)url;    }    if ([attributeName isEqualToString: @"AXVisited"])        return [NSNumber numberWithBool: m_object->isVisited()];        if ([attributeName isEqualToString: NSAccessibilityTitleAttribute]) {        if (m_object->isAttachment()) {            if ([[[self attachmentView] accessibilityAttributeNames] containsObject:NSAccessibilityTitleAttribute])                 return [[self attachmentView] accessibilityAttributeValue:NSAccessibilityTitleAttribute];        }        return m_object->title();    }        if ([attributeName isEqualToString: NSAccessibilityDescriptionAttribute]) {        if (m_object->isAttachment()) {            if ([[[self attachmentView] accessibilityAttributeNames] containsObject:NSAccessibilityDescriptionAttribute])                return [[self attachmentView] accessibilityAttributeValue:NSAccessibilityDescriptionAttribute];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -