| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org> | 3 * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org> |
| 4 * Copyright (C) 2007 Rob Buis <buis@kde.org> | 4 * Copyright (C) 2007 Rob Buis <buis@kde.org> |
| 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 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 Element* element = *firstElement; | 301 Element* element = *firstElement; |
| 302 | 302 |
| 303 resourceSet->remove(firstElement); | 303 resourceSet->remove(firstElement); |
| 304 | 304 |
| 305 if (resourceSet->isEmpty()) | 305 if (resourceSet->isEmpty()) |
| 306 removePendingResourceForRemoval(id); | 306 removePendingResourceForRemoval(id); |
| 307 | 307 |
| 308 return element; | 308 return element; |
| 309 } | 309 } |
| 310 | 310 |
| 311 SVGElementSet* SVGDocumentExtensions::setOfElementsReferencingTarget(SVGElement*
referencedElement) const | |
| 312 { | |
| 313 ASSERT(referencedElement); | |
| 314 if (!referencedElement->hasSVGRareData()) | |
| 315 return 0; | |
| 316 return &referencedElement->svgRareData()->referencingElements(); | |
| 317 } | |
| 318 | |
| 319 void SVGDocumentExtensions::addElementReferencingTarget(SVGElement* referencingE
lement, SVGElement* referencedElement) | |
| 320 { | |
| 321 ASSERT(referencingElement); | |
| 322 ASSERT(referencedElement); | |
| 323 ASSERT(!referencingElement->isStructurallyExternal()); | |
| 324 | |
| 325 referencedElement->ensureSVGRareData()->referencingElements().add(referencin
gElement); | |
| 326 referencingElement->ensureSVGRareData()->referencedElements().add(referenced
Element); | |
| 327 } | |
| 328 | |
| 329 void SVGDocumentExtensions::removeAllTargetReferencesForElement(SVGElement* refe
rencingElement) | |
| 330 { | |
| 331 if (!referencingElement->hasSVGRareData()) | |
| 332 return; | |
| 333 | |
| 334 SVGElementSet& referencedElements = referencingElement->svgRareData()->refer
encedElements(); | |
| 335 for (SVGElementSet::iterator it = referencedElements.begin(), itEnd = refere
ncedElements.end(); it != itEnd; ++it) { | |
| 336 SVGElement* referencedElement = *it; | |
| 337 ASSERT(referencedElement->hasSVGRareData()); | |
| 338 referencedElement->ensureSVGRareData()->referencingElements().remove(ref
erencingElement); | |
| 339 } | |
| 340 referencedElements.clear(); | |
| 341 } | |
| 342 | |
| 343 void SVGDocumentExtensions::rebuildAllElementReferencesForTarget(SVGElement* ref
erencedElement) | |
| 344 { | |
| 345 ASSERT(referencedElement); | |
| 346 if (!referencedElement->hasSVGRareData()) | |
| 347 return; | |
| 348 | |
| 349 const SVGElementSet& referencingElements = referencedElement->svgRareData()-
>referencingElements(); | |
| 350 | |
| 351 // Iterate on a snapshot as |referencingElements| may be altered inside loop
. | |
| 352 WillBeHeapVector<RawPtrWillBeMember<SVGElement> > referencingElementsSnapSho
t; | |
| 353 copyToVector(referencingElements, referencingElementsSnapShot); | |
| 354 | |
| 355 // Force rebuilding the referencingElement so it knows about this change. | |
| 356 for (WillBeHeapVector<RawPtrWillBeMember<SVGElement> >::iterator it = refere
ncingElementsSnapShot.begin(), itEnd = referencingElementsSnapShot.end(); it !=
itEnd; ++it) { | |
| 357 SVGElement* referencingElement = *it; | |
| 358 | |
| 359 // Before rebuilding referencingElement ensure it was not removed from u
nder us. | |
| 360 if (referencingElements.contains(referencingElement)) | |
| 361 referencingElement->svgAttributeChanged(XLinkNames::hrefAttr); | |
| 362 } | |
| 363 } | |
| 364 | |
| 365 void SVGDocumentExtensions::removeAllElementReferencesForTarget(SVGElement* refe
rencedElement) | |
| 366 { | |
| 367 ASSERT(referencedElement); | |
| 368 if (!referencedElement->hasSVGRareData()) | |
| 369 return; | |
| 370 | |
| 371 SVGElementSet& referencingElements = referencedElement->svgRareData()->refer
encingElements(); | |
| 372 for (SVGElementSet::iterator it = referencingElements.begin(), itEnd = refer
encingElements.end(); it != itEnd; ++it) { | |
| 373 SVGElement* referencingElement = *it; | |
| 374 ASSERT(referencedElement->hasSVGRareData()); | |
| 375 referencingElement->ensureSVGRareData()->referencedElements().remove(ref
erencedElement); | |
| 376 } | |
| 377 referencingElements.clear(); | |
| 378 } | |
| 379 | |
| 380 void SVGDocumentExtensions::addSVGRootWithRelativeLengthDescendents(SVGSVGElemen
t* svgRoot) | 311 void SVGDocumentExtensions::addSVGRootWithRelativeLengthDescendents(SVGSVGElemen
t* svgRoot) |
| 381 { | 312 { |
| 382 ASSERT(!m_inRelativeLengthSVGRootsInvalidation); | 313 ASSERT(!m_inRelativeLengthSVGRootsInvalidation); |
| 383 m_relativeLengthSVGRoots.add(svgRoot); | 314 m_relativeLengthSVGRoots.add(svgRoot); |
| 384 } | 315 } |
| 385 | 316 |
| 386 void SVGDocumentExtensions::removeSVGRootWithRelativeLengthDescendents(SVGSVGEle
ment* svgRoot) | 317 void SVGDocumentExtensions::removeSVGRootWithRelativeLengthDescendents(SVGSVGEle
ment* svgRoot) |
| 387 { | 318 { |
| 388 ASSERT(!m_inRelativeLengthSVGRootsInvalidation); | 319 ASSERT(!m_inRelativeLengthSVGRootsInvalidation); |
| 389 m_relativeLengthSVGRoots.remove(svgRoot); | 320 m_relativeLengthSVGRoots.remove(svgRoot); |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 473 visitor->trace(m_document); | 404 visitor->trace(m_document); |
| 474 visitor->trace(m_timeContainers); | 405 visitor->trace(m_timeContainers); |
| 475 #if ENABLE(SVG_FONTS) | 406 #if ENABLE(SVG_FONTS) |
| 476 visitor->trace(m_svgFontFaceElements); | 407 visitor->trace(m_svgFontFaceElements); |
| 477 visitor->trace(m_pendingSVGFontFaceElementsForRemoval); | 408 visitor->trace(m_pendingSVGFontFaceElementsForRemoval); |
| 478 #endif | 409 #endif |
| 479 visitor->trace(m_relativeLengthSVGRoots); | 410 visitor->trace(m_relativeLengthSVGRoots); |
| 480 } | 411 } |
| 481 | 412 |
| 482 } | 413 } |
| OLD | NEW |