OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org> | 2 * Copyright (C) 2004, 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org> |
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2010 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2010 Rob Buis <buis@kde.org> |
4 * Copyright (C) 2007 Apple Inc. All rights reserved. | 4 * Copyright (C) 2007 Apple Inc. All rights reserved. |
5 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
(...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
760 if (viewElement->hasAttribute(SVGNames::zoomAndPanAttr)) | 760 if (viewElement->hasAttribute(SVGNames::zoomAndPanAttr)) |
761 view->setZoomAndPan(viewElement->zoomAndPan()); | 761 view->setZoomAndPan(viewElement->zoomAndPan()); |
762 else | 762 else |
763 view->setZoomAndPan(zoomAndPan()); | 763 view->setZoomAndPan(zoomAndPan()); |
764 } | 764 } |
765 | 765 |
766 // getElementById on SVGSVGElement is restricted to only the child subtree defin ed by the <svg> element. | 766 // getElementById on SVGSVGElement is restricted to only the child subtree defin ed by the <svg> element. |
767 // See http://www.w3.org/TR/SVG11/struct.html#InterfaceSVGSVGElement | 767 // See http://www.w3.org/TR/SVG11/struct.html#InterfaceSVGSVGElement |
768 Element* SVGSVGElement::getElementById(const AtomicString& id) const | 768 Element* SVGSVGElement::getElementById(const AtomicString& id) const |
769 { | 769 { |
770 Element* element = treeScope().getElementById(id); | 770 if (!treeScope().containsMultipleElementsWithId(id)) { |
771 if (element && element->isDescendantOf(this)) | 771 Element* element = treeScope().getElementById(id); |
f(malita)
2014/02/24 23:47:24
Isn't this introducing an extra lookup for the com
| |
772 if (!element || !element->isDescendantOf(this)) | |
773 return 0; | |
774 | |
772 return element; | 775 return element; |
776 } | |
773 | 777 |
774 // Fall back to traversing our subtree. Duplicate ids are allowed, the first found will | 778 // If duplicate IDs are there, return the first descendant of the svg elemen t. |
775 // be returned. | 779 const Vector<Element*>& elements = treeScope().getAllElementsById(id); |
776 for (Node* node = firstChild(); node; node = NodeTraversal::next(*node, this )) { | 780 Vector<Element*>::const_iterator end = elements.end(); |
777 if (!node->isElementNode()) | 781 for (Vector<Element*>::const_iterator it = elements.begin(); it != end; ++it ) { |
778 continue; | 782 if ((*it)->isDescendantOf(this)) |
783 return *it; | |
784 } | |
779 | 785 |
780 Element* element = toElement(node); | |
781 if (element->getIdAttribute() == id) | |
782 return element; | |
783 } | |
784 return 0; | 786 return 0; |
785 } | 787 } |
786 | 788 |
787 } | 789 } |
OLD | NEW |