author | Trevor Saunders <trev.saunders@gmail.com> |
Wed, 07 Mar 2012 02:08:02 +0900 | |
changeset 88383 | aa7d28b45edef3c0eb69b8543b5a0cec78b9d375 |
parent 88382 | a66cd5f0790e1d4e1f7a50622f665507280446dd |
child 88384 | c5a5f5ad069133ed176a79d238a417e45ad73f5c |
push id | 22194 |
push user | mak77@bonardo.net |
push date | Wed, 07 Mar 2012 09:33:54 +0000 |
treeherder | mozilla-central@8ef88a69f861 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | surkov |
bugs | 726287 |
milestone | 13.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
accessible/src/html/nsHyperTextAccessible.cpp | file | annotate | diff | comparison | revisions | |
accessible/src/html/nsHyperTextAccessible.h | file | annotate | diff | comparison | revisions |
--- a/accessible/src/html/nsHyperTextAccessible.cpp +++ b/accessible/src/html/nsHyperTextAccessible.cpp @@ -42,16 +42,17 @@ #include "nsAccessibilityService.h" #include "nsAccUtils.h" #include "nsDocAccessible.h" #include "nsTextAttrs.h" #include "Role.h" #include "States.h" #include "nsIClipboard.h" +#include "nsContentUtils.h" #include "nsFocusManager.h" #include "nsIDOMCharacterData.h" #include "nsIDOMDocument.h" #include "nsIDOMRange.h" #include "nsIDOMXULDocument.h" #include "nsIEditingSession.h" #include "nsIEditor.h" #include "nsIFrame.h" @@ -1148,25 +1149,24 @@ nsHyperTextAccessible::GetTextAttributes accAtOffsetIdx); nsresult rv = textAttrsMgr.GetAttributes(*aAttributes, &startOffset, &endOffset); NS_ENSURE_SUCCESS(rv, rv); // Compute spelling attributes on text accessible only. nsIFrame *offsetFrame = accAtOffset->GetFrame(); if (offsetFrame && offsetFrame->GetType() == nsGkAtoms::textFrame) { - nsCOMPtr<nsIDOMNode> node = accAtOffset->DOMNode(); - PRInt32 nodeOffset = 0; nsresult rv = RenderedToContentOffset(offsetFrame, offsetInAcc, &nodeOffset); NS_ENSURE_SUCCESS(rv, rv); // Set 'misspelled' text attribute. - rv = GetSpellTextAttribute(node, nodeOffset, &startOffset, &endOffset, + rv = GetSpellTextAttribute(accAtOffset->GetNode(), nodeOffset, + &startOffset, &endOffset, aAttributes ? *aAttributes : nsnull); NS_ENSURE_SUCCESS(rv, rv); } *aStartOffset = startOffset; *aEndOffset = endOffset; return NS_OK; } @@ -1784,23 +1784,21 @@ nsHyperTextAccessible::GetSelectionDOMRa PRUint32 childCount = startNode->GetChildCount(); nsCOMPtr<nsISelectionPrivate> privSel(do_QueryInterface(domSel)); nsresult rv = privSel-> GetRangesForIntervalArray(startNode, 0, startNode, childCount, true, aRanges); NS_ENSURE_SUCCESS(rv,); // Remove collapsed ranges PRUint32 numRanges = aRanges->Length(); - for (PRUint32 count = 0; count < numRanges; count ++) { - bool isCollapsed = false; - (*aRanges)[count]->GetCollapsed(&isCollapsed); - if (isCollapsed) { - aRanges->RemoveElementAt(count); + for (PRUint32 idx = 0; idx < numRanges; idx ++) { + if ((*aRanges)[idx]->Collapsed()) { + aRanges->RemoveElementAt(idx); --numRanges; - --count; + --idx; } } } /* * Gets the number of selected regions. */ NS_IMETHODIMP @@ -1832,39 +1830,29 @@ nsHyperTextAccessible::GetSelectionBound GetSelectionDOMRanges(nsISelectionController::SELECTION_NORMAL, &ranges); PRUint32 rangeCount = ranges.Length(); if (aSelectionNum < 0 || aSelectionNum >= rangeCount) return NS_ERROR_INVALID_ARG; nsRange* range = ranges[aSelectionNum]; - // Get start point - nsCOMPtr<nsIDOMNode> startDOMNode; - range->GetStartContainer(getter_AddRefs(startDOMNode)); - nsCOMPtr<nsINode> startNode(do_QueryInterface(startDOMNode)); - PRInt32 startOffset = 0; - range->GetStartOffset(&startOffset); + // Get start and end points. + nsINode* startNode = range->GetStartParent(); + nsINode* endNode = range->GetEndParent(); + PRInt32 startOffset = range->StartOffset(), endOffset = range->EndOffset(); - // Get end point - nsCOMPtr<nsIDOMNode> endDOMNode; - range->GetEndContainer(getter_AddRefs(endDOMNode)); - nsCOMPtr<nsINode> endNode(do_QueryInterface(endDOMNode)); - PRInt32 endOffset = 0; - range->GetEndOffset(&endOffset); - - PRInt16 rangeCompareResult = 0; - nsresult rv = range->CompareBoundaryPoints(nsIDOMRange::START_TO_END, range, - &rangeCompareResult); - NS_ENSURE_SUCCESS(rv, rv); - - if (rangeCompareResult < 0) { - // Make sure start is before end, by swapping offsets - // This occurs when the user selects backwards in the text - startNode.swap(endNode); + // Make sure start is before end, by swapping DOM points. This occurs when + // the user selects backwards in the text. + PRInt32 rangeCompare = nsContentUtils::ComparePoints(endNode, endOffset, + startNode, startOffset); + if (rangeCompare < 0) { + nsINode* tempNode = startNode; + startNode = endNode; + endNode = tempNode; PRInt32 tempOffset = startOffset; startOffset = endOffset; endOffset = tempOffset; } nsAccessible *startAccessible = DOMPointToHypertextOffset(startNode, startOffset, aStartOffset); if (!startAccessible) { @@ -2319,78 +2307,64 @@ nsHyperTextAccessible::GetDOMPointByFram // nsHyperTextAccessible nsresult nsHyperTextAccessible::RangeBoundToHypertextOffset(nsRange *aRange, bool aIsStartBound, bool aIsStartHTOffset, PRInt32 *aHTOffset) { - nsCOMPtr<nsIDOMNode> DOMNode; + nsINode* node = nsnull; PRInt32 nodeOffset = 0; - nsresult rv; if (aIsStartBound) { - rv = aRange->GetStartContainer(getter_AddRefs(DOMNode)); - NS_ENSURE_SUCCESS(rv, rv); - - rv = aRange->GetStartOffset(&nodeOffset); - NS_ENSURE_SUCCESS(rv, rv); + node = aRange->GetStartParent(); + nodeOffset = aRange->StartOffset(); } else { - rv = aRange->GetEndContainer(getter_AddRefs(DOMNode)); - NS_ENSURE_SUCCESS(rv, rv); - - rv = aRange->GetEndOffset(&nodeOffset); - NS_ENSURE_SUCCESS(rv, rv); + node = aRange->GetEndParent(); + nodeOffset = aRange->EndOffset(); } - nsCOMPtr<nsINode> node(do_QueryInterface(DOMNode)); nsAccessible *startAcc = DOMPointToHypertextOffset(node, nodeOffset, aHTOffset); if (aIsStartHTOffset && !startAcc) *aHTOffset = 0; return NS_OK; } // nsHyperTextAccessible nsresult -nsHyperTextAccessible::GetSpellTextAttribute(nsIDOMNode *aNode, +nsHyperTextAccessible::GetSpellTextAttribute(nsINode* aNode, PRInt32 aNodeOffset, PRInt32 *aHTStartOffset, PRInt32 *aHTEndOffset, nsIPersistentProperties *aAttributes) { nsTArray<nsRange*> ranges; GetSelectionDOMRanges(nsISelectionController::SELECTION_SPELLCHECK, &ranges); PRUint32 rangeCount = ranges.Length(); if (!rangeCount) return NS_OK; + nsCOMPtr<nsIDOMNode> DOMNode = do_QueryInterface(aNode); for (PRUint32 index = 0; index < rangeCount; index++) { nsRange* range = ranges[index]; PRInt16 result; - nsresult rv = range->ComparePoint(aNode, aNodeOffset, &result); + nsresult rv = range->ComparePoint(DOMNode, aNodeOffset, &result); NS_ENSURE_SUCCESS(rv, rv); // ComparePoint checks boundary points, but we need to check that // text at aNodeOffset is inside the range. // See also bug 460690. if (result == 0) { - nsCOMPtr<nsIDOMNode> end; - rv = range->GetEndContainer(getter_AddRefs(end)); - NS_ENSURE_SUCCESS(rv, rv); - PRInt32 endOffset; - rv = range->GetEndOffset(&endOffset); - NS_ENSURE_SUCCESS(rv, rv); - if (aNode == end && aNodeOffset == endOffset) { + if (aNode == range->GetEndParent() && aNodeOffset == range->EndOffset()) result = 1; - } } if (result == 1) { // range is before point PRInt32 startHTOffset = 0; nsresult rv = RangeBoundToHypertextOffset(range, false, true, &startHTOffset); NS_ENSURE_SUCCESS(rv, rv);
--- a/accessible/src/html/nsHyperTextAccessible.h +++ b/accessible/src/html/nsHyperTextAccessible.h @@ -404,17 +404,17 @@ protected: * * @param aIncludeDefAttrs [in] points whether text attributes having default * values of attributes should be included * @param aSourceNode [in] the node we start to traverse from * @param aStartOffset [in, out] the start offset * @param aEndOffset [in, out] the end offset * @param aAttributes [out, optional] result attributes */ - nsresult GetSpellTextAttribute(nsIDOMNode *aNode, PRInt32 aNodeOffset, + nsresult GetSpellTextAttribute(nsINode* aNode, PRInt32 aNodeOffset, PRInt32 *aStartOffset, PRInt32 *aEndOffset, nsIPersistentProperties *aAttributes); private: /** * End text offsets array. */