Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(301)

Side by Side Diff: Source/core/dom/Range.cpp

Issue 67473002: Have ElementTraversal / NodeTraversal's next() methods take a reference (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase on master Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/dom/NodeTraversal.h ('k') | Source/core/dom/SelectorQuery.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * (C) 1999 Lars Knoll (knoll@kde.org) 2 * (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 2000 Gunnstein Lye (gunnstein@netcom.no) 3 * (C) 2000 Gunnstein Lye (gunnstein@netcom.no)
4 * (C) 2000 Frederik Holljen (frederik.holljen@hig.no) 4 * (C) 2000 Frederik Holljen (frederik.holljen@hig.no)
5 * (C) 2001 Peter Kelly (pmk@post.com) 5 * (C) 2001 Peter Kelly (pmk@post.com)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r ights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r ights reserved.
7 * Copyright (C) 2011 Motorola Mobility. All rights reserved. 7 * Copyright (C) 2011 Motorola Mobility. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 1051 matching lines...) Expand 10 before | Expand all | Expand 10 after
1062 String Range::toString(ExceptionState& es) const 1062 String Range::toString(ExceptionState& es) const
1063 { 1063 {
1064 if (!m_start.container()) { 1064 if (!m_start.container()) {
1065 es.throwDOMException(InvalidStateError, ExceptionMessages::failedToExecu te("toString", "Range", "The range has no container. Perhaps 'detatch()' has bee n invoked on this object?")); 1065 es.throwDOMException(InvalidStateError, ExceptionMessages::failedToExecu te("toString", "Range", "The range has no container. Perhaps 'detatch()' has bee n invoked on this object?"));
1066 return String(); 1066 return String();
1067 } 1067 }
1068 1068
1069 StringBuilder builder; 1069 StringBuilder builder;
1070 1070
1071 Node* pastLast = pastLastNode(); 1071 Node* pastLast = pastLastNode();
1072 for (Node* n = firstNode(); n != pastLast; n = NodeTraversal::next(n)) { 1072 for (Node* n = firstNode(); n != pastLast; n = NodeTraversal::next(*n)) {
1073 if (n->nodeType() == Node::TEXT_NODE || n->nodeType() == Node::CDATA_SEC TION_NODE) { 1073 if (n->nodeType() == Node::TEXT_NODE || n->nodeType() == Node::CDATA_SEC TION_NODE) {
1074 String data = toCharacterData(n)->data(); 1074 String data = toCharacterData(n)->data();
1075 int length = data.length(); 1075 int length = data.length();
1076 int start = (n == m_start.container()) ? min(max(0, m_start.offset() ), length) : 0; 1076 int start = (n == m_start.container()) ? min(max(0, m_start.offset() ), length) : 0;
1077 int end = (n == m_end.container()) ? min(max(start, m_end.offset()), length) : length; 1077 int end = (n == m_end.container()) ? min(max(start, m_end.offset()), length) : length;
1078 builder.append(data, start, end - start); 1078 builder.append(data, start, end - start);
1079 } 1079 }
1080 } 1080 }
1081 1081
1082 return builder.toString(); 1082 return builder.toString();
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
1471 { 1471 {
1472 if (!m_start.container()) { 1472 if (!m_start.container()) {
1473 es.throwDOMException(InvalidStateError, ExceptionMessages::failedToExecu te(methodName, "Range", "The range has no container. Perhaps 'detatch()' has bee n invoked on this object?")); 1473 es.throwDOMException(InvalidStateError, ExceptionMessages::failedToExecu te(methodName, "Range", "The range has no container. Perhaps 'detatch()' has bee n invoked on this object?"));
1474 return; 1474 return;
1475 } 1475 }
1476 1476
1477 if (!commonAncestorContainer(es) || es.hadException()) 1477 if (!commonAncestorContainer(es) || es.hadException())
1478 return; 1478 return;
1479 1479
1480 Node* pastLast = pastLastNode(); 1480 Node* pastLast = pastLastNode();
1481 for (Node* n = firstNode(); n != pastLast; n = NodeTraversal::next(n)) { 1481 for (Node* n = firstNode(); n != pastLast; n = NodeTraversal::next(*n)) {
1482 if (n->nodeType() == Node::DOCUMENT_TYPE_NODE) { 1482 if (n->nodeType() == Node::DOCUMENT_TYPE_NODE) {
1483 es.throwUninformativeAndGenericDOMException(HierarchyRequestError); 1483 es.throwUninformativeAndGenericDOMException(HierarchyRequestError);
1484 return; 1484 return;
1485 } 1485 }
1486 } 1486 }
1487 } 1487 }
1488 1488
1489 Node* Range::firstNode() const 1489 Node* Range::firstNode() const
1490 { 1490 {
1491 if (!m_start.container()) 1491 if (!m_start.container())
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1534 if (!startContainer || !endContainer) { 1534 if (!startContainer || !endContainer) {
1535 if (inFixed) 1535 if (inFixed)
1536 *inFixed = NotFixedPosition; 1536 *inFixed = NotFixedPosition;
1537 return; 1537 return;
1538 } 1538 }
1539 1539
1540 bool allFixed = true; 1540 bool allFixed = true;
1541 bool someFixed = false; 1541 bool someFixed = false;
1542 1542
1543 Node* stopNode = pastLastNode(); 1543 Node* stopNode = pastLastNode();
1544 for (Node* node = firstNode(); node != stopNode; node = NodeTraversal::next( node)) { 1544 for (Node* node = firstNode(); node != stopNode; node = NodeTraversal::next( *node)) {
1545 RenderObject* r = node->renderer(); 1545 RenderObject* r = node->renderer();
1546 if (!r || !r->isText()) 1546 if (!r || !r->isText())
1547 continue; 1547 continue;
1548 RenderText* renderText = toRenderText(r); 1548 RenderText* renderText = toRenderText(r);
1549 int startOffset = node == startContainer ? m_start.offset() : 0; 1549 int startOffset = node == startContainer ? m_start.offset() : 0;
1550 int endOffset = node == endContainer ? m_end.offset() : numeric_limits<i nt>::max(); 1550 int endOffset = node == endContainer ? m_end.offset() : numeric_limits<i nt>::max();
1551 bool isFixed = false; 1551 bool isFixed = false;
1552 renderText->absoluteRectsForRange(rects, startOffset, endOffset, useSele ctionHeight, &isFixed); 1552 renderText->absoluteRectsForRange(rects, startOffset, endOffset, useSele ctionHeight, &isFixed);
1553 allFixed &= isFixed; 1553 allFixed &= isFixed;
1554 someFixed |= isFixed; 1554 someFixed |= isFixed;
(...skipping 11 matching lines...) Expand all
1566 if (!startContainer || !endContainer) { 1566 if (!startContainer || !endContainer) {
1567 if (inFixed) 1567 if (inFixed)
1568 *inFixed = NotFixedPosition; 1568 *inFixed = NotFixedPosition;
1569 return; 1569 return;
1570 } 1570 }
1571 1571
1572 bool allFixed = true; 1572 bool allFixed = true;
1573 bool someFixed = false; 1573 bool someFixed = false;
1574 1574
1575 Node* stopNode = pastLastNode(); 1575 Node* stopNode = pastLastNode();
1576 for (Node* node = firstNode(); node != stopNode; node = NodeTraversal::next( node)) { 1576 for (Node* node = firstNode(); node != stopNode; node = NodeTraversal::next( *node)) {
1577 RenderObject* r = node->renderer(); 1577 RenderObject* r = node->renderer();
1578 if (!r || !r->isText()) 1578 if (!r || !r->isText())
1579 continue; 1579 continue;
1580 RenderText* renderText = toRenderText(r); 1580 RenderText* renderText = toRenderText(r);
1581 int startOffset = node == startContainer ? m_start.offset() : 0; 1581 int startOffset = node == startContainer ? m_start.offset() : 0;
1582 int endOffset = node == endContainer ? m_end.offset() : numeric_limits<i nt>::max(); 1582 int endOffset = node == endContainer ? m_end.offset() : numeric_limits<i nt>::max();
1583 bool isFixed = false; 1583 bool isFixed = false;
1584 renderText->absoluteQuadsForRange(quads, startOffset, endOffset, useSele ctionHeight, &isFixed); 1584 renderText->absoluteQuadsForRange(quads, startOffset, endOffset, useSele ctionHeight, &isFixed);
1585 allFixed &= isFixed; 1585 allFixed &= isFixed;
1586 someFixed |= isFixed; 1586 someFixed |= isFixed;
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
1843 return ClientRect::create(boundingRect()); 1843 return ClientRect::create(boundingRect());
1844 } 1844 }
1845 1845
1846 void Range::getBorderAndTextQuads(Vector<FloatQuad>& quads) const 1846 void Range::getBorderAndTextQuads(Vector<FloatQuad>& quads) const
1847 { 1847 {
1848 Node* startContainer = m_start.container(); 1848 Node* startContainer = m_start.container();
1849 Node* endContainer = m_end.container(); 1849 Node* endContainer = m_end.container();
1850 Node* stopNode = pastLastNode(); 1850 Node* stopNode = pastLastNode();
1851 1851
1852 HashSet<Node*> nodeSet; 1852 HashSet<Node*> nodeSet;
1853 for (Node* node = firstNode(); node != stopNode; node = NodeTraversal::next( node)) { 1853 for (Node* node = firstNode(); node != stopNode; node = NodeTraversal::next( *node)) {
1854 if (node->isElementNode()) 1854 if (node->isElementNode())
1855 nodeSet.add(node); 1855 nodeSet.add(node);
1856 } 1856 }
1857 1857
1858 for (Node* node = firstNode(); node != stopNode; node = NodeTraversal::next( node)) { 1858 for (Node* node = firstNode(); node != stopNode; node = NodeTraversal::next( *node)) {
1859 if (node->isElementNode()) { 1859 if (node->isElementNode()) {
1860 if (!nodeSet.contains(node->parentNode())) { 1860 if (!nodeSet.contains(node->parentNode())) {
1861 if (RenderBoxModelObject* renderBoxModelObject = toElement(node) ->renderBoxModelObject()) { 1861 if (RenderBoxModelObject* renderBoxModelObject = toElement(node) ->renderBoxModelObject()) {
1862 Vector<FloatQuad> elementQuads; 1862 Vector<FloatQuad> elementQuads;
1863 renderBoxModelObject->absoluteQuads(elementQuads); 1863 renderBoxModelObject->absoluteQuads(elementQuads);
1864 m_ownerDocument->adjustFloatQuadsForScrollAndAbsoluteZoom(el ementQuads, *renderBoxModelObject); 1864 m_ownerDocument->adjustFloatQuadsForScrollAndAbsoluteZoom(el ementQuads, *renderBoxModelObject);
1865 1865
1866 quads.append(elementQuads); 1866 quads.append(elementQuads);
1867 } 1867 }
1868 } 1868 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1907 1907
1908 void showTree(const WebCore::Range* range) 1908 void showTree(const WebCore::Range* range)
1909 { 1909 {
1910 if (range && range->boundaryPointsValid()) { 1910 if (range && range->boundaryPointsValid()) {
1911 range->startContainer()->showTreeAndMark(range->startContainer(), "S", r ange->endContainer(), "E"); 1911 range->startContainer()->showTreeAndMark(range->startContainer(), "S", r ange->endContainer(), "E");
1912 fprintf(stderr, "start offset: %d, end offset: %d\n", range->startOffset (), range->endOffset()); 1912 fprintf(stderr, "start offset: %d, end offset: %d\n", range->startOffset (), range->endOffset());
1913 } 1913 }
1914 } 1914 }
1915 1915
1916 #endif 1916 #endif
OLDNEW
« no previous file with comments | « Source/core/dom/NodeTraversal.h ('k') | Source/core/dom/SelectorQuery.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698