Index: third_party/WebKit/Source/core/dom/Range.cpp |
diff --git a/third_party/WebKit/Source/core/dom/Range.cpp b/third_party/WebKit/Source/core/dom/Range.cpp |
index e93ee299cd4345348dc02f43e7622d5ca9e52e3d..e8ccb1a98f612f35bfa8e288c0d665831d2efe2f 100644 |
--- a/third_party/WebKit/Source/core/dom/Range.cpp |
+++ b/third_party/WebKit/Source/core/dom/Range.cpp |
@@ -1449,34 +1449,39 @@ Node* Range::pastLastNode() const { |
} |
IntRect Range::boundingBox() const { |
- IntRect result; |
- Vector<IntRect> rects; |
yosin_UTC9
2017/04/07 04:48:10
Just change these two lines:
const Vector<IntRect
|
- textRects(rects); |
- for (const IntRect& rect : rects) |
- result.unite(rect); |
- return result; |
+ return computeBoundingBox(EphemeralRange(this)); |
} |
-void Range::textRects(Vector<IntRect>& rects, bool useSelectionHeight) const { |
- Node* startContainer = m_start.container(); |
+template <typename Strategy> |
yosin_UTC9
2017/04/07 04:48:10
We don't need to use |template <Strategy>|, |compu
Hwanseung Lee
2017/04/07 17:55:53
Done.
|
+static Vector<IntRect> computeTextRects( |
yosin_UTC9
2017/04/07 04:48:10
It is OK to adding forward declaration before |Ran
Hwanseung Lee
2017/04/07 17:55:53
Done.
|
+ const EphemeralRangeTemplate<Strategy>& range) { |
yosin_UTC9
2017/04/07 04:48:10
nit: const EphemeralRange&
Hwanseung Lee
2017/04/07 17:55:53
Done.
|
+ const PositionTemplate<Strategy> startPosition = range.startPosition(); |
yosin_UTC9
2017/04/07 04:48:10
nit const Position&
Hwanseung Lee
2017/04/07 17:55:53
Done.
|
+ const PositionTemplate<Strategy> endPosition = range.endPosition(); |
+ Node* startContainer = startPosition.computeContainerNode(); |
DCHECK(startContainer); |
- Node* endContainer = m_end.container(); |
+ Node* endContainer = endPosition.computeContainerNode(); |
DCHECK(endContainer); |
- |
- Node* stopNode = pastLastNode(); |
- for (Node* node = firstNode(); node != stopNode; |
- node = NodeTraversal::next(*node)) { |
- LayoutObject* r = node->layoutObject(); |
- if (!r || !r->isText()) |
+ Vector<IntRect> rects; |
+ for (Node& node : range.nodes()) { |
+ LayoutObject* layoutObject = node.layoutObject(); |
+ if (!layoutObject || !layoutObject->isText()) |
continue; |
- LayoutText* layoutText = toLayoutText(r); |
- unsigned startOffset = node == startContainer ? m_start.offset() : 0; |
+ LayoutText* layoutText = toLayoutText(layoutObject); |
+ unsigned startOffset = |
+ node == startContainer ? startPosition.offsetInContainerNode() : 0; |
unsigned endOffset = node == endContainer |
- ? m_end.offset() |
+ ? endPosition.offsetInContainerNode() |
: std::numeric_limits<unsigned>::max(); |
- layoutText->absoluteRectsForRange(rects, startOffset, endOffset, |
- useSelectionHeight); |
+ layoutText->absoluteRectsForRange(rects, startOffset, endOffset); |
} |
+ return rects; |
+} |
+ |
+IntRect Range::computeBoundingBox(const EphemeralRange& range) const { |
+ IntRect result; |
+ for (const IntRect& rect : computeTextRects(range)) |
+ result.unite(rect); |
+ return result; |
} |
void Range::textQuads(Vector<FloatQuad>& quads, bool useSelectionHeight) const { |