diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/svg/properties/SVGPathSegListPropertyTearOff.cpp')
-rw-r--r-- | chromium/third_party/WebKit/Source/core/svg/properties/SVGPathSegListPropertyTearOff.cpp | 137 |
1 files changed, 0 insertions, 137 deletions
diff --git a/chromium/third_party/WebKit/Source/core/svg/properties/SVGPathSegListPropertyTearOff.cpp b/chromium/third_party/WebKit/Source/core/svg/properties/SVGPathSegListPropertyTearOff.cpp deleted file mode 100644 index 48cb03a468d..00000000000 --- a/chromium/third_party/WebKit/Source/core/svg/properties/SVGPathSegListPropertyTearOff.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (C) Research In Motion Limited 2010. All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "config.h" -#include "core/svg/properties/SVGPathSegListPropertyTearOff.h" - -#include "SVGNames.h" -#include "core/dom/ExceptionCode.h" -#include "core/svg/SVGPathElement.h" -#include "core/svg/SVGPathSegWithContext.h" -#include "core/svg/properties/SVGAnimatedPathSegListPropertyTearOff.h" - -namespace WebCore { - -void SVGPathSegListPropertyTearOff::clearContextAndRoles() -{ - ASSERT(m_values); - unsigned size = m_values->size(); - for (unsigned i = 0; i < size; ++i) { - ListItemType item = m_values->at(i); - static_cast<SVGPathSegWithContext*>(item.get())->setContextAndRole(0, PathSegUndefinedRole); - } -} - -void SVGPathSegListPropertyTearOff::clear(ExceptionState& exceptionState) -{ - ASSERT(m_values); - if (m_values->isEmpty()) - return; - - clearContextAndRoles(); - SVGPathSegListPropertyTearOff::Base::clearValues(exceptionState); -} - -SVGPathSegListPropertyTearOff::PassListItemType SVGPathSegListPropertyTearOff::getItem(unsigned index, ExceptionState& exceptionState) -{ - ListItemType returnedItem = Base::getItemValues(index, exceptionState); - if (returnedItem) { - ASSERT(static_cast<SVGPathSegWithContext*>(returnedItem.get())->contextElement() == contextElement()); - ASSERT(static_cast<SVGPathSegWithContext*>(returnedItem.get())->role() == m_pathSegRole); - } - return returnedItem.release(); -} - -SVGPathSegListPropertyTearOff::PassListItemType SVGPathSegListPropertyTearOff::replaceItem(PassListItemType passNewItem, unsigned index, ExceptionState& exceptionState) -{ - // Not specified, but FF/Opera do it this way, and it's just sane. - if (!passNewItem) { - exceptionState.throwUninformativeAndGenericTypeError(); - return 0; - } - - if (index < m_values->size()) { - ListItemType replacedItem = m_values->at(index); - ASSERT(replacedItem); - static_cast<SVGPathSegWithContext*>(replacedItem.get())->setContextAndRole(0, PathSegUndefinedRole); - } - - ListItemType newItem = passNewItem; - return Base::replaceItemValues(newItem, index, exceptionState); -} - -SVGPathSegListPropertyTearOff::PassListItemType SVGPathSegListPropertyTearOff::removeItem(unsigned index, ExceptionState& exceptionState) -{ - SVGPathSegListPropertyTearOff::ListItemType removedItem = SVGPathSegListPropertyTearOff::Base::removeItemValues(index, exceptionState); - if (removedItem) - static_cast<SVGPathSegWithContext*>(removedItem.get())->setContextAndRole(0, PathSegUndefinedRole); - return removedItem.release(); -} - -SVGPathElement* SVGPathSegListPropertyTearOff::contextElement() const -{ - SVGElement* contextElement = m_animatedProperty->contextElement(); - ASSERT(contextElement); - return toSVGPathElement(contextElement); -} - -bool SVGPathSegListPropertyTearOff::processIncomingListItemValue(const ListItemType& newItem, unsigned* indexToModify) -{ - SVGPathSegWithContext* newItemWithContext = static_cast<SVGPathSegWithContext*>(newItem.get()); - SVGAnimatedProperty* animatedPropertyOfItem = newItemWithContext->animatedProperty(); - - // Alter the role, after calling animatedProperty(), as that may influence the returned animated property. - newItemWithContext->setContextAndRole(contextElement(), m_pathSegRole); - - if (!animatedPropertyOfItem) - return true; - - // newItem belongs to a SVGPathElement, but its associated SVGAnimatedProperty is not an animated list tear off. - // (for example: "pathElement.pathSegList.appendItem(pathElement.createSVGPathSegClosepath())") - if (!animatedPropertyOfItem->isAnimatedListTearOff()) - return true; - - // Spec: If newItem is already in a list, it is removed from its previous list before it is inserted into this list. - // 'newItem' is already living in another list. If it's not our list, synchronize the other lists wrappers after the removal. - bool livesInOtherList = animatedPropertyOfItem != m_animatedProperty; - SVGAnimatedPathSegListPropertyTearOff* propertyTearOff = static_cast<SVGAnimatedPathSegListPropertyTearOff*>(animatedPropertyOfItem); - int indexToRemove = propertyTearOff->findItem(newItem.get()); - ASSERT(indexToRemove != -1); - - // Do not remove newItem if already in this list at the target index. - if (!livesInOtherList && indexToModify && static_cast<unsigned>(indexToRemove) == *indexToModify) - return false; - - propertyTearOff->removeItemFromList(indexToRemove, livesInOtherList); - - if (!indexToModify) - return true; - - // If the item lived in our list, adjust the insertion index. - if (!livesInOtherList) { - unsigned& index = *indexToModify; - // 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. - if (static_cast<unsigned>(indexToRemove) < index) - --index; - } - - return true; -} - -} |