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

Side by Side Diff: Source/WebCore/svg/properties/SVGPathSegListPropertyTearOff.cpp

Issue 12316026: Merge 142759 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1364/
Patch Set: Created 7 years, 10 months 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 2 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
3 * 3 *
4 * This library is free software; you can redistribute it and/or 4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public 5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either 6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version. 7 * version 2 of the License, or (at your option) any later version.
8 * 8 *
9 * This library is distributed in the hope that it will be useful, 9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 } 63 }
64 64
65 SVGPathElement* SVGPathSegListPropertyTearOff::contextElement() const 65 SVGPathElement* SVGPathSegListPropertyTearOff::contextElement() const
66 { 66 {
67 SVGElement* contextElement = m_animatedProperty->contextElement(); 67 SVGElement* contextElement = m_animatedProperty->contextElement();
68 ASSERT(contextElement); 68 ASSERT(contextElement);
69 ASSERT(contextElement->hasTagName(SVGNames::pathTag)); 69 ASSERT(contextElement->hasTagName(SVGNames::pathTag));
70 return static_cast<SVGPathElement*>(contextElement); 70 return static_cast<SVGPathElement*>(contextElement);
71 } 71 }
72 72
73 void SVGPathSegListPropertyTearOff::processIncomingListItemValue(const ListItemT ype& newItem, unsigned* indexToModify) 73 bool SVGPathSegListPropertyTearOff::processIncomingListItemValue(const ListItemT ype& newItem, unsigned* indexToModify)
74 { 74 {
75 SVGPathSegWithContext* newItemWithContext = static_cast<SVGPathSegWithContex t*>(newItem.get()); 75 SVGPathSegWithContext* newItemWithContext = static_cast<SVGPathSegWithContex t*>(newItem.get());
76 SVGAnimatedProperty* animatedPropertyOfItem = newItemWithContext->animatedPr operty(); 76 SVGAnimatedProperty* animatedPropertyOfItem = newItemWithContext->animatedPr operty();
77 77
78 // Alter the role, after calling animatedProperty(), as that may influence t he returned animated property. 78 // Alter the role, after calling animatedProperty(), as that may influence t he returned animated property.
79 newItemWithContext->setContextAndRole(contextElement(), m_pathSegRole); 79 newItemWithContext->setContextAndRole(contextElement(), m_pathSegRole);
80 80
81 if (!animatedPropertyOfItem) 81 if (!animatedPropertyOfItem)
82 return; 82 return true;
83 83
84 // newItem belongs to a SVGPathElement, but its associated SVGAnimatedProper ty is not an animated list tear off. 84 // newItem belongs to a SVGPathElement, but its associated SVGAnimatedProper ty is not an animated list tear off.
85 // (for example: "pathElement.pathSegList.appendItem(pathElement.createSVGPa thSegClosepath())") 85 // (for example: "pathElement.pathSegList.appendItem(pathElement.createSVGPa thSegClosepath())")
86 if (!animatedPropertyOfItem->isAnimatedListTearOff()) 86 if (!animatedPropertyOfItem->isAnimatedListTearOff())
87 return; 87 return true;
88 88
89 // Spec: If newItem is already in a list, it is removed from its previous li st before it is inserted into this list. 89 // Spec: If newItem is already in a list, it is removed from its previous li st before it is inserted into this list.
90 // 'newItem' is already living in another list. If it's not our list, synchr onize the other lists wrappers after the removal. 90 // 'newItem' is already living in another list. If it's not our list, synchr onize the other lists wrappers after the removal.
91 bool livesInOtherList = animatedPropertyOfItem != m_animatedProperty; 91 bool livesInOtherList = animatedPropertyOfItem != m_animatedProperty;
92 int removedIndex = static_cast<SVGAnimatedPathSegListPropertyTearOff*>(anima tedPropertyOfItem)->removeItemFromList(newItem.get(), livesInOtherList); 92 SVGAnimatedPathSegListPropertyTearOff* propertyTearOff = static_cast<SVGAnim atedPathSegListPropertyTearOff*>(animatedPropertyOfItem);
93 ASSERT(removedIndex != -1); 93 int indexToRemove = propertyTearOff->findItem(newItem.get());
94 ASSERT(indexToRemove != -1);
95
96 // Do not remove newItem if already in this list at the target index.
97 if (!livesInOtherList && indexToModify && static_cast<unsigned>(indexToRemov e) == *indexToModify)
98 return false;
99
100 propertyTearOff->removeItemFromList(indexToRemove, livesInOtherList);
94 101
95 if (!indexToModify) 102 if (!indexToModify)
96 return; 103 return true;
97 104
98 // If the item lived in our list, adjust the insertion index. 105 // If the item lived in our list, adjust the insertion index.
99 if (!livesInOtherList) { 106 if (!livesInOtherList) {
100 unsigned& index = *indexToModify; 107 unsigned& index = *indexToModify;
101 // Spec: If the item is already in this list, note that the index of the item to (replace|insert before) is before the removal of the item. 108 // Spec: If the item is already in this list, note that the index of the item to (replace|insert before) is before the removal of the item.
102 if (static_cast<unsigned>(removedIndex) < index) 109 if (static_cast<unsigned>(indexToRemove) < index)
103 --index; 110 --index;
104 } 111 }
112
113 return true;
105 } 114 }
106 115
107 } 116 }
108 117
109 #endif // ENABLE(SVG) 118 #endif // ENABLE(SVG)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698