1 /* 2 * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann (at) kde.org> 3 * Copyright (C) 2004, 2005, 2006 Rob Buis <buis (at) kde.org> 4 * Copyright (C) 2009 Google, Inc. 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Library General Public 8 * License as published by the Free Software Foundation; either 9 * version 2 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Library General Public License for more details. 15 * 16 * You should have received a copy of the GNU Library General Public License 17 * along with this library; see the file COPYING.LIB. If not, write to 18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 19 * Boston, MA 02110-1301, USA. 20 */ 21 22 #include "config.h" 23 24 #if ENABLE(SVG) 25 #include "RenderSVGTransformableContainer.h" 26 27 #include "SVGNames.h" 28 #include "SVGShadowTreeElements.h" 29 #include "SVGStyledTransformableElement.h" 30 31 namespace WebCore { 32 33 RenderSVGTransformableContainer::RenderSVGTransformableContainer(SVGStyledTransformableElement* node) 34 : RenderSVGContainer(node) 35 , m_needsTransformUpdate(true) 36 { 37 } 38 39 bool RenderSVGTransformableContainer::calculateLocalTransform() 40 { 41 SVGStyledTransformableElement* element = static_cast<SVGStyledTransformableElement*>(node()); 42 43 bool needsUpdate = m_needsTransformUpdate; 44 if (needsUpdate) { 45 m_localTransform = element->animatedLocalTransform(); 46 m_needsTransformUpdate = false; 47 } 48 49 if (!element->hasTagName(SVGNames::gTag) || !static_cast<SVGGElement*>(element)->isShadowTreeContainerElement()) 50 return needsUpdate; 51 52 FloatSize translation = static_cast<SVGShadowTreeContainerElement*>(element)->containerTranslation(); 53 if (!translation.width() && !translation.height()) 54 return needsUpdate; 55 56 // FIXME: Could optimize this case for use to avoid refetching the animatedLocalTransform() here, if only the containerTranslation() changed. 57 if (!needsUpdate) 58 m_localTransform = element->animatedLocalTransform(); 59 60 m_localTransform.translate(translation.width(), translation.height()); 61 return true; 62 } 63 64 } 65 66 #endif // ENABLE(SVG) 67