Bug 1286464 part.2 GetFirstFrameInRange() should return node offset since it may return different node's frame r=m_kato

GetFirstFrameInRange() uses AdjustTextRectNode() which may return different node before retrieving the result frame. Therefore, the caller may need offset in the new node.

MozReview-Commit-ID: 2AQU5WfahT9

--HG--
extra : rebase_source : c753d34dc2691da2ec25c9f5a6fe17d67af24a70
This commit is contained in:
Masayuki Nakano 2016-07-14 22:57:00 +09:00
Родитель bc5856516b
Коммит 24e9e4a700
1 изменённых файлов: 6 добавлений и 6 удалений

Просмотреть файл

@ -1397,20 +1397,20 @@ static nsINode* AdjustTextRectNode(nsINode* aNode,
static
nsIFrame*
GetFirstFrameInRange(nsRange* aRange)
GetFirstFrameInRange(nsRange* aRange, int32_t& aNodeOffset)
{
// used to iterate over all contents and their frames
nsCOMPtr<nsIContentIterator> iter = NS_NewContentIterator();
iter->Init(aRange);
// get the starting frame
int32_t nodeOffset = aRange->StartOffset();
aNodeOffset = aRange->StartOffset();
nsINode* node = iter->GetCurrentNode();
if (!node) {
node = AdjustTextRectNode(aRange->GetStartParent(), nodeOffset);
node = AdjustTextRectNode(aRange->GetStartParent(), aNodeOffset);
}
nsIFrame* firstFrame = nullptr;
GetFrameForTextRect(node, nodeOffset, true, &firstFrame);
GetFrameForTextRect(node, aNodeOffset, true, &firstFrame);
return firstFrame;
}
@ -1436,7 +1436,8 @@ ContentEventHandler::OnQueryTextRectArray(WidgetQueryContentEvent* aEvent)
}
// get the starting frame
nsIFrame* firstFrame = GetFirstFrameInRange(range);
int32_t nodeOffset = -1;
nsIFrame* firstFrame = GetFirstFrameInRange(range, nodeOffset);
if (NS_WARN_IF(!firstFrame)) {
return NS_ERROR_FAILURE;
}
@ -1448,7 +1449,6 @@ ContentEventHandler::OnQueryTextRectArray(WidgetQueryContentEvent* aEvent)
return rv;
}
int32_t nodeOffset = range->StartOffset();
AutoTArray<nsRect, 16> charRects;
rv = firstFrame->GetCharacterRectsInRange(nodeOffset, kEndOffset - offset,
charRects);