Chromium Code Reviews| Index: third_party/WebKit/Source/core/editing/VisibleUnits.cpp |
| diff --git a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp |
| index f1da75b0e408206c7b87a6ce891b67ed7c7005fc..53e51b59433353b18498195470022c2f51c0ca51 100644 |
| --- a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp |
| +++ b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp |
| @@ -4048,4 +4048,37 @@ PositionInFlatTree skipWhitespace(const PositionInFlatTree& position) { |
| return skipWhitespaceAlgorithm(position); |
| } |
| +template <typename Strategy> |
| +static void textQuadAlgorithm(Vector<FloatQuad>* quads, |
|
yosin_UTC9
2017/04/04 01:25:22
Please change |Range::textQuads()| instead of copy
|
| + const EphemeralRangeTemplate<Strategy>& range) { |
| + const PositionTemplate<Strategy> startPosition = range.startPosition(); |
| + const PositionTemplate<Strategy> endPosition = range.endPosition(); |
| + Node* startContainer = startPosition.computeContainerNode(); |
| + DCHECK(startContainer); |
| + Node* endContainer = endPosition.computeContainerNode(); |
| + DCHECK(endContainer); |
| + |
| + for (Node& node : range.nodes()) { |
| + LayoutObject* layoutObject = node.layoutObject(); |
| + if (!layoutObject || !layoutObject->isText()) |
| + continue; |
| + LayoutText* layoutText = toLayoutText(layoutObject); |
| + unsigned startOffset = |
| + node == startContainer ? startPosition.offsetInContainerNode() : 0; |
| + unsigned endOffset = node == endContainer |
| + ? endPosition.offsetInContainerNode() |
| + : std::numeric_limits<unsigned>::max(); |
| + layoutText->absoluteQuadsForRange(*quads, startOffset, endOffset); |
| + } |
| +} |
| + |
| +void textQuads(Vector<FloatQuad>* quads, const EphemeralRange& range) { |
| + textQuadAlgorithm(quads, range); |
| +} |
| + |
| +void textQuads(Vector<FloatQuad>* quads, |
| + const EphemeralRangeInFlatTree& range) { |
| + textQuadAlgorithm(quads, range); |
| +} |
| + |
| } // namespace blink |