📄 accessibilityobject.cpp
字号:
VisiblePosition endPosition = endOfLine(nextVisiblePos); // as long as the position hasn't reached the end of the doc, keep searching for a valid line end position // There are cases like when the position is next to a floating object that'll return null for end of line. This code will avoid returning null. while (endPosition.isNull() && nextVisiblePos.isNotNull()) { nextVisiblePos = nextVisiblePos.next(); endPosition = endOfLine(nextVisiblePos); } return endPosition;}VisiblePosition AccessibilityObject::previousLineStartPosition(const VisiblePosition& visiblePos) const{ if (visiblePos.isNull()) return VisiblePosition(); // make sure we move off of a line start VisiblePosition prevVisiblePos = visiblePos.previous(); if (prevVisiblePos.isNull()) return VisiblePosition(); VisiblePosition startPosition = startOfLine(prevVisiblePos); // as long as the position hasn't reached the beginning of the doc, keep searching for a valid line start position // There are cases like when the position is next to a floating object that'll return null for start of line. This code will avoid returning null. if (startPosition.isNull()) { while (startPosition.isNull() && prevVisiblePos.isNotNull()) { prevVisiblePos = prevVisiblePos.previous(); startPosition = startOfLine(prevVisiblePos); } } else startPosition = updateAXLineStartForVisiblePosition(startPosition); return startPosition;}VisiblePosition AccessibilityObject::nextSentenceEndPosition(const VisiblePosition& visiblePos) const{ // FIXME: FO 2 IMPLEMENT (currently returns incorrect answer) // Related? <rdar://problem/3927736> Text selection broken in 8A336 if (visiblePos.isNull()) return VisiblePosition(); // make sure we move off of a sentence end VisiblePosition nextVisiblePos = visiblePos.next(); if (nextVisiblePos.isNull()) return VisiblePosition(); // an empty line is considered a sentence. If it's skipped, then the sentence parser will not // see this empty line. Instead, return the end position of the empty line. VisiblePosition endPosition; String lineString = plainText(makeRange(startOfLine(nextVisiblePos), endOfLine(nextVisiblePos)).get()); if (lineString.isEmpty()) endPosition = nextVisiblePos; else endPosition = endOfSentence(nextVisiblePos); return endPosition;}VisiblePosition AccessibilityObject::previousSentenceStartPosition(const VisiblePosition& visiblePos) const{ // FIXME: FO 2 IMPLEMENT (currently returns incorrect answer) // Related? <rdar://problem/3927736> Text selection broken in 8A336 if (visiblePos.isNull()) return VisiblePosition(); // make sure we move off of a sentence start VisiblePosition previousVisiblePos = visiblePos.previous(); if (previousVisiblePos.isNull()) return VisiblePosition(); // treat empty line as a separate sentence. VisiblePosition startPosition; String lineString = plainText(makeRange(startOfLine(previousVisiblePos), endOfLine(previousVisiblePos)).get()); if (lineString.isEmpty()) startPosition = previousVisiblePos; else startPosition = startOfSentence(previousVisiblePos); return startPosition;}VisiblePosition AccessibilityObject::nextParagraphEndPosition(const VisiblePosition& visiblePos) const{ if (visiblePos.isNull()) return VisiblePosition(); // make sure we move off of a paragraph end VisiblePosition nextPos = visiblePos.next(); if (nextPos.isNull()) return VisiblePosition(); return endOfParagraph(nextPos);}VisiblePosition AccessibilityObject::previousParagraphStartPosition(const VisiblePosition& visiblePos) const{ if (visiblePos.isNull()) return VisiblePosition(); // make sure we move off of a paragraph start VisiblePosition previousPos = visiblePos.previous(); if (previousPos.isNull()) return VisiblePosition(); return startOfParagraph(previousPos);}// NOTE: Consider providing this utility method as AX APIVisiblePosition AccessibilityObject::visiblePositionForIndex(unsigned, bool) const{ return VisiblePosition();}AccessibilityObject* AccessibilityObject::accessibilityObjectForPosition(const VisiblePosition& visiblePos) const{ if (visiblePos.isNull()) return 0; RenderObject* obj = visiblePos.deepEquivalent().node()->renderer(); if (!obj) return 0; return obj->document()->axObjectCache()->getOrCreate(obj);}int AccessibilityObject::lineForPosition(const VisiblePosition& visiblePos) const{ if (visiblePos.isNull()) return 0; unsigned lineCount = 0; VisiblePosition currentVisiblePos = visiblePos; VisiblePosition savedVisiblePos; // move up until we get to the top // FIXME: This only takes us to the top of the rootEditableElement, not the top of the // top document. while (currentVisiblePos.isNotNull() && !(inSameLine(currentVisiblePos, savedVisiblePos))) { ++lineCount; savedVisiblePos = currentVisiblePos; VisiblePosition prevVisiblePos = previousLinePosition(currentVisiblePos, 0); currentVisiblePos = prevVisiblePos; } return lineCount - 1;}// NOTE: Consider providing this utility method as AX APIPlainTextRange AccessibilityObject::plainTextRangeForVisiblePositionRange(const VisiblePositionRange& positionRange) const{ int index1 = index(positionRange.start); int index2 = index(positionRange.end); if (index1 < 0 || index2 < 0 || index1 > index2) return PlainTextRange(); return PlainTextRange(index1, index2 - index1);}// NOTE: Consider providing this utility method as AX APIint AccessibilityObject::index(const VisiblePosition&) const{ return -1;}// Given a line number, the range of characters of the text associated with this accessibility// object that contains the line number.PlainTextRange AccessibilityObject::doAXRangeForLine(unsigned) const{ return PlainTextRange();}// The composed character range in the text associated with this accessibility object that// is specified by the given screen coordinates. This parameterized attribute returns the// complete range of characters (including surrogate pairs of multi-byte glyphs) at the given// screen coordinates.// NOTE: This varies from AppKit when the point is below the last line. AppKit returns an// an error in that case. We return textControl->text().length(), 1. Does this matter?PlainTextRange AccessibilityObject::doAXRangeForPosition(const IntPoint& point) const{ int i = index(visiblePositionForPoint(point)); if (i < 0) return PlainTextRange(); return PlainTextRange(i, 1);}// The composed character range in the text associated with this accessibility object that// is specified by the given index value. This parameterized attribute returns the complete// range of characters (including surrogate pairs of multi-byte glyphs) at the given index.PlainTextRange AccessibilityObject::doAXRangeForIndex(unsigned) const{ return PlainTextRange();}// Given a character index, the range of text associated with this accessibility object// over which the style in effect at that character index applies.PlainTextRange AccessibilityObject::doAXStyleRangeForIndex(unsigned index) const{ VisiblePositionRange range = styleRangeForPosition(visiblePositionForIndex(index, false)); return plainTextRangeForVisiblePositionRange(range);}// A substring of the text associated with this accessibility object that is// specified by the given character range.String AccessibilityObject::doAXStringForRange(const PlainTextRange&) const{ return String();}// The bounding rectangle of the text associated with this accessibility object that is// specified by the given range. This is the bounding rectangle a sighted user would see// on the display screen, in pixels.IntRect AccessibilityObject::doAXBoundsForRange(const PlainTextRange&) const{ return IntRect();}// Given an indexed character, the line number of the text associated with this accessibility// object that contains the character.unsigned AccessibilityObject::doAXLineForIndex(unsigned index){ return lineForPosition(visiblePositionForIndex(index, false));}FrameView* AccessibilityObject::documentFrameView() const { const AccessibilityObject* object = this; while (object && !object->isAccessibilityRenderObject()) object = object->parentObject(); if (!object) return 0; return object->documentFrameView();} AccessibilityObject* AccessibilityObject::doAccessibilityHitTest(const IntPoint&) const{ return 0;}AccessibilityObject* AccessibilityObject::focusedUIElement() const{ return 0;}AccessibilityObject* AccessibilityObject::observableObject() const{ return 0;}AccessibilityRole AccessibilityObject::roleValue() const{ return UnknownRole;} AccessibilityRole AccessibilityObject::ariaRoleAttribute() const{ return UnknownRole;}bool AccessibilityObject::isPresentationalChildOfAriaRole() const{ return false;}bool AccessibilityObject::ariaRoleHasPresentationalChildren() const{ return false;}void AccessibilityObject::clearChildren(){ m_haveChildren = false; m_children.clear();}void AccessibilityObject::childrenChanged(){ return;}void AccessibilityObject::addChildren(){}void AccessibilityObject::selectedChildren(AccessibilityChildrenVector&){}void AccessibilityObject::visibleChildren(AccessibilityChildrenVector&){} unsigned AccessibilityObject::axObjectID() const{ return m_id;}void AccessibilityObject::setAXObjectID(unsigned axObjectID){ m_id = axObjectID;}const String& AccessibilityObject::actionVerb() const{ // FIXME: Need to add verbs for select elements. DEFINE_STATIC_LOCAL(const String, buttonAction, (AXButtonActionVerb())); DEFINE_STATIC_LOCAL(const String, textFieldAction, (AXTextFieldActionVerb())); DEFINE_STATIC_LOCAL(const String, radioButtonAction, (AXRadioButtonActionVerb())); DEFINE_STATIC_LOCAL(const String, checkedCheckBoxAction, (AXCheckedCheckBoxActionVerb())); DEFINE_STATIC_LOCAL(const String, uncheckedCheckBoxAction, (AXUncheckedCheckBoxActionVerb())); DEFINE_STATIC_LOCAL(const String, linkAction, (AXLinkActionVerb())); DEFINE_STATIC_LOCAL(const String, noAction, ()); switch (roleValue()) { case ButtonRole: return buttonAction; case TextFieldRole: case TextAreaRole: return textFieldAction; case RadioButtonRole: return radioButtonAction; case CheckBoxRole: return isChecked() ? checkedCheckBoxAction : uncheckedCheckBoxAction; case LinkRole: case WebCoreLinkRole: return linkAction; default: return noAction; }}void AccessibilityObject::updateBackingStore(){} } // namespace WebCore
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -