WebFloatRect TextFinder::activeFindMatchRect() { if (!isActiveMatchFrameValid()) return WebFloatRect(); return WebFloatRect(findInPageRectFromRange(m_currentActiveMatchFrame->activeMatch())); }
WebFloatRect TextFinderTest::findInPageRect(Node* startContainer, int startOffset, Node* endContainer, int endOffset) { Range* range = Range::create(startContainer->document(), startContainer, startOffset, endContainer, endOffset); return WebFloatRect(findInPageRectFromRange(range)); }
void TextFinder::updateFindMatchRects() { IntSize currentContentsSize = ownerFrame().contentsSize(); if (m_contentsSizeForCurrentFindMatchRects != currentContentsSize) { m_contentsSizeForCurrentFindMatchRects = currentContentsSize; m_findMatchRectsAreValid = false; } size_t deadMatches = 0; for (FindMatch& match : m_findMatchesCache) { if (!match.m_range->boundaryPointsValid() || !match.m_range->startContainer()->isConnected()) match.m_rect = FloatRect(); else if (!m_findMatchRectsAreValid) match.m_rect = findInPageRectFromRange(match.m_range.get()); if (match.m_rect.isEmpty()) ++deadMatches; } // Remove any invalid matches from the cache. if (deadMatches) { HeapVector<FindMatch> filteredMatches; filteredMatches.reserveCapacity(m_findMatchesCache.size() - deadMatches); for (const FindMatch& match : m_findMatchesCache) { if (!match.m_rect.isEmpty()) filteredMatches.append(match); } m_findMatchesCache.swap(filteredMatches); } // Invalidate the rects in child frames. Will be updated later during // traversal. if (!m_findMatchRectsAreValid) for (WebFrame* child = ownerFrame().firstChild(); child; child = child->nextSibling()) toWebLocalFrameImpl(child)->ensureTextFinder().m_findMatchRectsAreValid = false; m_findMatchRectsAreValid = true; }
void TextFinder::updateFindMatchRects() { IntSize currentContentsSize = m_ownerFrame.contentsSize(); if (m_contentsSizeForCurrentFindMatchRects != currentContentsSize) { m_contentsSizeForCurrentFindMatchRects = currentContentsSize; m_findMatchRectsAreValid = false; } size_t deadMatches = 0; for (Vector<FindMatch>::iterator it = m_findMatchesCache.begin(); it != m_findMatchesCache.end(); ++it) { if (!it->m_range->boundaryPointsValid() || !it->m_range->startContainer()->inDocument()) it->m_rect = FloatRect(); else if (!m_findMatchRectsAreValid) it->m_rect = findInPageRectFromRange(it->m_range.get()); if (it->m_rect.isEmpty()) ++deadMatches; } // Remove any invalid matches from the cache. if (deadMatches) { WillBeHeapVector<FindMatch> filteredMatches; filteredMatches.reserveCapacity(m_findMatchesCache.size() - deadMatches); for (Vector<FindMatch>::const_iterator it = m_findMatchesCache.begin(); it != m_findMatchesCache.end(); ++it) { if (!it->m_rect.isEmpty()) filteredMatches.append(*it); } m_findMatchesCache.swap(filteredMatches); } // Invalidate the rects in child frames. Will be updated later during traversal. if (!m_findMatchRectsAreValid) for (WebFrame* child = m_ownerFrame.firstChild(); child; child = child->nextSibling()) toWebLocalFrameImpl(child)->ensureTextFinder().m_findMatchRectsAreValid = false; m_findMatchRectsAreValid = true; }
WebFloatRect TextFinder::activeFindMatchRect() { if (!m_currentActiveMatchFrame || !m_activeMatch) return WebFloatRect(); return WebFloatRect(findInPageRectFromRange(activeMatch())); }