| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  * Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde
     .org> |    2  * Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde
     .org> | 
|    3  * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> |    3  * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> | 
|    4  * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. |    4  * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. | 
|    5  * Copyright (C) 2011 Torch Mobile (Beijing) Co. Ltd. All rights reserved. |    5  * Copyright (C) 2011 Torch Mobile (Beijing) Co. Ltd. All rights reserved. | 
|    6  * Copyright (C) 2012 University of Szeged |    6  * Copyright (C) 2012 University of Szeged | 
|    7  * Copyright (C) 2012 Renata Hodovan <reni@webkit.org> |    7  * Copyright (C) 2012 Renata Hodovan <reni@webkit.org> | 
|    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 356 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  367         shadowTreeRootElement->removeChildren(); |  367         shadowTreeRootElement->removeChildren(); | 
|  368  |  368  | 
|  369     if (m_targetElementInstance) { |  369     if (m_targetElementInstance) { | 
|  370         m_targetElementInstance->detach(); |  370         m_targetElementInstance->detach(); | 
|  371         m_targetElementInstance = nullptr; |  371         m_targetElementInstance = nullptr; | 
|  372     } |  372     } | 
|  373  |  373  | 
|  374     m_needsShadowTreeRecreation = false; |  374     m_needsShadowTreeRecreation = false; | 
|  375     document().unscheduleUseShadowTreeUpdate(*this); |  375     document().unscheduleUseShadowTreeUpdate(*this); | 
|  376  |  376  | 
|  377     document().accessSVGExtensions()->removeAllTargetReferencesForElement(this); |  377     document().accessSVGExtensions().removeAllTargetReferencesForElement(this); | 
|  378 } |  378 } | 
|  379  |  379  | 
|  380 void SVGUseElement::buildPendingResource() |  380 void SVGUseElement::buildPendingResource() | 
|  381 { |  381 { | 
|  382     if (!referencedDocument() || isInShadowTree()) |  382     if (!referencedDocument() || isInShadowTree()) | 
|  383         return; |  383         return; | 
|  384     clearResourceReferences(); |  384     clearResourceReferences(); | 
|  385     if (!inDocument()) |  385     if (!inDocument()) | 
|  386         return; |  386         return; | 
|  387  |  387  | 
|  388     AtomicString id; |  388     AtomicString id; | 
|  389     Element* target = SVGURIReference::targetElementFromIRIString(hrefString(), 
     document(), &id, externalDocument()); |  389     Element* target = SVGURIReference::targetElementFromIRIString(hrefString(), 
     document(), &id, externalDocument()); | 
|  390     if (!target || !target->inDocument()) { |  390     if (!target || !target->inDocument()) { | 
|  391         // If we can't find the target of an external element, just give up. |  391         // If we can't find the target of an external element, just give up. | 
|  392         // We can't observe if the target somewhen enters the external document,
      nor should we do it. |  392         // We can't observe if the target somewhen enters the external document,
      nor should we do it. | 
|  393         if (externalDocument()) |  393         if (externalDocument()) | 
|  394             return; |  394             return; | 
|  395         if (id.isEmpty()) |  395         if (id.isEmpty()) | 
|  396             return; |  396             return; | 
|  397  |  397  | 
|  398         referencedDocument()->accessSVGExtensions()->addPendingResource(id, this
     ); |  398         referencedDocument()->accessSVGExtensions().addPendingResource(id, this)
     ; | 
|  399         ASSERT(hasPendingResources()); |  399         ASSERT(hasPendingResources()); | 
|  400         return; |  400         return; | 
|  401     } |  401     } | 
|  402  |  402  | 
|  403     if (target->isSVGElement()) { |  403     if (target->isSVGElement()) { | 
|  404         buildShadowAndInstanceTree(toSVGElement(target)); |  404         buildShadowAndInstanceTree(toSVGElement(target)); | 
|  405         invalidateDependentShadowTrees(); |  405         invalidateDependentShadowTrees(); | 
|  406     } |  406     } | 
|  407  |  407  | 
|  408     ASSERT(!m_needsShadowTreeRecreation); |  408     ASSERT(!m_needsShadowTreeRecreation); | 
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  527 { |  527 { | 
|  528     ASSERT(path.isEmpty()); |  528     ASSERT(path.isEmpty()); | 
|  529  |  529  | 
|  530     Node* n = m_targetElementInstance ? m_targetElementInstance->shadowTreeEleme
     nt() : 0; |  530     Node* n = m_targetElementInstance ? m_targetElementInstance->shadowTreeEleme
     nt() : 0; | 
|  531     if (!n) |  531     if (!n) | 
|  532         return; |  532         return; | 
|  533  |  533  | 
|  534     if (n->isSVGElement() && toSVGElement(n)->isSVGGraphicsElement()) { |  534     if (n->isSVGElement() && toSVGElement(n)->isSVGGraphicsElement()) { | 
|  535         if (!isDirectReference(n)) { |  535         if (!isDirectReference(n)) { | 
|  536             // Spec: Indirect references are an error (14.3.5) |  536             // Spec: Indirect references are an error (14.3.5) | 
|  537             document().accessSVGExtensions()->reportError("Not allowed to use in
     direct reference in <clip-path>"); |  537             document().accessSVGExtensions().reportError("Not allowed to use ind
     irect reference in <clip-path>"); | 
|  538         } else { |  538         } else { | 
|  539             toSVGGraphicsElement(n)->toClipPath(path); |  539             toSVGGraphicsElement(n)->toClipPath(path); | 
|  540             // FIXME: Avoid manual resolution of x/y here. Its potentially harmf
     ul. |  540             // FIXME: Avoid manual resolution of x/y here. Its potentially harmf
     ul. | 
|  541             SVGLengthContext lengthContext(this); |  541             SVGLengthContext lengthContext(this); | 
|  542             path.translate(FloatSize(m_x->currentValue()->value(lengthContext), 
     m_y->currentValue()->value(lengthContext))); |  542             path.translate(FloatSize(m_x->currentValue()->value(lengthContext), 
     m_y->currentValue()->value(lengthContext))); | 
|  543             path.transform(animatedLocalTransform()); |  543             path.transform(animatedLocalTransform()); | 
|  544         } |  544         } | 
|  545     } |  545     } | 
|  546 } |  546 } | 
|  547  |  547  | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
|  567     bool targetHasUseTag = target->hasTagName(SVGNames::useTag); |  567     bool targetHasUseTag = target->hasTagName(SVGNames::useTag); | 
|  568     SVGElement* newTarget = 0; |  568     SVGElement* newTarget = 0; | 
|  569     if (targetHasUseTag) { |  569     if (targetHasUseTag) { | 
|  570         foundProblem = hasCycleUseReferencing(toSVGUseElement(target), targetIns
     tance, newTarget); |  570         foundProblem = hasCycleUseReferencing(toSVGUseElement(target), targetIns
     tance, newTarget); | 
|  571         if (foundProblem) |  571         if (foundProblem) | 
|  572             return; |  572             return; | 
|  573  |  573  | 
|  574         // We only need to track first degree <use> dependencies. Indirect refer
     ences are handled |  574         // We only need to track first degree <use> dependencies. Indirect refer
     ences are handled | 
|  575         // as the invalidation bubbles up the dependency chain. |  575         // as the invalidation bubbles up the dependency chain. | 
|  576         if (!foundUse) { |  576         if (!foundUse) { | 
|  577             document().accessSVGExtensions()->addElementReferencingTarget(this, 
     target); |  577             document().accessSVGExtensions().addElementReferencingTarget(this, t
     arget); | 
|  578             foundUse = true; |  578             foundUse = true; | 
|  579         } |  579         } | 
|  580     } else if (isDisallowedElement(target)) { |  580     } else if (isDisallowedElement(target)) { | 
|  581         foundProblem = true; |  581         foundProblem = true; | 
|  582         return; |  582         return; | 
|  583     } |  583     } | 
|  584  |  584  | 
|  585     // A general description from the SVG spec, describing what buildInstanceTre
     e() actually does. |  585     // A general description from the SVG spec, describing what buildInstanceTre
     e() actually does. | 
|  586     // |  586     // | 
|  587     // Spec: If the 'use' element references a 'g' which contains two 'rect' ele
     ments, then the instance tree |  587     // Spec: If the 'use' element references a 'g' which contains two 'rect' ele
     ments, then the instance tree | 
| (...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  981  |  981  | 
|  982     if (m_resource) |  982     if (m_resource) | 
|  983         m_resource->removeClient(this); |  983         m_resource->removeClient(this); | 
|  984  |  984  | 
|  985     m_resource = resource; |  985     m_resource = resource; | 
|  986     if (m_resource) |  986     if (m_resource) | 
|  987         m_resource->addClient(this); |  987         m_resource->addClient(this); | 
|  988 } |  988 } | 
|  989  |  989  | 
|  990 } |  990 } | 
| OLD | NEW |