diff options
Diffstat (limited to 'WebCore/dom/Range.cpp')
-rw-r--r-- | WebCore/dom/Range.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/WebCore/dom/Range.cpp b/WebCore/dom/Range.cpp index 122130d..84a46c2 100644 --- a/WebCore/dom/Range.cpp +++ b/WebCore/dom/Range.cpp @@ -1595,12 +1595,32 @@ IntRect Range::boundingBox() void Range::textRects(Vector<IntRect>& rects, bool useSelectionHeight) { - if (!m_start.container() || !m_end.container()) + Node* startContainer = m_start.container(); + Node* endContainer = m_end.container(); + + if (!startContainer || !endContainer) return; + Node* stopNode = pastLastNode(); + for (Node* node = firstNode(); node != stopNode; node = node->traverseNextNode()) { + RenderObject* r = node->renderer(); + if (!r || !r->isText()) + continue; + RenderText* renderText = toRenderText(r); + int startOffset = node == startContainer ? m_start.offset() : 0; + int endOffset = node == endContainer ? m_end.offset() : numeric_limits<int>::max(); + renderText->absoluteRectsForRange(rects, startOffset, endOffset, useSelectionHeight); + } +} + +void Range::textQuads(Vector<FloatQuad>& quads, bool useSelectionHeight) +{ Node* startContainer = m_start.container(); Node* endContainer = m_end.container(); + if (!startContainer || !endContainer) + return; + Node* stopNode = pastLastNode(); for (Node* node = firstNode(); node != stopNode; node = node->traverseNextNode()) { RenderObject* r = node->renderer(); @@ -1608,8 +1628,8 @@ void Range::textRects(Vector<IntRect>& rects, bool useSelectionHeight) continue; RenderText* renderText = toRenderText(r); int startOffset = node == startContainer ? m_start.offset() : 0; - int endOffset = node == endContainer ? m_end.offset() : INT_MAX; - renderText->absoluteRectsForRange(rects, startOffset, endOffset, useSelectionHeight); + int endOffset = node == endContainer ? m_end.offset() : numeric_limits<int>::max(); + renderText->absoluteQuadsForRange(quads, startOffset, endOffset, useSelectionHeight); } } |