2006-09-05 Nikolas Zimmermann <zimmermann@kde.org>
authoreseidel <eseidel@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 6 Sep 2006 03:36:10 +0000 (03:36 +0000)
committereseidel <eseidel@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 6 Sep 2006 03:36:10 +0000 (03:36 +0000)
        Reviewed by eseidel.  Landed by eseidel.

Fixes: http://bugzilla.opendarwin.org/show_bug.cgi?id=10490
        -> Remove all SVGAnimated* usage from ksvg2.
        This is all done using a set of macros which live in svg/SVGElement.h
        (ANIMATED_PROPERTY_DECLARATIONS / ANIMATED_PROPERTY_DEFINITIONS).
        Transform all properties to this new concept using Eric ruby script.

        -> Replace all usages of "property()->baseVal()" with "propertyBaseValue()".
        -> Replace all usages of "property()->setBaseVal()" with "setPropertyBaseValue()".

        -> Add "virtual const SVGElement* contextElement() const".
        This concept allows to access the document (needed to access the SVGDocumentExtensions)
        from lowest-base-classes like SVGURIReference / SVGExternalResourcesRequired etc.

        These classes contain this contextElement() function as pure virtual functions.
        The topmost classes (like SVGCircleElement) implement this function with "return this".

        -> Move default value initialization to constructors.
        As the lazy_create usage, which was involved in default property initialization,
        has been removed, we need to do the initialization in the constructor.

        This forces us to fix the SVGLength class, as calling viewportElement() from the
        constructor does not work. This SVGLength cleanup is one of the next things to fix.

        * bindings/scripts/CodeGeneratorJS.pm:
        * kcanvas/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::translationForAttributes):
        * kcanvas/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::relativeBBox):
        (WebCore::RenderSVGImage::getAbsoluteRepaintRect):
        (WebCore::RenderSVGImage::translationForAttributes):
        * kcanvas/RenderSVGText.cpp:
        (WebCore::RenderSVGText::translationForAttributes):
        * ksvg2/misc/KSVGTimeScheduler.cpp:
        (WebCore::SVGTimer::notifyAll):
        * ksvg2/misc/SVGDocumentExtensions.cpp:
        * ksvg2/misc/SVGDocumentExtensions.h:
        (WebCore::SVGDocumentExtensions::baseValueMap):
        (WebCore::SVGDocumentExtensions::baseValue):
        (WebCore::SVGDocumentExtensions::setBaseValue):
        (WebCore::SVGDocumentExtensions::hasBaseValue):
        (WebCore::String):
        (WebCore::bool):
        (WebCore::double):
        * ksvg2/misc/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::updateFromElement):
        * ksvg2/svg/SVGAElement.cpp:
        (WebCore::SVGAElement::parseMappedAttribute):
        (WebCore::SVGAElement::defaultEventHandler):
        * ksvg2/svg/SVGAElement.h:
        (WebCore::SVGAElement::contextElement):
        * ksvg2/svg/SVGAnimateColorElement.h:
        (WebCore::SVGAnimateColorElement::contextElement):
        * ksvg2/svg/SVGAnimateElement.h:
        (WebCore::SVGAnimateElement::contextElement):
        * ksvg2/svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::handleTimerEvent):
        (WebCore::SVGAnimateTransformElement::initialMatrix):
        * ksvg2/svg/SVGAnimateTransformElement.h:
        (WebCore::SVGAnimateTransformElement::contextElement):
        * ksvg2/svg/SVGCircleElement.cpp:
        (SVGCircleElement::SVGCircleElement):
        (SVGCircleElement::parseMappedAttribute):
        (SVGCircleElement::toPathData):
        (SVGCircleElement::pushAttributeContext):
        * ksvg2/svg/SVGCircleElement.h:
        (WebCore::SVGCircleElement::contextElement):
        * ksvg2/svg/SVGClipPathElement.cpp:
        (SVGClipPathElement::SVGClipPathElement):
        (SVGClipPathElement::parseMappedAttribute):
        (SVGClipPathElement::canvasResource):
        * ksvg2/svg/SVGClipPathElement.h:
        (WebCore::SVGClipPathElement::contextElement):
        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
        (SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
        (SVGComponentTransferFunctionElement::parseMappedAttribute):
        (SVGComponentTransferFunctionElement::transferFunction):
        * ksvg2/svg/SVGComponentTransferFunctionElement.h:
        * ksvg2/svg/SVGCursorElement.cpp:
        (SVGCursorElement::SVGCursorElement):
        (SVGCursorElement::parseMappedAttribute):
        * ksvg2/svg/SVGCursorElement.h:
        (WebCore::SVGCursorElement::contextElement):
        * ksvg2/svg/SVGDefsElement.h:
        (WebCore::SVGDefsElement::contextElement):
        * ksvg2/svg/SVGElement.h:
        * ksvg2/svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::SVGEllipseElement):
        (WebCore::SVGEllipseElement::parseMappedAttribute):
        (WebCore::SVGEllipseElement::toPathData):
        (WebCore::SVGEllipseElement::pushAttributeContext):
        * ksvg2/svg/SVGEllipseElement.h:
        (WebCore::SVGEllipseElement::contextElement):
        * ksvg2/svg/SVGExternalResourcesRequired.cpp:
        (WebCore::SVGExternalResourcesRequired::SVGExternalResourcesRequired):
        (WebCore::SVGExternalResourcesRequired::parseMappedAttribute):
        * ksvg2/svg/SVGExternalResourcesRequired.h:
        * ksvg2/svg/SVGFEBlendElement.cpp:
        (SVGFEBlendElement::SVGFEBlendElement):
        (SVGFEBlendElement::parseMappedAttribute):
        (SVGFEBlendElement::filterEffect):
        * ksvg2/svg/SVGFEBlendElement.h:
        (WebCore::SVGFEBlendElement::contextElement):
        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
        (SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        (SVGFEColorMatrixElement::parseMappedAttribute):
        (SVGFEColorMatrixElement::filterEffect):
        * ksvg2/svg/SVGFEColorMatrixElement.h:
        (WebCore::SVGFEColorMatrixElement::contextElement):
        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
        (SVGFEComponentTransferElement::SVGFEComponentTransferElement):
        (SVGFEComponentTransferElement::parseMappedAttribute):
        (SVGFEComponentTransferElement::filterEffect):
        * ksvg2/svg/SVGFEComponentTransferElement.h:
        (WebCore::SVGFEComponentTransferElement::contextElement):
        * ksvg2/svg/SVGFECompositeElement.cpp:
        (SVGFECompositeElement::SVGFECompositeElement):
        (SVGFECompositeElement::parseMappedAttribute):
        (SVGFECompositeElement::filterEffect):
        * ksvg2/svg/SVGFECompositeElement.h:
        (WebCore::SVGFECompositeElement::contextElement):
        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement):
        (WebCore::SVGFEDiffuseLightingElement::parseMappedAttribute):
        (WebCore::SVGFEDiffuseLightingElement::filterEffect):
        * ksvg2/svg/SVGFEDiffuseLightingElement.h:
        (WebCore::SVGFEDiffuseLightingElement::contextElement):
        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
        (SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
        (SVGFEDisplacementMapElement::parseMappedAttribute):
        (SVGFEDisplacementMapElement::filterEffect):
        * ksvg2/svg/SVGFEDisplacementMapElement.h:
        (WebCore::SVGFEDisplacementMapElement::contextElement):
        * ksvg2/svg/SVGFEDistantLightElement.cpp:
        (WebCore::SVGFEDistantLightElement::lightSource):
        * ksvg2/svg/SVGFEFloodElement.cpp:
        (SVGFEFloodElement::parseMappedAttribute):
        (SVGFEFloodElement::filterEffect):
        * ksvg2/svg/SVGFEFloodElement.h:
        (WebCore::SVGFEFloodElement::contextElement):
        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
        (SVGFEGaussianBlurElement::SVGFEGaussianBlurElement):
        (SVGFEGaussianBlurElement::parseMappedAttribute):
        (SVGFEGaussianBlurElement::filterEffect):
        * ksvg2/svg/SVGFEGaussianBlurElement.h:
        (WebCore::SVGFEGaussianBlurElement::contextElement):
        * ksvg2/svg/SVGFEImageElement.cpp:
        (SVGFEImageElement::SVGFEImageElement):
        (SVGFEImageElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEImageElement.h:
        (WebCore::SVGFEImageElement::contextElement):
        * ksvg2/svg/SVGFELightElement.cpp:
        (SVGFELightElement::SVGFELightElement):
        (SVGFELightElement::parseMappedAttribute):
        * ksvg2/svg/SVGFELightElement.h:
        * ksvg2/svg/SVGFEMergeElement.cpp:
        (SVGFEMergeElement::SVGFEMergeElement):
        (SVGFEMergeElement::filterEffect):
        * ksvg2/svg/SVGFEMergeElement.h:
        (WebCore::SVGFEMergeElement::contextElement):
        * ksvg2/svg/SVGFEMergeNodeElement.cpp:
        (SVGFEMergeNodeElement::parseMappedAttribute):
        * ksvg2/svg/SVGFEMergeNodeElement.h:
        (WebCore::SVGFEMergeNodeElement::contextElement):
        * ksvg2/svg/SVGFEOffsetElement.cpp:
        (SVGFEOffsetElement::SVGFEOffsetElement):
        (SVGFEOffsetElement::parseMappedAttribute):
        (SVGFEOffsetElement::filterEffect):
        * ksvg2/svg/SVGFEOffsetElement.h:
        (WebCore::SVGFEOffsetElement::contextElement):
        * ksvg2/svg/SVGFEPointLightElement.cpp:
        (WebCore::SVGFEPointLightElement::lightSource):
        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
        (SVGFESpecularLightingElement::SVGFESpecularLightingElement):
        (SVGFESpecularLightingElement::parseMappedAttribute):
        (SVGFESpecularLightingElement::filterEffect):
        * ksvg2/svg/SVGFESpecularLightingElement.h:
        (WebCore::SVGFESpecularLightingElement::contextElement):
        * ksvg2/svg/SVGFESpotLightElement.cpp:
        (WebCore::SVGFESpotLightElement::lightSource):
        * ksvg2/svg/SVGFETileElement.cpp:
        (SVGFETileElement::parseMappedAttribute):
        (SVGFETileElement::filterEffect):
        * ksvg2/svg/SVGFETileElement.h:
        (WebCore::SVGFETileElement::contextElement):
        * ksvg2/svg/SVGFETurbulenceElement.cpp:
        (SVGFETurbulenceElement::SVGFETurbulenceElement):
        (SVGFETurbulenceElement::parseMappedAttribute):
        (SVGFETurbulenceElement::filterEffect):
        * ksvg2/svg/SVGFETurbulenceElement.h:
        (WebCore::SVGFETurbulenceElement::contextElement):
        * ksvg2/svg/SVGFilterElement.cpp:
        (SVGFilterElement::SVGFilterElement):
        (SVGFilterElement::parseMappedAttribute):
        (SVGFilterElement::canvasResource):
        * ksvg2/svg/SVGFilterElement.h:
        (WebCore::SVGFilterElement::contextElement):
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes):
        (SVGFilterPrimitiveStandardAttributes::~SVGFilterPrimitiveStandardAttributes):
        (SVGFilterPrimitiveStandardAttributes::parseMappedAttribute):
        (SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::contextElement):
        * ksvg2/svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::SVGFitToViewBox):
        (WebCore::SVGFitToViewBox::parseViewBox):
        (WebCore::SVGFitToViewBox::viewBoxToViewTransform):
        (WebCore::SVGFitToViewBox::parseMappedAttribute):
        * ksvg2/svg/SVGFitToViewBox.h:
        * ksvg2/svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        (WebCore::SVGForeignObjectElement::parseMappedAttribute):
        * ksvg2/svg/SVGForeignObjectElement.h:
        (WebCore::SVGForeignObjectElement::isValid):
        (WebCore::SVGForeignObjectElement::contextElement):
        * ksvg2/svg/SVGGElement.h:
        (WebCore::SVGGElement::contextElement):
        * ksvg2/svg/SVGGradientElement.cpp:
        (SVGGradientElement::SVGGradientElement):
        (SVGGradientElement::parseMappedAttribute):
        (SVGGradientElement::rebuildStops):
        * ksvg2/svg/SVGGradientElement.h:
        * ksvg2/svg/SVGHelper.cpp:
        (WebCore::SVGHelper::PercentageOfViewport):
        * ksvg2/svg/SVGImageElement.cpp:
        (SVGImageElement::SVGImageElement):
        (SVGImageElement::parseMappedAttribute):
        (SVGImageElement::haveLoadedRequiredResources):
        * ksvg2/svg/SVGImageElement.h:
        (WebCore::SVGImageElement::contextElement):
        * ksvg2/svg/SVGLangSpace.h:
        * ksvg2/svg/SVGLength.cpp:
        * ksvg2/svg/SVGLineElement.cpp:
        (SVGLineElement::SVGLineElement):
        (SVGLineElement::parseMappedAttribute):
        (SVGLineElement::toPathData):
        (SVGLineElement::pushAttributeContext):
        * ksvg2/svg/SVGLineElement.h:
        (WebCore::SVGLineElement::contextElement):
        * ksvg2/svg/SVGLinearGradientElement.cpp:
        (SVGLinearGradientElement::SVGLinearGradientElement):
        (SVGLinearGradientElement::parseMappedAttribute):
        (SVGLinearGradientElement::buildGradient):
        * ksvg2/svg/SVGLinearGradientElement.h:
        (WebCore::SVGLinearGradientElement::contextElement):
        * ksvg2/svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::parseMappedAttribute):
        (WebCore::SVGMarkerElement::setOrientToAuto):
        (WebCore::SVGMarkerElement::setOrientToAngle):
        (WebCore::SVGMarkerElement::canvasResource):
        * ksvg2/svg/SVGMarkerElement.h:
        (WebCore::SVGMarkerElement::contextElement):
        * ksvg2/svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        (WebCore::SVGMaskElement::attributeChanged):
        (WebCore::SVGMaskElement::parseMappedAttribute):
        (WebCore::SVGMaskElement::drawMaskerContent):
        * ksvg2/svg/SVGMaskElement.h:
        (WebCore::SVGMaskElement::contextElement):
        * ksvg2/svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        * ksvg2/svg/SVGPathElement.h:
        (WebCore::SVGPathElement::isValid):
        (WebCore::SVGPathElement::contextElement):
        * ksvg2/svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::parseMappedAttribute):
        (WebCore::SVGPatternElement::pushAttributeContext):
        (WebCore::SVGPatternElement::fillAttributesFromReferencePattern):
        (WebCore::SVGPatternElement::drawPatternContentIntoTile):
        (WebCore::SVGPatternElement::notifyAttributeChange):
        (WebCore::SVGPatternElement::getCTM):
        * ksvg2/svg/SVGPatternElement.h:
        (WebCore::SVGPatternElement::contextElement):
        * ksvg2/svg/SVGPolyElement.h:
        (WebCore::SVGPolyElement::contextElement):
        * ksvg2/svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::SVGRadialGradientElement):
        (WebCore::SVGRadialGradientElement::~SVGRadialGradientElement):
        (WebCore::SVGRadialGradientElement::parseMappedAttribute):
        (WebCore::SVGRadialGradientElement::buildGradient):
        * ksvg2/svg/SVGRadialGradientElement.h:
        (WebCore::SVGRadialGradientElement::contextElement):
        * ksvg2/svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::SVGRectElement):
        (WebCore::SVGRectElement::parseMappedAttribute):
        (WebCore::SVGRectElement::toPathData):
        (WebCore::SVGRectElement::pushAttributeContext):
        * ksvg2/svg/SVGRectElement.h:
        (WebCore::SVGRectElement::contextElement):
        * ksvg2/svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::~SVGSVGElement):
        (WebCore::SVGSVGElement::viewport):
        (WebCore::SVGSVGElement::parseMappedAttribute):
        (WebCore::SVGSVGElement::getCTM):
        (WebCore::SVGSVGElement::getScreenCTM):
        (WebCore::SVGSVGElement::createRenderer):
        * ksvg2/svg/SVGSVGElement.h:
        (WebCore::SVGSVGElement::contextElement):
        * ksvg2/svg/SVGScriptElement.h:
        (WebCore::SVGScriptElement::contextElement):
        * ksvg2/svg/SVGSetElement.h:
        (WebCore::SVGSetElement::contextElement):
        * ksvg2/svg/SVGStopElement.cpp:
        (SVGStopElement::SVGStopElement):
        (SVGStopElement::parseMappedAttribute):
        * ksvg2/svg/SVGStopElement.h:
        * ksvg2/svg/SVGStylable.h:
        * ksvg2/svg/SVGStyledElement.cpp:
        * ksvg2/svg/SVGStyledElement.h:
        * ksvg2/svg/SVGStyledTransformableElement.cpp:
        (SVGStyledTransformableElement::SVGStyledTransformableElement):
        (SVGStyledTransformableElement::parseMappedAttribute):
        * ksvg2/svg/SVGStyledTransformableElement.h:
        * ksvg2/svg/SVGSwitchElement.cpp:
        * ksvg2/svg/SVGSwitchElement.h:
        (WebCore::SVGSwitchElement::contextElement):
        * ksvg2/svg/SVGSymbolElement.h:
        (WebCore::SVGSymbolElement::contextElement):
        * ksvg2/svg/SVGTRefElement.cpp:
        (SVGTRefElement::updateReferencedText):
        * ksvg2/svg/SVGTRefElement.h:
        (WebCore::SVGTRefElement::contextElement):
        * ksvg2/svg/SVGTSpanElement.h:
        (WebCore::SVGTSpanElement::contextElement):
        * ksvg2/svg/SVGTextContentElement.cpp:
        (SVGTextContentElement::SVGTextContentElement):
        (SVGTextContentElement::parseMappedAttribute):
        * ksvg2/svg/SVGTextContentElement.h:
        * ksvg2/svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::SVGTextElement):
        (WebCore::SVGTextElement::parseMappedAttribute):
        * ksvg2/svg/SVGTextElement.h:
        (WebCore::SVGTextElement::contextElement):
        * ksvg2/svg/SVGTextPositioningElement.cpp:
        (SVGTextPositioningElement::SVGTextPositioningElement):
        (SVGTextPositioningElement::parseMappedAttribute):
        * ksvg2/svg/SVGTextPositioningElement.h:
        * ksvg2/svg/SVGTransformable.cpp:
        * ksvg2/svg/SVGTransformable.h:
        * ksvg2/svg/SVGURIReference.cpp:
        (SVGURIReference::parseMappedAttribute):
        * ksvg2/svg/SVGURIReference.h:
        * ksvg2/svg/SVGUseElement.cpp:
        (SVGUseElement::SVGUseElement):
        (SVGUseElement::parseMappedAttribute):
        (SVGUseElement::closeRenderer):
        * ksvg2/svg/SVGUseElement.h:
        (WebCore::SVGUseElement::contextElement):
        * ksvg2/svg/SVGViewElement.h:
        (WebCore::SVGViewElement::contextElement):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@16244 268f45cc-cd09-0410-ab3c-d52691b4dbfc

127 files changed:
WebCore/ChangeLog
WebCore/bindings/scripts/CodeGeneratorJS.pm
WebCore/kcanvas/RenderForeignObject.cpp
WebCore/kcanvas/RenderSVGImage.cpp
WebCore/kcanvas/RenderSVGText.cpp
WebCore/ksvg2/misc/KSVGTimeScheduler.cpp
WebCore/ksvg2/misc/SVGDocumentExtensions.cpp
WebCore/ksvg2/misc/SVGDocumentExtensions.h
WebCore/ksvg2/misc/SVGImageLoader.cpp
WebCore/ksvg2/svg/SVGAElement.cpp
WebCore/ksvg2/svg/SVGAElement.h
WebCore/ksvg2/svg/SVGAnimateColorElement.h
WebCore/ksvg2/svg/SVGAnimateElement.h
WebCore/ksvg2/svg/SVGAnimateTransformElement.cpp
WebCore/ksvg2/svg/SVGAnimateTransformElement.h
WebCore/ksvg2/svg/SVGCircleElement.cpp
WebCore/ksvg2/svg/SVGCircleElement.h
WebCore/ksvg2/svg/SVGClipPathElement.cpp
WebCore/ksvg2/svg/SVGClipPathElement.h
WebCore/ksvg2/svg/SVGComponentTransferFunctionElement.cpp
WebCore/ksvg2/svg/SVGComponentTransferFunctionElement.h
WebCore/ksvg2/svg/SVGCursorElement.cpp
WebCore/ksvg2/svg/SVGCursorElement.h
WebCore/ksvg2/svg/SVGDefsElement.h
WebCore/ksvg2/svg/SVGElement.h
WebCore/ksvg2/svg/SVGEllipseElement.cpp
WebCore/ksvg2/svg/SVGEllipseElement.h
WebCore/ksvg2/svg/SVGExternalResourcesRequired.cpp
WebCore/ksvg2/svg/SVGExternalResourcesRequired.h
WebCore/ksvg2/svg/SVGFEBlendElement.cpp
WebCore/ksvg2/svg/SVGFEBlendElement.h
WebCore/ksvg2/svg/SVGFEColorMatrixElement.cpp
WebCore/ksvg2/svg/SVGFEColorMatrixElement.h
WebCore/ksvg2/svg/SVGFEComponentTransferElement.cpp
WebCore/ksvg2/svg/SVGFEComponentTransferElement.h
WebCore/ksvg2/svg/SVGFECompositeElement.cpp
WebCore/ksvg2/svg/SVGFECompositeElement.h
WebCore/ksvg2/svg/SVGFEDiffuseLightingElement.cpp
WebCore/ksvg2/svg/SVGFEDiffuseLightingElement.h
WebCore/ksvg2/svg/SVGFEDisplacementMapElement.cpp
WebCore/ksvg2/svg/SVGFEDisplacementMapElement.h
WebCore/ksvg2/svg/SVGFEDistantLightElement.cpp
WebCore/ksvg2/svg/SVGFEFloodElement.cpp
WebCore/ksvg2/svg/SVGFEFloodElement.h
WebCore/ksvg2/svg/SVGFEGaussianBlurElement.cpp
WebCore/ksvg2/svg/SVGFEGaussianBlurElement.h
WebCore/ksvg2/svg/SVGFEImageElement.cpp
WebCore/ksvg2/svg/SVGFEImageElement.h
WebCore/ksvg2/svg/SVGFELightElement.cpp
WebCore/ksvg2/svg/SVGFELightElement.h
WebCore/ksvg2/svg/SVGFEMergeElement.cpp
WebCore/ksvg2/svg/SVGFEMergeElement.h
WebCore/ksvg2/svg/SVGFEMergeNodeElement.cpp
WebCore/ksvg2/svg/SVGFEMergeNodeElement.h
WebCore/ksvg2/svg/SVGFEOffsetElement.cpp
WebCore/ksvg2/svg/SVGFEOffsetElement.h
WebCore/ksvg2/svg/SVGFEPointLightElement.cpp
WebCore/ksvg2/svg/SVGFESpecularLightingElement.cpp
WebCore/ksvg2/svg/SVGFESpecularLightingElement.h
WebCore/ksvg2/svg/SVGFESpotLightElement.cpp
WebCore/ksvg2/svg/SVGFETileElement.cpp
WebCore/ksvg2/svg/SVGFETileElement.h
WebCore/ksvg2/svg/SVGFETurbulenceElement.cpp
WebCore/ksvg2/svg/SVGFETurbulenceElement.h
WebCore/ksvg2/svg/SVGFilterElement.cpp
WebCore/ksvg2/svg/SVGFilterElement.h
WebCore/ksvg2/svg/SVGFilterPrimitiveStandardAttributes.cpp
WebCore/ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h
WebCore/ksvg2/svg/SVGFitToViewBox.cpp
WebCore/ksvg2/svg/SVGFitToViewBox.h
WebCore/ksvg2/svg/SVGForeignObjectElement.cpp
WebCore/ksvg2/svg/SVGForeignObjectElement.h
WebCore/ksvg2/svg/SVGGElement.h
WebCore/ksvg2/svg/SVGGradientElement.cpp
WebCore/ksvg2/svg/SVGGradientElement.h
WebCore/ksvg2/svg/SVGHelper.cpp
WebCore/ksvg2/svg/SVGImageElement.cpp
WebCore/ksvg2/svg/SVGImageElement.h
WebCore/ksvg2/svg/SVGLangSpace.h
WebCore/ksvg2/svg/SVGLength.cpp
WebCore/ksvg2/svg/SVGLineElement.cpp
WebCore/ksvg2/svg/SVGLineElement.h
WebCore/ksvg2/svg/SVGLinearGradientElement.cpp
WebCore/ksvg2/svg/SVGLinearGradientElement.h
WebCore/ksvg2/svg/SVGMarkerElement.cpp
WebCore/ksvg2/svg/SVGMarkerElement.h
WebCore/ksvg2/svg/SVGMaskElement.cpp
WebCore/ksvg2/svg/SVGMaskElement.h
WebCore/ksvg2/svg/SVGPathElement.cpp
WebCore/ksvg2/svg/SVGPathElement.h
WebCore/ksvg2/svg/SVGPatternElement.cpp
WebCore/ksvg2/svg/SVGPatternElement.h
WebCore/ksvg2/svg/SVGPolyElement.h
WebCore/ksvg2/svg/SVGRadialGradientElement.cpp
WebCore/ksvg2/svg/SVGRadialGradientElement.h
WebCore/ksvg2/svg/SVGRectElement.cpp
WebCore/ksvg2/svg/SVGRectElement.h
WebCore/ksvg2/svg/SVGSVGElement.cpp
WebCore/ksvg2/svg/SVGSVGElement.h
WebCore/ksvg2/svg/SVGScriptElement.h
WebCore/ksvg2/svg/SVGSetElement.h
WebCore/ksvg2/svg/SVGStopElement.cpp
WebCore/ksvg2/svg/SVGStopElement.h
WebCore/ksvg2/svg/SVGStylable.h
WebCore/ksvg2/svg/SVGStyledElement.cpp
WebCore/ksvg2/svg/SVGStyledElement.h
WebCore/ksvg2/svg/SVGStyledTransformableElement.cpp
WebCore/ksvg2/svg/SVGStyledTransformableElement.h
WebCore/ksvg2/svg/SVGSwitchElement.cpp
WebCore/ksvg2/svg/SVGSwitchElement.h
WebCore/ksvg2/svg/SVGSymbolElement.h
WebCore/ksvg2/svg/SVGTRefElement.cpp
WebCore/ksvg2/svg/SVGTRefElement.h
WebCore/ksvg2/svg/SVGTSpanElement.h
WebCore/ksvg2/svg/SVGTextContentElement.cpp
WebCore/ksvg2/svg/SVGTextContentElement.h
WebCore/ksvg2/svg/SVGTextElement.cpp
WebCore/ksvg2/svg/SVGTextElement.h
WebCore/ksvg2/svg/SVGTextPositioningElement.cpp
WebCore/ksvg2/svg/SVGTextPositioningElement.h
WebCore/ksvg2/svg/SVGTransformable.cpp
WebCore/ksvg2/svg/SVGTransformable.h
WebCore/ksvg2/svg/SVGURIReference.cpp
WebCore/ksvg2/svg/SVGURIReference.h
WebCore/ksvg2/svg/SVGUseElement.cpp
WebCore/ksvg2/svg/SVGUseElement.h
WebCore/ksvg2/svg/SVGViewElement.h

index 4de0aee7dee1f42f806c813b969fda5acc2a1a4e..057dc524561b829d951752f5ea8ae8c90cfc6051 100644 (file)
@@ -1,3 +1,363 @@
+2006-09-05  Nikolas Zimmermann  <zimmermann@kde.org>
+
+        Reviewed by eseidel.  Landed by eseidel.
+
+        Fixes: http://bugzilla.opendarwin.org/show_bug.cgi?id=10490
+
+        -> Remove all SVGAnimated* usage from ksvg2.
+        This is all done using a set of macros which live in svg/SVGElement.h
+        (ANIMATED_PROPERTY_DECLARATIONS / ANIMATED_PROPERTY_DEFINITIONS).
+        Transform all properties to this new concept using Eric ruby script.
+
+        -> Replace all usages of "property()->baseVal()" with "propertyBaseValue()".
+        -> Replace all usages of "property()->setBaseVal()" with "setPropertyBaseValue()".
+
+        -> Add "virtual const SVGElement* contextElement() const".
+        This concept allows to access the document (needed to access the SVGDocumentExtensions)
+        from lowest-base-classes like SVGURIReference / SVGExternalResourcesRequired etc.
+
+        These classes contain this contextElement() function as pure virtual functions.
+        The topmost classes (like SVGCircleElement) implement this function with "return this".
+
+        -> Move default value initialization to constructors.
+        As the lazy_create usage, which was involved in default property initialization,
+        has been removed, we need to do the initialization in the constructor.
+        
+        This forces us to fix the SVGLength class, as calling viewportElement() from the
+        constructor does not work. This SVGLength cleanup is one of the next things to fix.
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        * kcanvas/RenderForeignObject.cpp:
+        (WebCore::RenderForeignObject::translationForAttributes):
+        * kcanvas/RenderSVGImage.cpp:
+        (WebCore::RenderSVGImage::paint):
+        (WebCore::RenderSVGImage::relativeBBox):
+        (WebCore::RenderSVGImage::getAbsoluteRepaintRect):
+        (WebCore::RenderSVGImage::translationForAttributes):
+        * kcanvas/RenderSVGText.cpp:
+        (WebCore::RenderSVGText::translationForAttributes):
+        * ksvg2/misc/KSVGTimeScheduler.cpp:
+        (WebCore::SVGTimer::notifyAll):
+        * ksvg2/misc/SVGDocumentExtensions.cpp:
+        * ksvg2/misc/SVGDocumentExtensions.h:
+        (WebCore::SVGDocumentExtensions::baseValueMap):
+        (WebCore::SVGDocumentExtensions::baseValue):
+        (WebCore::SVGDocumentExtensions::setBaseValue):
+        (WebCore::SVGDocumentExtensions::hasBaseValue):
+        (WebCore::String):
+        (WebCore::bool):
+        (WebCore::double):
+        * ksvg2/misc/SVGImageLoader.cpp:
+        (WebCore::SVGImageLoader::updateFromElement):
+        * ksvg2/svg/SVGAElement.cpp:
+        (WebCore::SVGAElement::parseMappedAttribute):
+        (WebCore::SVGAElement::defaultEventHandler):
+        * ksvg2/svg/SVGAElement.h:
+        (WebCore::SVGAElement::contextElement):
+        * ksvg2/svg/SVGAnimateColorElement.h:
+        (WebCore::SVGAnimateColorElement::contextElement):
+        * ksvg2/svg/SVGAnimateElement.h:
+        (WebCore::SVGAnimateElement::contextElement):
+        * ksvg2/svg/SVGAnimateTransformElement.cpp:
+        (WebCore::SVGAnimateTransformElement::handleTimerEvent):
+        (WebCore::SVGAnimateTransformElement::initialMatrix):
+        * ksvg2/svg/SVGAnimateTransformElement.h:
+        (WebCore::SVGAnimateTransformElement::contextElement):
+        * ksvg2/svg/SVGCircleElement.cpp:
+        (SVGCircleElement::SVGCircleElement):
+        (SVGCircleElement::parseMappedAttribute):
+        (SVGCircleElement::toPathData):
+        (SVGCircleElement::pushAttributeContext):
+        * ksvg2/svg/SVGCircleElement.h:
+        (WebCore::SVGCircleElement::contextElement):
+        * ksvg2/svg/SVGClipPathElement.cpp:
+        (SVGClipPathElement::SVGClipPathElement):
+        (SVGClipPathElement::parseMappedAttribute):
+        (SVGClipPathElement::canvasResource):
+        * ksvg2/svg/SVGClipPathElement.h:
+        (WebCore::SVGClipPathElement::contextElement):
+        * ksvg2/svg/SVGComponentTransferFunctionElement.cpp:
+        (SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
+        (SVGComponentTransferFunctionElement::parseMappedAttribute):
+        (SVGComponentTransferFunctionElement::transferFunction):
+        * ksvg2/svg/SVGComponentTransferFunctionElement.h:
+        * ksvg2/svg/SVGCursorElement.cpp:
+        (SVGCursorElement::SVGCursorElement):
+        (SVGCursorElement::parseMappedAttribute):
+        * ksvg2/svg/SVGCursorElement.h:
+        (WebCore::SVGCursorElement::contextElement):
+        * ksvg2/svg/SVGDefsElement.h:
+        (WebCore::SVGDefsElement::contextElement):
+        * ksvg2/svg/SVGElement.h:
+        * ksvg2/svg/SVGEllipseElement.cpp:
+        (WebCore::SVGEllipseElement::SVGEllipseElement):
+        (WebCore::SVGEllipseElement::parseMappedAttribute):
+        (WebCore::SVGEllipseElement::toPathData):
+        (WebCore::SVGEllipseElement::pushAttributeContext):
+        * ksvg2/svg/SVGEllipseElement.h:
+        (WebCore::SVGEllipseElement::contextElement):
+        * ksvg2/svg/SVGExternalResourcesRequired.cpp:
+        (WebCore::SVGExternalResourcesRequired::SVGExternalResourcesRequired):
+        (WebCore::SVGExternalResourcesRequired::parseMappedAttribute):
+        * ksvg2/svg/SVGExternalResourcesRequired.h:
+        * ksvg2/svg/SVGFEBlendElement.cpp:
+        (SVGFEBlendElement::SVGFEBlendElement):
+        (SVGFEBlendElement::parseMappedAttribute):
+        (SVGFEBlendElement::filterEffect):
+        * ksvg2/svg/SVGFEBlendElement.h:
+        (WebCore::SVGFEBlendElement::contextElement):
+        * ksvg2/svg/SVGFEColorMatrixElement.cpp:
+        (SVGFEColorMatrixElement::SVGFEColorMatrixElement):
+        (SVGFEColorMatrixElement::parseMappedAttribute):
+        (SVGFEColorMatrixElement::filterEffect):
+        * ksvg2/svg/SVGFEColorMatrixElement.h:
+        (WebCore::SVGFEColorMatrixElement::contextElement):
+        * ksvg2/svg/SVGFEComponentTransferElement.cpp:
+        (SVGFEComponentTransferElement::SVGFEComponentTransferElement):
+        (SVGFEComponentTransferElement::parseMappedAttribute):
+        (SVGFEComponentTransferElement::filterEffect):
+        * ksvg2/svg/SVGFEComponentTransferElement.h:
+        (WebCore::SVGFEComponentTransferElement::contextElement):
+        * ksvg2/svg/SVGFECompositeElement.cpp:
+        (SVGFECompositeElement::SVGFECompositeElement):
+        (SVGFECompositeElement::parseMappedAttribute):
+        (SVGFECompositeElement::filterEffect):
+        * ksvg2/svg/SVGFECompositeElement.h:
+        (WebCore::SVGFECompositeElement::contextElement):
+        * ksvg2/svg/SVGFEDiffuseLightingElement.cpp:
+        (WebCore::SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement):
+        (WebCore::SVGFEDiffuseLightingElement::parseMappedAttribute):
+        (WebCore::SVGFEDiffuseLightingElement::filterEffect):
+        * ksvg2/svg/SVGFEDiffuseLightingElement.h:
+        (WebCore::SVGFEDiffuseLightingElement::contextElement):
+        * ksvg2/svg/SVGFEDisplacementMapElement.cpp:
+        (SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
+        (SVGFEDisplacementMapElement::parseMappedAttribute):
+        (SVGFEDisplacementMapElement::filterEffect):
+        * ksvg2/svg/SVGFEDisplacementMapElement.h:
+        (WebCore::SVGFEDisplacementMapElement::contextElement):
+        * ksvg2/svg/SVGFEDistantLightElement.cpp:
+        (WebCore::SVGFEDistantLightElement::lightSource):
+        * ksvg2/svg/SVGFEFloodElement.cpp:
+        (SVGFEFloodElement::parseMappedAttribute):
+        (SVGFEFloodElement::filterEffect):
+        * ksvg2/svg/SVGFEFloodElement.h:
+        (WebCore::SVGFEFloodElement::contextElement):
+        * ksvg2/svg/SVGFEGaussianBlurElement.cpp:
+        (SVGFEGaussianBlurElement::SVGFEGaussianBlurElement):
+        (SVGFEGaussianBlurElement::parseMappedAttribute):
+        (SVGFEGaussianBlurElement::filterEffect):
+        * ksvg2/svg/SVGFEGaussianBlurElement.h:
+        (WebCore::SVGFEGaussianBlurElement::contextElement):
+        * ksvg2/svg/SVGFEImageElement.cpp:
+        (SVGFEImageElement::SVGFEImageElement):
+        (SVGFEImageElement::parseMappedAttribute):
+        * ksvg2/svg/SVGFEImageElement.h:
+        (WebCore::SVGFEImageElement::contextElement):
+        * ksvg2/svg/SVGFELightElement.cpp:
+        (SVGFELightElement::SVGFELightElement):
+        (SVGFELightElement::parseMappedAttribute):
+        * ksvg2/svg/SVGFELightElement.h:
+        * ksvg2/svg/SVGFEMergeElement.cpp:
+        (SVGFEMergeElement::SVGFEMergeElement):
+        (SVGFEMergeElement::filterEffect):
+        * ksvg2/svg/SVGFEMergeElement.h:
+        (WebCore::SVGFEMergeElement::contextElement):
+        * ksvg2/svg/SVGFEMergeNodeElement.cpp:
+        (SVGFEMergeNodeElement::parseMappedAttribute):
+        * ksvg2/svg/SVGFEMergeNodeElement.h:
+        (WebCore::SVGFEMergeNodeElement::contextElement):
+        * ksvg2/svg/SVGFEOffsetElement.cpp:
+        (SVGFEOffsetElement::SVGFEOffsetElement):
+        (SVGFEOffsetElement::parseMappedAttribute):
+        (SVGFEOffsetElement::filterEffect):
+        * ksvg2/svg/SVGFEOffsetElement.h:
+        (WebCore::SVGFEOffsetElement::contextElement):
+        * ksvg2/svg/SVGFEPointLightElement.cpp:
+        (WebCore::SVGFEPointLightElement::lightSource):
+        * ksvg2/svg/SVGFESpecularLightingElement.cpp:
+        (SVGFESpecularLightingElement::SVGFESpecularLightingElement):
+        (SVGFESpecularLightingElement::parseMappedAttribute):
+        (SVGFESpecularLightingElement::filterEffect):
+        * ksvg2/svg/SVGFESpecularLightingElement.h:
+        (WebCore::SVGFESpecularLightingElement::contextElement):
+        * ksvg2/svg/SVGFESpotLightElement.cpp:
+        (WebCore::SVGFESpotLightElement::lightSource):
+        * ksvg2/svg/SVGFETileElement.cpp:
+        (SVGFETileElement::parseMappedAttribute):
+        (SVGFETileElement::filterEffect):
+        * ksvg2/svg/SVGFETileElement.h:
+        (WebCore::SVGFETileElement::contextElement):
+        * ksvg2/svg/SVGFETurbulenceElement.cpp:
+        (SVGFETurbulenceElement::SVGFETurbulenceElement):
+        (SVGFETurbulenceElement::parseMappedAttribute):
+        (SVGFETurbulenceElement::filterEffect):
+        * ksvg2/svg/SVGFETurbulenceElement.h:
+        (WebCore::SVGFETurbulenceElement::contextElement):
+        * ksvg2/svg/SVGFilterElement.cpp:
+        (SVGFilterElement::SVGFilterElement):
+        (SVGFilterElement::parseMappedAttribute):
+        (SVGFilterElement::canvasResource):
+        * ksvg2/svg/SVGFilterElement.h:
+        (WebCore::SVGFilterElement::contextElement):
+        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.cpp:
+        (SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes):
+        (SVGFilterPrimitiveStandardAttributes::~SVGFilterPrimitiveStandardAttributes):
+        (SVGFilterPrimitiveStandardAttributes::parseMappedAttribute):
+        (SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
+        * ksvg2/svg/SVGFilterPrimitiveStandardAttributes.h:
+        (WebCore::SVGFilterPrimitiveStandardAttributes::contextElement):
+        * ksvg2/svg/SVGFitToViewBox.cpp:
+        (WebCore::SVGFitToViewBox::SVGFitToViewBox):
+        (WebCore::SVGFitToViewBox::parseViewBox):
+        (WebCore::SVGFitToViewBox::viewBoxToViewTransform):
+        (WebCore::SVGFitToViewBox::parseMappedAttribute):
+        * ksvg2/svg/SVGFitToViewBox.h:
+        * ksvg2/svg/SVGForeignObjectElement.cpp:
+        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
+        (WebCore::SVGForeignObjectElement::parseMappedAttribute):
+        * ksvg2/svg/SVGForeignObjectElement.h:
+        (WebCore::SVGForeignObjectElement::isValid):
+        (WebCore::SVGForeignObjectElement::contextElement):
+        * ksvg2/svg/SVGGElement.h:
+        (WebCore::SVGGElement::contextElement):
+        * ksvg2/svg/SVGGradientElement.cpp:
+        (SVGGradientElement::SVGGradientElement):
+        (SVGGradientElement::parseMappedAttribute):
+        (SVGGradientElement::rebuildStops):
+        * ksvg2/svg/SVGGradientElement.h:
+        * ksvg2/svg/SVGHelper.cpp:
+        (WebCore::SVGHelper::PercentageOfViewport):
+        * ksvg2/svg/SVGImageElement.cpp:
+        (SVGImageElement::SVGImageElement):
+        (SVGImageElement::parseMappedAttribute):
+        (SVGImageElement::haveLoadedRequiredResources):
+        * ksvg2/svg/SVGImageElement.h:
+        (WebCore::SVGImageElement::contextElement):
+        * ksvg2/svg/SVGLangSpace.h:
+        * ksvg2/svg/SVGLength.cpp:
+        * ksvg2/svg/SVGLineElement.cpp:
+        (SVGLineElement::SVGLineElement):
+        (SVGLineElement::parseMappedAttribute):
+        (SVGLineElement::toPathData):
+        (SVGLineElement::pushAttributeContext):
+        * ksvg2/svg/SVGLineElement.h:
+        (WebCore::SVGLineElement::contextElement):
+        * ksvg2/svg/SVGLinearGradientElement.cpp:
+        (SVGLinearGradientElement::SVGLinearGradientElement):
+        (SVGLinearGradientElement::parseMappedAttribute):
+        (SVGLinearGradientElement::buildGradient):
+        * ksvg2/svg/SVGLinearGradientElement.h:
+        (WebCore::SVGLinearGradientElement::contextElement):
+        * ksvg2/svg/SVGMarkerElement.cpp:
+        (WebCore::SVGMarkerElement::SVGMarkerElement):
+        (WebCore::SVGMarkerElement::parseMappedAttribute):
+        (WebCore::SVGMarkerElement::setOrientToAuto):
+        (WebCore::SVGMarkerElement::setOrientToAngle):
+        (WebCore::SVGMarkerElement::canvasResource):
+        * ksvg2/svg/SVGMarkerElement.h:
+        (WebCore::SVGMarkerElement::contextElement):
+        * ksvg2/svg/SVGMaskElement.cpp:
+        (WebCore::SVGMaskElement::SVGMaskElement):
+        (WebCore::SVGMaskElement::attributeChanged):
+        (WebCore::SVGMaskElement::parseMappedAttribute):
+        (WebCore::SVGMaskElement::drawMaskerContent):
+        * ksvg2/svg/SVGMaskElement.h:
+        (WebCore::SVGMaskElement::contextElement):
+        * ksvg2/svg/SVGPathElement.cpp:
+        (WebCore::SVGPathElement::SVGPathElement):
+        * ksvg2/svg/SVGPathElement.h:
+        (WebCore::SVGPathElement::isValid):
+        (WebCore::SVGPathElement::contextElement):
+        * ksvg2/svg/SVGPatternElement.cpp:
+        (WebCore::SVGPatternElement::SVGPatternElement):
+        (WebCore::SVGPatternElement::parseMappedAttribute):
+        (WebCore::SVGPatternElement::pushAttributeContext):
+        (WebCore::SVGPatternElement::fillAttributesFromReferencePattern):
+        (WebCore::SVGPatternElement::drawPatternContentIntoTile):
+        (WebCore::SVGPatternElement::notifyAttributeChange):
+        (WebCore::SVGPatternElement::getCTM):
+        * ksvg2/svg/SVGPatternElement.h:
+        (WebCore::SVGPatternElement::contextElement):
+        * ksvg2/svg/SVGPolyElement.h:
+        (WebCore::SVGPolyElement::contextElement):
+        * ksvg2/svg/SVGRadialGradientElement.cpp:
+        (WebCore::SVGRadialGradientElement::SVGRadialGradientElement):
+        (WebCore::SVGRadialGradientElement::~SVGRadialGradientElement):
+        (WebCore::SVGRadialGradientElement::parseMappedAttribute):
+        (WebCore::SVGRadialGradientElement::buildGradient):
+        * ksvg2/svg/SVGRadialGradientElement.h:
+        (WebCore::SVGRadialGradientElement::contextElement):
+        * ksvg2/svg/SVGRectElement.cpp:
+        (WebCore::SVGRectElement::SVGRectElement):
+        (WebCore::SVGRectElement::parseMappedAttribute):
+        (WebCore::SVGRectElement::toPathData):
+        (WebCore::SVGRectElement::pushAttributeContext):
+        * ksvg2/svg/SVGRectElement.h:
+        (WebCore::SVGRectElement::contextElement):
+        * ksvg2/svg/SVGSVGElement.cpp:
+        (WebCore::SVGSVGElement::SVGSVGElement):
+        (WebCore::SVGSVGElement::~SVGSVGElement):
+        (WebCore::SVGSVGElement::viewport):
+        (WebCore::SVGSVGElement::parseMappedAttribute):
+        (WebCore::SVGSVGElement::getCTM):
+        (WebCore::SVGSVGElement::getScreenCTM):
+        (WebCore::SVGSVGElement::createRenderer):
+        * ksvg2/svg/SVGSVGElement.h:
+        (WebCore::SVGSVGElement::contextElement):
+        * ksvg2/svg/SVGScriptElement.h:
+        (WebCore::SVGScriptElement::contextElement):
+        * ksvg2/svg/SVGSetElement.h:
+        (WebCore::SVGSetElement::contextElement):
+        * ksvg2/svg/SVGStopElement.cpp:
+        (SVGStopElement::SVGStopElement):
+        (SVGStopElement::parseMappedAttribute):
+        * ksvg2/svg/SVGStopElement.h:
+        * ksvg2/svg/SVGStylable.h:
+        * ksvg2/svg/SVGStyledElement.cpp:
+        * ksvg2/svg/SVGStyledElement.h:
+        * ksvg2/svg/SVGStyledTransformableElement.cpp:
+        (SVGStyledTransformableElement::SVGStyledTransformableElement):
+        (SVGStyledTransformableElement::parseMappedAttribute):
+        * ksvg2/svg/SVGStyledTransformableElement.h:
+        * ksvg2/svg/SVGSwitchElement.cpp:
+        * ksvg2/svg/SVGSwitchElement.h:
+        (WebCore::SVGSwitchElement::contextElement):
+        * ksvg2/svg/SVGSymbolElement.h:
+        (WebCore::SVGSymbolElement::contextElement):
+        * ksvg2/svg/SVGTRefElement.cpp:
+        (SVGTRefElement::updateReferencedText):
+        * ksvg2/svg/SVGTRefElement.h:
+        (WebCore::SVGTRefElement::contextElement):
+        * ksvg2/svg/SVGTSpanElement.h:
+        (WebCore::SVGTSpanElement::contextElement):
+        * ksvg2/svg/SVGTextContentElement.cpp:
+        (SVGTextContentElement::SVGTextContentElement):
+        (SVGTextContentElement::parseMappedAttribute):
+        * ksvg2/svg/SVGTextContentElement.h:
+        * ksvg2/svg/SVGTextElement.cpp:
+        (WebCore::SVGTextElement::SVGTextElement):
+        (WebCore::SVGTextElement::parseMappedAttribute):
+        * ksvg2/svg/SVGTextElement.h:
+        (WebCore::SVGTextElement::contextElement):
+        * ksvg2/svg/SVGTextPositioningElement.cpp:
+        (SVGTextPositioningElement::SVGTextPositioningElement):
+        (SVGTextPositioningElement::parseMappedAttribute):
+        * ksvg2/svg/SVGTextPositioningElement.h:
+        * ksvg2/svg/SVGTransformable.cpp:
+        * ksvg2/svg/SVGTransformable.h:
+        * ksvg2/svg/SVGURIReference.cpp:
+        (SVGURIReference::parseMappedAttribute):
+        * ksvg2/svg/SVGURIReference.h:
+        * ksvg2/svg/SVGUseElement.cpp:
+        (SVGUseElement::SVGUseElement):
+        (SVGUseElement::parseMappedAttribute):
+        (SVGUseElement::closeRenderer):
+        * ksvg2/svg/SVGUseElement.h:
+        (WebCore::SVGUseElement::contextElement):
+        * ksvg2/svg/SVGViewElement.h:
+        (WebCore::SVGViewElement::contextElement):
+
 2006-09-05  Eric Seidel  <eric@eseidel.com>
 
         Reviewed by aroben.
index a8bd8ceb6b0f5c28e704165d4f755552c153f13c..0e3976d7c1a113c6aebd26e1fa51a46103bc7e22 100644 (file)
@@ -1104,7 +1104,23 @@ sub NativeToJSValue
     my $value = shift;
     
     my $type = $codeGenerator->StripModule($signature->type);
-    
+
+    # FIXME: Temporary hack until we implement the JSSVGAnimated* stuff.
+
+    if($type eq "SVGAnimatedString") {
+        $type = "DOMString";
+    } elsif($type eq "SVGAnimatedBoolean") {
+        $type = "boolean";
+    } elsif($type eq "SVGAnimatedEnumeration") {
+        $type = "long";
+    } elsif($type eq "SVGAnimatedInteger") {
+        $type = "long";
+    } elsif($type eq "SVGAnimatedNumber") {
+        $type = "double";
+    } elsif($type eq "SVGAnimatedLength") {
+        $type = "SVGLength";
+    }
+
     if ($type eq "boolean") {
         return "jsBoolean($value)";
     } elsif ($type eq "long" or
index 8896b024f01d18f1c4333f170cab06c19de3602d..f6d0f1c74c6aa5243df28f6bd1763950906edf8c 100644 (file)
@@ -26,7 +26,7 @@
 
 #include "GraphicsContext.h"
 #include "KRenderingDevice.h"
-#include "SVGAnimatedLength.h"
+#include "SVGLength.h"
 #include "SVGForeignObjectElement.h"
 
 namespace WebCore {
@@ -39,7 +39,7 @@ RenderForeignObject::RenderForeignObject(SVGForeignObjectElement *node)
 AffineTransform RenderForeignObject::translationForAttributes()
 {
     SVGForeignObjectElement *foreign = static_cast<SVGForeignObjectElement *>(element());
-    return AffineTransform().translate(foreign->x()->baseVal()->value(), foreign->y()->baseVal()->value());
+    return AffineTransform().translate(foreign->xBaseValue()->value(), foreign->yBaseValue()->value());
 }
 
 void RenderForeignObject::paint(PaintInfo& paintInfo, int parentX, int parentY)
index 65faa211e6c6447ba90b474d9fd3a260296ac4ec..151359630f7280fb856e554a913052dd4cae8e4b 100644 (file)
@@ -28,8 +28,8 @@
 #include "GraphicsContext.h"
 #include "KCanvasRenderingStyle.h"
 #include "KRenderingDevice.h"
-#include "SVGAnimatedLength.h"
-#include "SVGAnimatedPreserveAspectRatio.h"
+#include "SVGLength.h"
+#include "SVGPreserveAspectRatio.h"
 #include "SVGImageElement.h"
 #include "SVGImageElement.h"
 #include "ksvg.h"
@@ -171,12 +171,12 @@ void RenderSVGImage::paint(PaintInfo& paintInfo, int parentX, int parentY)
         
     SVGImageElement *imageElt = static_cast<SVGImageElement *>(node());
         
-    if (imageElt->preserveAspectRatio()->baseVal()->align() == SVG_PRESERVEASPECTRATIO_NONE)
+    if (imageElt->preserveAspectRatioBaseValue()->align() == SVG_PRESERVEASPECTRATIO_NONE)
         RenderImage::paint(pi, 0, 0);
     else {
         FloatRect destRect(m_x, m_y, contentWidth(), contentHeight());
         FloatRect srcRect(0, 0, image()->width(), image()->height());
-        adjustRectsForAspectRatio(destRect, srcRect, imageElt->preserveAspectRatio()->baseVal());
+        adjustRectsForAspectRatio(destRect, srcRect, imageElt->preserveAspectRatioBaseValue());
         c->drawImage(image(), destRect, srcRect);
     }
 
@@ -244,9 +244,7 @@ void RenderSVGImage::layout()
 FloatRect RenderSVGImage::relativeBBox(bool includeStroke) const
 {
     SVGImageElement *image = static_cast<SVGImageElement *>(node());
-    float xOffset = image->x()->baseVal() ? image->x()->baseVal()->value() : 0;
-    float yOffset = image->y()->baseVal() ? image->y()->baseVal()->value() : 0;
-    return FloatRect(xOffset, yOffset, width(), height());
+    return FloatRect(image->xBaseValue()->value(), image->yBaseValue()->value(), width(), height());
 }
 
 void RenderSVGImage::imageChanged(CachedImage* image)
@@ -259,9 +257,7 @@ void RenderSVGImage::imageChanged(CachedImage* image)
 IntRect RenderSVGImage::getAbsoluteRepaintRect()
 {
     SVGImageElement *image = static_cast<SVGImageElement *>(node());
-    float xOffset = image->x()->baseVal() ? image->x()->baseVal()->value() : 0;
-    float yOffset = image->y()->baseVal() ? image->y()->baseVal()->value() : 0;
-    FloatRect repaintRect = absoluteTransform().mapRect(FloatRect(xOffset, yOffset, width(), height()));
+    FloatRect repaintRect = absoluteTransform().mapRect(FloatRect(image->xBaseValue()->value(), image->yBaseValue()->value(), width(), height()));
 
     // Filters can expand the bounding box
     KCanvasFilter *filter = getFilterById(document(), style()->svgStyle()->filter().mid(1));
@@ -280,9 +276,7 @@ void RenderSVGImage::absoluteRects(DeprecatedValueList<IntRect>& rects, int _tx,
 AffineTransform RenderSVGImage::translationForAttributes()
 {
     SVGImageElement *image = static_cast<SVGImageElement *>(node());
-    float xOffset = image->x()->baseVal() ? image->x()->baseVal()->value() : 0;
-    float yOffset = image->y()->baseVal() ? image->y()->baseVal()->value() : 0;
-    return AffineTransform().translate(xOffset, yOffset);
+    return AffineTransform().translate(image->xBaseValue()->value(), image->yBaseValue()->value());
 }
 
 void RenderSVGImage::translateForAttributes()
index 60f53b8340ef6c9be628f691b1c0f5283b37b2d1..2780d9716b617558c57f8ea2d8fa011ddfd165e8 100644 (file)
@@ -28,7 +28,7 @@
 #include "GraphicsContext.h"
 #include "KCanvasRenderingStyle.h"
 #include "KRenderingDevice.h"
-#include "SVGAnimatedLengthList.h"
+#include "SVGLengthList.h"
 #include "SVGTextElement.h"
 #include <wtf/OwnPtr.h>
 
@@ -49,8 +49,8 @@ AffineTransform RenderSVGText::translationForAttributes()
 {
     SVGTextElement *text = static_cast<SVGTextElement *>(element());
 
-    float xOffset = text->x()->baseVal()->getFirst() ? text->x()->baseVal()->getFirst()->value() : 0;
-    float yOffset = text->y()->baseVal()->getFirst() ? text->y()->baseVal()->getFirst()->value() : 0;
+    float xOffset = text->xBaseValue()->getFirst() ? text->xBaseValue()->getFirst()->value() : 0;
+    float yOffset = text->yBaseValue()->getFirst() ? text->yBaseValue()->getFirst()->value() : 0;
 
     return AffineTransform().translate(xOffset, yOffset);
 }
index 2ba1c187ed802bd0004a0a95aa1e2b245320c956..b8ef4b4ae0110d92dea9cb2b92a3da1ed6c60cab 100644 (file)
@@ -28,7 +28,7 @@
 #include "Document.h"
 #include "SVGAnimateColorElement.h"
 #include "SVGAnimateTransformElement.h"
-#include "SVGAnimatedTransformList.h"
+#include "SVGTransformList.h"
 #include "SVGDOMImplementation.h"
 #include "SVGMatrix.h"
 #include "SVGNames.h"
@@ -256,8 +256,8 @@ void SVGTimer::notifyAll()
             SVGElement* key = targetIterator->first;
             if (key && key->isStyled() && key->isStyledTransformable()) {
                 SVGStyledTransformableElement *transform = static_cast<SVGStyledTransformableElement *>(key);
-                transform->transform()->setAnimVal(targetTransforms.get());
-                transform->updateLocalTransform(transform->transform()->animVal());
+                transform->setTransform(targetTransforms.get());
+                transform->updateLocalTransform(transform->transform());
             }
         }
 
index 9e41244fd9f7573c09d2d18b89713aec40068b1b..22750a0d91cd7ca77cc67d494217e5cfe8b1b737 100644 (file)
@@ -27,6 +27,7 @@
 #include "EventListener.h"
 #include "Frame.h"
 #include "KSVGTimeScheduler.h"
+#include "AtomicString.h"
 #include "kjs_proxy.h"
 #include "SVGSVGElement.h"
 
index 5e6dc60a744b2c936fb38c5458e6c055be5b6e63..4417aec6a99adf00a5450ce2cc53c6e15e83c76a 100644 (file)
 
 #include <wtf/Forward.h>
 #include <wtf/HashSet.h>
+#include <wtf/HashMap.h>
+#include "StringHash.h"
+#include "StringImpl.h"
+#include "AtomicString.h"
 
 namespace WebCore {
 
+class AtomicString;
 class Document;
 class EventListener;
 class Node;
+class SVGElement;
 class String;
-class SVGSVGElement;
 class TimeScheduler;
+class SVGSVGElement;
 
 class SVGDocumentExtensions {
 public:
@@ -56,8 +62,81 @@ private:
 
     SVGDocumentExtensions(const SVGDocumentExtensions&);
     SVGDocumentExtensions& operator=(const SVGDocumentExtensions&);
+
+    template<typename ValueType>
+    HashMap<const SVGElement*, HashMap<StringImpl*, ValueType>*> baseValueMap() const
+    {
+        static HashMap<const SVGElement*, HashMap<StringImpl*, ValueType>*> s_valueType;
+        return s_valueType;
+    }
+
+public:
+    template<typename ValueType>
+    ValueType baseValue(const SVGElement* element, const AtomicString& propertyName) const
+    {
+        HashMap<StringImpl*, ValueType>* propertyMap = baseValueMap<ValueType>().get(element);
+        if (propertyMap)
+            return propertyMap->get(propertyName.impl());
+
+        return 0;
+    }
+
+    template<typename ValueType>
+    void setBaseValue(const SVGElement* element, const AtomicString& propertyName, ValueType newValue)
+    {
+        HashMap<StringImpl*, ValueType>* propertyMap = baseValueMap<ValueType>().get(element);
+        if (!propertyMap) {
+            propertyMap = new HashMap<StringImpl*, ValueType>();
+            baseValueMap<ValueType>().set(element, propertyMap);
+        }
+
+        propertyMap->set(propertyName.impl(), newValue);
+    }
+
+    template<typename ValueType>
+    bool hasBaseValue(const SVGElement* element, const AtomicString& propertyName) const
+    {
+        HashMap<StringImpl*, ValueType>* propertyMap = baseValueMap<ValueType>().get(element);
+        if (propertyMap)
+            return propertyMap->contains(propertyName.impl());
+
+        return false;
+    }
 };
 
+// Special handling for WebCore::String
+template<>
+inline String SVGDocumentExtensions::baseValue<String>(const SVGElement* element, const AtomicString& propertyName) const
+{
+    HashMap<StringImpl*, String>* propertyMap = baseValueMap<String>().get(element);
+    if (propertyMap)
+        return propertyMap->get(propertyName.impl());
+
+    return String();
+}
+
+// Special handling for booleans
+template<>
+inline bool SVGDocumentExtensions::baseValue<bool>(const SVGElement* element, const AtomicString& propertyName) const
+{
+    HashMap<StringImpl*, bool>* propertyMap = baseValueMap<bool>().get(element);
+    if (propertyMap)
+        return propertyMap->get(propertyName.impl());
+
+    return false;
+}
+
+// Special handling for doubles
+template<>
+inline double SVGDocumentExtensions::baseValue<double>(const SVGElement* element, const AtomicString& propertyName) const
+{
+    HashMap<StringImpl*, double>* propertyMap = baseValueMap<double>().get(element);
+    if (propertyMap)
+        return propertyMap->get(propertyName.impl());
+
+    return 0.0;
+}
+
 }
 
 #endif // SVG_SUPPORT
index cf9e539f0f1513cd68a82ca23ef0402ef3b030b8..39d61883d56c398c7c2f5b8b6822b18dccb5b5d3 100644 (file)
@@ -28,8 +28,7 @@
 
 #include "SVGNames.h"
 #include "SVGImageElement.h"
-#include "SVGAnimatedLength.h"
-#include "SVGAnimatedString.h"
+#include "SVGLength.h"
 #include "SVGMatrix.h"
 #include "KCanvasRenderingStyle.h"
 
@@ -53,8 +52,8 @@ void SVGImageLoader::updateFromElement()
     WebCore::Document* doc = imageElement->ownerDocument();
     
     CachedImage *newImage = 0;
-    if (imageElement->href()->baseVal())
-        newImage = doc->docLoader()->requestImage(imageElement->href()->baseVal());
+    if (!imageElement->hrefBaseValue().isEmpty())
+        newImage = doc->docLoader()->requestImage(imageElement->hrefBaseValue());
 
     CachedImage *oldImage = image();
     if (newImage != oldImage) {
index 1b19ec20b82f4ec94be1b255b1db8ca768b0775e..04c40c0d637bb8abfbce6cb4c02ed657df08249d 100644 (file)
@@ -31,7 +31,6 @@
 #include "Frame.h"
 #include "MouseEvent.h"
 #include "MouseEvent.h"
-#include "SVGAnimatedString.h"
 #include "SVGHelper.h"
 #include "SVGNames.h"
 #include "csshelper.h"
@@ -49,16 +48,13 @@ SVGAElement::~SVGAElement()
 {
 }
 
-SVGAnimatedString *SVGAElement::target() const
-{
-    return lazy_create<SVGAnimatedString>(m_target, this);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGAElement, String, String, string, Target, target, SVGNames::targetAttr.localName(), m_target)
 
 void SVGAElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const AtomicString& value(attr->value());
     if (attr->name() == SVGNames::targetAttr) {
-        target()->setBaseVal(value.impl());
+        setTargetBaseValue(value.impl());
     } else {
         if (SVGURIReference::parseMappedAttribute(attr)) {
             m_isLink = attr->value() != 0;
@@ -93,7 +89,7 @@ void SVGAElement::defaultEventHandler(Event *evt)
             SVGStyledTransformableElement::defaultEventHandler(evt);
             return;
         }
-        url = parseURL(href()->baseVal()).deprecatedString();
+        url = parseURL(hrefBaseValue()).deprecatedString();
         utarget = getAttribute(SVGNames::targetAttr).deprecatedString();
 
         if(e && e->button() == 1)
index d866275cb49601169d85d9b85fadccf0fee52765..6b77532587649bf35d63128761f81a82491f8cab 100644 (file)
@@ -32,8 +32,6 @@
 
 namespace WebCore {
 
-    class SVGAnimatedString;
-
     class SVGAElement : public SVGStyledTransformableElement,
                             public SVGURIReference,
                             public SVGTests,
@@ -45,8 +43,6 @@ namespace WebCore {
         virtual ~SVGAElement();
 
         // 'SVGAElement' functions
-        SVGAnimatedString *target() const;
-        
         virtual bool isValid() const { return SVGTests::isValid(); }
 
         virtual void parseMappedAttribute(MappedAttribute *attr);
@@ -57,8 +53,11 @@ namespace WebCore {
 
         virtual void defaultEventHandler(Event *evt);
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedString> m_target;
+        ANIMATED_PROPERTY_DECLARATIONS(String, String, Target, target)
     };
 
 } // namespace WebCore
index 1bca3d026b81fdd9327abd9a2269816b2f7850e0..e1ec32cb0f5f233d4ca9c74cfd2b84a1bd902e63 100644 (file)
@@ -42,6 +42,9 @@ namespace WebCore {
         Color color() const;
         Color initialColor() const;
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
         Color m_lastColor;
         Color m_currentColor;
index 923211bf459ae2631e2f6eaf63374c076a96fd84..e34cfee94c3582e0e91e905891bb245c49bf4332 100644 (file)
@@ -35,6 +35,9 @@ namespace WebCore {
 
         virtual void handleTimerEvent(double timePercentage);
     
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
         int m_currentItem;
 
index 5a2fd80579e6cc1dc11a5099c0d1ecaa9dceac3a..7a27203b094bdbe3df483637d81e892abbe5f1c5 100644 (file)
@@ -31,7 +31,7 @@
 #include "SVGTransform.h"
 #include "SVGStyledTransformableElement.h"
 #include "SVGTransformList.h"
-#include "SVGAnimatedTransformList.h"
+#include "SVGTransformList.h"
 #include "SVGAnimateTransformElement.h"
 #include "KSVGTimeScheduler.h"
 #include "Document.h"
@@ -85,7 +85,7 @@ void SVGAnimateTransformElement::handleTimerEvent(double timePercentage)
         // Save initial transform... (needed for fill="remove" or additve="sum")
         if (targetElement()->isStyledTransformable()) {
             SVGStyledTransformableElement *transform = static_cast<SVGStyledTransformableElement *>(targetElement());
-            RefPtr<SVGTransformList> transformList = transform->transform()->baseVal();
+            RefPtr<SVGTransformList> transformList = transform->transformBaseValue();
             if (transformList) {
                 for (unsigned long i = 0; i < transformList->numberOfItems(); i++) {
                     SVGTransform *value = transformList->getItem(i);
@@ -449,7 +449,7 @@ SVGMatrix *SVGAnimateTransformElement::initialMatrix() const
     if (!targetElement()->isStyledTransformable())
         return 0;
     SVGStyledTransformableElement *transform = static_cast<SVGStyledTransformableElement *>(targetElement());
-    SVGTransformList *transformList = (transform ? transform->transform()->baseVal() : 0);
+    SVGTransformList *transformList = (transform ? transform->transformBaseValue() : 0);
     if (!transformList)
         return 0;
     
index 3c2b3199c85629051517ca1a7dc6abfa36061eff..e59f9dde0318914b055fd412db5a407c4c2f6356 100644 (file)
@@ -47,6 +47,9 @@ namespace WebCore {
         SVGMatrix *initialMatrix() const;
         SVGMatrix *transformMatrix() const;
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
         int m_currentItem;
         SVGTransformType m_type;
index 739b4c161b612444b4ff0ab24bd6c8f8a6770ea8..66d81623f4c36fbed2634db36a7791e166ab08b9 100644 (file)
 #include "SVGNames.h"
 #include "SVGHelper.h"
 #include "SVGCircleElement.h"
-#include "SVGAnimatedLength.h"
+#include "SVGLength.h"
 
 using namespace WebCore;
 
 SVGCircleElement::SVGCircleElement(const QualifiedName& tagName, Document *doc)
-: SVGStyledTransformableElement(tagName, doc), SVGTests(), SVGLangSpace(), SVGExternalResourcesRequired()
+    : SVGStyledTransformableElement(tagName, doc)
+    , SVGTests()
+    , SVGLangSpace()
+    , SVGExternalResourcesRequired()
+    , m_cx(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_cy(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_r(new SVGLength(this, LM_OTHER, viewportElement()))
 {
 }
 
@@ -42,30 +48,19 @@ SVGCircleElement::~SVGCircleElement()
 {
 }
 
-SVGAnimatedLength *SVGCircleElement::cx() const
-{
-    return lazy_create<SVGAnimatedLength>(m_cx, this, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength *SVGCircleElement::cy() const
-{
-    return lazy_create<SVGAnimatedLength>(m_cy, this, LM_HEIGHT, viewportElement());
-}
-
-SVGAnimatedLength *SVGCircleElement::r() const
-{
-    return lazy_create<SVGAnimatedLength>(m_r, this, LM_OTHER, viewportElement());
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGCircleElement, SVGLength*, Length, length, Cx, cx, SVGNames::cxAttr.localName(), m_cx.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGCircleElement, SVGLength*, Length, length, Cy, cy, SVGNames::cyAttr.localName(), m_cy.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGCircleElement, SVGLength*, Length, length, R, r, SVGNames::rAttr.localName(), m_r.get())
 
 void SVGCircleElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const AtomicString& value = attr->value();
     if (attr->name() == SVGNames::cxAttr)
-        cx()->baseVal()->setValueAsString(value.impl());
+        cxBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::cyAttr)
-        cy()->baseVal()->setValueAsString(value.impl());
+        cyBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::rAttr)
-        r()->baseVal()->setValueAsString(value.impl());
+        rBaseValue()->setValueAsString(value.impl());
     else
     {
         if(SVGTests::parseMappedAttribute(attr)) return;
@@ -77,8 +72,8 @@ void SVGCircleElement::parseMappedAttribute(MappedAttribute *attr)
 
 Path SVGCircleElement::toPathData() const
 {
-    float _cx = cx()->baseVal()->value(), _cy = cy()->baseVal()->value();
-    float _r = r()->baseVal()->value();
+    float _cx = cxBaseValue()->value(), _cy = cyBaseValue()->value();
+    float _r = rBaseValue()->value();
 
     return Path::createCircle(FloatPoint(_cx, _cy), _r);
 }
@@ -86,11 +81,11 @@ Path SVGCircleElement::toPathData() const
 const SVGStyledElement *SVGCircleElement::pushAttributeContext(const SVGStyledElement *context)
 {
     // All attribute's contexts are equal (so just take the one from 'cx').
-    const SVGStyledElement *restore = cx()->baseVal()->context();
+    const SVGStyledElement *restore = cxBaseValue()->context();
 
-    cx()->baseVal()->setContext(context);
-    cy()->baseVal()->setContext(context);
-    r()->baseVal()->setContext(context);
+    cxBaseValue()->setContext(context);
+    cyBaseValue()->setContext(context);
+    rBaseValue()->setContext(context);
     
     SVGStyledElement::pushAttributeContext(context);
     return restore;
index dff37ac5f94d394c6ee38d7ef2bb076b9f0abf3e..3d20737de2e51cda78488fd0944b60484445cb47 100644 (file)
@@ -31,7 +31,7 @@
 
 namespace WebCore
 {
-    class SVGAnimatedLength;
+    class SVGLength;
     class SVGCircleElement : public SVGStyledTransformableElement,
                                  public SVGTests,
                                  public SVGLangSpace,
@@ -44,10 +44,6 @@ namespace WebCore
         virtual bool isValid() const { return SVGTests::isValid(); }
 
         // 'SVGCircleElement' functions
-        SVGAnimatedLength *cx() const;
-        SVGAnimatedLength *cy() const;
-        SVGAnimatedLength *r() const;
-
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
         virtual bool rendererIsNeeded(RenderStyle *style) { return StyledElement::rendererIsNeeded(style); }
@@ -55,10 +51,13 @@ namespace WebCore
 
         virtual const SVGStyledElement *pushAttributeContext(const SVGStyledElement *context);
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedLength> m_cx;
-        mutable RefPtr<SVGAnimatedLength> m_cy;
-        mutable RefPtr<SVGAnimatedLength> m_r;
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Cx, cx)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Cy, cy)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, R, r)
     };
 
 } // namespace WebCore
index f8e2769bf6d8264c0d320d8bfd7e52d6e9d91e84..d728158df9918f2f0103418a89708c650d075591 100644 (file)
@@ -27,7 +27,6 @@
 #include "Attr.h"
 #include "Document.h"
 #include "RenderView.h"
-#include "SVGAnimatedEnumeration.h"
 #include "SVGHelper.h"
 #include "SVGNames.h"
 #include "SVGMatrix.h"
 using namespace WebCore;
 
 SVGClipPathElement::SVGClipPathElement(const QualifiedName& tagName, Document *doc)
-: SVGStyledTransformableElement(tagName, doc), SVGTests(), SVGLangSpace(), SVGExternalResourcesRequired()
+    : SVGStyledTransformableElement(tagName, doc)
+    , SVGTests()
+    , SVGLangSpace()
+    , SVGExternalResourcesRequired()
+    , m_clipPathUnits(SVG_UNIT_TYPE_USERSPACEONUSE)
 {
     m_clipper = 0;
 }
@@ -49,16 +52,7 @@ SVGClipPathElement::~SVGClipPathElement()
     delete m_clipper;
 }
 
-SVGAnimatedEnumeration *SVGClipPathElement::clipPathUnits() const
-{
-    if(!m_clipPathUnits)
-    {
-        lazy_create<SVGAnimatedEnumeration>(m_clipPathUnits, this);
-        m_clipPathUnits->setBaseVal(SVG_UNIT_TYPE_USERSPACEONUSE);
-    }
-
-    return m_clipPathUnits.get();
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGClipPathElement, int, Enumeration, enumeration, ClipPathUnits, clipPathUnits, SVGNames::clipPathUnitsAttr.localName(), m_clipPathUnits)
 
 void SVGClipPathElement::parseMappedAttribute(MappedAttribute *attr)
 {
@@ -66,9 +60,9 @@ void SVGClipPathElement::parseMappedAttribute(MappedAttribute *attr)
     if (attr->name() == SVGNames::clipPathUnitsAttr)
     {
         if(value == "userSpaceOnUse")
-            clipPathUnits()->setBaseVal(SVG_UNIT_TYPE_USERSPACEONUSE);
+            setClipPathUnitsBaseValue(SVG_UNIT_TYPE_USERSPACEONUSE);
         else if(value == "objectBoundingBox")
-            clipPathUnits()->setBaseVal(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
+            setClipPathUnitsBaseValue(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
     }
    else
     {
@@ -88,7 +82,7 @@ KCanvasClipper *SVGClipPathElement::canvasResource()
     else
         m_clipper->resetClipData();
 
-    bool bbox = clipPathUnits()->baseVal() == SVG_UNIT_TYPE_OBJECTBOUNDINGBOX;
+    bool bbox = clipPathUnitsBaseValue() == SVG_UNIT_TYPE_OBJECTBOUNDINGBOX;
 
     RenderStyle *clipPathStyle = styleForRenderer(parent()->renderer()); // FIXME: Manual style resolution is a hack
     for (Node *n = firstChild(); n != 0; n = n->nextSibling()) {
index ba6f42a93f62c20d6ef806207e065cd470f88967..ffa74e8997bfa76e87511c6e2fbcdb061514c32e 100644 (file)
@@ -33,7 +33,6 @@
 
 namespace WebCore
 {
-    class SVGAnimatedEnumeration;
     class SVGClipPathElement : public SVGStyledTransformableElement,
                                    public SVGTests,
                                    public SVGLangSpace,
@@ -48,12 +47,13 @@ namespace WebCore
         virtual KCanvasClipper *canvasResource();
 
         // 'SVGClipPathElement' functions
-        SVGAnimatedEnumeration *clipPathUnits() const;
-
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedEnumeration> m_clipPathUnits;
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, ClipPathUnits, clipPathUnits)
         KCanvasClipper *m_clipper;
     };
 
index 4f25d05e2c7f7942bb66fe58295bb195a9d72c8a..4280494e4a15ccebd73d8362c650c52c2c459c4a 100644 (file)
 #include "SVGHelper.h"
 #include "SVGRenderStyle.h"
 #include "SVGComponentTransferFunctionElement.h"
-#include "SVGAnimatedNumber.h"
-#include "SVGAnimatedEnumeration.h"
-#include "SVGAnimatedNumberList.h"
+#include "SVGNumberList.h"
 
 using namespace WebCore;
 
-SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement(const QualifiedName& tagName, Document *doc) : 
-SVGElement(tagName, doc)
+SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement(const QualifiedName& tagName, Document *doc)
+    : SVGElement(tagName, doc)
+    , m_type(0)
+    , m_tableValues(new SVGNumberList(0))
+    , m_slope(0.0)
+    , m_intercept(0.0)
+    , m_amplitude(0.0)
+    , m_exponent(0.0)
+    , m_offset(0.0)
 {
 }
 
@@ -46,47 +51,13 @@ SVGComponentTransferFunctionElement::~SVGComponentTransferFunctionElement()
 {
 }
 
-SVGAnimatedEnumeration *SVGComponentTransferFunctionElement::type() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedEnumeration>(m_type, dummy);
-}
-
-SVGAnimatedNumberList *SVGComponentTransferFunctionElement::tableValues() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumberList>(m_tableValues, dummy);
-}
-
-SVGAnimatedNumber *SVGComponentTransferFunctionElement::slope() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_slope, dummy);
-}
-
-SVGAnimatedNumber *SVGComponentTransferFunctionElement::intercept() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_intercept, dummy);
-}
-
-SVGAnimatedNumber *SVGComponentTransferFunctionElement::amplitude() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_amplitude, dummy);
-}
-
-SVGAnimatedNumber *SVGComponentTransferFunctionElement::exponent() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_exponent, dummy);
-}
-
-SVGAnimatedNumber *SVGComponentTransferFunctionElement::offset() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_offset, dummy);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGComponentTransferFunctionElement, int, Enumeration, enumeration, Type, type, SVGNames::typeAttr.localName(), m_type)
+ANIMATED_PROPERTY_DEFINITIONS(SVGComponentTransferFunctionElement, SVGNumberList*, NumberList, numberList, TableValues, tableValues, SVGNames::tableValuesAttr.localName(), m_tableValues.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGComponentTransferFunctionElement, double, Number, number, Slope, slope, SVGNames::slopeAttr.localName(), m_slope)
+ANIMATED_PROPERTY_DEFINITIONS(SVGComponentTransferFunctionElement, double, Number, number, Intercept, intercept, SVGNames::interceptAttr.localName(), m_intercept)
+ANIMATED_PROPERTY_DEFINITIONS(SVGComponentTransferFunctionElement, double, Number, number, Amplitude, amplitude, SVGNames::amplitudeAttr.localName(), m_amplitude)
+ANIMATED_PROPERTY_DEFINITIONS(SVGComponentTransferFunctionElement, double, Number, number, Exponent, exponent, SVGNames::exponentAttr.localName(), m_exponent)
+ANIMATED_PROPERTY_DEFINITIONS(SVGComponentTransferFunctionElement, double, Number, number, Offset, offset, SVGNames::offsetAttr.localName(), m_offset)
 
 void SVGComponentTransferFunctionElement::parseMappedAttribute(MappedAttribute *attr)
 {
@@ -94,28 +65,28 @@ void SVGComponentTransferFunctionElement::parseMappedAttribute(MappedAttribute *
     if (attr->name() == SVGNames::typeAttr)
     {
         if(value == "identity")
-            type()->setBaseVal(SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY);
+            setTypeBaseValue(SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY);
         else if(value == "table")
-            type()->setBaseVal(SVG_FECOMPONENTTRANSFER_TYPE_TABLE);
+            setTypeBaseValue(SVG_FECOMPONENTTRANSFER_TYPE_TABLE);
         else if(value == "discrete")
-            type()->setBaseVal(SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE);
+            setTypeBaseValue(SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE);
         else if(value == "linear")
-            type()->setBaseVal(SVG_FECOMPONENTTRANSFER_TYPE_LINEAR);
+            setTypeBaseValue(SVG_FECOMPONENTTRANSFER_TYPE_LINEAR);
         else if(value == "gamma")
-            type()->setBaseVal(SVG_FECOMPONENTTRANSFER_TYPE_GAMMA);
+            setTypeBaseValue(SVG_FECOMPONENTTRANSFER_TYPE_GAMMA);
     }
     else if (attr->name() == SVGNames::tableValuesAttr)
-        tableValues()->baseVal()->parse(value.deprecatedString());
+        tableValuesBaseValue()->parse(value.deprecatedString());
     else if (attr->name() == SVGNames::slopeAttr)
-        slope()->setBaseVal(value.deprecatedString().toDouble());
+        setSlopeBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::interceptAttr)
-        intercept()->setBaseVal(value.deprecatedString().toDouble());
+        setInterceptBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::amplitudeAttr)
-        amplitude()->setBaseVal(value.deprecatedString().toDouble());
+        setAmplitudeBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::exponentAttr)
-        exponent()->setBaseVal(value.deprecatedString().toDouble());
+        setExponentBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::offsetAttr)
-        offset()->setBaseVal(value.deprecatedString().toDouble());
+        setOffsetBaseValue(value.deprecatedString().toDouble());
     else
         SVGElement::parseMappedAttribute(attr);
 }
@@ -123,13 +94,13 @@ void SVGComponentTransferFunctionElement::parseMappedAttribute(MappedAttribute *
 KCComponentTransferFunction SVGComponentTransferFunctionElement::transferFunction() const
 {
     KCComponentTransferFunction func;
-    func.type = (KCComponentTransferType)(type()->baseVal() - 1);
-    func.slope = slope()->baseVal();
-    func.intercept = intercept()->baseVal();
-    func.amplitude = amplitude()->baseVal();
-    func.exponent = exponent()->baseVal();
-    func.offset = offset()->baseVal();
-    SVGNumberList *numbers = tableValues()->baseVal();
+    func.type = (KCComponentTransferType)(typeBaseValue() - 1);
+    func.slope = slopeBaseValue();
+    func.intercept = interceptBaseValue();
+    func.amplitude = amplitudeBaseValue();
+    func.exponent = exponentBaseValue();
+    func.offset = offsetBaseValue();
+    SVGNumberList *numbers = tableValuesBaseValue();
     unsigned int nr = numbers->numberOfItems();
     for (unsigned int i = 0; i < nr; i++)
         func.tableValues.append(numbers->getItem(i)->value());
index fe754ce091d478a10e12b0ac021d152f4d337ef9..5a2de0675f5c1f7df667fd9c6116063a56f2e57c 100644 (file)
@@ -29,9 +29,7 @@
 
 namespace WebCore
 {
-    class SVGAnimatedNumber;
-    class SVGAnimatedNumberList;
-    class SVGAnimatedEnumeration;
+    class SVGNumberList;
 
     class SVGComponentTransferFunctionElement : public SVGElement
     {
@@ -40,27 +38,19 @@ namespace WebCore
         virtual ~SVGComponentTransferFunctionElement();
 
         // 'SVGComponentTransferFunctionElement' functions
-        SVGAnimatedEnumeration *type() const;
-        SVGAnimatedNumberList *tableValues() const;
-        SVGAnimatedNumber *slope() const;
-        SVGAnimatedNumber *intercept() const;
-        SVGAnimatedNumber *amplitude() const;
-        SVGAnimatedNumber *exponent() const;
-        SVGAnimatedNumber *offset() const;
-
         // Derived from: 'Element'
         virtual void parseMappedAttribute(MappedAttribute *attr);
         
         KCComponentTransferFunction transferFunction() const;
 
     private:
-        mutable RefPtr<SVGAnimatedEnumeration> m_type;
-        mutable RefPtr<SVGAnimatedNumberList> m_tableValues;
-        mutable RefPtr<SVGAnimatedNumber> m_slope;
-        mutable RefPtr<SVGAnimatedNumber> m_intercept;
-        mutable RefPtr<SVGAnimatedNumber> m_amplitude;
-        mutable RefPtr<SVGAnimatedNumber> m_exponent;
-        mutable RefPtr<SVGAnimatedNumber> m_offset;
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, Type, type)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGNumberList*, RefPtr<SVGNumberList>, TableValues, tableValues)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, Slope, slope)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, Intercept, intercept)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, Amplitude, amplitude)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, Exponent, exponent)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, Offset, offset)
     };
 
 } // namespace WebCore
index 4dc685f1b793eafabad727cff334831ddbb8f801..35c8e7534ddd4701294c13ccebe7ced29c93f5c2 100644 (file)
 #include "DocLoader.h"
 #include "SVGNames.h"
 #include "SVGHelper.h"
-#include "SVGAnimatedLength.h"
-#include "SVGAnimatedString.h"
+#include "SVGLength.h"
 
 using namespace WebCore;
 
 SVGCursorElement::SVGCursorElement(const QualifiedName& tagName, Document *doc)
-: SVGElement(tagName, doc), SVGTests(), SVGExternalResourcesRequired(), SVGURIReference(), CachedResourceClient()
+    : SVGElement(tagName, doc)
+    , SVGTests()
+    , SVGExternalResourcesRequired()
+    , SVGURIReference()
+    , CachedResourceClient()
+    , m_x(new SVGLength(0, LM_WIDTH, viewportElement()))
+    , m_y(new SVGLength(0, LM_HEIGHT, viewportElement()))
 {
     m_cachedImage = 0;
 }
@@ -47,23 +52,16 @@ SVGCursorElement::~SVGCursorElement()
         m_cachedImage->deref(this);
 }
 
-SVGAnimatedLength *SVGCursorElement::x() const
-{
-    return lazy_create<SVGAnimatedLength>(m_x, static_cast<const SVGStyledElement *>(0) /* correct? */, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength *SVGCursorElement::y() const
-{
-    return lazy_create<SVGAnimatedLength>(m_y, static_cast<const SVGStyledElement *>(0) /* correct? */, LM_HEIGHT, viewportElement());
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGCursorElement, SVGLength*, Length, length, X, x, SVGNames::xAttr.localName(), m_x.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGCursorElement, SVGLength*, Length, length, Y, y, SVGNames::yAttr.localName(), m_y.get())
 
 void SVGCursorElement::parseMappedAttribute(MappedAttribute *attr)
 {
      const AtomicString& value = attr->value();
     if (attr->name() == SVGNames::xAttr)
-        x()->baseVal()->setValueAsString(value.impl());
+        xBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::yAttr)
-        y()->baseVal()->setValueAsString(value.impl());
+        yBaseValue()->setValueAsString(value.impl());
     else
     {
         if(SVGTests::parseMappedAttribute(attr)) return;
@@ -71,7 +69,7 @@ void SVGCursorElement::parseMappedAttribute(MappedAttribute *attr)
         if (SVGURIReference::parseMappedAttribute(attr)) {
             if (m_cachedImage)
                 m_cachedImage->deref(this);
-            m_cachedImage = ownerDocument()->docLoader()->requestImage(href()->baseVal());
+            m_cachedImage = ownerDocument()->docLoader()->requestImage(hrefBaseValue());
             if (m_cachedImage)
                 m_cachedImage->ref(this);
             return;
index 3a0deca6e4f89888e94fc404e800d120d85aecf3..eaba41c47eb0de27b4aa54b90afcebba9cb61496 100644 (file)
@@ -34,7 +34,7 @@
 
 namespace WebCore
 {
-    class SVGAnimatedLength;
+    class SVGLength;
 
     class SVGCursorElement : public SVGElement,
                                  public SVGTests,
@@ -49,16 +49,16 @@ namespace WebCore
         virtual bool isValid() const { return SVGTests::isValid(); }
 
         // 'SVGCursorElement' functions
-        SVGAnimatedLength *x() const;
-        SVGAnimatedLength *y() const;
-
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
         CachedImage* cachedImage() const { return m_cachedImage; }
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedLength> m_x;
-        mutable RefPtr<SVGAnimatedLength> m_y;
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, X, x)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Y, y)
         CachedImage *m_cachedImage;
     };
 
index 462d107f05a2e949f007cfa40e01a45ae6d8fcb5..f64955150c3f7c34a00bcd70b025fb429a3c844d 100644 (file)
@@ -44,6 +44,9 @@ namespace WebCore
         
         virtual bool rendererIsNeeded(RenderStyle*);
         virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
+    
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
     };
 
 } // namespace WebCore
index 209b11ddc686a700dda5b41450eec14df1b0b4db..40897ee625b6ef033d0ff3c58a5b4a0995b01058 100644 (file)
 
 #include "StyledElement.h"
 #include "SVGNames.h"
+#include "SVGDocumentExtensions.h"
+#include "Document.h"
+
+// FIXME: Templatify as much as possible here!
+#define ANIMATED_PROPERTY_DECLARATIONS(BareType, StorageType, UpperProperty, LowerProperty) \
+public: \
+    BareType LowerProperty() const; \
+    void set##UpperProperty(BareType newValue); \
+    BareType LowerProperty##BaseValue() const; \
+    void set##UpperProperty##BaseValue(BareType newValue); \
+private: \
+    StorageType m_##LowerProperty;
+
+#define ANIMATED_PROPERTY_DEFINITIONS_INTERNAL(ClassName, BareType, UpperClassName, LowerClassName, UpperProperty, LowerProperty, AttrName, StorageGetter, ContextElement) \
+BareType ClassName::LowerProperty() const \
+{ \
+    return StorageGetter; \
+} \
+void ClassName::set##UpperProperty(BareType newValue) \
+{ \
+    m_##LowerProperty = newValue; \
+} \
+BareType ClassName::LowerProperty##BaseValue() const \
+{ \
+    const SVGElement* context = ContextElement; \
+    ASSERT(context != 0); \
+    SVGDocumentExtensions* extensions = (context->document() ? context->document()->accessSVGExtensions() : 0); \
+    if (extensions && extensions->hasBaseValue<BareType>(context, AttrName)) \
+         return extensions->baseValue<BareType>(context, AttrName); \
+    return LowerProperty(); \
+} \
+void ClassName::set##UpperProperty##BaseValue(BareType newValue) \
+{ \
+    const SVGElement* context = ContextElement; \
+    ASSERT(context != 0); \
+    SVGDocumentExtensions* extensions = (context->document() ? context->document()->accessSVGExtensions() : 0); \
+    if (extensions && extensions->hasBaseValue<BareType>(context, AttrName)) \
+        extensions->setBaseValue<BareType>(context, AttrName, newValue); \
+    set##UpperProperty(newValue); \
+}
+
+#define ANIMATED_PROPERTY_DEFINITIONS_WITH_CONTEXT(ClassName, BareType, UpperClassName, LowerClassName, UpperProperty, LowerProperty, AttrName, StorageGetter) \
+ANIMATED_PROPERTY_DEFINITIONS_INTERNAL(ClassName, BareType, UpperClassName, LowerClassName, UpperProperty, LowerProperty, AttrName, StorageGetter, contextElement())
+
+#define ANIMATED_PROPERTY_DEFINITIONS(ClassName, BareType, UpperClassName, LowerClassName, UpperProperty, LowerProperty, AttrName, StorageGetter) \
+ANIMATED_PROPERTY_DEFINITIONS_INTERNAL(ClassName, BareType, UpperClassName, LowerClassName, UpperProperty, LowerProperty, AttrName, StorageGetter, this)
 
 namespace WebCore {
     class DocumentPtr;
index 21be1014071c529aea5f3bf2855e6f3ccde9fb7e..76beab9ede0d0b7c62565c858d3b44118e324b07 100644 (file)
 #include "SVGNames.h"
 #include "SVGHelper.h"
 #include "SVGEllipseElement.h"
-#include "SVGAnimatedLength.h"
+#include "SVGLength.h"
 
 namespace WebCore {
 
 SVGEllipseElement::SVGEllipseElement(const QualifiedName& tagName, Document *doc)
-: SVGStyledTransformableElement(tagName, doc), SVGTests(), SVGLangSpace(), SVGExternalResourcesRequired()
+    : SVGStyledTransformableElement(tagName, doc)
+    , SVGTests()
+    , SVGLangSpace()
+    , SVGExternalResourcesRequired()
+    , m_cx(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_cy(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_rx(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_ry(new SVGLength(this, LM_HEIGHT, viewportElement()))
 {
-}
+}    
 
 SVGEllipseElement::~SVGEllipseElement()
 {
 }
 
-SVGAnimatedLength *SVGEllipseElement::cx() const
-{
-    return lazy_create<SVGAnimatedLength>(m_cx, this, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength *SVGEllipseElement::cy() const
-{
-    return lazy_create<SVGAnimatedLength>(m_cy, this, LM_HEIGHT, viewportElement());
-}
-
-SVGAnimatedLength *SVGEllipseElement::rx() const
-{
-    return lazy_create<SVGAnimatedLength>(m_rx, this, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength *SVGEllipseElement::ry() const
-{
-    return lazy_create<SVGAnimatedLength>(m_ry, this, LM_HEIGHT, viewportElement());
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGEllipseElement, SVGLength*, Length, length, Cx, cx, SVGNames::cxAttr.localName(), m_cx.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGEllipseElement, SVGLength*, Length, length, Cy, cy, SVGNames::cyAttr.localName(), m_cy.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGEllipseElement, SVGLength*, Length, length, Rx, rx, SVGNames::rxAttr.localName(), m_rx.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGEllipseElement, SVGLength*, Length, length, Ry, ry, SVGNames::ryAttr.localName(), m_ry.get())
 
 void SVGEllipseElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const AtomicString& value = attr->value();
     if (attr->name() == SVGNames::cxAttr)
-        cx()->baseVal()->setValueAsString(value.impl());
+        cxBaseValue()->setValueAsString(value.impl());
     if (attr->name() == SVGNames::cyAttr)
-        cy()->baseVal()->setValueAsString(value.impl());
+        cyBaseValue()->setValueAsString(value.impl());
     if (attr->name() == SVGNames::rxAttr)
-        rx()->baseVal()->setValueAsString(value.impl());
+        rxBaseValue()->setValueAsString(value.impl());
     if (attr->name() == SVGNames::ryAttr)
-        ry()->baseVal()->setValueAsString(value.impl());
+        ryBaseValue()->setValueAsString(value.impl());
     else
     {
         if(SVGTests::parseMappedAttribute(attr)) return;
@@ -84,8 +76,8 @@ void SVGEllipseElement::parseMappedAttribute(MappedAttribute *attr)
 
 Path SVGEllipseElement::toPathData() const
 {
-    float _cx = cx()->baseVal()->value(), _cy = cy()->baseVal()->value();
-    float _rx = rx()->baseVal()->value(), _ry = ry()->baseVal()->value();
+    float _cx = cxBaseValue()->value(), _cy = cyBaseValue()->value();
+    float _rx = rxBaseValue()->value(), _ry = ryBaseValue()->value();
 
     return Path::createEllipse(FloatPoint(_cx, _cy), _rx, _ry);
 }
@@ -93,12 +85,12 @@ Path SVGEllipseElement::toPathData() const
 const SVGStyledElement *SVGEllipseElement::pushAttributeContext(const SVGStyledElement *context)
 {
     // All attribute's contexts are equal (so just take the one from 'cx').
-    const SVGStyledElement *restore = cx()->baseVal()->context();
+    const SVGStyledElement *restore = cxBaseValue()->context();
 
-    cx()->baseVal()->setContext(context);
-    cy()->baseVal()->setContext(context);
-    rx()->baseVal()->setContext(context);
-    ry()->baseVal()->setContext(context);
+    cxBaseValue()->setContext(context);
+    cyBaseValue()->setContext(context);
+    rxBaseValue()->setContext(context);
+    ryBaseValue()->setContext(context);
 
     SVGStyledElement::pushAttributeContext(context);
     return restore;
index 505cbe7044a84d2d2f632048cfa46c68e0d6a345..df5b4d64c67aa0c2e35e40c941f5e24e165a506d 100644 (file)
@@ -31,7 +31,7 @@
 
 namespace WebCore
 {
-    class SVGAnimatedLength;
+    class SVGLength;
     class SVGEllipseElement : public SVGStyledTransformableElement,
                                   public SVGTests,
                                   public SVGLangSpace,
@@ -44,11 +44,6 @@ namespace WebCore
         virtual bool isValid() const { return SVGTests::isValid(); }
 
         // 'SVGEllipseElement' functions
-        SVGAnimatedLength *cx() const;
-        SVGAnimatedLength *cy() const;
-        SVGAnimatedLength *rx() const;
-        SVGAnimatedLength *ry() const;
-
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
         virtual bool rendererIsNeeded(RenderStyle *style) { return StyledElement::rendererIsNeeded(style); }
@@ -56,11 +51,14 @@ namespace WebCore
 
         virtual const SVGStyledElement *pushAttributeContext(const SVGStyledElement *context);
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedLength> m_cx;
-        mutable RefPtr<SVGAnimatedLength> m_cy;
-        mutable RefPtr<SVGAnimatedLength> m_rx;
-        mutable RefPtr<SVGAnimatedLength> m_ry;
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Cx, cx)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Cy, cy)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Rx, rx)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Ry, ry)
     };
 
 } // namespace WebCore
index e77964013c6960fd13500b8c9110931ee5314a94..996155bcc7d87fa2d7d5b6ee11dcf79a81e6568c 100644 (file)
 #include "SVGNames.h"
 #include "SVGHelper.h"
 #include "SVGElement.h"
-#include "SVGAnimatedBoolean.h"
 
 namespace WebCore {
 
 SVGExternalResourcesRequired::SVGExternalResourcesRequired()
+    : m_externalResourcesRequired(false)
 {
 }
 
@@ -40,16 +40,13 @@ SVGExternalResourcesRequired::~SVGExternalResourcesRequired()
 {
 }
 
-SVGAnimatedBoolean *SVGExternalResourcesRequired::externalResourcesRequired() const
-{
-    return lazy_create<SVGAnimatedBoolean>(m_external, static_cast<const SVGStyledElement *>(0));
-}
+ANIMATED_PROPERTY_DEFINITIONS_WITH_CONTEXT(SVGExternalResourcesRequired, bool, Boolean, boolean, ExternalResourcesRequired, externalResourcesRequired, SVGNames::externalResourcesRequiredAttr.localName(), m_externalResourcesRequired)
 
 bool SVGExternalResourcesRequired::parseMappedAttribute(MappedAttribute* attr)
 {
     const AtomicString& value = attr->value();
     if (attr->name() == SVGNames::externalResourcesRequiredAttr) {
-        externalResourcesRequired()->setBaseVal(value == "true");
+        setExternalResourcesRequiredBaseValue(value == "true");
         return true;
     }
 
index dd6d99f7f45689daf236a1f3f85c5a859b0b2669..e5fe88bd07c16352a848b0b47e7aa084adbe2cb5 100644 (file)
 #ifdef SVG_SUPPORT
 
 #include <wtf/RefPtr.h>
+#include "SVGElement.h"
 
 namespace WebCore {
     class MappedAttribute;
-    class SVGAnimatedBoolean;
 
     // FIXME: This is wrong for several reasons:
     // 1. externalResourcesRequired is not animateable according to SVG 1.1 section 5.9
@@ -46,12 +46,13 @@ namespace WebCore {
         virtual ~SVGExternalResourcesRequired();
 
         // 'SVGExternalResourcesRequired' functions
-        SVGAnimatedBoolean *externalResourcesRequired() const;
-
         bool parseMappedAttribute(MappedAttribute*);
 
+    protected:
+        virtual const SVGElement* contextElement() const = 0;
+
     private:
-        mutable RefPtr<SVGAnimatedBoolean> m_external;
+        ANIMATED_PROPERTY_DECLARATIONS(bool, bool, ExternalResourcesRequired, externalResourcesRequired)
     };
 
 } // namespace WebCore
index 19161775d24b44f4626b3abb20793053834d2035..7cd4cd586cbea8b1618e3a84ef077532ceabd0f1 100644 (file)
 #include "SVGHelper.h"
 #include "SVGRenderStyle.h"
 #include "SVGFEBlendElement.h"
-#include "SVGAnimatedEnumeration.h"
-#include "SVGAnimatedString.h"
 
 using namespace WebCore;
 
-SVGFEBlendElement::SVGFEBlendElement(const QualifiedName& tagName, Document *doc) : 
-SVGFilterPrimitiveStandardAttributes(tagName, doc)
+SVGFEBlendElement::SVGFEBlendElement(const QualifiedName& tagName, Document *doc)
+    : SVGFilterPrimitiveStandardAttributes(tagName, doc)
+    , m_mode(0)
 {
     m_filterEffect = 0;
 }
@@ -49,23 +48,9 @@ SVGFEBlendElement::~SVGFEBlendElement()
     delete m_filterEffect;
 }
 
-SVGAnimatedString *SVGFEBlendElement::in1() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedString>(m_in1, dummy);
-}
-
-SVGAnimatedString *SVGFEBlendElement::in2() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedString>(m_in2, dummy);
-}
-
-SVGAnimatedEnumeration *SVGFEBlendElement::mode() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedEnumeration>(m_mode, dummy);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEBlendElement, String, String, string, In, in, SVGNames::inAttr.localName(), m_in)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEBlendElement, String, String, string, In2, in2, SVGNames::in2Attr.localName(), m_in2)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEBlendElement, int, Enumeration, enumeration, Mode, mode, SVGNames::modeAttr.localName(), m_mode)
 
 void SVGFEBlendElement::parseMappedAttribute(MappedAttribute *attr)
 {
@@ -73,20 +58,20 @@ void SVGFEBlendElement::parseMappedAttribute(MappedAttribute *attr)
     if (attr->name() == SVGNames::modeAttr)
     {
         if(value == "normal")
-            mode()->setBaseVal(SVG_FEBLEND_MODE_NORMAL);
+            setModeBaseValue(SVG_FEBLEND_MODE_NORMAL);
         else if(value == "multiply")
-            mode()->setBaseVal(SVG_FEBLEND_MODE_MULTIPLY);
+            setModeBaseValue(SVG_FEBLEND_MODE_MULTIPLY);
         else if(value == "screen")
-            mode()->setBaseVal(SVG_FEBLEND_MODE_SCREEN);
+            setModeBaseValue(SVG_FEBLEND_MODE_SCREEN);
         else if(value == "darken")
-            mode()->setBaseVal(SVG_FEBLEND_MODE_DARKEN);
+            setModeBaseValue(SVG_FEBLEND_MODE_DARKEN);
         else if(value == "lighten")
-            mode()->setBaseVal(SVG_FEBLEND_MODE_LIGHTEN);
+            setModeBaseValue(SVG_FEBLEND_MODE_LIGHTEN);
     }
     else if (attr->name() == SVGNames::inAttr)
-        in1()->setBaseVal(value.impl());
+        setInBaseValue(value.impl());
     else if (attr->name() == SVGNames::in2Attr)
-        in2()->setBaseVal(value.impl());
+        setIn2BaseValue(value.impl());
     else
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
@@ -97,9 +82,9 @@ KCanvasFEBlend *SVGFEBlendElement::filterEffect() const
         m_filterEffect = static_cast<KCanvasFEBlend *>(renderingDevice()->createFilterEffect(FE_BLEND));
     if (!m_filterEffect)
         return 0;
-    m_filterEffect->setBlendMode((KCBlendModeType)(mode()->baseVal()-1));
-    m_filterEffect->setIn(String(in1()->baseVal()).deprecatedString());
-    m_filterEffect->setIn2(String(in2()->baseVal()).deprecatedString());
+    m_filterEffect->setBlendMode((KCBlendModeType)(modeBaseValue()-1));
+    m_filterEffect->setIn(String(inBaseValue()).deprecatedString());
+    m_filterEffect->setIn2(String(in2BaseValue()).deprecatedString());
     setStandardAttributes(m_filterEffect);
     return m_filterEffect;
 }
index a5de8a81bc4766362663d49b7c1d5f42fcf689bc..fc5457f33ace059a31f7b7b8b8c2486701b1c4b2 100644 (file)
@@ -29,8 +29,6 @@
 
 namespace WebCore
 {
-    class SVGAnimatedString;
-    class SVGAnimatedEnumeration;
 
     class SVGFEBlendElement : public SVGFilterPrimitiveStandardAttributes
     {
@@ -39,19 +37,18 @@ namespace WebCore
         virtual ~SVGFEBlendElement();
 
         // 'SVGFEBlendElement' functions
-        SVGAnimatedString *in1() const;
-        SVGAnimatedString *in2() const;
-        SVGAnimatedEnumeration *mode() const;
-
         // Derived from: 'Element'
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
         virtual KCanvasFEBlend *filterEffect() const;
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedString> m_in1;
-        mutable RefPtr<SVGAnimatedString> m_in2;
-        mutable RefPtr<SVGAnimatedEnumeration> m_mode;
+        ANIMATED_PROPERTY_DECLARATIONS(String, String, In, in)
+        ANIMATED_PROPERTY_DECLARATIONS(String, String, In2, in2)
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, Mode, mode)
         mutable KCanvasFEBlend *m_filterEffect;
     };
 
index 6aa5d1744bf497cf55da4f32ea21249f23ba9dab..ab9cdac44490506ec7fa0ff085bf5098e3e88dae 100644 (file)
 #include "SVGHelper.h"
 #include "SVGRenderStyle.h"
 #include "SVGFEColorMatrixElement.h"
-#include "SVGAnimatedString.h"
-#include "SVGAnimatedEnumeration.h"
-#include "SVGAnimatedNumberList.h"
+#include "SVGNumberList.h"
 
 using namespace WebCore;
 
-SVGFEColorMatrixElement::SVGFEColorMatrixElement(const QualifiedName& tagName, Document *doc) : 
-SVGFilterPrimitiveStandardAttributes(tagName, doc)
+SVGFEColorMatrixElement::SVGFEColorMatrixElement(const QualifiedName& tagName, Document *doc)
+    : SVGFilterPrimitiveStandardAttributes(tagName, doc)
+    , m_type(0)
+    , m_values(new SVGNumberList(0))
 {
     m_filterEffect = 0;
 }
@@ -53,23 +53,9 @@ SVGFEColorMatrixElement::~SVGFEColorMatrixElement()
     delete m_filterEffect;
 }
 
-SVGAnimatedString *SVGFEColorMatrixElement::in1() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedString>(m_in1, dummy);
-}
-
-SVGAnimatedEnumeration *SVGFEColorMatrixElement::type() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedEnumeration>(m_type, dummy);
-}
-
-SVGAnimatedNumberList *SVGFEColorMatrixElement::values() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumberList>(m_values, dummy);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEColorMatrixElement, String, String, string, In, in, SVGNames::inAttr.localName(), m_in)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEColorMatrixElement, int, Enumeration, enumeration, Type, type, SVGNames::typeAttr.localName(), m_type)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEColorMatrixElement, SVGNumberList*, NumberList, numberList, Values, values, SVGNames::valuesAttr.localName(), m_values.get())
 
 void SVGFEColorMatrixElement::parseMappedAttribute(MappedAttribute *attr)
 {
@@ -77,18 +63,18 @@ void SVGFEColorMatrixElement::parseMappedAttribute(MappedAttribute *attr)
     if (attr->name() == SVGNames::typeAttr)
     {
         if(value == "matrix")
-            type()->setBaseVal(SVG_FECOLORMATRIX_TYPE_MATRIX);
+            setTypeBaseValue(SVG_FECOLORMATRIX_TYPE_MATRIX);
         else if(value == "saturate")
-            type()->setBaseVal(SVG_FECOLORMATRIX_TYPE_SATURATE);
+            setTypeBaseValue(SVG_FECOLORMATRIX_TYPE_SATURATE);
         else if(value == "hueRotate")
-            type()->setBaseVal(SVG_FECOLORMATRIX_TYPE_HUEROTATE);
+            setTypeBaseValue(SVG_FECOLORMATRIX_TYPE_HUEROTATE);
         else if(value == "luminanceToAlpha")
-            type()->setBaseVal(SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA);
+            setTypeBaseValue(SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA);
     }
     else if (attr->name() == SVGNames::inAttr)
-        in1()->setBaseVal(value.impl());
+        setInBaseValue(value.impl());
     else if (attr->name() == SVGNames::valuesAttr)
-        values()->baseVal()->parse(value.deprecatedString(), this);
+        valuesBaseValue()->parse(value.deprecatedString(), this);
     else
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
@@ -100,15 +86,15 @@ KCanvasFEColorMatrix *SVGFEColorMatrixElement::filterEffect() const
     if (!m_filterEffect)
         return 0;
         
-    m_filterEffect->setIn(String(in1()->baseVal()).deprecatedString());
+    m_filterEffect->setIn(String(inBaseValue()).deprecatedString());
     setStandardAttributes(m_filterEffect);
     DeprecatedValueList<float> _values;
-    SVGNumberList *numbers = values()->baseVal();
+    SVGNumberList *numbers = valuesBaseValue();
     unsigned int nr = numbers->numberOfItems();
     for(unsigned int i = 0;i < nr;i++)
         _values.append(numbers->getItem(i)->value());
     m_filterEffect->setValues(_values);
-    m_filterEffect->setType((KCColorMatrixType)(type()->baseVal() - 1));
+    m_filterEffect->setType((KCColorMatrixType)(typeBaseValue() - 1));
     
     return m_filterEffect;
 }
index 842674d1d10ed0e2f93a146cf0797d25a31907f5..b486fdd47802e8436aae82aa3500a75a1f8e391e 100644 (file)
@@ -29,9 +29,7 @@
 
 namespace WebCore
 {
-    class SVGAnimatedString;
-    class SVGAnimatedNumberList;
-    class SVGAnimatedEnumeration;
+    class SVGNumberList;
 
     class SVGFEColorMatrixElement : public SVGFilterPrimitiveStandardAttributes
     {
@@ -40,19 +38,18 @@ namespace WebCore
         virtual ~SVGFEColorMatrixElement();
 
         // 'SVGFEColorMatrixElement' functions
-        SVGAnimatedString *in1() const;
-        SVGAnimatedEnumeration *type() const;
-        SVGAnimatedNumberList *values() const;
-
         // Derived from: 'Element'
         virtual void parseMappedAttribute(MappedAttribute *attr);
         
         virtual KCanvasFEColorMatrix *filterEffect() const;
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedString> m_in1;
-        mutable RefPtr<SVGAnimatedEnumeration> m_type;
-        mutable RefPtr<SVGAnimatedNumberList> m_values;
+        ANIMATED_PROPERTY_DECLARATIONS(String, String, In, in)
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, Type, type)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGNumberList*, RefPtr<SVGNumberList>, Values, values)
         mutable KCanvasFEColorMatrix *m_filterEffect;
     };
 
index 0160fb4f95acaf916d9f87440619aeb30498c343..7462b790b1ec8782da81e3e51a156024859f7bc9 100644 (file)
 #include "SVGFEFuncGElement.h"
 #include "SVGFEFuncBElement.h"
 #include "SVGFEFuncAElement.h"
-#include "SVGAnimatedString.h"
-#include "SVGAnimatedNumber.h"
-#include "SVGAnimatedEnumeration.h"
 
 using namespace WebCore;
 
-SVGFEComponentTransferElement::SVGFEComponentTransferElement(const QualifiedName& tagName, Document *doc) : 
-SVGFilterPrimitiveStandardAttributes(tagName, doc)
+SVGFEComponentTransferElement::SVGFEComponentTransferElement(const QualifiedName& tagName, Document *doc)
+    : SVGFilterPrimitiveStandardAttributes(tagName, doc)
 {
     m_filterEffect = 0;
 }
@@ -55,17 +52,13 @@ SVGFEComponentTransferElement::~SVGFEComponentTransferElement()
     delete m_filterEffect;
 }
 
-SVGAnimatedString *SVGFEComponentTransferElement::in1() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedString>(m_in1, dummy);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEComponentTransferElement, String, String, string, In, in, SVGNames::inAttr.localName(), m_in)
 
 void SVGFEComponentTransferElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const String& value = attr->value();
     if (attr->name() == SVGNames::inAttr)
-        in1()->setBaseVal(value.impl());
+        setInBaseValue(value.impl());
     else
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
@@ -77,7 +70,7 @@ KCanvasFEComponentTransfer *SVGFEComponentTransferElement::filterEffect() const
     if (!m_filterEffect)
         return 0;
     
-    m_filterEffect->setIn(String(in1()->baseVal()).deprecatedString());
+    m_filterEffect->setIn(String(inBaseValue()).deprecatedString());
     setStandardAttributes(m_filterEffect);
     
     for (Node *n = firstChild(); n != 0; n = n->nextSibling()) {
index 2497787c36589a8a0081196372e53586481814bb..709e98f10168140d97d89e64fcec7865d70279fe 100644 (file)
@@ -29,7 +29,6 @@
 
 namespace WebCore
 {
-    class SVGAnimatedString;
 
     class SVGFEComponentTransferElement : public SVGFilterPrimitiveStandardAttributes
     {
@@ -38,15 +37,16 @@ namespace WebCore
         virtual ~SVGFEComponentTransferElement();
 
         // 'SVGFEComponentTransferElement' functions
-        SVGAnimatedString *in1() const;
-
         // Derived from: 'Element'
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
         virtual KCanvasFEComponentTransfer *filterEffect() const;
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedString> m_in1;
+        ANIMATED_PROPERTY_DECLARATIONS(String, String, In, in)
         mutable KCanvasFEComponentTransfer *m_filterEffect;
     };
 
index a11ba7c81235e4ee1a37398e6b5830bc888ecc20..c8a38ef242ef3296fc969c74b5ea06cd1080f46f 100644 (file)
 #include "SVGHelper.h"
 #include "SVGRenderStyle.h"
 #include "SVGFECompositeElement.h"
-#include "SVGAnimatedNumber.h"
-#include "SVGAnimatedEnumeration.h"
-#include "SVGAnimatedString.h"
 
 using namespace WebCore;
 
-SVGFECompositeElement::SVGFECompositeElement(const QualifiedName& tagName, Document *doc) : 
-SVGFilterPrimitiveStandardAttributes(tagName, doc)
+SVGFECompositeElement::SVGFECompositeElement(const QualifiedName& tagName, Document *doc)
+    : SVGFilterPrimitiveStandardAttributes(tagName, doc)
+    , m__operator(0)
+    , m_k1(0.0)
+    , m_k2(0.0)
+    , m_k3(0.0)
+    , m_k4(0.0)
 {
     m_filterEffect = 0;
 }
@@ -53,47 +55,13 @@ SVGFECompositeElement::~SVGFECompositeElement()
     delete m_filterEffect;
 }
 
-SVGAnimatedString *SVGFECompositeElement::in1() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedString>(m_in1, dummy);
-}
-
-SVGAnimatedString *SVGFECompositeElement::in2() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedString>(m_in2, dummy);
-}
-
-SVGAnimatedEnumeration *SVGFECompositeElement::_operator() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedEnumeration>(m_operator, dummy);
-}
-
-SVGAnimatedNumber *SVGFECompositeElement::k1() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_k1, dummy);
-}
-
-SVGAnimatedNumber *SVGFECompositeElement::k2() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_k2, dummy);
-}
-
-SVGAnimatedNumber *SVGFECompositeElement::k3() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_k3, dummy);
-}
-
-SVGAnimatedNumber *SVGFECompositeElement::k4() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_k4, dummy);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGFECompositeElement, String, String, string, In, in, SVGNames::inAttr.localName(), m_in)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFECompositeElement, String, String, string, In2, in2, SVGNames::in2Attr.localName(), m_in2)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFECompositeElement, int, Enumeration, enumeration, _operator, _operator, SVGNames::operatorAttr.localName(), m__operator)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFECompositeElement, double, Number, number, K1, k1, SVGNames::k1Attr.localName(), m_k1)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFECompositeElement, double, Number, number, K2, k2, SVGNames::k2Attr.localName(), m_k2)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFECompositeElement, double, Number, number, K3, k3, SVGNames::k3Attr.localName(), m_k3)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFECompositeElement, double, Number, number, K4, k4, SVGNames::k4Attr.localName(), m_k4)
 
 void SVGFECompositeElement::parseMappedAttribute(MappedAttribute *attr)
 {
@@ -101,30 +69,30 @@ void SVGFECompositeElement::parseMappedAttribute(MappedAttribute *attr)
     if (attr->name() == SVGNames::operatorAttr)
     {
         if(value == "over")
-            _operator()->setBaseVal(SVG_FECOMPOSITE_OPERATOR_OVER);
+            set_operatorBaseValue(SVG_FECOMPOSITE_OPERATOR_OVER);
         else if(value == "in")
-            _operator()->setBaseVal(SVG_FECOMPOSITE_OPERATOR_IN);
+            set_operatorBaseValue(SVG_FECOMPOSITE_OPERATOR_IN);
         else if(value == "out")
-            _operator()->setBaseVal(SVG_FECOMPOSITE_OPERATOR_OUT);
+            set_operatorBaseValue(SVG_FECOMPOSITE_OPERATOR_OUT);
         else if(value == "atop")
-            _operator()->setBaseVal(SVG_FECOMPOSITE_OPERATOR_ATOP);
+            set_operatorBaseValue(SVG_FECOMPOSITE_OPERATOR_ATOP);
         else if(value == "xor")
-            _operator()->setBaseVal(SVG_FECOMPOSITE_OPERATOR_XOR);
+            set_operatorBaseValue(SVG_FECOMPOSITE_OPERATOR_XOR);
         else if(value == "arithmetic")
-            _operator()->setBaseVal(SVG_FECOMPOSITE_OPERATOR_ARITHMETIC);
+            set_operatorBaseValue(SVG_FECOMPOSITE_OPERATOR_ARITHMETIC);
     }
     else if (attr->name() == SVGNames::inAttr)
-        in1()->setBaseVal(value.impl());
+        setInBaseValue(value.impl());
     else if (attr->name() == SVGNames::in2Attr)
-        in2()->setBaseVal(value.impl());
+        setIn2BaseValue(value.impl());
     else if (attr->name() == SVGNames::k1Attr)
-        k1()->setBaseVal(value.deprecatedString().toDouble());
+        setK1BaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::k2Attr)
-        k2()->setBaseVal(value.deprecatedString().toDouble());
+        setK2BaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::k3Attr)
-        k3()->setBaseVal(value.deprecatedString().toDouble());
+        setK3BaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::k4Attr)
-        k4()->setBaseVal(value.deprecatedString().toDouble());
+        setK4BaseValue(value.deprecatedString().toDouble());
     else
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
@@ -135,14 +103,14 @@ KCanvasFEComposite *SVGFECompositeElement::filterEffect() const
         m_filterEffect = static_cast<KCanvasFEComposite *>(renderingDevice()->createFilterEffect(FE_COMPOSITE));
     if (!m_filterEffect)
         return 0;
-    m_filterEffect->setOperation((KCCompositeOperationType)(_operator()->baseVal() - 1));
-    m_filterEffect->setIn(String(in1()->baseVal()).deprecatedString());
-    m_filterEffect->setIn2(String(in2()->baseVal()).deprecatedString());
+    m_filterEffect->setOperation((KCCompositeOperationType)(_operatorBaseValue() - 1));
+    m_filterEffect->setIn(String(inBaseValue()).deprecatedString());
+    m_filterEffect->setIn2(String(in2BaseValue()).deprecatedString());
     setStandardAttributes(m_filterEffect);
-    m_filterEffect->setK1(k1()->baseVal());
-    m_filterEffect->setK2(k2()->baseVal());
-    m_filterEffect->setK3(k3()->baseVal());
-    m_filterEffect->setK4(k4()->baseVal());
+    m_filterEffect->setK1(k1BaseValue());
+    m_filterEffect->setK2(k2BaseValue());
+    m_filterEffect->setK3(k3BaseValue());
+    m_filterEffect->setK4(k4BaseValue());
     return m_filterEffect;
 }
 
index 7b25ec08318cf9f8163822491222d7860cb3f1b5..e2bd9df1f908dabf76787ec868d7bd1f0b6fe527 100644 (file)
@@ -29,9 +29,6 @@
 
 namespace WebCore
 {
-    class SVGAnimatedString;
-    class SVGAnimatedNumber;
-    class SVGAnimatedEnumeration;
 
     class SVGFECompositeElement : public SVGFilterPrimitiveStandardAttributes
     {
@@ -40,27 +37,22 @@ namespace WebCore
         virtual ~SVGFECompositeElement();
 
         // 'SVGFECompositeElement' functions
-        SVGAnimatedString *in1() const;
-        SVGAnimatedString *in2() const;
-        SVGAnimatedEnumeration *_operator() const;
-        SVGAnimatedNumber *k1() const;
-        SVGAnimatedNumber *k2() const;
-        SVGAnimatedNumber *k3() const;
-        SVGAnimatedNumber *k4() const;
-
         // Derived from: 'Element'
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
         virtual KCanvasFEComposite *filterEffect() const;
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedString> m_in1;
-        mutable RefPtr<SVGAnimatedString> m_in2;
-        mutable RefPtr<SVGAnimatedEnumeration> m_operator;
-        mutable RefPtr<SVGAnimatedNumber> m_k1;
-        mutable RefPtr<SVGAnimatedNumber> m_k2;
-        mutable RefPtr<SVGAnimatedNumber> m_k3;
-        mutable RefPtr<SVGAnimatedNumber> m_k4;
+        ANIMATED_PROPERTY_DECLARATIONS(String, String, In, in)
+        ANIMATED_PROPERTY_DECLARATIONS(String, String, In2, in2)
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, _operator, _operator)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, K1, k1)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, K2, k2)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, K3, k3)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, K4, k4)
         mutable KCanvasFEComposite *m_filterEffect;
     };
 
index e56ff5a3135827cdc90f7c6f4285a0514d13ef6c..d059cf8b10ebfa58283852a835baa806c7887d33 100644 (file)
 #include "SVGNames.h"
 #include "SVGHelper.h"
 #include "SVGRenderStyle.h"
-#include "SVGAnimatedColor.h"
-#include "SVGAnimatedNumber.h"
-#include "SVGAnimatedString.h"
+#include "SVGColor.h"
 #include "SVGFELightElement.h"
 #include "SVGFEDiffuseLightingElement.h"
 
 namespace WebCore {
 
-SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement(const QualifiedName& tagName, Document *doc) : 
-SVGFilterPrimitiveStandardAttributes(tagName, doc)
+SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement(const QualifiedName& tagName, Document *doc)
+    : SVGFilterPrimitiveStandardAttributes(tagName, doc)
+    , m_diffuseConstant(0.0)
+    , m_surfaceScale(0.0)
+    , m_lightingColor(new SVGColor())
+    , m_kernelUnitLengthX(0.0)
+    , m_kernelUnitLengthY(0.0)
 {
     m_filterEffect = 0;
 }
@@ -49,60 +52,31 @@ SVGFEDiffuseLightingElement::~SVGFEDiffuseLightingElement()
     delete m_filterEffect;
 }
 
-SVGAnimatedString *SVGFEDiffuseLightingElement::in1() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedString>(m_in1, dummy);
-}
-
-SVGAnimatedNumber *SVGFEDiffuseLightingElement::diffuseConstant() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_diffuseConstant, dummy);
-}
-
-SVGAnimatedNumber *SVGFEDiffuseLightingElement::surfaceScale() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_surfaceScale, dummy);
-}
-
-SVGAnimatedNumber *SVGFEDiffuseLightingElement::kernelUnitLengthX() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_kernelUnitLengthX, dummy);
-}
-
-SVGAnimatedNumber *SVGFEDiffuseLightingElement::kernelUnitLengthY() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_kernelUnitLengthY, dummy);
-}
-
-SVGAnimatedColor *SVGFEDiffuseLightingElement::lightingColor() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedColor>(m_lightingColor, dummy);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEDiffuseLightingElement, String, String, string, In, in, SVGNames::inAttr.localName(), m_in)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEDiffuseLightingElement, double, Number, number, DiffuseConstant, diffuseConstant, SVGNames::diffuseConstantAttr.localName(), m_diffuseConstant)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEDiffuseLightingElement, double, Number, number, SurfaceScale, surfaceScale, SVGNames::surfaceScaleAttr.localName(), m_surfaceScale)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEDiffuseLightingElement, double, Number, number, KernelUnitLengthX, kernelUnitLengthX, "kernelUnitLengthX", m_kernelUnitLengthX)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEDiffuseLightingElement, double, Number, number, KernelUnitLengthY, kernelUnitLengthY, "kernelUnitLengthY", m_kernelUnitLengthY)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEDiffuseLightingElement, SVGColor*, Color, color, LightingColor, lightingColor, SVGNames::lighting_colorAttr.localName(), m_lightingColor.get())
 
 void SVGFEDiffuseLightingElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const String& value = attr->value();
     if (attr->name() == SVGNames::inAttr)
-        in1()->setBaseVal(value.impl());
+        setInBaseValue(value.impl());
     else if (attr->name() == SVGNames::surfaceScaleAttr)
-        surfaceScale()->setBaseVal(value.deprecatedString().toDouble());
+        setSurfaceScaleBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::diffuseConstantAttr)
-        diffuseConstant()->setBaseVal(value.toInt());
+        setDiffuseConstantBaseValue(value.toInt());
     else if (attr->name() == SVGNames::kernelUnitLengthAttr) {
         DeprecatedStringList numbers = DeprecatedStringList::split(' ', value.deprecatedString());
-        kernelUnitLengthX()->setBaseVal(numbers[0].toDouble());
+        setKernelUnitLengthXBaseValue(numbers[0].toDouble());
         if (numbers.count() == 1)
-            kernelUnitLengthY()->setBaseVal(numbers[0].toDouble());
+            setKernelUnitLengthYBaseValue(numbers[0].toDouble());
         else
-            kernelUnitLengthY()->setBaseVal(numbers[1].toDouble());
+            setKernelUnitLengthYBaseValue(numbers[1].toDouble());
     } else if (attr->name() == SVGNames::lighting_colorAttr)
-        lightingColor()->setBaseVal(new SVGColor(value.impl()));
+        setLightingColorBaseValue(new SVGColor(value.impl()));
     else
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
@@ -111,13 +85,13 @@ KCanvasFEDiffuseLighting *SVGFEDiffuseLightingElement::filterEffect() const
 {
     if (!m_filterEffect) 
         m_filterEffect = static_cast<KCanvasFEDiffuseLighting *>(renderingDevice()->createFilterEffect(FE_DIFFUSE_LIGHTING));
-    m_filterEffect->setIn(String(in1()->baseVal()).deprecatedString());
+    m_filterEffect->setIn(String(inBaseValue()).deprecatedString());
     setStandardAttributes(m_filterEffect);
-    m_filterEffect->setDiffuseConstant((diffuseConstant()->baseVal()));
-    m_filterEffect->setSurfaceScale((surfaceScale()->baseVal()));
-    m_filterEffect->setKernelUnitLengthX((kernelUnitLengthX()->baseVal()));
-    m_filterEffect->setKernelUnitLengthY((kernelUnitLengthY()->baseVal()));
-    m_filterEffect->setLightingColor(lightingColor()->baseVal()->color());
+    m_filterEffect->setDiffuseConstant((diffuseConstantBaseValue()));
+    m_filterEffect->setSurfaceScale((surfaceScaleBaseValue()));
+    m_filterEffect->setKernelUnitLengthX((kernelUnitLengthXBaseValue()));
+    m_filterEffect->setKernelUnitLengthY((kernelUnitLengthYBaseValue()));
+    m_filterEffect->setLightingColor(lightingColorBaseValue()->color());
     updateLights();
     return m_filterEffect;
 }
index c7acd9f3164aa9f6d41d468a136d79fda5984f60..babc818c2599e7ed5f921a861763337f2101fcfa 100644 (file)
@@ -27,9 +27,7 @@
 
 namespace WebCore {
     class KCanvasFEDiffuseLighting;
-    class SVGAnimatedNumber;
-    class SVGAnimatedString;
-    class SVGAnimatedColor;
+    class SVGColor;
     
     class SVGFEDiffuseLightingElement : public SVGFilterPrimitiveStandardAttributes
     {
@@ -38,25 +36,21 @@ namespace WebCore {
         virtual ~SVGFEDiffuseLightingElement();
 
         // 'SVGFEDiffuseLightingElement' functions
-        SVGAnimatedString *in1() const;
-        SVGAnimatedNumber *diffuseConstant() const;
-        SVGAnimatedNumber *surfaceScale() const;
-        SVGAnimatedNumber *kernelUnitLengthX() const;
-        SVGAnimatedNumber *kernelUnitLengthY() const;
-        SVGAnimatedColor  *lightingColor() const;
-
         // Derived from: 'Element'
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
         virtual KCanvasFEDiffuseLighting *filterEffect() const;
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedString> m_in1;
-        mutable RefPtr<SVGAnimatedNumber> m_diffuseConstant;
-        mutable RefPtr<SVGAnimatedNumber> m_surfaceScale;
-        mutable RefPtr<SVGAnimatedColor>  m_lightingColor;
-        mutable RefPtr<SVGAnimatedNumber> m_kernelUnitLengthX;
-        mutable RefPtr<SVGAnimatedNumber> m_kernelUnitLengthY;
+        ANIMATED_PROPERTY_DECLARATIONS(String, String, In, in)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, DiffuseConstant, diffuseConstant)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, SurfaceScale, surfaceScale)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGColor*, RefPtr<SVGColor>, LightingColor, lightingColor)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, KernelUnitLengthX, kernelUnitLengthX)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, KernelUnitLengthY, kernelUnitLengthY)
         //need other properties here...
         mutable KCanvasFEDiffuseLighting *m_filterEffect;
         
index 5ef762a444b6fa8016546253bb8afa0d8e1303e2..d93b9a49cd9db03ad2fc4811466a72d79d66119e 100644 (file)
 #include "SVGHelper.h"
 #include "SVGRenderStyle.h"
 #include "SVGFEDisplacementMapElement.h"
-#include "SVGAnimatedEnumeration.h"
-#include "SVGAnimatedString.h"
-#include "SVGAnimatedNumber.h"
 
 using namespace WebCore;
 
-SVGFEDisplacementMapElement::SVGFEDisplacementMapElement(const QualifiedName& tagName, Document* doc) : 
-SVGFilterPrimitiveStandardAttributes(tagName, doc)
+SVGFEDisplacementMapElement::SVGFEDisplacementMapElement(const QualifiedName& tagName, Document* doc)
+    : SVGFilterPrimitiveStandardAttributes(tagName, doc)
+    , m_xChannelSelector(0)
+    , m_yChannelSelector(0)
+    , m_scale(0.0)
 {
     m_filterEffect = 0;
 }
@@ -48,35 +48,11 @@ SVGFEDisplacementMapElement::~SVGFEDisplacementMapElement()
     delete m_filterEffect;
 }
 
-SVGAnimatedString* SVGFEDisplacementMapElement::in1() const
-{
-    SVGStyledElement* dummy = 0;
-    return lazy_create<SVGAnimatedString>(m_in1, dummy);
-}
-
-SVGAnimatedString* SVGFEDisplacementMapElement::in2() const
-{
-    SVGStyledElement* dummy = 0;
-    return lazy_create<SVGAnimatedString>(m_in2, dummy);
-}
-
-SVGAnimatedEnumeration* SVGFEDisplacementMapElement::xChannelSelector() const
-{
-    SVGStyledElement* dummy = 0;
-    return lazy_create<SVGAnimatedEnumeration>(m_xChannelSelector, dummy);
-}
-
-SVGAnimatedEnumeration* SVGFEDisplacementMapElement::yChannelSelector() const
-{
-    SVGStyledElement* dummy = 0;
-    return lazy_create<SVGAnimatedEnumeration>(m_yChannelSelector, dummy);
-}
-
-SVGAnimatedNumber* SVGFEDisplacementMapElement::scale() const
-{
-    SVGStyledElement* dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_scale, dummy);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEDisplacementMapElement, String, String, string, In, in, SVGNames::inAttr.localName(), m_in)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEDisplacementMapElement, String, String, string, In2, in2, SVGNames::in2Attr.localName(), m_in2)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEDisplacementMapElement, int, Enumeration, enumeration, XChannelSelector, xChannelSelector, SVGNames::xChannelSelectorAttr.localName(), m_xChannelSelector)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEDisplacementMapElement, int, Enumeration, enumeration, YChannelSelector, yChannelSelector, SVGNames::yChannelSelectorAttr.localName(), m_yChannelSelector)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEDisplacementMapElement, double, Number, number, Scale, scale, SVGNames::scaleAttr.localName(), m_scale)
 
 KCChannelSelectorType SVGFEDisplacementMapElement::stringToChannel(const String& key)
 {
@@ -96,15 +72,15 @@ void SVGFEDisplacementMapElement::parseMappedAttribute(MappedAttribute* attr)
 {
     const String& value = attr->value();
     if (attr->name() == SVGNames::xChannelSelectorAttr)
-        xChannelSelector()->setBaseVal(stringToChannel(value));
+        setXChannelSelectorBaseValue(stringToChannel(value));
     else if (attr->name() == SVGNames::yChannelSelectorAttr)
-        yChannelSelector()->setBaseVal(stringToChannel(value));
+        setYChannelSelectorBaseValue(stringToChannel(value));
     else if (attr->name() == SVGNames::inAttr)
-        in1()->setBaseVal(value.impl());
+        setInBaseValue(value.impl());
     else if (attr->name() == SVGNames::in2Attr)
-        in2()->setBaseVal(value.impl());
+        setIn2BaseValue(value.impl());
     else if (attr->name() == SVGNames::scaleAttr)
-        scale()->setBaseVal(value.deprecatedString().toDouble());
+        setScaleBaseValue(value.deprecatedString().toDouble());
     else
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
@@ -115,11 +91,11 @@ KCanvasFEDisplacementMap* SVGFEDisplacementMapElement::filterEffect() const
         m_filterEffect = static_cast<KCanvasFEDisplacementMap *>(renderingDevice()->createFilterEffect(FE_DISPLACEMENT_MAP));
     if (!m_filterEffect)
         return 0;
-    m_filterEffect->setXChannelSelector((KCChannelSelectorType)(xChannelSelector()->baseVal()));
-    m_filterEffect->setYChannelSelector((KCChannelSelectorType)(yChannelSelector()->baseVal()));
-    m_filterEffect->setIn(String(in1()->baseVal()).deprecatedString());
-    m_filterEffect->setIn2(String(in2()->baseVal()).deprecatedString());
-    m_filterEffect->setScale(scale()->baseVal());
+    m_filterEffect->setXChannelSelector((KCChannelSelectorType)(xChannelSelectorBaseValue()));
+    m_filterEffect->setYChannelSelector((KCChannelSelectorType)(yChannelSelectorBaseValue()));
+    m_filterEffect->setIn(String(inBaseValue()).deprecatedString());
+    m_filterEffect->setIn2(String(in2BaseValue()).deprecatedString());
+    m_filterEffect->setScale(scaleBaseValue());
     setStandardAttributes(m_filterEffect);
     return m_filterEffect;
 }
index b126dd66c85c542bc1ca4944dc29a56b78e33a82..58b7df515c7c59230368b7219d446951bcb32457 100644 (file)
@@ -25,9 +25,6 @@
 #include "KCanvasFilters.h"
 
 namespace WebCore {
-    class SVGAnimatedNumber;
-    class SVGAnimatedString;
-    class SVGAnimatedEnumeration;
     
     class SVGFEDisplacementMapElement : public SVGFilterPrimitiveStandardAttributes {
     public:
@@ -35,12 +32,6 @@ namespace WebCore {
         virtual ~SVGFEDisplacementMapElement();
         
         // 'SVGFEDisplacementMapElement' functions
-        SVGAnimatedString* in1() const;
-        SVGAnimatedString* in2() const;
-        SVGAnimatedEnumeration* xChannelSelector() const;
-        SVGAnimatedEnumeration* yChannelSelector() const;
-        SVGAnimatedNumber* scale() const;
-        
         static KCChannelSelectorType stringToChannel(const String&);
         
         // Derived from: 'Element'
@@ -48,12 +39,15 @@ namespace WebCore {
         
         virtual KCanvasFEDisplacementMap* filterEffect() const;
         
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedString> m_in1;
-        mutable RefPtr<SVGAnimatedString> m_in2;
-        mutable RefPtr<SVGAnimatedEnumeration> m_xChannelSelector;
-        mutable RefPtr<SVGAnimatedEnumeration> m_yChannelSelector;
-        mutable RefPtr<SVGAnimatedNumber> m_scale;
+        ANIMATED_PROPERTY_DECLARATIONS(String, String, In, in)
+        ANIMATED_PROPERTY_DECLARATIONS(String, String, In2, in2)
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, XChannelSelector, xChannelSelector)
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, YChannelSelector, yChannelSelector)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, Scale, scale)
         mutable KCanvasFEDisplacementMap* m_filterEffect;
     };
 
index 4c398abf72b429ad1af6a5f441d64f4f5a620865..f1ea6ff4a0ccab0cbc951f36b8902764bb8a57db 100644 (file)
@@ -21,7 +21,6 @@
 #ifdef SVG_SUPPORT
 #include "SVGFEDistantLightElement.h"
 
-#include "SVGAnimatedNumber.h"
 
 namespace WebCore {
 
@@ -36,7 +35,7 @@ SVGFEDistantLightElement::~SVGFEDistantLightElement()
 
 KCLightSource *SVGFEDistantLightElement::lightSource() const
 {
-    return new KCDistantLightSource(azimuth()->baseVal(), elevation()->baseVal());
+    return new KCDistantLightSource(azimuthBaseValue(), elevationBaseValue());
 }
 
 }
index b191d5133feb312b10c8ce09fd51f6f2ef249006..00a1c13a1698fd63bdf87f1b562e0ee9a6ea341f 100644 (file)
@@ -27,7 +27,6 @@
 #include "Attr.h"
 #include "DeprecatedStringList.h"
 #include "RenderView.h"
-#include "SVGAnimatedString.h"
 #include "SVGHelper.h"
 #include "SVGNames.h"
 #include "SVGRenderStyle.h"
@@ -47,17 +46,13 @@ SVGFEFloodElement::~SVGFEFloodElement()
     delete m_filterEffect;
 }
 
-SVGAnimatedString *SVGFEFloodElement::in1() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedString>(m_in1, dummy);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEFloodElement, String, String, string, In, in, SVGNames::inAttr.localName(), m_in)
 
 void SVGFEFloodElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const String& value = attr->value();
     if (attr->name() == SVGNames::inAttr)
-        in1()->setBaseVal(value.impl());
+        setInBaseValue(value.impl());
     else
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
@@ -68,7 +63,7 @@ KCanvasFEFlood *SVGFEFloodElement::filterEffect() const
         m_filterEffect = static_cast<KCanvasFEFlood *>(renderingDevice()->createFilterEffect(FE_FLOOD));
     if (!m_filterEffect)
         return 0;
-    m_filterEffect->setIn(String(in1()->baseVal()).deprecatedString());
+    m_filterEffect->setIn(String(inBaseValue()).deprecatedString());
     setStandardAttributes(m_filterEffect);
     RenderStyle *filterStyle = const_cast<SVGFEFloodElement *>(this)->styleForRenderer(parentNode()->renderer());
     const SVGRenderStyle *svgStyle = filterStyle->svgStyle();
index 205c078069d071f6fa3f7b8bacee72b5c0655700..aa0b40c6dc6feb21d19d42a6ac00eae0133b8977 100644 (file)
@@ -29,7 +29,6 @@
 
 namespace WebCore
 {
-    class SVGAnimatedString;
 
     class SVGFEFloodElement : public SVGFilterPrimitiveStandardAttributes
     {
@@ -38,15 +37,16 @@ namespace WebCore
         virtual ~SVGFEFloodElement();
 
         // 'SVGFEFloodElement' functions
-        SVGAnimatedString *in1() const;
-
         // Derived from: 'Element'
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
         virtual KCanvasFEFlood *filterEffect() const;
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedString> m_in1;
+        ANIMATED_PROPERTY_DECLARATIONS(String, String, In, in)
         mutable KCanvasFEFlood *m_filterEffect;
     };
 
index e960c9e06a8925ed7fb5b51309c58950806b25ba..56e195fe6e9d74ca2728ca25bc9408af0288442e 100644 (file)
 #include "SVGHelper.h"
 #include "SVGRenderStyle.h"
 #include "SVGFEGaussianBlurElement.h"
-#include "SVGAnimatedNumber.h"
-#include "SVGAnimatedString.h"
 
 using namespace WebCore;
 
-SVGFEGaussianBlurElement::SVGFEGaussianBlurElement(const QualifiedName& tagName, Document *doc) : 
-SVGFilterPrimitiveStandardAttributes(tagName, doc)
+SVGFEGaussianBlurElement::SVGFEGaussianBlurElement(const QualifiedName& tagName, Document *doc)
+    : SVGFilterPrimitiveStandardAttributes(tagName, doc)
+    , m_stdDeviationX(0.0)
+    , m_stdDeviationY(0.0)
 {
     m_filterEffect = 0;
 }
@@ -51,23 +51,9 @@ SVGFEGaussianBlurElement::~SVGFEGaussianBlurElement()
     delete m_filterEffect;
 }
 
-SVGAnimatedString *SVGFEGaussianBlurElement::in1() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedString>(m_in1, dummy);
-}
-
-SVGAnimatedNumber *SVGFEGaussianBlurElement::stdDeviationX() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_stdDeviationX, dummy);
-}
-
-SVGAnimatedNumber *SVGFEGaussianBlurElement::stdDeviationY() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_stdDeviationY, dummy);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEGaussianBlurElement, String, String, string, In, in, SVGNames::inAttr.localName(), m_in)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEGaussianBlurElement, double, Number, number, StdDeviationX, stdDeviationX, "stdDeviationX", m_stdDeviationX)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEGaussianBlurElement, double, Number, number, StdDeviationY, stdDeviationY, "stdDeviationY", m_stdDeviationY)
 
 void SVGFEGaussianBlurElement::setStdDeviation(float stdDeviationX, float stdDeviationY)
 {
@@ -78,14 +64,14 @@ void SVGFEGaussianBlurElement::parseMappedAttribute(MappedAttribute *attr)
     const String& value = attr->value();
     if (attr->name() == SVGNames::stdDeviationAttr) {
         DeprecatedStringList numbers = DeprecatedStringList::split(' ', value.deprecatedString());
-        stdDeviationX()->setBaseVal(numbers[0].toDouble());
+        setStdDeviationXBaseValue(numbers[0].toDouble());
         if(numbers.count() == 1)
-            stdDeviationY()->setBaseVal(numbers[0].toDouble());
+            setStdDeviationYBaseValue(numbers[0].toDouble());
         else
-            stdDeviationY()->setBaseVal(numbers[1].toDouble());
+            setStdDeviationYBaseValue(numbers[1].toDouble());
     }
     else if (attr->name() == SVGNames::inAttr)
-        in1()->setBaseVal(value.impl());
+        setInBaseValue(value.impl());
     else
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
@@ -96,10 +82,10 @@ KCanvasFEGaussianBlur *SVGFEGaussianBlurElement::filterEffect() const
         m_filterEffect = static_cast<KCanvasFEGaussianBlur *>(renderingDevice()->createFilterEffect(FE_GAUSSIAN_BLUR));
     if (!m_filterEffect)
         return 0;
-    m_filterEffect->setIn(String(in1()->baseVal()).deprecatedString());
+    m_filterEffect->setIn(String(inBaseValue()).deprecatedString());
     setStandardAttributes(m_filterEffect);
-    m_filterEffect->setStdDeviationX(stdDeviationX()->baseVal());
-    m_filterEffect->setStdDeviationY(stdDeviationY()->baseVal());
+    m_filterEffect->setStdDeviationX(stdDeviationXBaseValue());
+    m_filterEffect->setStdDeviationY(stdDeviationYBaseValue());
     return m_filterEffect;
 }
 
index 97a43246efc08c83ec2f6a2f4162c4642a6006eb..0ee9d068cdd89dde4de39e3595c12d8c0b7e7560 100644 (file)
@@ -29,8 +29,6 @@
 
 namespace WebCore
 {
-    class SVGAnimatedString;
-    class SVGAnimatedNumber;
 
     class SVGFEGaussianBlurElement : public SVGFilterPrimitiveStandardAttributes
     {
@@ -39,10 +37,6 @@ namespace WebCore
         virtual ~SVGFEGaussianBlurElement();
 
         // 'SVGFEGaussianBlurElement' functions
-        SVGAnimatedString *in1() const;
-        SVGAnimatedNumber *stdDeviationX() const;
-        SVGAnimatedNumber *stdDeviationY() const;
-
         void setStdDeviation(float stdDeviationX, float stdDeviationY);
 
         // Derived from: 'Element'
@@ -50,10 +44,13 @@ namespace WebCore
 
         virtual KCanvasFEGaussianBlur *filterEffect() const;
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedString> m_in1;
-        mutable RefPtr<SVGAnimatedNumber> m_stdDeviationX;
-        mutable RefPtr<SVGAnimatedNumber> m_stdDeviationY;
+        ANIMATED_PROPERTY_DECLARATIONS(String, String, In, in)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, StdDeviationX, stdDeviationX)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, StdDeviationY, stdDeviationY)
         mutable KCanvasFEGaussianBlur *m_filterEffect;
     };
 
index c14c7ea5db0b21fdeabe7212c30500c21e0184e3..3f646413e8fa2348db80d77eb7b59b05c895a3d4 100644 (file)
@@ -30,9 +30,8 @@
 #include "Document.h"
 #include "KCanvasRenderingStyle.h"
 #include "KCanvasRenderingStyle.h"
-#include "SVGAnimatedLength.h"
-#include "SVGAnimatedPreserveAspectRatio.h"
-#include "SVGAnimatedString.h"
+#include "SVGLength.h"
+#include "SVGPreserveAspectRatio.h"
 #include "SVGHelper.h"
 #include "SVGNames.h"
 #include <kcanvas/KCanvasImage.h>
 using namespace WebCore;
 
 SVGFEImageElement::SVGFEImageElement(const QualifiedName& tagName, Document *doc)
-: SVGFilterPrimitiveStandardAttributes(tagName, doc), SVGURIReference(), SVGLangSpace(), SVGExternalResourcesRequired()
+    : SVGFilterPrimitiveStandardAttributes(tagName, doc)
+    , SVGURIReference()
+    , SVGLangSpace()
+    , SVGExternalResourcesRequired()
+    , m_preserveAspectRatio(new SVGPreserveAspectRatio(this))
 {
     m_filterEffect = 0;
     m_cachedImage = 0;
@@ -55,22 +58,19 @@ SVGFEImageElement::~SVGFEImageElement()
         m_cachedImage->deref(this);
 }
 
-SVGAnimatedPreserveAspectRatio *SVGFEImageElement::preserveAspectRatio() const
-{
-    return lazy_create<SVGAnimatedPreserveAspectRatio>(m_preserveAspectRatio, this);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEImageElement, SVGPreserveAspectRatio*, PreserveAspectRatio, preserveAspectRatio, PreserveAspectRatio, preserveAspectRatio, SVGNames::preserveAspectRatioAttr.localName(), m_preserveAspectRatio.get())
 
 void SVGFEImageElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const String& value = attr->value();
     if (attr->name() == SVGNames::preserveAspectRatioAttr)
-        preserveAspectRatio()->baseVal()->parsePreserveAspectRatio(value.impl());
+        preserveAspectRatioBaseValue()->parsePreserveAspectRatio(value.impl());
     else
     {
         if (SVGURIReference::parseMappedAttribute(attr)) {
             if (m_cachedImage)
                 m_cachedImage->deref(this);
-            m_cachedImage = ownerDocument()->docLoader()->requestImage(href()->baseVal());
+            m_cachedImage = ownerDocument()->docLoader()->requestImage(hrefBaseValue());
             if (m_cachedImage)
                 m_cachedImage->ref(this);
             return;
index f309f134d0f7334069d9b45098fb31db47e1d457..d5e5497b66ea3cb433242fd790b80d6db599f92e 100644 (file)
@@ -31,7 +31,7 @@
 #include "KCanvasFilters.h"
 
 namespace WebCore {
-    class SVGAnimatedPreserveAspectRatio;
+    class SVGPreserveAspectRatio;
 
     class SVGFEImageElement : public SVGFilterPrimitiveStandardAttributes,
                                   public SVGURIReference,
@@ -44,16 +44,17 @@ namespace WebCore {
         virtual ~SVGFEImageElement();
 
         // 'SVGFEImageElement' functions
-        SVGAnimatedPreserveAspectRatio *preserveAspectRatio() const;
-
         virtual void parseMappedAttribute(MappedAttribute *attr);
         virtual void notifyFinished(CachedResource *finishedObj);
 
     protected:
         virtual KCanvasFEImage *filterEffect() const;
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedPreserveAspectRatio> m_preserveAspectRatio;
+        ANIMATED_PROPERTY_DECLARATIONS(SVGPreserveAspectRatio*, RefPtr<SVGPreserveAspectRatio>, PreserveAspectRatio, preserveAspectRatio)
         CachedImage *m_cachedImage;
         mutable KCanvasFEImage *m_filterEffect;
     };
index 7a0cf1ea3eaf52943f73b3783a5f5031ca68f132..9d60227f735fe7404ba7247bf8fd006ca0dd4478 100644 (file)
 #include "SVGHelper.h"
 #include "SVGRenderStyle.h"
 #include "SVGFELightElement.h"
-#include "SVGAnimatedString.h"
-#include "SVGAnimatedNumber.h"
-#include "SVGAnimatedEnumeration.h"
 
 using namespace WebCore;
 
-SVGFELightElement::SVGFELightElement(const QualifiedName& tagName, Document *doc) : 
-SVGElement(tagName, doc)
+SVGFELightElement::SVGFELightElement(const QualifiedName& tagName, Document *doc)
+    : SVGElement(tagName, doc)
+    , m_azimuth(0.0)
+    , m_elevation(0.0)
+    , m_x(0.0)
+    , m_y(0.0)
+    , m_z(0.0)
+    , m_pointsAtX(0.0)
+    , m_pointsAtY(0.0)
+    , m_pointsAtZ(0.0)
+    , m_specularExponent(0.0)
+    , m_limitingConeAngle(0.0)
 {
 }
 
@@ -48,90 +55,41 @@ SVGFELightElement::~SVGFELightElement()
 {
 }
 
-SVGAnimatedNumber *SVGFELightElement::azimuth() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_azimuth, dummy);
-}
-
-SVGAnimatedNumber *SVGFELightElement::elevation() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_elevation, dummy);
-}
-
-SVGAnimatedNumber *SVGFELightElement::x() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_x, dummy);
-}
-
-SVGAnimatedNumber *SVGFELightElement::y() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_y, dummy);
-}
-
-
-SVGAnimatedNumber *SVGFELightElement::z() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_z, dummy);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGFELightElement, double, Number, number, Azimuth, azimuth, SVGNames::azimuthAttr.localName(), m_azimuth)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFELightElement, double, Number, number, Elevation, elevation, SVGNames::elevationAttr.localName(), m_elevation)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFELightElement, double, Number, number, X, x, SVGNames::xAttr.localName(), m_x)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFELightElement, double, Number, number, Y, y, SVGNames::yAttr.localName(), m_y)
 
-SVGAnimatedNumber *SVGFELightElement::pointsAtX() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_pointsAtX, dummy);
-}
-
-SVGAnimatedNumber *SVGFELightElement::pointsAtY() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_pointsAtY, dummy);
-}
-
-SVGAnimatedNumber *SVGFELightElement::pointsAtZ() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_pointsAtZ, dummy);
-}
-
-SVGAnimatedNumber *SVGFELightElement::specularExponent() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_specularExponent, dummy);
-}
-
-SVGAnimatedNumber *SVGFELightElement::limitingConeAngle() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_limitingConeAngle, dummy);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGFELightElement, double, Number, number, Z, z, SVGNames::zAttr.localName(), m_z)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFELightElement, double, Number, number, PointsAtX, pointsAtX, SVGNames::pointsAtXAttr.localName(), m_pointsAtX)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFELightElement, double, Number, number, PointsAtY, pointsAtY, SVGNames::pointsAtYAttr.localName(), m_pointsAtY)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFELightElement, double, Number, number, PointsAtZ, pointsAtZ, SVGNames::pointsAtZAttr.localName(), m_pointsAtZ)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFELightElement, double, Number, number, SpecularExponent, specularExponent, SVGNames::specularExponentAttr.localName(), m_specularExponent)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFELightElement, double, Number, number, LimitingConeAngle, limitingConeAngle, SVGNames::limitingConeAngleAttr.localName(), m_limitingConeAngle)
 
 void SVGFELightElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const String& value = attr->value();
     if (attr->name() == SVGNames::azimuthAttr)
-        azimuth()->setBaseVal(value.deprecatedString().toDouble());
+        setAzimuthBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::elevationAttr)
-        elevation()->setBaseVal(value.deprecatedString().toDouble());
+        setElevationBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::xAttr)
-        x()->setBaseVal(value.deprecatedString().toDouble());
+        setXBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::yAttr)
-        y()->setBaseVal(value.deprecatedString().toDouble());
+        setYBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::zAttr)
-        z()->setBaseVal(value.deprecatedString().toDouble());
+        setZBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::pointsAtXAttr)
-        pointsAtX()->setBaseVal(value.deprecatedString().toDouble());
+        setPointsAtXBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::pointsAtYAttr)
-        pointsAtY()->setBaseVal(value.deprecatedString().toDouble());
+        setPointsAtYBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::pointsAtZAttr)
-        pointsAtZ()->setBaseVal(value.deprecatedString().toDouble());
+        setPointsAtZBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::specularExponentAttr)
-        specularExponent()->setBaseVal(value.deprecatedString().toDouble());
+        setSpecularExponentBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::limitingConeAngleAttr)
-        limitingConeAngle()->setBaseVal(value.deprecatedString().toDouble());
+        setLimitingConeAngleBaseValue(value.deprecatedString().toDouble());
     else
         SVGElement::parseMappedAttribute(attr);
 }
index eb312a34723d9a5ca0c61e2d4165c0db8cb9cad6..c0804d379856a86ce90f41bf3061051f743ffb6c 100644 (file)
@@ -28,9 +28,7 @@
 
 namespace WebCore
 {
-    class SVGAnimatedNumber;
-    class SVGAnimatedNumberList;
-    class SVGAnimatedEnumeration;
+    class SVGNumberList;
     
     class SVGFELightElement : public SVGElement
     {
@@ -39,33 +37,21 @@ namespace WebCore
         virtual ~SVGFELightElement();
         
         // 'SVGComponentTransferFunctionElement' functions
-        SVGAnimatedNumber *azimuth() const;
-        SVGAnimatedNumber *elevation() const;
-        SVGAnimatedNumber *x() const;
-        SVGAnimatedNumber *y() const;
-        SVGAnimatedNumber *z() const;
-        SVGAnimatedNumber *pointsAtX() const;
-        SVGAnimatedNumber *pointsAtY() const;
-        SVGAnimatedNumber *pointsAtZ() const;
-        SVGAnimatedNumber *specularExponent() const;
-        SVGAnimatedNumber *limitingConeAngle() const;
-        
         virtual KCLightSource *lightSource() const = 0;
         
         // Derived from: 'Element'
         virtual void parseMappedAttribute(MappedAttribute *attr);        
     private:
-        mutable RefPtr<SVGAnimatedNumber> m_azimuth;
-        mutable RefPtr<SVGAnimatedNumber> m_elevation;
-        mutable RefPtr<SVGAnimatedNumber> m_x;
-        mutable RefPtr<SVGAnimatedNumber> m_y;
-        mutable RefPtr<SVGAnimatedNumber> m_z;
-        mutable RefPtr<SVGAnimatedNumber> m_pointsAtX;
-        mutable RefPtr<SVGAnimatedNumber> m_pointsAtY;
-        mutable RefPtr<SVGAnimatedNumber> m_pointsAtZ;
-        mutable RefPtr<SVGAnimatedNumber> m_specularExponent;
-        mutable RefPtr<SVGAnimatedNumber> m_limitingConeAngle;
-        
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, Azimuth, azimuth)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, Elevation, elevation)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, X, x)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, Y, y)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, Z, z)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, PointsAtX, pointsAtX)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, PointsAtY, pointsAtY)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, PointsAtZ, pointsAtZ)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, SpecularExponent, specularExponent)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, LimitingConeAngle, limitingConeAngle)
     };
 
 } // namespace WebCore
index c13ba420cd84547ce591f653a58691709ad4f4c8..3500495e2d25e9a6ecbb9a2e46fe1bec97ea1151 100644 (file)
 #include "SVGRenderStyle.h"
 #include "SVGFEMergeElement.h"
 #include "SVGFEMergeNodeElement.h"
-#include "SVGAnimatedEnumeration.h"
-#include "SVGAnimatedString.h"
 
 using namespace WebCore;
 
-SVGFEMergeElement::SVGFEMergeElement(const QualifiedName& tagName, Document *doc) : 
-SVGFilterPrimitiveStandardAttributes(tagName, doc)
+SVGFEMergeElement::SVGFEMergeElement(const QualifiedName& tagName, Document *doc)
+    : SVGFilterPrimitiveStandardAttributes(tagName, doc)
 {
     m_filterEffect = 0;
 }
@@ -63,7 +61,7 @@ KCanvasFEMerge *SVGFEMergeElement::filterEffect() const
     {
         if(n->hasTagName(SVGNames::feMergeNodeTag))
         {
-            String mergeInput = static_cast<SVGFEMergeNodeElement *>(n)->in1()->baseVal();
+            String mergeInput = static_cast<SVGFEMergeNodeElement *>(n)->inBaseValue();
             mergeInputs.append(mergeInput.deprecatedString());
         }
     }
index 7d17e5cea7352ceb3cf0f29161269c55d103d87d..554e7c722e3ac091bc9a62336896b4bb1293133f 100644 (file)
@@ -37,6 +37,9 @@ namespace WebCore
 
         virtual KCanvasFEMerge *filterEffect() const;
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
         mutable KCanvasFEMerge *m_filterEffect;
     };
index 777e46b401541ab5cd5600faeca833afef806774..59e6b37e6a860d58fa7fbc193632ad7d3c544e4c 100644 (file)
@@ -26,7 +26,6 @@
 
 #include "SVGHelper.h"
 #include "SVGFEMergeNodeElement.h"
-#include "SVGAnimatedString.h"
 
 using namespace WebCore;
 
@@ -38,17 +37,13 @@ SVGFEMergeNodeElement::~SVGFEMergeNodeElement()
 {
 }
 
-SVGAnimatedString *SVGFEMergeNodeElement::in1() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedString>(m_in1, dummy);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEMergeNodeElement, String, String, string, In, in, SVGNames::inAttr.localName(), m_in)
 
 void SVGFEMergeNodeElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const String& value = attr->value();
     if (attr->name() == SVGNames::inAttr)
-        in1()->setBaseVal(value.impl());
+        setInBaseValue(value.impl());
     else
         SVGElement::parseMappedAttribute(attr);
 }
index d63f606e04493a84d27fbc328afd4e8cf535c65e..14ea72490fb04a54e8b4e2da5df4b194718d27ff 100644 (file)
@@ -28,7 +28,6 @@
 
 namespace WebCore
 {
-    class SVGAnimatedString;
     class SVGFEMergeNodeElement : public SVGElement
     {
     public:
@@ -39,10 +38,12 @@ namespace WebCore
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
         // 'SVGFEMergeNodeElement' functions
-        SVGAnimatedString *in1() const;
+    
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
 
     private:
-        mutable RefPtr<SVGAnimatedString> m_in1;
+        ANIMATED_PROPERTY_DECLARATIONS(String, String, In, in)
     };
 
 } // namespace WebCore
index 24e128a92d837973dec2e2c3ddff88e36604917f..5ab1dbd136bd05201a2a5dd71a7d109a0dc37bc4 100644 (file)
 #include "SVGHelper.h"
 #include "SVGRenderStyle.h"
 #include "SVGFEOffsetElement.h"
-#include "SVGAnimatedNumber.h"
-#include "SVGAnimatedString.h"
 
 using namespace WebCore;
 
-SVGFEOffsetElement::SVGFEOffsetElement(const QualifiedName& tagName, Document *doc) : 
-SVGFilterPrimitiveStandardAttributes(tagName, doc)
+SVGFEOffsetElement::SVGFEOffsetElement(const QualifiedName& tagName, Document *doc)
+    : SVGFilterPrimitiveStandardAttributes(tagName, doc)
+    , m_dx(0.0)
+    , m_dy(0.0)
 {
     m_filterEffect = 0;
 }
@@ -50,33 +50,19 @@ SVGFEOffsetElement::~SVGFEOffsetElement()
     delete m_filterEffect;
 }
 
-SVGAnimatedString *SVGFEOffsetElement::in1() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedString>(m_in1, dummy);
-}
-
-SVGAnimatedNumber *SVGFEOffsetElement::dx() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_dx, dummy);
-}
-
-SVGAnimatedNumber *SVGFEOffsetElement::dy() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_dy, dummy);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEOffsetElement, String, String, string, In, in, SVGNames::inAttr.localName(), m_in)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEOffsetElement, double, Number, number, Dx, dx, SVGNames::dxAttr.localName(), m_dx)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFEOffsetElement, double, Number, number, Dy, dy, SVGNames::dyAttr.localName(), m_dy)
 
 void SVGFEOffsetElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const String& value = attr->value();
     if (attr->name() == SVGNames::dxAttr)
-        dx()->setBaseVal(value.deprecatedString().toDouble());
+        setDxBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::dyAttr)
-        dy()->setBaseVal(value.deprecatedString().toDouble());
+        setDyBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::inAttr)
-        in1()->setBaseVal(value.impl());
+        setInBaseValue(value.impl());
     else
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
@@ -87,10 +73,10 @@ KCanvasFEOffset *SVGFEOffsetElement::filterEffect() const
         m_filterEffect = static_cast<KCanvasFEOffset *>(renderingDevice()->createFilterEffect(FE_OFFSET));
     if (!m_filterEffect)
         return 0;
-    m_filterEffect->setIn(String(in1()->baseVal()).deprecatedString());
+    m_filterEffect->setIn(String(inBaseValue()).deprecatedString());
     setStandardAttributes(m_filterEffect);
-    m_filterEffect->setDx(dx()->baseVal());
-    m_filterEffect->setDy(dy()->baseVal());
+    m_filterEffect->setDx(dxBaseValue());
+    m_filterEffect->setDy(dyBaseValue());
     return m_filterEffect;
 }
 
index 8c31e917cf7eb12770f966d64de80038bd17f6e2..b8e645b2aa1347e4bff912d3c57e8ea76478c531 100644 (file)
@@ -29,8 +29,6 @@
 
 namespace WebCore
 {
-    class SVGAnimatedString;
-    class SVGAnimatedNumber;
 
     class SVGFEOffsetElement : public SVGFilterPrimitiveStandardAttributes
     {
@@ -39,19 +37,18 @@ namespace WebCore
         virtual ~SVGFEOffsetElement();
 
         // 'SVGFEOffsetElement' functions
-        SVGAnimatedString *in1() const;
-        SVGAnimatedNumber *dx() const;
-        SVGAnimatedNumber *dy() const;
-
         // Derived from: 'Element'
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
         virtual KCanvasFEOffset *filterEffect() const;
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedString> m_in1;
-        mutable RefPtr<SVGAnimatedNumber> m_dx;
-        mutable RefPtr<SVGAnimatedNumber> m_dy;
+        ANIMATED_PROPERTY_DECLARATIONS(String, String, In, in)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, Dx, dx)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, Dy, dy)
         mutable KCanvasFEOffset *m_filterEffect;
     };
 
index bba02bcf38d920bb8612390516fe67690a7f3b69..5f701c8f59624456ff9ac63c8ddcd2e3c7e83bda 100644 (file)
@@ -21,7 +21,6 @@
 #ifdef SVG_SUPPORT
 #include "SVGFEPointLightElement.h"
 
-#include "SVGAnimatedNumber.h"
 
 namespace WebCore {
 
@@ -36,7 +35,7 @@ SVGFEPointLightElement::~SVGFEPointLightElement()
 
 KCLightSource *SVGFEPointLightElement::lightSource() const
 {
-    KCanvasPoint3F pos(x()->baseVal(), y()->baseVal(), z()->baseVal());
+    KCanvasPoint3F pos(xBaseValue(), yBaseValue(), zBaseValue());
     return new KCPointLightSource(pos);
 }
 
index 6beb7e6dd358e11b263cc91a111cd73242a740be..a3106376c9eff9002f6e2fb1ef49629840739a8a 100644 (file)
 #include "SVGNames.h"
 #include "SVGHelper.h"
 #include "SVGRenderStyle.h"
-#include "SVGAnimatedColor.h"
-#include "SVGAnimatedNumber.h"
-#include "SVGAnimatedString.h"
+#include "SVGColor.h"
 #include "SVGFELightElement.h"
 #include "SVGFESpecularLightingElement.h"
 
 
 using namespace WebCore;
 
-SVGFESpecularLightingElement::SVGFESpecularLightingElement(const QualifiedName& tagName, Document *doc) : 
-SVGFilterPrimitiveStandardAttributes(tagName, doc)
+SVGFESpecularLightingElement::SVGFESpecularLightingElement(const QualifiedName& tagName, Document *doc)
+    : SVGFilterPrimitiveStandardAttributes(tagName, doc)
+    , m_specularConstant(0.0)
+    , m_specularExponent(0.0)
+    , m_surfaceScale(0.0)
+    , m_lightingColor(new SVGColor())
+    , m_kernelUnitLengthX(0.0)
+    , m_kernelUnitLengthY(0.0)
 {
     m_filterEffect = 0;
 }
@@ -51,68 +55,34 @@ SVGFESpecularLightingElement::~SVGFESpecularLightingElement()
     delete m_filterEffect;
 }
 
-SVGAnimatedString *SVGFESpecularLightingElement::in1() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedString>(m_in1, dummy);
-}
-
-SVGAnimatedNumber *SVGFESpecularLightingElement::specularConstant() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_specularConstant, dummy);
-}
-
-SVGAnimatedNumber *SVGFESpecularLightingElement::specularExponent() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_specularExponent, dummy);
-}
-
-SVGAnimatedNumber *SVGFESpecularLightingElement::surfaceScale() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_surfaceScale, dummy);
-}
-
-SVGAnimatedNumber *SVGFESpecularLightingElement::kernelUnitLengthX() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_kernelUnitLengthX, dummy);
-}
-
-SVGAnimatedNumber *SVGFESpecularLightingElement::kernelUnitLengthY() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_kernelUnitLengthY, dummy);
-}
-
-SVGAnimatedColor  *SVGFESpecularLightingElement::lightingColor() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedColor>(m_lightingColor, dummy);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGFESpecularLightingElement, String, String, string, In, in, SVGNames::inAttr.localName(), m_in)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFESpecularLightingElement, double, Number, number, SpecularConstant, specularConstant, SVGNames::specularConstantAttr.localName(), m_specularConstant)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFESpecularLightingElement, double, Number, number, SpecularExponent, specularExponent, SVGNames::specularExponentAttr.localName(), m_specularExponent)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFESpecularLightingElement, double, Number, number, SurfaceScale, surfaceScale, SVGNames::surfaceScaleAttr.localName(), m_surfaceScale)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFESpecularLightingElement, double, Number, number, KernelUnitLengthX, kernelUnitLengthX, "kernelUnitLengthX", m_kernelUnitLengthX)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFESpecularLightingElement, double, Number, number, KernelUnitLengthY, kernelUnitLengthY, "kernelUnitLengthY", m_kernelUnitLengthY)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFESpecularLightingElement, SVGColor*, Color, color, LightingColor, lightingColor, SVGNames::lighting_colorAttr.localName(), m_lightingColor.get())
 
 void SVGFESpecularLightingElement::parseMappedAttribute(MappedAttribute *attr)
 {    
     const String& value = attr->value();
     if (attr->name() == SVGNames::inAttr)
-        in1()->setBaseVal(value.impl());
+        setInBaseValue(value.impl());
     else if (attr->name() == SVGNames::surfaceScaleAttr)
-        surfaceScale()->setBaseVal(value.deprecatedString().toDouble());
+        setSurfaceScaleBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::specularConstantAttr)
-        specularConstant()->setBaseVal(value.deprecatedString().toDouble());
+        setSpecularConstantBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::specularExponentAttr)
-        specularExponent()->setBaseVal(value.deprecatedString().toDouble());
+        setSpecularExponentBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::kernelUnitLengthAttr) {
         DeprecatedStringList numbers = DeprecatedStringList::split(' ', value.deprecatedString());
-        kernelUnitLengthX()->setBaseVal(numbers[0].toDouble());
+        setKernelUnitLengthXBaseValue(numbers[0].toDouble());
         if (numbers.count() == 1)
-            kernelUnitLengthY()->setBaseVal(numbers[0].toDouble());
+            setKernelUnitLengthYBaseValue(numbers[0].toDouble());
         else
-            kernelUnitLengthY()->setBaseVal(numbers[1].toDouble());
+            setKernelUnitLengthYBaseValue(numbers[1].toDouble());
     } else if (attr->name() == SVGNames::lighting_colorAttr)
-        lightingColor()->setBaseVal(new SVGColor(value.impl()));
+        setLightingColorBaseValue(new SVGColor(value.impl()));
     else
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
@@ -121,14 +91,14 @@ KCanvasFESpecularLighting *SVGFESpecularLightingElement::filterEffect() const
 {
     if (!m_filterEffect) 
         m_filterEffect = static_cast<KCanvasFESpecularLighting *>(renderingDevice()->createFilterEffect(FE_SPECULAR_LIGHTING));
-    m_filterEffect->setIn(String(in1()->baseVal()).deprecatedString());
+    m_filterEffect->setIn(String(inBaseValue()).deprecatedString());
     setStandardAttributes(m_filterEffect);
-    m_filterEffect->setSpecularConstant((specularConstant()->baseVal()));
-    m_filterEffect->setSpecularExponent((specularExponent()->baseVal()));
-    m_filterEffect->setSurfaceScale((surfaceScale()->baseVal()));
-    m_filterEffect->setKernelUnitLengthX((kernelUnitLengthX()->baseVal()));
-    m_filterEffect->setKernelUnitLengthY((kernelUnitLengthY()->baseVal()));
-    m_filterEffect->setLightingColor(lightingColor()->baseVal()->color());
+    m_filterEffect->setSpecularConstant((specularConstantBaseValue()));
+    m_filterEffect->setSpecularExponent((specularExponentBaseValue()));
+    m_filterEffect->setSurfaceScale((surfaceScaleBaseValue()));
+    m_filterEffect->setKernelUnitLengthX((kernelUnitLengthXBaseValue()));
+    m_filterEffect->setKernelUnitLengthY((kernelUnitLengthYBaseValue()));
+    m_filterEffect->setLightingColor(lightingColorBaseValue()->color());
     updateLights();
     return m_filterEffect;
 }
index 4d5777632bed9cf53cf9c05042253be50d0c4e94..55d9b61c694d303853129e9cdd3a9fb7c634b1c4 100644 (file)
@@ -28,9 +28,7 @@
 
 namespace WebCore
 {
-    class SVGAnimatedNumber;
-    class SVGAnimatedString;
-    class SVGAnimatedColor;
+    class SVGColor;
     
     class SVGFESpecularLightingElement : public SVGFilterPrimitiveStandardAttributes
     {
@@ -39,26 +37,22 @@ namespace WebCore
         virtual ~SVGFESpecularLightingElement();
         
         // 'SVGFEDiffuseLightingElement' functions
-        SVGAnimatedString *in1() const;
-        SVGAnimatedNumber *specularConstant() const;
-        SVGAnimatedNumber *specularExponent() const;
-        SVGAnimatedNumber *surfaceScale() const;
-        SVGAnimatedNumber *kernelUnitLengthX() const;
-        SVGAnimatedNumber *kernelUnitLengthY() const;
-        SVGAnimatedColor  *lightingColor() const;
-        
         // Derived from: 'Element'
         virtual void parseMappedAttribute(MappedAttribute *attr);
         
         virtual KCanvasFESpecularLighting *filterEffect() const;
+
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedString> m_in1;
-        mutable RefPtr<SVGAnimatedNumber> m_specularConstant;
-        mutable RefPtr<SVGAnimatedNumber> m_specularExponent;
-        mutable RefPtr<SVGAnimatedNumber> m_surfaceScale;
-        mutable RefPtr<SVGAnimatedColor>  m_lightingColor;
-        mutable RefPtr<SVGAnimatedNumber> m_kernelUnitLengthX;
-        mutable RefPtr<SVGAnimatedNumber> m_kernelUnitLengthY;
+        ANIMATED_PROPERTY_DECLARATIONS(String, String, In, in)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, SpecularConstant, specularConstant)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, SpecularExponent, specularExponent)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, SurfaceScale, surfaceScale)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGColor*, RefPtr<SVGColor>, LightingColor, lightingColor)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, KernelUnitLengthX, kernelUnitLengthX)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, KernelUnitLengthY, kernelUnitLengthY)
         //need other properties here...
         mutable KCanvasFESpecularLighting *m_filterEffect;
         
index d25ac27ecce5909946d629d563eb260a83049c7e..8f359d3616fa5175c939eaddfc03daef278571db 100644 (file)
@@ -21,7 +21,6 @@
 #ifdef SVG_SUPPORT
 #include "SVGFESpotLightElement.h"
 
-#include "SVGAnimatedNumber.h"
 
 namespace WebCore {
 
@@ -36,13 +35,13 @@ SVGFESpotLightElement::~SVGFESpotLightElement()
 
 KCLightSource *SVGFESpotLightElement::lightSource() const
 {
-    KCanvasPoint3F pos(x()->baseVal(), y()->baseVal(), z()->baseVal());
+    KCanvasPoint3F pos(xBaseValue(), yBaseValue(), zBaseValue());
     //convert lookAt to a direction
-    KCanvasPoint3F direction(pointsAtX()->baseVal() - pos.x(), 
-                             pointsAtY()->baseVal() - pos.y(), 
-                             pointsAtZ()->baseVal() - pos.z());
+    KCanvasPoint3F direction(pointsAtXBaseValue() - pos.x(), 
+                             pointsAtYBaseValue() - pos.y(), 
+                             pointsAtZBaseValue() - pos.z());
     direction.normalize();
-    return new KCSpotLightSource(pos, direction, specularExponent()->baseVal(), limitingConeAngle()->baseVal());
+    return new KCSpotLightSource(pos, direction, specularExponentBaseValue(), limitingConeAngleBaseValue());
 }
 
 }
index 209b43a27e4e1085300c6ef9077e10945e31cdde..54fa85d929a950a8ff27805c5ca2cf6b1acae38e 100644 (file)
@@ -32,7 +32,6 @@
 #include "SVGHelper.h"
 #include "SVGRenderStyle.h"
 #include "SVGFETileElement.h"
-#include "SVGAnimatedString.h"
 
 using namespace WebCore;
 
@@ -47,17 +46,13 @@ SVGFETileElement::~SVGFETileElement()
     delete m_filterEffect;
 }
 
-SVGAnimatedString *SVGFETileElement::in1() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedString>(m_in1, dummy);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGFETileElement, String, String, string, In, in, SVGNames::inAttr.localName(), m_in)
 
 void SVGFETileElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const String& value = attr->value();
     if (attr->name() == SVGNames::inAttr)
-        in1()->setBaseVal(value.impl());
+        setInBaseValue(value.impl());
     else
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
@@ -68,7 +63,7 @@ KCanvasFETile *SVGFETileElement::filterEffect() const
         m_filterEffect = static_cast<KCanvasFETile *>(renderingDevice()->createFilterEffect(FE_TILE));
     if (!m_filterEffect)
         return 0;
-    m_filterEffect->setIn(String(in1()->baseVal()).deprecatedString());
+    m_filterEffect->setIn(String(inBaseValue()).deprecatedString());
     setStandardAttributes(m_filterEffect);
     return m_filterEffect;
 }
index 64922fe26ea541367a93101e8005cab8d52d3d87..aabaa9c14d762f113349e85a27c85cddebbe5915 100644 (file)
@@ -29,7 +29,6 @@
 
 namespace WebCore
 {
-    class SVGAnimatedString;
 
     class SVGFETileElement : public SVGFilterPrimitiveStandardAttributes
     {
@@ -38,15 +37,17 @@ namespace WebCore
         virtual ~SVGFETileElement();
 
         // 'SVGFETileElement' functions
-        SVGAnimatedString *in1() const;
-
         // Derived from: 'Element'
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
         virtual KCanvasFETile *filterEffect() const;
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedString> m_in1;
+
+        ANIMATED_PROPERTY_DECLARATIONS(String, String, In, in)
         mutable KCanvasFETile *m_filterEffect;
     };
 
index 187ef53f495cec02110444c9d3bbaf44b9d76b66..96baddb520be9d915782a3c1a329b9bc626e3b9b 100644 (file)
 #include "SVGHelper.h"
 #include "SVGRenderStyle.h"
 #include "SVGFETurbulenceElement.h"
-#include "SVGAnimatedNumber.h"
-#include "SVGAnimatedEnumeration.h"
-#include "SVGAnimatedInteger.h"
 
 using namespace WebCore;
 
-SVGFETurbulenceElement::SVGFETurbulenceElement(const QualifiedName& tagName, Document *doc) : 
-SVGFilterPrimitiveStandardAttributes(tagName, doc)
+SVGFETurbulenceElement::SVGFETurbulenceElement(const QualifiedName& tagName, Document *doc)
+    : SVGFilterPrimitiveStandardAttributes(tagName, doc)
+    , m_baseFrequencyX(0.0)
+    , m_baseFrequencyY(0.0)
+    , m_numOctaves(0)
+    , m_seed(0.0)
+    , m_stitchTiles(0)
+    , m_type(0)
 {
     m_filterEffect = 0;
 }
@@ -52,41 +55,12 @@ SVGFETurbulenceElement::~SVGFETurbulenceElement()
     delete m_filterEffect;
 }
 
-SVGAnimatedNumber *SVGFETurbulenceElement::baseFrequencyX() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_baseFrequencyX, dummy);
-}
-
-SVGAnimatedNumber *SVGFETurbulenceElement::baseFrequencyY() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_baseFrequencyY, dummy);
-}
-
-SVGAnimatedNumber *SVGFETurbulenceElement::seed() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedNumber>(m_seed, dummy);
-}
-
-SVGAnimatedInteger *SVGFETurbulenceElement::numOctaves() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedInteger>(m_numOctaves, dummy);
-}
-
-SVGAnimatedEnumeration *SVGFETurbulenceElement::stitchTiles() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedEnumeration>(m_stitchTiles, dummy);
-}
-
-SVGAnimatedEnumeration *SVGFETurbulenceElement::type() const
-{
-    SVGStyledElement *dummy = 0;
-    return lazy_create<SVGAnimatedEnumeration>(m_type, dummy);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGFETurbulenceElement, double, Number, number, BaseFrequencyX, baseFrequencyX, "baseFrequencyX", m_baseFrequencyX)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFETurbulenceElement, double, Number, number, BaseFrequencyY, baseFrequencyY, "baseFrequencyY", m_baseFrequencyY)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFETurbulenceElement, double, Number, number, Seed, seed, SVGNames::seedAttr.localName(), m_seed)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFETurbulenceElement, int, Integer, integer, NumOctaves, numOctaves, SVGNames::numOctavesAttr.localName(), m_numOctaves)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFETurbulenceElement, int, Enumeration, enumeration, StitchTiles, stitchTiles, SVGNames::stitchTilesAttr.localName(), m_stitchTiles)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFETurbulenceElement, int, Enumeration, enumeration, Type, type, SVGNames::typeAttr.localName(), m_type)
 
 void SVGFETurbulenceElement::parseMappedAttribute(MappedAttribute *attr)
 {
@@ -94,30 +68,30 @@ void SVGFETurbulenceElement::parseMappedAttribute(MappedAttribute *attr)
     if (attr->name() == SVGNames::typeAttr)
     {
         if(value == "fractalNoise")
-            type()->setBaseVal(SVG_TURBULENCE_TYPE_FRACTALNOISE);
+            setTypeBaseValue(SVG_TURBULENCE_TYPE_FRACTALNOISE);
         else if(value == "turbulence")
-            type()->setBaseVal(SVG_TURBULENCE_TYPE_TURBULENCE);
+            setTypeBaseValue(SVG_TURBULENCE_TYPE_TURBULENCE);
     }
     else if (attr->name() == SVGNames::stitchTilesAttr)
     {
         if(value == "stitch")
-            stitchTiles()->setBaseVal(SVG_STITCHTYPE_STITCH);
+            setStitchTilesBaseValue(SVG_STITCHTYPE_STITCH);
         else if(value == "nostitch")
-            stitchTiles()->setBaseVal(SVG_STITCHTYPE_NOSTITCH);
+            setStitchTilesBaseValue(SVG_STITCHTYPE_NOSTITCH);
     }
     else if (attr->name() == SVGNames::baseFrequencyAttr)
     {
         DeprecatedStringList numbers = DeprecatedStringList::split(' ', value.deprecatedString());
-        baseFrequencyX()->setBaseVal(numbers[0].toDouble());
+        setBaseFrequencyXBaseValue(numbers[0].toDouble());
         if(numbers.count() == 1)
-            baseFrequencyY()->setBaseVal(numbers[0].toDouble());
+            setBaseFrequencyYBaseValue(numbers[0].toDouble());
         else
-            baseFrequencyY()->setBaseVal(numbers[1].toDouble());
+            setBaseFrequencyYBaseValue(numbers[1].toDouble());
     }
     else if (attr->name() == SVGNames::seedAttr)
-        seed()->setBaseVal(value.deprecatedString().toDouble());
+        setSeedBaseValue(value.deprecatedString().toDouble());
     else if (attr->name() == SVGNames::numOctavesAttr)
-        numOctaves()->setBaseVal(value.deprecatedString().toUInt());
+        setNumOctavesBaseValue(value.deprecatedString().toUInt());
     else
         SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(attr);
 }
@@ -129,13 +103,13 @@ KCanvasFETurbulence *SVGFETurbulenceElement::filterEffect() const
     if (!m_filterEffect)
         return 0;
     
-    m_filterEffect->setType((KCTurbulanceType)(type()->baseVal() - 1));
+    m_filterEffect->setType((KCTurbulanceType)(typeBaseValue() - 1));
     setStandardAttributes(m_filterEffect);
-    m_filterEffect->setBaseFrequencyX(baseFrequencyX()->baseVal());
-    m_filterEffect->setBaseFrequencyY(baseFrequencyY()->baseVal());
-    m_filterEffect->setNumOctaves(numOctaves()->baseVal());
-    m_filterEffect->setSeed(seed()->baseVal());
-    m_filterEffect->setStitchTiles(stitchTiles()->baseVal() == SVG_STITCHTYPE_STITCH);
+    m_filterEffect->setBaseFrequencyX(baseFrequencyXBaseValue());
+    m_filterEffect->setBaseFrequencyY(baseFrequencyYBaseValue());
+    m_filterEffect->setNumOctaves(numOctavesBaseValue());
+    m_filterEffect->setSeed(seedBaseValue());
+    m_filterEffect->setStitchTiles(stitchTilesBaseValue() == SVG_STITCHTYPE_STITCH);
     return m_filterEffect;
 }
 
index aee7dda2d2dd26b05a32fad7f00bde866ad7b797..5f2e5c2b257e0f89eb575e3fa79bf0ee0ca364c6 100644 (file)
@@ -29,9 +29,6 @@
 
 namespace WebCore
 {
-    class SVGAnimatedInteger;
-    class SVGAnimatedNumber;
-    class SVGAnimatedEnumeration;
 
     class SVGFETurbulenceElement : public SVGFilterPrimitiveStandardAttributes
     {
@@ -40,25 +37,21 @@ namespace WebCore
         virtual ~SVGFETurbulenceElement();
 
         // 'SVGFETurbulenceElement' functions
-        SVGAnimatedNumber *baseFrequencyX() const;
-        SVGAnimatedNumber *baseFrequencyY() const;
-        SVGAnimatedInteger *numOctaves() const;
-        SVGAnimatedNumber *seed() const;
-        SVGAnimatedEnumeration *stitchTiles() const;
-        SVGAnimatedEnumeration *type() const;
-
         // Derived from: 'Element'
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
         virtual KCanvasFETurbulence *filterEffect() const;
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedNumber> m_baseFrequencyX;
-        mutable RefPtr<SVGAnimatedNumber> m_baseFrequencyY;
-        mutable RefPtr<SVGAnimatedInteger> m_numOctaves;
-        mutable RefPtr<SVGAnimatedNumber> m_seed;
-        mutable RefPtr<SVGAnimatedEnumeration> m_stitchTiles;
-        mutable RefPtr<SVGAnimatedEnumeration> m_type;
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, BaseFrequencyX, baseFrequencyX)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, BaseFrequencyY, baseFrequencyY)
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, NumOctaves, numOctaves)
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, Seed, seed)
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, StitchTiles, stitchTiles)
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, Type, type)
         mutable KCanvasFETurbulence *m_filterEffect;
     };
 
index 5d74118a3a44321390e656373829357beed11d1c..8c14796085e5f811ffc6eb8cf9bfeb3b29ef46fd 100644 (file)
 #include "SVGHelper.h"
 #include "SVGFilterElement.h"
 #include "SVGFilterPrimitiveStandardAttributes.h"
-#include "SVGAnimatedLength.h"
-#include "SVGAnimatedEnumeration.h"
-#include "SVGAnimatedInteger.h"
+#include "SVGLength.h"
 #include "KCanvasRenderingStyle.h"
 
 using namespace WebCore;
 
 SVGFilterElement::SVGFilterElement(const QualifiedName& tagName, Document *doc)
-: SVGStyledElement(tagName, doc), SVGURIReference(), SVGLangSpace(), SVGExternalResourcesRequired()
-{
-    m_filter = 0;
-}
-
-SVGFilterElement::~SVGFilterElement()
-{
-    delete m_filter;
-}
-
-SVGAnimatedEnumeration *SVGFilterElement::filterUnits() const
-{
-    if (!m_filterUnits) {
-        lazy_create<SVGAnimatedEnumeration>(m_filterUnits, this);
-        m_filterUnits->setBaseVal(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
-    }
-
-    return m_filterUnits.get();
-}
-
-SVGAnimatedEnumeration *SVGFilterElement::primitiveUnits() const
-{
-    if (!m_primitiveUnits) {
-        lazy_create<SVGAnimatedEnumeration>(m_primitiveUnits, this);
-        m_primitiveUnits->setBaseVal(SVG_UNIT_TYPE_USERSPACEONUSE);
-    }
-
-    return m_primitiveUnits.get();
-}
-
-SVGAnimatedLength *SVGFilterElement::x() const
-{
-    // Spec : If the attribute is not specified, the effect is as if a value of "-10%" were specified.
-    if (!m_x) {
-        lazy_create<SVGAnimatedLength>(m_x, this, LM_WIDTH, viewportElement());
-        m_x->baseVal()->setValueAsString(String("-10%").impl());
-    }
+    : SVGStyledElement(tagName, doc)
+    , SVGURIReference()
+    , SVGLangSpace()
+    , SVGExternalResourcesRequired()
+    , m_filterUnits(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
+    , m_primitiveUnits(SVG_UNIT_TYPE_USERSPACEONUSE)
+    , m_x(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_y(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_width(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_height(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_filterResX(0)
+    , m_filterResY(0)
 
-    return m_x.get();
-}
-
-SVGAnimatedLength *SVGFilterElement::y() const
 {
-    // Spec : If the attribute is not specified, the effect is as if a value of "-10%" were specified.
-    if (!m_y) {
-        lazy_create<SVGAnimatedLength>(m_y, this, LM_HEIGHT, viewportElement());
-        m_y->baseVal()->setValueAsString(String("-10%").impl());
-    }
+    // Spec: If the attribute is not specified, the effect is as if a value of "-10%" were specified.
+    m_x->setValueAsString("-10%");
+    m_y->setValueAsString("-10%");
 
-    return m_y.get();
-}
+    // Spec: If the attribute is not specified, the effect is as if a value of "120%" were specified.
+    m_width->setValueAsString("120%");
+    m_height->setValueAsString("120%");
 
-SVGAnimatedLength *SVGFilterElement::width() const
-{
-    // Spec : If the attribute is not specified, the effect is as if a value of "120%" were specified.
-    if (!m_width) {
-        lazy_create<SVGAnimatedLength>(m_width, this, LM_WIDTH, viewportElement());
-        m_width->baseVal()->setValueAsString(String("120%").impl());
-    }
-
-    return m_width.get();
-}
-
-SVGAnimatedLength *SVGFilterElement::height() const
-{
-    // Spec : If the attribute is not specified, the effect is as if a value of "120%" were specified.
-    if (!m_height) {
-        lazy_create<SVGAnimatedLength>(m_height, this, LM_HEIGHT, viewportElement());
-        m_height->baseVal()->setValueAsString(String("120%").impl());
-    }
-
-    return m_height.get();
+    m_filter = 0;
 }
 
-SVGAnimatedInteger *SVGFilterElement::filterResX() const
+SVGFilterElement::~SVGFilterElement()
 {
-    return lazy_create<SVGAnimatedInteger>(m_filterResX, this);
+    delete m_filter;
 }
 
-SVGAnimatedInteger *SVGFilterElement::filterResY() const
-{
-    return lazy_create<SVGAnimatedInteger>(m_filterResY, this);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGFilterElement, int, Enumeration, enumeration, FilterUnits, filterUnits, SVGNames::filterUnitsAttr.localName(), m_filterUnits)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFilterElement, int, Enumeration, enumeration, PrimitiveUnits, primitiveUnits, SVGNames::primitiveUnitsAttr.localName(), m_primitiveUnits)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFilterElement, SVGLength*, Length, length, X, x, SVGNames::xAttr.localName(), m_x.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGFilterElement, SVGLength*, Length, length, Y, y, SVGNames::yAttr.localName(), m_y.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGFilterElement, SVGLength*, Length, length, Width, width, SVGNames::widthAttr.localName(), m_width.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGFilterElement, SVGLength*, Length, length, Height, height, SVGNames::heightAttr.localName(), m_height.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGFilterElement, int, Integer, integer, FilterResX, filterResX, "filterResX", m_filterResX)
+ANIMATED_PROPERTY_DEFINITIONS(SVGFilterElement, int, Integer, integer, FilterResY, filterResY, "filterResY", m_filterResY)
 
 void SVGFilterElement::setFilterRes(unsigned long, unsigned long) const
 {
@@ -134,25 +87,25 @@ void SVGFilterElement::parseMappedAttribute(MappedAttribute *attr)
     if (attr->name() == SVGNames::filterUnitsAttr)
     {
         if(value == "userSpaceOnUse")
-            filterUnits()->setBaseVal(SVG_UNIT_TYPE_USERSPACEONUSE);
+            setFilterUnitsBaseValue(SVG_UNIT_TYPE_USERSPACEONUSE);
         else if(value == "objectBoundingBox")
-            filterUnits()->setBaseVal(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
+            setFilterUnitsBaseValue(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
     }
     else if (attr->name() == SVGNames::primitiveUnitsAttr)
     {
         if(value == "userSpaceOnUse")
-            primitiveUnits()->setBaseVal(SVG_UNIT_TYPE_USERSPACEONUSE);
+            setPrimitiveUnitsBaseValue(SVG_UNIT_TYPE_USERSPACEONUSE);
         else if(value == "objectBoundingBox")
-            primitiveUnits()->setBaseVal(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
+            setPrimitiveUnitsBaseValue(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
     }
     else if (attr->name() == SVGNames::xAttr)
-        x()->baseVal()->setValueAsString(value.impl());
+        xBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::yAttr)
-        y()->baseVal()->setValueAsString(value.impl());
+        yBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::widthAttr)
-        width()->baseVal()->setValueAsString(value.impl());
+        widthBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::heightAttr)
-        height()->baseVal()->setValueAsString(value.impl());
+        heightBaseValue()->setValueAsString(value.impl());
     else
     {
         if(SVGURIReference::parseMappedAttribute(attr)) return;
@@ -171,18 +124,18 @@ KCanvasFilter *SVGFilterElement::canvasResource()
     if (!m_filter)
         m_filter = static_cast<KCanvasFilter *>(renderingDevice()->createResource(RS_FILTER));
 
-    bool filterBBoxMode = filterUnits()->baseVal() == SVG_UNIT_TYPE_OBJECTBOUNDINGBOX;
+    bool filterBBoxMode = filterUnitsBaseValue() == SVG_UNIT_TYPE_OBJECTBOUNDINGBOX;
     m_filter->setFilterBoundingBoxMode(filterBBoxMode);
     
-    x()->baseVal()->setBboxRelative(filterBBoxMode);
-    y()->baseVal()->setBboxRelative(filterBBoxMode);
-    width()->baseVal()->setBboxRelative(filterBBoxMode);
-    height()->baseVal()->setBboxRelative(filterBBoxMode);
-    float _x = x()->baseVal()->value(), _y = y()->baseVal()->value();
-    float _width = width()->baseVal()->value(), _height = height()->baseVal()->value();
+    xBaseValue()->setBboxRelative(filterBBoxMode);
+    yBaseValue()->setBboxRelative(filterBBoxMode);
+    widthBaseValue()->setBboxRelative(filterBBoxMode);
+    heightBaseValue()->setBboxRelative(filterBBoxMode);
+    float _x = xBaseValue()->value(), _y = yBaseValue()->value();
+    float _width = widthBaseValue()->value(), _height = heightBaseValue()->value();
     m_filter->setFilterRect(FloatRect(_x, _y, _width, _height));
     
-    bool primitiveBBoxMode = primitiveUnits()->baseVal() == SVG_UNIT_TYPE_OBJECTBOUNDINGBOX;
+    bool primitiveBBoxMode = primitiveUnitsBaseValue() == SVG_UNIT_TYPE_OBJECTBOUNDINGBOX;
     m_filter->setEffectBoundingBoxMode(primitiveBBoxMode);
     // FIXME: When does this info get passed to the filters elements?
 
index 3718ef521bce4c4d35f646cd8c588e58aa43dd02..57d72f9d0716805e7409f2a27298b21edd4aaf99 100644 (file)
@@ -32,9 +32,7 @@
 #include "KCanvasFilters.h"
 
 namespace WebCore {
-    class SVGAnimatedEnumeration;
-    class SVGAnimatedInteger;
-    class SVGAnimatedLength;
+    class SVGLength;
 
     class SVGFilterElement : public SVGStyledElement,
                                  public SVGURIReference,
@@ -48,31 +46,22 @@ namespace WebCore {
         virtual KCanvasFilter *canvasResource();
 
         // 'SVGFilterElement' functions
-        SVGAnimatedEnumeration *filterUnits() const;
-        SVGAnimatedEnumeration *primitiveUnits() const;
-
-        SVGAnimatedLength *x() const;
-        SVGAnimatedLength *y() const;
-
-        SVGAnimatedLength *width() const;
-        SVGAnimatedLength *height() const;
-
-        SVGAnimatedInteger *filterResX() const;
-        SVGAnimatedInteger *filterResY() const;
-
         void setFilterRes(unsigned long filterResX, unsigned long filterResY) const;
 
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedEnumeration> m_filterUnits;
-        mutable RefPtr<SVGAnimatedEnumeration> m_primitiveUnits;
-        mutable RefPtr<SVGAnimatedLength> m_x;
-        mutable RefPtr<SVGAnimatedLength> m_y;
-        mutable RefPtr<SVGAnimatedLength> m_width;
-        mutable RefPtr<SVGAnimatedLength> m_height;
-        mutable RefPtr<SVGAnimatedInteger> m_filterResX;
-        mutable RefPtr<SVGAnimatedInteger> m_filterResY;
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, FilterUnits, filterUnits)
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, PrimitiveUnits, primitiveUnits)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, X, x)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Y, y)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Width, width)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Height, height)
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, FilterResX, filterResX)
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, FilterResY, filterResY)
         KCanvasFilter *m_filter;
     };
 
index f8007b355b69e77a9483f8eac33c4d2568d65b79..ac4ae2b8e1d8f188acdca8e19a8ff31e4c0f5763 100644 (file)
@@ -28,9 +28,7 @@
 #include "ksvg.h"
 #include "SVGNames.h"
 #include "SVGFilterPrimitiveStandardAttributes.h"
-#include "SVGAnimatedEnumeration.h"
-#include "SVGAnimatedString.h"
-#include "SVGAnimatedLength.h"
+#include "SVGLength.h"
 #include "SVGStyledElement.h"
 #include "SVGFilterElement.h"
 
 using namespace WebCore;
 
 SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes(const QualifiedName& tagName, Document *doc)
-: SVGStyledElement(tagName, doc)
-{
-}
-
-SVGFilterPrimitiveStandardAttributes::~SVGFilterPrimitiveStandardAttributes()
-{
-}
-
-SVGAnimatedLength *SVGFilterPrimitiveStandardAttributes::x() const
-{
-    // Spec : If the attribute is not specified, the effect is as if a value of "0%" were specified.
-    return lazy_create<SVGAnimatedLength>(m_x, this, LM_WIDTH);
-}
-
-SVGAnimatedLength *SVGFilterPrimitiveStandardAttributes::y() const
-{
-    // Spec : If the attribute is not specified, the effect is as if a value of "0%" were specified.
-    return lazy_create<SVGAnimatedLength>(m_y, this, LM_HEIGHT);
-}
-
-SVGAnimatedLength *SVGFilterPrimitiveStandardAttributes::width() const
+    : SVGStyledElement(tagName, doc)
+    , m_x(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_y(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_width(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_height(new SVGLength(this, LM_HEIGHT, viewportElement()))
 {
     // Spec : If the attribute is not specified, the effect is as if a value of "100%" were specified.
-    if (!m_width) {
-        lazy_create<SVGAnimatedLength>(m_width, this, LM_WIDTH);
-        m_width->baseVal()->setValueAsString(String("100%").impl());
-    }
-
-    return m_width.get();
+    m_width->setValueAsString("100%");
+    m_height->setValueAsString("100%");
 }
 
-SVGAnimatedLength *SVGFilterPrimitiveStandardAttributes::height() const
+SVGFilterPrimitiveStandardAttributes::~SVGFilterPrimitiveStandardAttributes()
 {
-    // Spec : If the attribute is not specified, the effect is as if a value of "100%" were specified.
-    if (!m_height) {
-        lazy_create<SVGAnimatedLength>(m_height, this, LM_HEIGHT);
-        m_height->baseVal()->setValueAsString(String("100%").impl());
-    }
-
-    return m_height.get();
 }
 
-SVGAnimatedString *SVGFilterPrimitiveStandardAttributes::result() const
-{
-    return lazy_create<SVGAnimatedString>(m_result, this);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGFilterPrimitiveStandardAttributes, SVGLength*, Length, length, X, x, SVGNames::xAttr.localName(), m_x.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGFilterPrimitiveStandardAttributes, SVGLength*, Length, length, Y, y, SVGNames::yAttr.localName(), m_y.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGFilterPrimitiveStandardAttributes, SVGLength*, Length, length, Width, width, SVGNames::widthAttr.localName(), m_width.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGFilterPrimitiveStandardAttributes, SVGLength*, Length, length, Height, height, SVGNames::heightAttr.localName(), m_height.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGFilterPrimitiveStandardAttributes, String, String, string, Result, result, SVGNames::resultAttr.localName(), m_result)
 
 void SVGFilterPrimitiveStandardAttributes::parseMappedAttribute(MappedAttribute *attr)
 {
     const AtomicString& value = attr->value();
     if (attr->name() == SVGNames::xAttr)
-        x()->baseVal()->setValueAsString(value.impl());
+        xBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::yAttr)
-        y()->baseVal()->setValueAsString(value.impl());
+        yBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::widthAttr)
-        width()->baseVal()->setValueAsString(value.impl());
+        widthBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::heightAttr)
-        height()->baseVal()->setValueAsString(value.impl());
+        heightBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::resultAttr)
-        result()->setBaseVal(value.impl());
+        setResultBaseValue(value.impl());
     else
         return SVGStyledElement::parseMappedAttribute(attr);
 }
@@ -110,20 +82,20 @@ void SVGFilterPrimitiveStandardAttributes::setStandardAttributes(KCanvasFilterEf
         return;
     bool bbox = false;
     if(parentNode() && parentNode()->hasTagName(SVGNames::filterTag))
-        bbox = static_cast<SVGFilterElement *>(parentNode())->primitiveUnits()->baseVal() == SVG_UNIT_TYPE_OBJECTBOUNDINGBOX;
-
-    x()->baseVal()->setBboxRelative(bbox);
-    y()->baseVal()->setBboxRelative(bbox);
-    width()->baseVal()->setBboxRelative(bbox);
-    height()->baseVal()->setBboxRelative(bbox);
-    float _x = x()->baseVal()->value(), _y = y()->baseVal()->value();
-    float _width = width()->baseVal()->value(), _height = height()->baseVal()->value();
+        bbox = static_cast<SVGFilterElement *>(parentNode())->primitiveUnitsBaseValue() == SVG_UNIT_TYPE_OBJECTBOUNDINGBOX;
+
+    xBaseValue()->setBboxRelative(bbox);
+    yBaseValue()->setBboxRelative(bbox);
+    widthBaseValue()->setBboxRelative(bbox);
+    heightBaseValue()->setBboxRelative(bbox);
+    float _x = xBaseValue()->value(), _y = yBaseValue()->value();
+    float _width = widthBaseValue()->value(), _height = heightBaseValue()->value();
     if(bbox)
         filterEffect->setSubRegion(FloatRect(_x * 100.f, _y * 100.f, _width * 100.f, _height * 100.f));
     else
         filterEffect->setSubRegion(FloatRect(_x, _y, _width, _height));
 
-    filterEffect->setResult(String(result()->baseVal()).deprecatedString());
+    filterEffect->setResult(String(resultBaseValue()).deprecatedString());
 }
 
 // vim:ts=4:noet
index 1eb153e257f37b57bcafa43370ac737d65694c3d..e6cfa4f0e2e8730e9e9e9e19574efa543a4a1c25 100644 (file)
@@ -28,8 +28,7 @@
 
 namespace WebCore {
     class KCanvasFilterEffect;
-    class SVGAnimatedLength;
-    class SVGAnimatedString;
+    class SVGLength;
 
     class SVGFilterPrimitiveStandardAttributes : public SVGStyledElement
     {
@@ -40,12 +39,6 @@ namespace WebCore {
         virtual bool isFilterEffect() const { return true; }
 
         // 'SVGFilterPrimitiveStandardAttributes' functions
-        SVGAnimatedLength *x() const;
-        SVGAnimatedLength *y() const;
-        SVGAnimatedLength *width() const;
-        SVGAnimatedLength *height() const;
-        SVGAnimatedString *result() const;
-
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
         virtual KCanvasFilterEffect *filterEffect() const = 0;
@@ -53,12 +46,15 @@ namespace WebCore {
     protected:
         void setStandardAttributes(KCanvasFilterEffect *filterEffect) const;
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedLength> m_x;
-        mutable RefPtr<SVGAnimatedLength> m_y;
-        mutable RefPtr<SVGAnimatedLength> m_width;
-        mutable RefPtr<SVGAnimatedLength> m_height;
-        mutable RefPtr<SVGAnimatedString> m_result;
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, X, x)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Y, y)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Width, width)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Height, height)
+        ANIMATED_PROPERTY_DECLARATIONS(String, String, Result, result)
     };
 
 } // namespace WebCore
index 6b408b30536ee85a52c81469029b7f16f0a05a04..d88520a5f8bee6112462455147f2399a3510d6d3 100644 (file)
@@ -24,8 +24,8 @@
 #ifdef SVG_SUPPORT
 
 #include "Attr.h"
-#include "SVGAnimatedPreserveAspectRatio.h"
-#include "SVGAnimatedRect.h"
+#include "SVGPreserveAspectRatio.h"
+#include "SVGRect.h"
 #include "SVGFitToViewBox.h"
 #include "SVGNames.h"
 #include "SVGPreserveAspectRatio.h"
@@ -37,6 +37,8 @@
 namespace WebCore {
 
 SVGFitToViewBox::SVGFitToViewBox()
+    : m_viewBox(new SVGRect(0))
+    , m_preserveAspectRatio(new SVGPreserveAspectRatio(0))
 {
 }
 
@@ -44,25 +46,8 @@ SVGFitToViewBox::~SVGFitToViewBox()
 {
 }
 
-SVGAnimatedRect* SVGFitToViewBox::viewBox() const
-{
-    if (!m_viewBox) {
-        //const SVGStyledElement *context = dynamic_cast<const SVGStyledElement *>(this);
-        m_viewBox = new SVGAnimatedRect(0); // FIXME: 0 is a hack
-    }
-
-    return m_viewBox.get();
-}
-
-SVGAnimatedPreserveAspectRatio* SVGFitToViewBox::preserveAspectRatio() const
-{
-    if (!m_preserveAspectRatio) {
-        //const SVGStyledElement *context = dynamic_cast<const SVGStyledElement *>(this);
-        m_preserveAspectRatio = new SVGAnimatedPreserveAspectRatio(0); // FIXME: 0 is a hack
-    }
-
-    return m_preserveAspectRatio.get();
-}
+ANIMATED_PROPERTY_DEFINITIONS_WITH_CONTEXT(SVGFitToViewBox, SVGRect*, Rect, rect, ViewBox, viewBox, SVGNames::viewBoxAttr.localName(), m_viewBox.get())
+ANIMATED_PROPERTY_DEFINITIONS_WITH_CONTEXT(SVGFitToViewBox, SVGPreserveAspectRatio*, PreserveAspectRatio, preserveAspectRatio, PreserveAspectRatio, preserveAspectRatio, SVGNames::preserveAspectRatioAttr.localName(), m_preserveAspectRatio.get())
 
 void SVGFitToViewBox::parseViewBox(StringImpl* str)
 {
@@ -93,10 +78,10 @@ void SVGFitToViewBox::parseViewBox(StringImpl* str)
     if (p < end) // nothing should come after the last, fourth number
         goto bail_out;
 
-    viewBox()->baseVal()->setX(x);
-    viewBox()->baseVal()->setY(y);
-    viewBox()->baseVal()->setWidth(w);
-    viewBox()->baseVal()->setHeight(h);
+    viewBoxBaseValue()->setX(x);
+    viewBoxBaseValue()->setY(y);
+    viewBoxBaseValue()->setWidth(w);
+    viewBoxBaseValue()->setHeight(h);
     return;
 
 bail_out:;
@@ -105,11 +90,11 @@ bail_out:;
 
 SVGMatrix* SVGFitToViewBox::viewBoxToViewTransform(float viewWidth, float viewHeight) const
 {
-    SVGRect* viewBoxRect = viewBox()->baseVal();
+    SVGRect* viewBoxRect = viewBoxBaseValue();
     if(viewBoxRect->width() == 0 || viewBoxRect->height() == 0)
         return SVGSVGElement::createSVGMatrix();
 
-    return preserveAspectRatio()->baseVal()->getCTM(viewBoxRect->x(),
+    return preserveAspectRatioBaseValue()->getCTM(viewBoxRect->x(),
             viewBoxRect->y(), viewBoxRect->width(), viewBoxRect->height(),
             0, 0, viewWidth, viewHeight);
 }
@@ -120,7 +105,7 @@ bool SVGFitToViewBox::parseMappedAttribute(MappedAttribute* attr)
         parseViewBox(attr->value().impl());
         return true;
     } else if (attr->name() == SVGNames::preserveAspectRatioAttr) {
-        preserveAspectRatio()->baseVal()->parsePreserveAspectRatio(attr->value().impl());
+        preserveAspectRatioBaseValue()->parsePreserveAspectRatio(attr->value().impl());
         return true;
     }
 
index 89d00289e2be5cdac011bb8be0362c608cb58bf1..bc8981dd4df69c2146f8b8d9f50630ee335a9ecf 100644 (file)
 #define KSVG_SVGFitToViewBoxImpl_H
 #ifdef SVG_SUPPORT
 
+#include "SVGElement.h"
+
 namespace WebCore {
     class Attribute;
     class StringImpl;
-    class SVGAnimatedPreserveAspectRatio;
-    class SVGAnimatedRect;
+    class SVGPreserveAspectRatio;
+    class SVGRect;
     class SVGMatrix;
 
     class SVGFitToViewBox {
@@ -37,17 +39,17 @@ namespace WebCore {
         virtual ~SVGFitToViewBox();
 
         // 'SVGFitToViewBox' functions
-        SVGAnimatedRect *viewBox() const;
-        SVGAnimatedPreserveAspectRatio *preserveAspectRatio() const;
-
         void parseViewBox(StringImpl *str);
         SVGMatrix *viewBoxToViewTransform(float viewWidth, float viewHeight) const;
 
         bool parseMappedAttribute(MappedAttribute *attr);
 
+    protected:
+        virtual const SVGElement* contextElement() const = 0;
+
     private:
-        mutable RefPtr<SVGAnimatedRect> m_viewBox;
-        mutable RefPtr<SVGAnimatedPreserveAspectRatio> m_preserveAspectRatio;
+        ANIMATED_PROPERTY_DECLARATIONS(SVGRect*, RefPtr<SVGRect>, ViewBox, viewBox)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGPreserveAspectRatio*, RefPtr<SVGPreserveAspectRatio>, PreserveAspectRatio, preserveAspectRatio)
     };
 
 } // namespace WebCore
index d37e5c48cd32098705352db0f2340441c70a635b..6715d5745307c2fd7d47136b5823a7a614f5876d 100644 (file)
@@ -26,7 +26,7 @@
 
 #include "SVGNames.h"
 #include "SVGHelper.h"
-#include "SVGAnimatedLength.h"
+#include "SVGLength.h"
 #include "RenderForeignObject.h"
 
 #include <wtf/Assertions.h>
 namespace WebCore {
 
 SVGForeignObjectElement::SVGForeignObjectElement(const QualifiedName& tagName, Document *doc)
-: SVGStyledTransformableElement(tagName, doc), SVGTests(), SVGLangSpace(), SVGExternalResourcesRequired()
+    : SVGStyledTransformableElement(tagName, doc)
+    , SVGTests()
+    , SVGLangSpace()
+    , SVGExternalResourcesRequired()
+    , m_x(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_y(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_width(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_height(new SVGLength(this, LM_HEIGHT, viewportElement()))
 {
 }
 
@@ -44,38 +51,23 @@ SVGForeignObjectElement::~SVGForeignObjectElement()
 {
 }
 
-SVGAnimatedLength *SVGForeignObjectElement::x() const
-{
-    return lazy_create<SVGAnimatedLength>(m_x, this, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength *SVGForeignObjectElement::y() const
-{
-    return lazy_create<SVGAnimatedLength>(m_y, this, LM_HEIGHT, viewportElement());
-}
-
-SVGAnimatedLength *SVGForeignObjectElement::width() const
-{
-    return lazy_create<SVGAnimatedLength>(m_width, this, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength *SVGForeignObjectElement::height() const
-{
-    return lazy_create<SVGAnimatedLength>(m_height, this, LM_HEIGHT, viewportElement());
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGForeignObjectElement, SVGLength*, Length, length, X, x, SVGNames::xAttr.localName(), m_x.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGForeignObjectElement, SVGLength*, Length, length, Y, y, SVGNames::yAttr.localName(), m_y.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGForeignObjectElement, SVGLength*, Length, length, Width, width, SVGNames::widthAttr.localName(), m_width.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGForeignObjectElement, SVGLength*, Length, length, Height, height, SVGNames::heightAttr.localName(), m_height.get())
 
 void SVGForeignObjectElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const AtomicString& value = attr->value();
     if (attr->name() == SVGNames::xAttr)
-        x()->baseVal()->setValueAsString(value.impl());
+        xBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::yAttr)
-        y()->baseVal()->setValueAsString(value.impl());
+        yBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::widthAttr) {
-        width()->baseVal()->setValueAsString(value.impl());
+        widthBaseValue()->setValueAsString(value.impl());
         addCSSProperty(attr, CSS_PROP_WIDTH, value);
     } else if (attr->name() == SVGNames::heightAttr) {
-        height()->baseVal()->setValueAsString(value.impl());
+        heightBaseValue()->setValueAsString(value.impl());
         addCSSProperty(attr, CSS_PROP_HEIGHT, value);
     } else {
         if (SVGTests::parseMappedAttribute(attr))
index a29b8ad41f469105d3af7caaa53f2888c3c0ac37..df4ccbfa706ddb0d328d8afeb583bd1044a2f75b 100644 (file)
@@ -31,7 +31,7 @@
 
 namespace WebCore
 {
-    class SVGAnimatedLength;
+    class SVGLength;
     class SVGDocument;
 
     class SVGForeignObjectElement : public SVGStyledTransformableElement,
@@ -45,24 +45,20 @@ namespace WebCore
         virtual ~SVGForeignObjectElement();
         
         virtual bool isValid() const { return SVGTests::isValid(); }
-
-        SVGAnimatedLength *x() const;
-        SVGAnimatedLength *y() const;
-
-        SVGAnimatedLength *width() const;
-        SVGAnimatedLength *height() const;
-
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
         virtual bool rendererIsNeeded(RenderStyle *style) { return StyledElement::rendererIsNeeded(style); }
         bool childShouldCreateRenderer(Node *child) const;
         virtual RenderObject *createRenderer(RenderArena *arena, RenderStyle *style);
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedLength> m_x;
-        mutable RefPtr<SVGAnimatedLength> m_y;
-        mutable RefPtr<SVGAnimatedLength> m_width;
-        mutable RefPtr<SVGAnimatedLength> m_height;
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, X, x)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Y, y)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Width, width)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Height, height)
     };
 
 } // namespace WebCore
index abb36cb1859a3efca239515b867365eb819a2d96..a149a0418a52d416d7654c8fdc631133116cf7a4 100644 (file)
@@ -46,6 +46,9 @@ namespace WebCore
 
         virtual bool rendererIsNeeded(RenderStyle *style) { return StyledElement::rendererIsNeeded(style); }
         virtual RenderObject *createRenderer(RenderArena *arena, RenderStyle *style);
+
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
     };
 
     class SVGDummyElement : public SVGGElement {
index 5c65ef0264950f51dcdaedd64e2579efe29e0597..255433ad9e78ed5ed7ead5a5b968cee472efb8fb 100644 (file)
@@ -27,9 +27,7 @@
 #include "Attr.h"
 #include "Document.h"
 #include "RenderView.h"
-#include "SVGAnimatedEnumeration.h"
-#include "SVGAnimatedNumber.h"
-#include "SVGAnimatedTransformList.h"
+#include "SVGTransformList.h"
 #include "SVGHelper.h"
 #include "SVGNames.h"
 #include "SVGRenderStyle.h"
 
 using namespace WebCore;
 
-SVGGradientElement::SVGGradientElement(const QualifiedName& tagName, Document *doc) : SVGStyledElement(tagName, doc), SVGURIReference(), SVGExternalResourcesRequired()
+SVGGradientElement::SVGGradientElement(const QualifiedName& tagName, Document *doc)
+    : SVGStyledElement(tagName, doc)
+    , SVGURIReference()
+    , SVGExternalResourcesRequired()
+    , m_spreadMethod(0)
+    , m_gradientUnits(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
+    , m_gradientTransform(new SVGTransformList(this))
 {
     m_resource = 0;
 }
@@ -53,44 +57,28 @@ SVGGradientElement::~SVGGradientElement()
     delete m_resource;
 }
 
-SVGAnimatedEnumeration *SVGGradientElement::gradientUnits() const
-{
-    if (!m_gradientUnits) {
-        lazy_create<SVGAnimatedEnumeration>(m_gradientUnits, this);
-        m_gradientUnits->setBaseVal(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
-    }
-    
-    return m_gradientUnits.get();
-}
-
-SVGAnimatedTransformList *SVGGradientElement::gradientTransform() const
-{
-    return lazy_create<SVGAnimatedTransformList>(m_gradientTransform, this);
-}
-
-SVGAnimatedEnumeration *SVGGradientElement::spreadMethod() const
-{
-    return lazy_create<SVGAnimatedEnumeration>(m_spreadMethod, this);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGGradientElement, int, Enumeration, enumeration, GradientUnits, gradientUnits, SVGNames::gradientUnitsAttr.localName(), m_gradientUnits)
+ANIMATED_PROPERTY_DEFINITIONS(SVGGradientElement, SVGTransformList*, TransformList, transformList, GradientTransform, gradientTransform, SVGNames::gradientTransformAttr.localName(), m_gradientTransform.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGGradientElement, int, Enumeration, enumeration, SpreadMethod, spreadMethod, SVGNames::spreadMethodAttr.localName(), m_spreadMethod)
 
 void SVGGradientElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const String& value = attr->value();
     if (attr->name() == SVGNames::gradientUnitsAttr) {
         if(value == "userSpaceOnUse")
-            gradientUnits()->setBaseVal(SVG_UNIT_TYPE_USERSPACEONUSE);
+            setGradientUnitsBaseValue(SVG_UNIT_TYPE_USERSPACEONUSE);
         else if(value == "objectBoundingBox")
-            gradientUnits()->setBaseVal(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
+            setGradientUnitsBaseValue(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
     } else if (attr->name() == SVGNames::gradientTransformAttr) {
-        SVGTransformList *gradientTransforms = gradientTransform()->baseVal();
+        SVGTransformList *gradientTransforms = gradientTransformBaseValue();
         SVGTransformable::parseTransformAttribute(gradientTransforms, attr->value());
     } else if (attr->name() == SVGNames::spreadMethodAttr) {
         if(value == "reflect")
-            spreadMethod()->setBaseVal(SVG_SPREADMETHOD_REFLECT);
+            setSpreadMethodBaseValue(SVG_SPREADMETHOD_REFLECT);
         else if(value == "repeat")
-            spreadMethod()->setBaseVal(SVG_SPREADMETHOD_REPEAT);
+            setSpreadMethodBaseValue(SVG_SPREADMETHOD_REPEAT);
         else if(value == "pad")
-            spreadMethod()->setBaseVal(SVG_SPREADMETHOD_PAD);
+            setSpreadMethodBaseValue(SVG_SPREADMETHOD_PAD);
     } else {
         if (SVGURIReference::parseMappedAttribute(attr))
             return;
@@ -148,7 +136,7 @@ void SVGGradientElement::rebuildStops() const
             SVGElement *element = svg_dynamic_cast(n);
             if (element && element->isGradientStop()) {
                 SVGStopElement *stop = static_cast<SVGStopElement *>(element);
-                float stopOffset = stop->offset()->baseVal();
+                float stopOffset = stop->offsetBaseValue();
                 
                 RenderStyle *stopStyle = document()->styleSelector()->styleForElement(stop, gradientStyle);
                 Color c = stopStyle->svgStyle()->stopColor();
index 0c73b369ee3578520e7fb8e3d3e3fd36cf68938e..e473d64d6b7c75fde6cba93c5befb013f22c55bb 100644 (file)
@@ -32,8 +32,7 @@
 
 namespace WebCore {
     class SVGGradientElement;
-    class SVGAnimatedEnumeration;
-    class SVGAnimatedTransformList;
+    class SVGTransformList;
     class SVGGradientElement : public SVGStyledElement,
                                    public SVGURIReference,
                                    public SVGExternalResourcesRequired,
@@ -44,10 +43,6 @@ namespace WebCore {
         virtual ~SVGGradientElement();
 
         // 'SVGGradientElement' functions
-        SVGAnimatedEnumeration *gradientUnits() const;
-        SVGAnimatedTransformList *gradientTransform() const;
-        SVGAnimatedEnumeration *spreadMethod() const;
-
         virtual void parseMappedAttribute(MappedAttribute *attr);
         virtual void notifyAttributeChange() const;
         
@@ -60,9 +55,9 @@ namespace WebCore {
         void rebuildStops() const;
 
     protected:
-        mutable RefPtr<SVGAnimatedEnumeration> m_spreadMethod;
-        mutable RefPtr<SVGAnimatedEnumeration> m_gradientUnits;
-        mutable RefPtr<SVGAnimatedTransformList> m_gradientTransform;
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, SpreadMethod, spreadMethod)
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, GradientUnits, gradientUnits)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGTransformList*, RefPtr<SVGTransformList>, GradientTransform, gradientTransform)
         mutable KRenderingPaintServerGradient *m_resource;
     };
 
index 7aeedafda24ff1a1496fe8820e1bd0a55979eb4a..13a66b05e71bfec62801f8e76f868e8c24c450b2 100644 (file)
@@ -27,8 +27,8 @@
 #include "Document.h"
 #include "FrameView.h"
 #include "RenderView.h"
-#include "SVGAnimatedLength.h"
-#include "SVGAnimatedRect.h"
+#include "SVGLength.h"
+#include "SVGRect.h"
 #include "SVGSVGElement.h"
 #include "SVGStringList.h"
 #include "ksvg.h"
@@ -47,10 +47,10 @@ float SVGHelper::PercentageOfViewport(float value, const SVGElement* viewportEle
     if (viewportElement->isSVG()) {
         const SVGSVGElement* svg = static_cast<const SVGSVGElement*>(viewportElement);
         if (svg->hasAttribute(SVGNames::viewBoxAttr)) {
-            width = svg->viewBox()->baseVal()->width();
-            height = svg->viewBox()->baseVal()->height();
-        } else if (svg->width()->baseVal()->unitType() == SVGLength::SVG_LENGTHTYPE_PERCENTAGE ||
-                svg->height()->baseVal()->unitType() == SVGLength::SVG_LENGTHTYPE_PERCENTAGE) {
+            width = svg->viewBoxBaseValue()->width();
+            height = svg->viewBoxBaseValue()->height();
+        } else if (svg->widthBaseValue()->unitType() == SVGLength::SVG_LENGTHTYPE_PERCENTAGE ||
+                svg->heightBaseValue()->unitType() == SVGLength::SVG_LENGTHTYPE_PERCENTAGE) {
             // TODO: Shouldn't w/h be multiplied with the percentage values?!
             // AFAIK, this assumes width & height == 100%, Rob??
             Document *doc = svg->document();
@@ -63,8 +63,8 @@ float SVGHelper::PercentageOfViewport(float value, const SVGElement* viewportEle
                 }
             }
         } else {
-            width = svg->width()->baseVal()->value();
-            height = svg->height()->baseVal()->value();
+            width = svg->widthBaseValue()->value();
+            height = svg->heightBaseValue()->value();
         }
     }
 
index b568ff5478e2f32e5e419c2441ec610e4be1ff99..9490d23863be9ea08b60113e27522dd5d0cc7b60 100644 (file)
 #include "CSSPropertyNames.h"
 #include "KCanvasRenderingStyle.h"
 #include "RenderSVGImage.h"
-#include "SVGAnimatedBoolean.h"
-#include "SVGAnimatedLength.h"
-#include "SVGAnimatedPreserveAspectRatio.h"
-#include "SVGAnimatedString.h"
+#include "SVGLength.h"
+#include "SVGPreserveAspectRatio.h"
 #include "SVGDocument.h"
 #include "SVGHelper.h"
 #include "SVGNames.h"
@@ -50,6 +48,11 @@ SVGImageElement::SVGImageElement(const QualifiedName& tagName, Document *doc)
     , SVGLangSpace()
     , SVGExternalResourcesRequired()
     , SVGURIReference()
+    , m_x(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_y(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_width(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_height(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_preserveAspectRatio(new SVGPreserveAspectRatio(this))
     , m_imageLoader(this)
 {
 }
@@ -58,45 +61,26 @@ SVGImageElement::~SVGImageElement()
 {
 }
 
-SVGAnimatedLength *SVGImageElement::x() const
-{
-    return lazy_create<SVGAnimatedLength>(m_x, this, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength *SVGImageElement::y() const
-{
-    return lazy_create<SVGAnimatedLength>(m_y, this, LM_HEIGHT, viewportElement());
-}
-
-SVGAnimatedLength *SVGImageElement::width() const
-{
-    return lazy_create<SVGAnimatedLength>(m_width, this, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength *SVGImageElement::height() const
-{
-    return lazy_create<SVGAnimatedLength>(m_height, this, LM_HEIGHT, viewportElement());
-}
-
-SVGAnimatedPreserveAspectRatio *SVGImageElement::preserveAspectRatio() const
-{
-    return lazy_create<SVGAnimatedPreserveAspectRatio>(m_preserveAspectRatio, this);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGImageElement, SVGLength*, Length, length, X, x, SVGNames::xAttr.localName(), m_x.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGImageElement, SVGLength*, Length, length, Y, y, SVGNames::yAttr.localName(), m_y.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGImageElement, SVGLength*, Length, length, Width, width, SVGNames::widthAttr.localName(), m_width.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGImageElement, SVGLength*, Length, length, Height, height, SVGNames::heightAttr.localName(), m_height.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGImageElement, SVGPreserveAspectRatio*, PreserveAspectRatio, preserveAspectRatio, PreserveAspectRatio, preserveAspectRatio, SVGNames::preserveAspectRatioAttr.localName(), m_preserveAspectRatio.get())
 
 void SVGImageElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const AtomicString& value = attr->value();
     if (attr->name() == SVGNames::xAttr)
-        x()->baseVal()->setValueAsString(value.impl());
+        xBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::yAttr)
-        y()->baseVal()->setValueAsString(value.impl());
+        yBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::preserveAspectRatioAttr)
-        preserveAspectRatio()->baseVal()->parsePreserveAspectRatio(value.impl());
+        preserveAspectRatioBaseValue()->parsePreserveAspectRatio(value.impl());
     else if (attr->name() == SVGNames::widthAttr) {
-        width()->baseVal()->setValueAsString(value.impl());
+        widthBaseValue()->setValueAsString(value.impl());
         addCSSProperty(attr, CSS_PROP_WIDTH, value);
     } else if (attr->name() == SVGNames::heightAttr) {
-        height()->baseVal()->setValueAsString(value.impl());
+        heightBaseValue()->setValueAsString(value.impl());
         addCSSProperty(attr, CSS_PROP_HEIGHT, value);
     } else {
         if (SVGTests::parseMappedAttribute(attr))
@@ -121,7 +105,7 @@ RenderObject *SVGImageElement::createRenderer(RenderArena *arena, RenderStyle *s
 
 bool SVGImageElement::haveLoadedRequiredResources()
 {
-    return (!externalResourcesRequired()->baseVal() || m_imageLoader.imageComplete());
+    return (!externalResourcesRequiredBaseValue() || m_imageLoader.imageComplete());
 }
 
 void SVGImageElement::attach()
index 601016a3595ae62c052f01170da5488c9cd695dc..b048a19787380b9bb4c3001edec8d161e99bd404 100644 (file)
@@ -33,8 +33,8 @@
 
 namespace WebCore
 {
-    class SVGAnimatedPreserveAspectRatio;
-    class SVGAnimatedLength;
+    class SVGPreserveAspectRatio;
+    class SVGLength;
     class SVGDocument;
 
     class SVGImageElement : public SVGStyledTransformableElement,
@@ -50,14 +50,6 @@ namespace WebCore
         virtual bool isValid() const { return SVGTests::isValid(); }
 
         // 'SVGImageElement' functions
-        SVGAnimatedLength *x() const;
-        SVGAnimatedLength *y() const;
-
-        SVGAnimatedLength *width() const;
-        SVGAnimatedLength *height() const;
-
-        SVGAnimatedPreserveAspectRatio *preserveAspectRatio() const;
-
         virtual void parseMappedAttribute(MappedAttribute *attr);
         virtual void attach();
 
@@ -67,13 +59,15 @@ namespace WebCore
     protected:
         virtual bool haveLoadedRequiredResources();
 
-    private:
-        mutable RefPtr<SVGAnimatedLength> m_x;
-        mutable RefPtr<SVGAnimatedLength> m_y;
-        mutable RefPtr<SVGAnimatedLength> m_width;
-        mutable RefPtr<SVGAnimatedLength> m_height;
-        mutable RefPtr<SVGAnimatedPreserveAspectRatio> m_preserveAspectRatio;
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
 
+    private:
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, X, x)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Y, y)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Width, width)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Height, height)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGPreserveAspectRatio*, RefPtr<SVGPreserveAspectRatio>, PreserveAspectRatio, preserveAspectRatio)
         SVGImageLoader m_imageLoader;
     };
 
index 99180ea1f8b7529415099c3a7cb1f497f5ed8cbf..28749898ffc4d8d60d8a3bf5a54de5376675720e 100644 (file)
@@ -30,8 +30,7 @@ namespace WebCore {
 
     class MappedAttribute;
     class StringImpl;
-    class SVGAnimatedLength;
-    class SVGAnimatedString;
+    class SVGLength;
 
     class SVGLangSpace {
     public:
index 6f4b93ef46f173ccb108c9b3228bc0717a809ef9..2cafa883051320c9f0e3a8aba8b9e26610937abf 100644 (file)
@@ -32,8 +32,8 @@
 #include "SVGLength.h"
 #include "SVGElement.h"
 #include "SVGSVGElement.h"
-#include "SVGAnimatedRect.h"
-#include "SVGAnimatedLength.h"
+#include "SVGRect.h"
+#include "SVGLength.h"
 
 #include <math.h>
 
index f851d14460f86399cef0bdb5cc83c263c75451e1..e7b661b4345327260cab37d89cb3bfb3cfc69a25 100644 (file)
 #include "SVGNames.h"
 #include "SVGHelper.h"
 #include "SVGLineElement.h"
-#include "SVGAnimatedLength.h"
+#include "SVGLength.h"
 
 using namespace WebCore;
 
 SVGLineElement::SVGLineElement(const QualifiedName& tagName, Document *doc)
-: SVGStyledTransformableElement(tagName, doc), SVGTests(), SVGLangSpace(), SVGExternalResourcesRequired()
+    : SVGStyledTransformableElement(tagName, doc)
+    , SVGTests()
+    , SVGLangSpace()
+    , SVGExternalResourcesRequired()
+    , m_x1(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_y1(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_x2(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_y2(new SVGLength(this, LM_HEIGHT, viewportElement()))
 {
 }
 
@@ -42,37 +49,22 @@ SVGLineElement::~SVGLineElement()
 {
 }
 
-SVGAnimatedLength *SVGLineElement::x1() const
-{
-    return lazy_create<SVGAnimatedLength>(m_x1, this, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength *SVGLineElement::y1() const
-{
-    return lazy_create<SVGAnimatedLength>(m_y1, this, LM_HEIGHT, viewportElement());
-}
-
-SVGAnimatedLength *SVGLineElement::x2() const
-{
-    return lazy_create<SVGAnimatedLength>(m_x2, this, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength *SVGLineElement::y2() const
-{
-    return lazy_create<SVGAnimatedLength>(m_y2, this, LM_HEIGHT, viewportElement());
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGLineElement, SVGLength*, Length, length, X1, x1, SVGNames::x1Attr.localName(), m_x1.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGLineElement, SVGLength*, Length, length, Y1, y1, SVGNames::y1Attr.localName(), m_y1.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGLineElement, SVGLength*, Length, length, X2, x2, SVGNames::x2Attr.localName(), m_x2.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGLineElement, SVGLength*, Length, length, Y2, y2, SVGNames::y2Attr.localName(), m_y2.get())
 
 void SVGLineElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const AtomicString& value = attr->value();
     if (attr->name() == SVGNames::x1Attr)
-        x1()->baseVal()->setValueAsString(value.impl());
+        x1BaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::y1Attr)
-        y1()->baseVal()->setValueAsString(value.impl());
+        y1BaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::x2Attr)
-        x2()->baseVal()->setValueAsString(value.impl());
+        x2BaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::y2Attr)
-        y2()->baseVal()->setValueAsString(value.impl());
+        y2BaseValue()->setValueAsString(value.impl());
     else
     {
         if(SVGTests::parseMappedAttribute(attr)) return;
@@ -84,8 +76,8 @@ void SVGLineElement::parseMappedAttribute(MappedAttribute *attr)
 
 Path SVGLineElement::toPathData() const
 {
-    float _x1 = x1()->baseVal()->value(), _y1 = y1()->baseVal()->value();
-    float _x2 = x2()->baseVal()->value(), _y2 = y2()->baseVal()->value();
+    float _x1 = x1BaseValue()->value(), _y1 = y1BaseValue()->value();
+    float _x2 = x2BaseValue()->value(), _y2 = y2BaseValue()->value();
 
     return Path::createLine(FloatPoint(_x1, _y1), FloatPoint(_x2, _y2));
 }
@@ -93,12 +85,12 @@ Path SVGLineElement::toPathData() const
 const SVGStyledElement *SVGLineElement::pushAttributeContext(const SVGStyledElement *context)
 {
     // All attribute's contexts are equal (so just take the one from 'x1').
-    const SVGStyledElement *restore = x1()->baseVal()->context();
+    const SVGStyledElement *restore = x1BaseValue()->context();
 
-    x1()->baseVal()->setContext(context);
-    y1()->baseVal()->setContext(context);
-    x2()->baseVal()->setContext(context);
-    y2()->baseVal()->setContext(context);
+    x1BaseValue()->setContext(context);
+    y1BaseValue()->setContext(context);
+    x2BaseValue()->setContext(context);
+    y2BaseValue()->setContext(context);
     
     SVGStyledElement::pushAttributeContext(context);
     return restore;
index 3e3d01dc08cfab05cedb2ee7906722ede3ba9096..be7ee352b102b598671bf0f489b3dc745575cf17 100644 (file)
@@ -31,7 +31,7 @@
 
 namespace WebCore
 {
-    class SVGAnimatedLength;
+    class SVGLength;
     class SVGLineElement : public SVGStyledTransformableElement,
                                public SVGTests,
                                public SVGLangSpace,
@@ -44,11 +44,6 @@ namespace WebCore
         virtual bool isValid() const { return SVGTests::isValid(); }
 
         // 'SVGLineElement' functions
-        SVGAnimatedLength *x1() const;
-        SVGAnimatedLength *y1() const;
-        SVGAnimatedLength *x2() const;
-        SVGAnimatedLength *y2() const;
-
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
         virtual bool rendererIsNeeded(RenderStyle *style) { return StyledElement::rendererIsNeeded(style); }
@@ -56,11 +51,15 @@ namespace WebCore
 
         virtual const SVGStyledElement *pushAttributeContext(const SVGStyledElement *context);
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedLength> m_x1;
-        mutable RefPtr<SVGAnimatedLength> m_y1;
-        mutable RefPtr<SVGAnimatedLength> m_x2;
-        mutable RefPtr<SVGAnimatedLength> m_y2;
+
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, X1, x1)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Y1, y1)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, X2, x2)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Y2, y2)
     };
 
 } // namespace WebCore
index 33a7cc337d0bffe69c30a839259e15addc3bdf9c..1944418ee97eee13af559cc0d9c0b3080462daf7 100644 (file)
 #include "SVGMatrix.h"
 #include "SVGTransform.h"
 #include "SVGTransformList.h"
-#include "SVGAnimatedString.h"
-#include "SVGAnimatedLength.h"
-#include "SVGAnimatedEnumeration.h"
+#include "SVGLength.h"
 #include "SVGLinearGradientElement.h"
-#include "SVGAnimatedTransformList.h"
+#include "SVGTransformList.h"
 
 #include <kcanvas/KCanvasResources.h>
 #include <kcanvas/device/KRenderingDevice.h>
 
 using namespace WebCore;
 
-SVGLinearGradientElement::SVGLinearGradientElement(const QualifiedName& tagName, Document *doc) : SVGGradientElement(tagName, doc)
+SVGLinearGradientElement::SVGLinearGradientElement(const QualifiedName& tagName, Document *doc)
+    : SVGGradientElement(tagName, doc)
+    , m_x1(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_y1(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_x2(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_y2(new SVGLength(this, LM_HEIGHT, viewportElement()))
 {
+    // Spec : If the attribute is not specified, the effect is as if a value of "100%" were specified.
+    m_x2->setValueAsString("100%");
 }
 
 SVGLinearGradientElement::~SVGLinearGradientElement()
 {
 }
 
-SVGAnimatedLength *SVGLinearGradientElement::x1() const
-{
-    // Spec : If the attribute is not specified, the effect is as if a value of "0%" were specified.
-    return lazy_create<SVGAnimatedLength>(m_x1, this, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength *SVGLinearGradientElement::y1() const
-{
-    // Spec : If the attribute is not specified, the effect is as if a value of "0%" were specified.
-    return lazy_create<SVGAnimatedLength>(m_y1, this, LM_HEIGHT, viewportElement());
-}
-
-SVGAnimatedLength *SVGLinearGradientElement::x2() const
-{
-    // Spec : If the attribute is not specified, the effect is as if a value of "100%" were specified.
-    if (!m_x2) {
-        lazy_create<SVGAnimatedLength>(m_x2, this, LM_WIDTH, viewportElement());
-        m_x2->baseVal()->setValue(1.0);
-    }
-
-    return m_x2.get();
-}
-
-SVGAnimatedLength *SVGLinearGradientElement::y2() const
-{
-    // Spec : If the attribute is not specified, the effect is as if a value of "0%" were specified.
-    return lazy_create<SVGAnimatedLength>(m_y2, this, LM_HEIGHT, viewportElement());
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGLinearGradientElement, SVGLength*, Length, length, X1, x1, SVGNames::x1Attr.localName(), m_x1.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGLinearGradientElement, SVGLength*, Length, length, Y1, y1, SVGNames::y1Attr.localName(), m_y1.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGLinearGradientElement, SVGLength*, Length, length, X2, x2, SVGNames::x2Attr.localName(), m_x2.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGLinearGradientElement, SVGLength*, Length, length, Y2, y2, SVGNames::y2Attr.localName(), m_y2.get())
 
 void SVGLinearGradientElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const AtomicString& value = attr->value();
     if (attr->name() == SVGNames::x1Attr)
-        x1()->baseVal()->setValueAsString(value.impl());
+        x1BaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::y1Attr)
-        y1()->baseVal()->setValueAsString(value.impl());
+        y1BaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::x2Attr)
-        x2()->baseVal()->setValueAsString(value.impl());
+        x2BaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::y2Attr)
-        y2()->baseVal()->setValueAsString(value.impl());
+        y2BaseValue()->setValueAsString(value.impl());
     else
         SVGGradientElement::parseMappedAttribute(attr);
 }
@@ -98,22 +79,22 @@ void SVGLinearGradientElement::buildGradient(KRenderingPaintServerGradient *_gra
 {
     rebuildStops(); // rebuild stops before possibly importing them from any referenced gradient.
 
-    bool bbox = (gradientUnits()->baseVal() == SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
+    bool bbox = (gradientUnitsBaseValue() == SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
     
-    x1()->baseVal()->setBboxRelative(bbox);
-    y1()->baseVal()->setBboxRelative(bbox);
-    x2()->baseVal()->setBboxRelative(bbox);
-    y2()->baseVal()->setBboxRelative(bbox);
+    x1BaseValue()->setBboxRelative(bbox);
+    y1BaseValue()->setBboxRelative(bbox);
+    x2BaseValue()->setBboxRelative(bbox);
+    y2BaseValue()->setBboxRelative(bbox);
     
-    float _x1 = x1()->baseVal()->value(), _y1 = y1()->baseVal()->value();
-    float _x2 = x2()->baseVal()->value(), _y2 = y2()->baseVal()->value();
+    float _x1 = x1BaseValue()->value(), _y1 = y1BaseValue()->value();
+    float _x2 = x2BaseValue()->value(), _y2 = y2BaseValue()->value();
 
     KRenderingPaintServerLinearGradient *grad = static_cast<KRenderingPaintServerLinearGradient *>(_grad);
     AffineTransform mat;
-    if(gradientTransform()->baseVal()->numberOfItems() > 0)
-        mat = gradientTransform()->baseVal()->consolidate()->matrix()->matrix();
+    if(gradientTransformBaseValue()->numberOfItems() > 0)
+        mat = gradientTransformBaseValue()->consolidate()->matrix()->matrix();
 
-    DeprecatedString ref = String(href()->baseVal()).deprecatedString();
+    DeprecatedString ref = String(hrefBaseValue()).deprecatedString();
     KRenderingPaintServer *pserver = getPaintServerById(document(), ref.mid(1));
     
     if(pserver && (pserver->type() == PS_RADIAL_GRADIENT || pserver->type() == PS_LINEAR_GRADIENT))
@@ -167,9 +148,9 @@ void SVGLinearGradientElement::buildGradient(KRenderingPaintServerGradient *_gra
     }
     else
     {
-        if(spreadMethod()->baseVal() == SVG_SPREADMETHOD_REFLECT)
+        if(spreadMethodBaseValue() == SVG_SPREADMETHOD_REFLECT)
             grad->setGradientSpreadMethod(SPREADMETHOD_REFLECT);
-        else if(spreadMethod()->baseVal() == SVG_SPREADMETHOD_REPEAT)
+        else if(spreadMethodBaseValue() == SVG_SPREADMETHOD_REPEAT)
             grad->setGradientSpreadMethod(SPREADMETHOD_REPEAT);
         else
             grad->setGradientSpreadMethod(SPREADMETHOD_PAD);
index 39ba60735dc69692847f4ec06acce8993b7f54eb..81e21564115df3c84dac5cc7a888501b6376bce0 100644 (file)
@@ -28,7 +28,7 @@
 
 namespace WebCore
 {
-    class SVGAnimatedLength;
+    class SVGLength;
     class SVGLinearGradientElement : public SVGGradientElement
     {
     public:
@@ -36,22 +36,20 @@ namespace WebCore
         virtual ~SVGLinearGradientElement();
 
         // 'SVGLinearGradientElement' functions
-        SVGAnimatedLength *x1() const;
-        SVGAnimatedLength *y1() const;
-        SVGAnimatedLength *x2() const;
-        SVGAnimatedLength *y2() const;
-
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
     protected:
         virtual void buildGradient(KRenderingPaintServerGradient *grad) const;
         virtual KCPaintServerType gradientType() const { return PS_LINEAR_GRADIENT; }
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedLength> m_x1;
-        mutable RefPtr<SVGAnimatedLength> m_y1;
-        mutable RefPtr<SVGAnimatedLength> m_x2;
-        mutable RefPtr<SVGAnimatedLength> m_y2;
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, X1, x1)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Y1, y1)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, X2, x2)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Y2, y2)
     };
 
 } // namespace WebCore
index f62ab8839dbe3cafff9fc5b443b639ff75abfddb..f7079ff4ad04fcb3472a66adb44ae22181c3aea1 100644 (file)
@@ -27,9 +27,8 @@
 #include "Attr.h"
 #include "PlatformString.h"
 #include "SVGAngle.h"
-#include "SVGAnimatedAngle.h"
-#include "SVGAnimatedEnumeration.h"
-#include "SVGAnimatedLength.h"
+#include "SVGAngle.h"
+#include "SVGLength.h"
 #include "SVGFitToViewBox.h"
 #include "SVGHelper.h"
 #include "SVGMatrix.h"
 namespace WebCore {
 
 SVGMarkerElement::SVGMarkerElement(const QualifiedName& tagName, Document *doc)
-: SVGStyledElement(tagName, doc), SVGLangSpace(),
-  SVGExternalResourcesRequired(), SVGFitToViewBox()
+    : SVGStyledElement(tagName, doc)
+    , SVGLangSpace()
+    , SVGExternalResourcesRequired()
+    , SVGFitToViewBox()
+    , m_refX(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_refY(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_markerWidth(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_markerHeight(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_markerUnits(SVG_MARKERUNITS_STROKEWIDTH)
+    , m_orientType(0)
+    , m_orientAngle(new SVGAngle(this))
 {
     m_marker = 0;
 }
@@ -58,16 +66,16 @@ void SVGMarkerElement::parseMappedAttribute(MappedAttribute *attr)
     const AtomicString& value = attr->value();
     if (attr->name() == SVGNames::markerUnitsAttr) {
         if (value == "userSpaceOnUse")
-            markerUnits()->setBaseVal(SVG_MARKERUNITS_USERSPACEONUSE);
+            setMarkerUnitsBaseValue(SVG_MARKERUNITS_USERSPACEONUSE);
     }
     else if (attr->name() == SVGNames::refXAttr)
-        refX()->baseVal()->setValueAsString(value.impl());
+        refXBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::refYAttr)
-        refY()->baseVal()->setValueAsString(value.impl());
+        refYBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::markerWidthAttr)
-        markerWidth()->baseVal()->setValueAsString(value.impl());
+        markerWidthBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::markerHeightAttr)
-        markerHeight()->baseVal()->setValueAsString(value.impl());
+        markerHeightBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::orientAttr)
     {
         if (value == "auto")
@@ -88,55 +96,23 @@ void SVGMarkerElement::parseMappedAttribute(MappedAttribute *attr)
     }
 }
 
-SVGAnimatedLength *SVGMarkerElement::refX() const
-{
-    return lazy_create<SVGAnimatedLength>(m_refX, static_cast<const SVGStyledElement *>(0), LM_WIDTH, this);
-}
-
-SVGAnimatedLength *SVGMarkerElement::refY() const
-{
-    return lazy_create<SVGAnimatedLength>(m_refY, static_cast<const SVGStyledElement *>(0), LM_HEIGHT, this);
-}
-
-SVGAnimatedEnumeration *SVGMarkerElement::markerUnits() const
-{
-    if (!m_markerUnits) {
-        lazy_create<SVGAnimatedEnumeration>(m_markerUnits, this);
-        m_markerUnits->setBaseVal(SVG_MARKERUNITS_STROKEWIDTH);
-    }
-
-    return m_markerUnits.get();
-}
-
-SVGAnimatedLength *SVGMarkerElement::markerWidth() const
-{
-    return lazy_create<SVGAnimatedLength>(m_markerWidth, static_cast<const SVGStyledElement *>(0), LM_WIDTH, this);
-}
-
-SVGAnimatedLength *SVGMarkerElement::markerHeight() const
-{
-    return lazy_create<SVGAnimatedLength>(m_markerHeight, static_cast<const SVGStyledElement *>(0), LM_HEIGHT, this);
-}
-
-SVGAnimatedEnumeration *SVGMarkerElement::orientType() const
-{
-    return lazy_create<SVGAnimatedEnumeration>(m_orientType, this);
-}
-
-SVGAnimatedAngle *SVGMarkerElement::orientAngle() const
-{
-    return lazy_create<SVGAnimatedAngle>(m_orientAngle, this);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGMarkerElement, SVGLength*, Length, length, RefX, refX, SVGNames::refXAttr.localName(), m_refX.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGMarkerElement, SVGLength*, Length, length, RefY, refY, SVGNames::refYAttr.localName(), m_refY.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGMarkerElement, int, Enumeration, enumeration, MarkerUnits, markerUnits, SVGNames::markerUnitsAttr.localName(), m_markerUnits)
+ANIMATED_PROPERTY_DEFINITIONS(SVGMarkerElement, SVGLength*, Length, length, MarkerWidth, markerWidth, SVGNames::markerWidthAttr.localName(), m_markerWidth.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGMarkerElement, SVGLength*, Length, length, MarkerHeight, markerHeight, SVGNames::markerHeightAttr.localName(), m_markerHeight.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGMarkerElement, int, Enumeration, enumeration, OrientType, orientType, "orientType", m_orientType)
+ANIMATED_PROPERTY_DEFINITIONS(SVGMarkerElement, SVGAngle*, Angle, angle, OrientAngle, orientAngle, "orientAngle", m_orientAngle.get())
 
 void SVGMarkerElement::setOrientToAuto()
 {
-    orientType()->setBaseVal(SVG_MARKER_ORIENT_AUTO);
+    setOrientTypeBaseValue(SVG_MARKER_ORIENT_AUTO);
 }
 
 void SVGMarkerElement::setOrientToAngle(SVGAngle *angle)
 {
-    orientType()->setBaseVal(SVG_MARKER_ORIENT_ANGLE);
-    orientAngle()->setBaseVal(angle);
+    setOrientTypeBaseValue(SVG_MARKER_ORIENT_ANGLE);
+    setOrientAngleBaseValue(angle);
 }
 
 KCanvasMarker *SVGMarkerElement::canvasResource()
@@ -149,22 +125,18 @@ KCanvasMarker *SVGMarkerElement::canvasResource()
     // Spec: If the attribute is not specified, the effect is as if a
     // value of "0" were specified.
     if(!m_orientType)
-    {
-        SVGAngle *angle = SVGSVGElement::createSVGAngle();
-        angle->setValueAsString(String("0").impl());
-        setOrientToAngle(angle);
-    }
+        setOrientToAngle(SVGSVGElement::createSVGAngle());
     
-    if(orientType()->baseVal() == SVG_MARKER_ORIENT_ANGLE)
-        m_marker->setAngle(orientAngle()->baseVal()->value());
+    if(orientTypeBaseValue() == SVG_MARKER_ORIENT_ANGLE)
+        m_marker->setAngle(orientAngleBaseValue()->value());
     else
         m_marker->setAutoAngle();
 
-    m_marker->setRef(refX()->baseVal()->value(), refY()->baseVal()->value());
+    m_marker->setRef(refXBaseValue()->value(), refYBaseValue()->value());
     
-    m_marker->setUseStrokeWidth(markerUnits()->baseVal() == SVG_MARKERUNITS_STROKEWIDTH);
-    double w = markerWidth()->baseVal()->value();
-    double h = markerHeight()->baseVal()->value();
+    m_marker->setUseStrokeWidth(markerUnitsBaseValue() == SVG_MARKERUNITS_STROKEWIDTH);
+    double w = markerWidthBaseValue()->value();
+    double h = markerHeightBaseValue()->value();
     RefPtr<SVGMatrix> viewBox = viewBoxToViewTransform(w, h);
     m_marker->setScale(viewBox->matrix().m11(), viewBox->matrix().m22());
     
index e9c34a7e1b2a865b9c8a32e710d8fd1dd16b9370..c20a5748973e4dd06a58675296c4785734283892 100644 (file)
@@ -34,9 +34,8 @@ namespace WebCore
 {
     class Document;
     class SVGAngle;
-    class SVGAnimatedAngle;
-    class SVGAnimatedLength;
-    class SVGAnimatedEnumeration;
+    class SVGAngle;
+    class SVGLength;
     class SVGMarkerElement : public SVGStyledElement,
                                  public SVGLangSpace,
                                  public SVGExternalResourcesRequired,
@@ -47,14 +46,6 @@ namespace WebCore
         virtual ~SVGMarkerElement();
 
         // 'SVGMarkerElement' functions
-        SVGAnimatedLength *refX() const;
-        SVGAnimatedLength *refY() const;
-        SVGAnimatedEnumeration *markerUnits() const;
-        SVGAnimatedLength *markerWidth() const;
-        SVGAnimatedLength *markerHeight() const;
-        SVGAnimatedEnumeration *orientType() const;
-        SVGAnimatedAngle *orientAngle() const;
-
         void setOrientToAuto();
         void setOrientToAngle(SVGAngle *angle);
 
@@ -64,14 +55,17 @@ namespace WebCore
         virtual RenderObject *createRenderer(RenderArena *arena, RenderStyle *style);
         virtual KCanvasMarker *canvasResource();
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedLength> m_refX;
-        mutable RefPtr<SVGAnimatedLength> m_refY;
-        mutable RefPtr<SVGAnimatedLength> m_markerWidth;
-        mutable RefPtr<SVGAnimatedLength> m_markerHeight;
-        mutable RefPtr<SVGAnimatedEnumeration> m_markerUnits;
-        mutable RefPtr<SVGAnimatedEnumeration> m_orientType;
-        mutable RefPtr<SVGAnimatedAngle> m_orientAngle;
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, RefX, refX)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, RefY, refY)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, MarkerWidth, markerWidth)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, MarkerHeight, markerHeight)
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, MarkerUnits, markerUnits)
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, OrientType, orientType)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGAngle*, RefPtr<SVGAngle>, OrientAngle, orientAngle)
         KCanvasMarker *m_marker;
     };
 
index 6fb329dcab5a1c4edae2bb74291d8faeaa5df7e2..f60128102e7aa2020cd0ba3c9fbb88421e1741b8 100644 (file)
@@ -29,7 +29,7 @@
 #include "RenderSVGContainer.h"
 #include "KCanvasImage.h"
 #include "KRenderingDevice.h"
-#include "SVGAnimatedLength.h"
+#include "SVGLength.h"
 #include "SVGHelper.h"
 #include "SVGNames.h"
 #include "SVGRenderStyle.h"
 
 namespace WebCore {
 
-SVGMaskElement::SVGMaskElement(const QualifiedName& tagName, Document *doc) : SVGStyledLocatableElement(tagName, doc), SVGURIReference(), SVGTests(), SVGLangSpace(), SVGExternalResourcesRequired(), m_masker(0), m_dirty(true)
+SVGMaskElement::SVGMaskElement(const QualifiedName& tagName, Document *doc)
+    : SVGStyledLocatableElement(tagName, doc)
+    , SVGURIReference()
+    , SVGTests()
+    , SVGLangSpace()
+    , SVGExternalResourcesRequired()
+    , m_x(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_y(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_width(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_height(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_masker(0)
+    , m_dirty(true)
 {
 }
 
@@ -50,29 +61,14 @@ SVGMaskElement::~SVGMaskElement()
     delete m_masker;
 }
 
-SVGAnimatedLength *SVGMaskElement::x() const
-{
-    return lazy_create<SVGAnimatedLength>(m_x, this, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength *SVGMaskElement::y() const
-{
-    return lazy_create<SVGAnimatedLength>(m_y, this, LM_HEIGHT, viewportElement());
-}
-
-SVGAnimatedLength *SVGMaskElement::width() const
-{
-    return lazy_create<SVGAnimatedLength>(m_width, this, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength *SVGMaskElement::height() const
-{
-    return lazy_create<SVGAnimatedLength>(m_height, this, LM_HEIGHT, viewportElement());
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGMaskElement, SVGLength*, Length, length, X, x, SVGNames::xAttr.localName(), m_x.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGMaskElement, SVGLength*, Length, length, Y, y, SVGNames::yAttr.localName(), m_y.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGMaskElement, SVGLength*, Length, length, Width, width, SVGNames::widthAttr.localName(), m_width.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGMaskElement, SVGLength*, Length, length, Height, height, SVGNames::heightAttr.localName(), m_height.get())
 
 void SVGMaskElement::attributeChanged(Attribute* attr, bool preserveDecls)
 {
-    IntSize newSize = IntSize(lroundf(width()->baseVal()->value()), lroundf(height()->baseVal()->value()));
+    IntSize newSize = IntSize(lroundf(widthBaseValue()->value()), lroundf(heightBaseValue()->value()));
     if (!m_masker || !m_masker->mask() || (m_masker->mask()->size() != newSize))
         m_dirty = true;
     SVGStyledLocatableElement::attributeChanged(attr, preserveDecls);
@@ -88,13 +84,13 @@ void SVGMaskElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const String& value = attr->value();
     if (attr->name() == SVGNames::xAttr)
-        x()->baseVal()->setValueAsString(value.impl());
+        xBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::yAttr)
-        y()->baseVal()->setValueAsString(value.impl());
+        yBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::widthAttr)
-        width()->baseVal()->setValueAsString(value.impl());
+        widthBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::heightAttr)
-        height()->baseVal()->setValueAsString(value.impl());
+        heightBaseValue()->setValueAsString(value.impl());
     else {
         if (SVGURIReference::parseMappedAttribute(attr))
             return;
@@ -117,7 +113,7 @@ KCanvasImage *SVGMaskElement::drawMaskerContent()
         return 0;
     KCanvasImage *maskImage = static_cast<KCanvasImage *>(device->createResource(RS_IMAGE));
 
-    IntSize size = IntSize(lroundf(width()->baseVal()->value()), lroundf(height()->baseVal()->value()));
+    IntSize size = IntSize(lroundf(widthBaseValue()->value()), lroundf(heightBaseValue()->value()));
     maskImage->init(size);
 
     KRenderingDeviceContext *patternContext = device->contextForImage(maskImage);
index 148ce60e8e0a1d7f86ff394906b0e1f980f187f7..e37c6237e587b0547fd434699f0f8cf44492832c 100644 (file)
@@ -36,7 +36,7 @@ class KCanvasImage;
 namespace WebCore
 {
     class Attribute;
-    class SVGAnimatedLength;
+    class SVGLength;
     class SVGMaskElement : public SVGStyledLocatableElement,
                                   public SVGURIReference,
                                   public SVGTests,
@@ -49,12 +49,6 @@ namespace WebCore
         virtual bool isValid() const { return SVGTests::isValid(); }
 
         // 'SVGMaskElement' functions
-        SVGAnimatedLength *x() const;
-        SVGAnimatedLength *y() const;
-
-        SVGAnimatedLength *width() const;
-        SVGAnimatedLength *height() const;
-
         virtual void childrenChanged();
         virtual void attributeChanged(Attribute* attr, bool preserveDecls);
         virtual void parseMappedAttribute(MappedAttribute *attr);
@@ -66,10 +60,12 @@ namespace WebCore
     protected:
         KCanvasImage *drawMaskerContent();
 
-        mutable RefPtr<SVGAnimatedLength> m_x;
-        mutable RefPtr<SVGAnimatedLength> m_y;
-        mutable RefPtr<SVGAnimatedLength> m_width;
-        mutable RefPtr<SVGAnimatedLength> m_height;
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, X, x)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Y, y)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Width, width)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Height, height)
+
+        virtual const SVGElement* contextElement() const { return this; }
 
     private:
         KCanvasMasker *m_masker;
index ae4dc7e4a8ede3dbec949f3fc45168400e608ca5..e7bf29ced0cc48a730d80658e89b1628a8122489 100644 (file)
@@ -34,7 +34,6 @@
 #include "SVGPathElement.h"
 #include "SVGPathSegLineto.h"
 #include "SVGPathSegMoveto.h"
-#include "SVGAnimatedNumber.h"
 #include "SVGPathSegClosePath.h"
 #include "SVGPathSegCurvetoCubic.h"
 #include "SVGPathSegLinetoVertical.h"
 namespace WebCore {
 
 SVGPathElement::SVGPathElement(const QualifiedName& tagName, Document *doc)
-: SVGStyledTransformableElement(tagName, doc), SVGTests(), SVGLangSpace(), SVGExternalResourcesRequired(), SVGPathParser()
+    : SVGStyledTransformableElement(tagName, doc)
+    , SVGTests()
+    , SVGLangSpace()
+    , SVGExternalResourcesRequired()
+    , SVGPathParser()
+    , m_pathLength(0.0)
 {
 }
 
@@ -56,16 +60,7 @@ SVGPathElement::~SVGPathElement()
 {
 }
 
-SVGAnimatedNumber *SVGPathElement::pathLength() const
-{
-    if(!m_pathLength)
-    {
-        lazy_create<SVGAnimatedNumber>(m_pathLength, this);
-        m_pathLength->setBaseVal(0);
-    }
-    
-    return m_pathLength.get();
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGPathElement, double, Number, number, PathLength, pathLength, SVGNames::pathLengthAttr.localName(), m_pathLength)
 
 double SVGPathElement::getTotalLength()
 {
index dcbfbcb60ea96e2406f36e04e0c980c5aa797edc..6bbadbe2a0f0e253e59bf242a373511479583fe8 100644 (file)
@@ -36,7 +36,6 @@ namespace WebCore
     class SVGPathSeg;
     class SVGPathSegArcAbs;
     class SVGPathSegArcRel;
-    class SVGAnimatedNumber;
     class SVGPathSegClosePath;
     class SVGPathSegLinetoAbs;
     class SVGPathSegLinetoRel;
@@ -66,8 +65,6 @@ namespace WebCore
         virtual ~SVGPathElement();
         
         virtual bool isValid() const { return SVGTests::isValid(); }
-
-        SVGAnimatedNumber *pathLength() const;
         double getTotalLength();
         FloatPoint getPointAtLength(double distance);
         unsigned long getPathSegAtLength(double distance);
@@ -103,10 +100,12 @@ namespace WebCore
         virtual bool rendererIsNeeded(RenderStyle *style) { return StyledElement::rendererIsNeeded(style); }
         virtual Path toPathData() const;
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
         mutable RefPtr<SVGPathSegList> m_pathSegList;
-        mutable RefPtr<SVGAnimatedNumber> m_pathLength;
-
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, PathLength, pathLength)
         virtual void svgMoveTo(double x1, double y1, bool closed, bool abs = true);
         virtual void svgLineTo(double x1, double y1, bool abs = true);
         virtual void svgLineToHorizontal(double x, bool abs = true);
index 4a97bf7cd949fdb1da980c0a47a7ad1a27d2be74..7ecd3dece573eae6f41a2ad7114473b52a5da30a 100644 (file)
 #include "KCanvasRenderingStyle.h"
 #include "KRenderingDevice.h"
 #include "KRenderingPaintServerPattern.h"
-#include "SVGAnimatedEnumeration.h"
-#include "SVGAnimatedLength.h"
-#include "SVGAnimatedString.h"
-#include "SVGAnimatedTransformList.h"
+#include "SVGLength.h"
+#include "SVGTransformList.h"
 #include "SVGHelper.h"
 #include "SVGMatrix.h"
 #include "SVGNames.h"
 
 namespace WebCore {
 
-SVGPatternElement::SVGPatternElement(const QualifiedName& tagName, Document *doc) : SVGStyledLocatableElement(tagName, doc), SVGURIReference(), SVGTests(), SVGLangSpace(), SVGExternalResourcesRequired(), SVGFitToViewBox(), KCanvasResourceListener()
+SVGPatternElement::SVGPatternElement(const QualifiedName& tagName, Document *doc)
+    : SVGStyledLocatableElement(tagName, doc)
+    , SVGURIReference()
+    , SVGTests()
+    , SVGLangSpace()
+    , SVGExternalResourcesRequired()
+    , SVGFitToViewBox()
+    , KCanvasResourceListener()
+    , m_x(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_y(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_width(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_height(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_patternUnits(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
+    , m_patternContentUnits(SVG_UNIT_TYPE_USERSPACEONUSE)
+    , m_patternTransform(new SVGTransformList(this))
 {
     m_tile = 0;
     m_paintServer = 0;
@@ -60,75 +72,38 @@ SVGPatternElement::~SVGPatternElement()
     delete m_paintServer;
 }
 
-SVGAnimatedEnumeration *SVGPatternElement::patternUnits() const
-{
-    if (!m_patternUnits) {
-        lazy_create<SVGAnimatedEnumeration>(m_patternUnits, this);
-        m_patternUnits->setBaseVal(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
-    }
-
-    return m_patternUnits.get();
-}
-
-SVGAnimatedEnumeration *SVGPatternElement::patternContentUnits() const
-{
-    if (!m_patternContentUnits) {
-        lazy_create<SVGAnimatedEnumeration>(m_patternContentUnits, this);
-        m_patternContentUnits->setBaseVal(SVG_UNIT_TYPE_USERSPACEONUSE);
-    }
-
-    return m_patternContentUnits.get();
-}
-
-SVGAnimatedLength* SVGPatternElement::x() const
-{
-    return lazy_create<SVGAnimatedLength>(m_x, this, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength* SVGPatternElement::y() const
-{
-    return lazy_create<SVGAnimatedLength>(m_y, this, LM_HEIGHT, viewportElement());
-}
-
-SVGAnimatedLength* SVGPatternElement::width() const
-{
-    return lazy_create<SVGAnimatedLength>(m_width, this, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength* SVGPatternElement::height() const
-{
-    return lazy_create<SVGAnimatedLength>(m_height, this, LM_HEIGHT, viewportElement());
-}
-
-SVGAnimatedTransformList *SVGPatternElement::patternTransform() const
-{
-    return lazy_create<SVGAnimatedTransformList>(m_patternTransform, this);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGPatternElement, int, Enumeration, enumeration, PatternUnits, patternUnits, SVGNames::patternUnitsAttr.localName(), m_patternUnits)
+ANIMATED_PROPERTY_DEFINITIONS(SVGPatternElement, int, Enumeration, enumeration, PatternContentUnits, patternContentUnits, SVGNames::patternContentUnitsAttr.localName(), m_patternContentUnits)
+ANIMATED_PROPERTY_DEFINITIONS(SVGPatternElement, SVGLength*, Length, length, X, x, SVGNames::xAttr.localName(), m_x.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGPatternElement, SVGLength*, Length, length, Y, y, SVGNames::yAttr.localName(), m_y.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGPatternElement, SVGLength*, Length, length, Width, width, SVGNames::widthAttr.localName(), m_width.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGPatternElement, SVGLength*, Length, length, Height, height, SVGNames::heightAttr.localName(), m_height.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGPatternElement, SVGTransformList*, TransformList, transformList, PatternTransform, patternTransform, SVGNames::patternTransformAttr.localName(), m_patternTransform.get())
 
 void SVGPatternElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const AtomicString &value = attr->value();
     if (attr->name() == SVGNames::patternUnitsAttr) {
         if (value == "userSpaceOnUse")
-            patternUnits()->setBaseVal(SVG_UNIT_TYPE_USERSPACEONUSE);
+            setPatternUnitsBaseValue(SVG_UNIT_TYPE_USERSPACEONUSE);
         else if (value == "objectBoundingBox")
-            patternUnits()->setBaseVal(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
+            setPatternUnitsBaseValue(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
     } else if (attr->name() == SVGNames::patternContentUnitsAttr) {
         if (value == "userSpaceOnUse")
-            patternContentUnits()->setBaseVal(SVG_UNIT_TYPE_USERSPACEONUSE);
+            setPatternContentUnitsBaseValue(SVG_UNIT_TYPE_USERSPACEONUSE);
         else if (value == "objectBoundingBox")
-            patternContentUnits()->setBaseVal(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
+            setPatternContentUnitsBaseValue(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
     } else if (attr->name() == SVGNames::patternTransformAttr) {
-        SVGTransformList *patternTransforms = patternTransform()->baseVal();
+        SVGTransformList *patternTransforms = patternTransformBaseValue();
         SVGTransformable::parseTransformAttribute(patternTransforms, value);
     } else if (attr->name() == SVGNames::xAttr)
-        x()->baseVal()->setValueAsString(value.impl());
+        xBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::yAttr)
-        y()->baseVal()->setValueAsString(value.impl());
+        yBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::widthAttr)
-        width()->baseVal()->setValueAsString(value.impl());
+        widthBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::heightAttr)
-        height()->baseVal()->setValueAsString(value.impl());
+        heightBaseValue()->setValueAsString(value.impl());
     else {
         if (SVGURIReference::parseMappedAttribute(attr))
             return;
@@ -148,12 +123,12 @@ void SVGPatternElement::parseMappedAttribute(MappedAttribute *attr)
 const SVGStyledElement* SVGPatternElement::pushAttributeContext(const SVGStyledElement* context)
 {
     // All attribute's contexts are equal (so just take the one from 'x').
-    const SVGStyledElement* restore = x()->baseVal()->context();
+    const SVGStyledElement* restore = xBaseValue()->context();
 
-    x()->baseVal()->setContext(context);
-    y()->baseVal()->setContext(context);
-    width()->baseVal()->setContext(context);
-    height()->baseVal()->setContext(context);
+    xBaseValue()->setContext(context);
+    yBaseValue()->setContext(context);
+    widthBaseValue()->setContext(context);
+    heightBaseValue()->setContext(context);
 
     return restore;
 }
@@ -164,9 +139,9 @@ void SVGPatternElement::resourceNotification() const
     notifyAttributeChange();
 }
 
-void SVGPatternElement::fillAttributesFromReferencePattern(const SVGPatternElement* target, AffineTransform& patternTransformMatrix) const
+void SVGPatternElement::fillAttributesFromReferencePattern(const SVGPatternElement* target, AffineTransform& patternTransformMatrix)
 {
-    DeprecatedString ref = String(href()->baseVal()).deprecatedString();
+    DeprecatedString ref = String(hrefBaseValue()).deprecatedString();
     KRenderingPaintServer *refServer = getPaintServerById(document(), ref.mid(1));
 
     if (!refServer || refServer->type() != PS_PATTERN)
@@ -177,37 +152,37 @@ void SVGPatternElement::fillAttributesFromReferencePattern(const SVGPatternEleme
     if (!hasAttribute(SVGNames::patternUnitsAttr)) {
         const AtomicString& value = target->getAttribute(SVGNames::patternUnitsAttr);
         if (value == "userSpaceOnUse")
-            patternUnits()->setBaseVal(SVG_UNIT_TYPE_USERSPACEONUSE);
+            setPatternUnitsBaseValue(SVG_UNIT_TYPE_USERSPACEONUSE);
         else if (value == "objectBoundingBox")
-            patternUnits()->setBaseVal(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
+            setPatternUnitsBaseValue(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
     }
     
     if (!hasAttribute(SVGNames::patternContentUnitsAttr)) {
         const AtomicString& value = target->getAttribute(SVGNames::patternContentUnitsAttr);
         if (value == "userSpaceOnUse")
-            patternContentUnits()->setBaseVal(SVG_UNIT_TYPE_USERSPACEONUSE);
+            setPatternContentUnitsBaseValue(SVG_UNIT_TYPE_USERSPACEONUSE);
         else if (value == "objectBoundingBox")
-            patternContentUnits()->setBaseVal(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
+            setPatternContentUnitsBaseValue(SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
     }
 
     if (!hasAttribute(SVGNames::patternTransformAttr))
         patternTransformMatrix = refPattern->patternTransform();
 }
 
-void SVGPatternElement::drawPatternContentIntoTile(const SVGPatternElement* target, const IntSize& newSize, AffineTransform patternTransformMatrix) const
+void SVGPatternElement::drawPatternContentIntoTile(const SVGPatternElement* target, const IntSize& newSize, AffineTransform patternTransformMatrix)
 {
     KRenderingDevice* device = renderingDevice();
     
     SVGStyledElement* activeElement = static_cast<SVGStyledElement*>(m_paintServer->activeClient()->element());
 
-    bool bbox = (patternUnits()->baseVal() == SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
+    bool bbox = (patternUnitsBaseValue() == SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
 
     const SVGStyledElement* savedContext = 0;
     if (bbox) {
-        if (width()->baseVal()->unitType() != SVGLength::SVG_LENGTHTYPE_PERCENTAGE)
-            width()->baseVal()->newValueSpecifiedUnits(SVGLength::SVG_LENGTHTYPE_PERCENTAGE, width()->baseVal()->value() * 100.);
-        if (height()->baseVal()->unitType() != SVGLength::SVG_LENGTHTYPE_PERCENTAGE)
-            height()->baseVal()->newValueSpecifiedUnits(SVGLength::SVG_LENGTHTYPE_PERCENTAGE, height()->baseVal()->value() * 100.);
+        if (widthBaseValue()->unitType() != SVGLength::SVG_LENGTHTYPE_PERCENTAGE)
+            widthBaseValue()->newValueSpecifiedUnits(SVGLength::SVG_LENGTHTYPE_PERCENTAGE, widthBaseValue()->value() * 100.);
+        if (heightBaseValue()->unitType() != SVGLength::SVG_LENGTHTYPE_PERCENTAGE)
+            heightBaseValue()->newValueSpecifiedUnits(SVGLength::SVG_LENGTHTYPE_PERCENTAGE, heightBaseValue()->value() * 100.);
         if (activeElement)
             savedContext = const_cast<SVGPatternElement* >(this)->pushAttributeContext(activeElement);
     }
@@ -218,7 +193,7 @@ void SVGPatternElement::drawPatternContentIntoTile(const SVGPatternElement* targ
 
     KRenderingDeviceContext* patternContext = device->contextForImage(m_tile);
     device->pushContext(patternContext);
-    FloatRect rect(x()->baseVal()->value(), y()->baseVal()->value(), width()->baseVal()->value(), height()->baseVal()->value());
+    FloatRect rect(xBaseValue()->value(), yBaseValue()->value(), widthBaseValue()->value(), heightBaseValue()->value());
     m_paintServer->setBbox(rect);
     m_paintServer->setPatternTransform(patternTransformMatrix);
     m_paintServer->setTile(m_tile);
@@ -244,7 +219,7 @@ void SVGPatternElement::drawPatternContentIntoTile(const SVGPatternElement* targ
         KCanvasMatrix savedMatrix = item->localTransform();
 
         const SVGStyledElement* savedContext = 0;
-        if (patternContentUnits()->baseVal() == SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
+        if (patternContentUnitsBaseValue() == SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
         {
             if (activeElement)
                 savedContext = e->pushAttributeContext(activeElement);
@@ -311,7 +286,7 @@ void SVGPatternElement::notifyAttributeChange() const
     if (!m_paintServer || !m_paintServer->activeClient() || m_ignoreAttributeChanges)
         return;
 
-    IntSize newSize = IntSize(lroundf(width()->baseVal()->value()), lroundf(height()->baseVal()->value()));
+    IntSize newSize = IntSize(lroundf(widthBaseValue()->value()), lroundf(heightBaseValue()->value()));
     if (m_tile && (m_tile->size() == newSize) || newSize.width() < 1 || newSize.height() < 1)
         return;
 
@@ -327,25 +302,26 @@ void SVGPatternElement::notifyAttributeChange() const
     const Node *test = this;
     while(test && !test->hasChildNodes())
     {
-        DeprecatedString ref = String(target->href()->baseVal()).deprecatedString();
+        DeprecatedString ref = String(target->hrefBaseValue()).deprecatedString();
         test = ownerDocument()->getElementById(String(ref.mid(1)).impl());
         if (test && test->hasTagName(SVGNames::patternTag))
             target = static_cast<const SVGPatternElement* >(test);
     }
 
-    unsigned short savedPatternUnits = patternUnits()->baseVal();
-    unsigned short savedPatternContentUnits = patternContentUnits()->baseVal();
+    unsigned short savedPatternUnits = patternUnitsBaseValue();
+    unsigned short savedPatternContentUnits = patternContentUnitsBaseValue();
 
     AffineTransform patternTransformMatrix;
-    if (patternTransform()->baseVal()->numberOfItems() > 0)
-        patternTransformMatrix = patternTransform()->baseVal()->consolidate()->matrix()->matrix();
+    if (patternTransformBaseValue()->numberOfItems() > 0)
+        patternTransformMatrix = patternTransformBaseValue()->consolidate()->matrix()->matrix();
 
-    fillAttributesFromReferencePattern(target, patternTransformMatrix);
-    
-    drawPatternContentIntoTile(target, newSize, patternTransformMatrix);
-    
-    patternUnits()->setBaseVal(savedPatternUnits);
-    patternContentUnits()->setBaseVal(savedPatternContentUnits);
+
+    SVGPatternElement *nonConstThis = const_cast<SVGPatternElement*>(this);
+
+    nonConstThis->fillAttributesFromReferencePattern(target, patternTransformMatrix);   
+    nonConstThis->drawPatternContentIntoTile(target, newSize, patternTransformMatrix);
+    nonConstThis->setPatternUnitsBaseValue(savedPatternUnits);
+    nonConstThis->setPatternContentUnitsBaseValue(savedPatternContentUnits);
 
     notifyClientsToRepaint();
     
@@ -374,8 +350,8 @@ SVGMatrix *SVGPatternElement::getCTM() const
     SVGMatrix *mat = SVGSVGElement::createSVGMatrix();
     if (mat)
     {
-        RefPtr<SVGMatrix> viewBox = viewBoxToViewTransform(width()->baseVal()->value(),
-                                                        height()->baseVal()->value());
+        RefPtr<SVGMatrix> viewBox = viewBoxToViewTransform(widthBaseValue()->value(),
+                                                        heightBaseValue()->value());
 
         mat->multiply(viewBox.get());
     }
index 762f829890e0150962c0eb8a7bd38c2357325097..1cb180444cfe95d31ca5bf1539993dad1d918388 100644 (file)
@@ -37,10 +37,9 @@ class KCanvasImage;
 
 namespace WebCore
 {
-    class SVGAnimatedLength;
+    class SVGLength;
     class SVGPatternElement;
-    class SVGAnimatedEnumeration;
-    class SVGAnimatedTransformList;
+    class SVGTransformList;
     class SVGPatternElement : public SVGStyledLocatableElement,
                                   public SVGURIReference,
                                   public SVGTests,
@@ -56,16 +55,6 @@ namespace WebCore
         virtual bool isValid() const { return SVGTests::isValid(); }
 
         // 'SVGPatternElement' functions
-        SVGAnimatedEnumeration *patternUnits() const;
-        SVGAnimatedEnumeration *patternContentUnits() const;
-        SVGAnimatedTransformList *patternTransform() const;
-
-        SVGAnimatedLength *x() const;
-        SVGAnimatedLength *y() const;
-
-        SVGAnimatedLength *width() const;
-        SVGAnimatedLength *height() const;
-
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
         const SVGStyledElement *pushAttributeContext(const SVGStyledElement *context);
@@ -81,24 +70,23 @@ namespace WebCore
         virtual SVGMatrix *getCTM() const;
 
     protected:
-        mutable RefPtr<SVGAnimatedLength> m_x;
-        mutable RefPtr<SVGAnimatedLength> m_y;
-        mutable RefPtr<SVGAnimatedLength> m_width;
-        mutable RefPtr<SVGAnimatedLength> m_height;
-        
-        mutable RefPtr<SVGAnimatedEnumeration> m_patternUnits;
-        mutable RefPtr<SVGAnimatedEnumeration> m_patternContentUnits;
-
-        mutable RefPtr<SVGAnimatedTransformList> m_patternTransform;
-
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, X, x)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Y, y)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Width, width)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Height, height)
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, PatternUnits, patternUnits)
+        ANIMATED_PROPERTY_DECLARATIONS(int, int, PatternContentUnits, patternContentUnits)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGTransformList*, RefPtr<SVGTransformList>, PatternTransform, patternTransform)
         mutable KCanvasImage *m_tile;
         mutable bool m_ignoreAttributeChanges;
         mutable KRenderingPaintServerPattern *m_paintServer;
         
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
         // notifyAttributeChange helpers:
-        void fillAttributesFromReferencePattern(const SVGPatternElement *target, AffineTransform& patternTransformMatrix) const;
-        void drawPatternContentIntoTile(const SVGPatternElement *target, const IntSize &newSize, AffineTransform patternTransformMatrix) const;
+        void fillAttributesFromReferencePattern(const SVGPatternElement *target, AffineTransform& patternTransformMatrix);
+        void drawPatternContentIntoTile(const SVGPatternElement *target, const IntSize &newSize, AffineTransform patternTransformMatrix);
         void notifyClientsToRepaint() const;
     };
 
index 94b5c998fcf83edda19c8f82bc0e8f18e184ae20..375062b33e514110118bf53c7ac9f6996b0ffd59 100644 (file)
@@ -56,6 +56,9 @@ namespace WebCore
 
         virtual void notifyAttributeChange() const;
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
         mutable RefPtr<SVGPointList> m_points;
 
index 5526402ba2c87531c6a9ab24157643e6b223b3ab..0e0b9d0c8a83c9ebdff8b70dfa22b0f725aff95f 100644 (file)
 #include "SVGTransform.h"
 #include "SVGStopElement.h"
 #include "SVGTransformList.h"
-#include "SVGAnimatedLength.h"
-#include "SVGAnimatedNumber.h"
-#include "SVGAnimatedString.h"
-#include "SVGAnimatedEnumeration.h"
+#include "SVGLength.h"
 #include "SVGRadialGradientElement.h"
-#include "SVGAnimatedTransformList.h"
+#include "SVGTransformList.h"
 
 #include <kcanvas/device/KRenderingDevice.h>
 #include <kcanvas/device/KRenderingPaintServerGradient.h>
 
 namespace WebCore {
 
-SVGRadialGradientElement::SVGRadialGradientElement(const QualifiedName& tagName, Document *doc) : SVGGradientElement(tagName, doc)
-{
-}
-
-SVGRadialGradientElement::~SVGRadialGradientElement()
-{
-}
-
-SVGAnimatedLength *SVGRadialGradientElement::cx() const
+SVGRadialGradientElement::SVGRadialGradientElement(const QualifiedName& tagName, Document *doc)
+    : SVGGradientElement(tagName, doc)
+    , m_cx(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_cy(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_r(new SVGLength(this, LM_OTHER, viewportElement()))
+    , m_fx(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_fy(new SVGLength(this, LM_HEIGHT, viewportElement()))
 {
     // Spec: If the attribute is not specified, the effect is as if a value of "50%" were specified.
-    if (!m_cx) {
-        lazy_create<SVGAnimatedLength>(m_cx, this, LM_WIDTH, viewportElement());
-        m_cx->baseVal()->setValue(0.5);
-    }
-
-    return m_cx.get();
+    m_cx->setValueAsString("50%");
+    m_cy->setValueAsString("50%");
+    m_r->setValueAsString("50%");
 }
 
-SVGAnimatedLength *SVGRadialGradientElement::cy() const
-{
-    // Spec: If the attribute is not specified, the effect is as if a value of "50%" were specified.
-    if (!m_cy) {
-        lazy_create<SVGAnimatedLength>(m_cy, this, LM_HEIGHT, viewportElement());
-        m_cy->baseVal()->setValue(0.5);
-    }
-
-    return m_cy.get();
-}
-
-SVGAnimatedLength *SVGRadialGradientElement::fx() const
-{
-    return lazy_create<SVGAnimatedLength>(m_fx, this, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength *SVGRadialGradientElement::fy() const
+SVGRadialGradientElement::~SVGRadialGradientElement()
 {
-    return lazy_create<SVGAnimatedLength>(m_fy, this, LM_HEIGHT, viewportElement());
 }
 
-SVGAnimatedLength *SVGRadialGradientElement::r() const
-{
-    // Spec: If the attribute is not specified, the effect is as if a value of "50%" were specified.
-    if (!m_r) {
-        lazy_create<SVGAnimatedLength>(m_r, this, LM_OTHER, viewportElement());
-        m_r->baseVal()->setValue(0.5);
-    }
-
-    return m_r.get();
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGRadialGradientElement, SVGLength*, Length, length, Cx, cx, SVGNames::cxAttr.localName(), m_cx.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGRadialGradientElement, SVGLength*, Length, length, Cy, cy, SVGNames::cyAttr.localName(), m_cy.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGRadialGradientElement, SVGLength*, Length, length, Fx, fx, SVGNames::fxAttr.localName(), m_fx.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGRadialGradientElement, SVGLength*, Length, length, Fy, fy, SVGNames::fyAttr.localName(), m_fy.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGRadialGradientElement, SVGLength*, Length, length, R, r, SVGNames::rAttr.localName(), m_r.get())
 
 void SVGRadialGradientElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const AtomicString& value = attr->value();
     if (attr->name() == SVGNames::cxAttr)
-        cx()->baseVal()->setValueAsString(value.impl());
+        cxBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::cyAttr)
-        cy()->baseVal()->setValueAsString(value.impl());
+        cyBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::rAttr)
-        r()->baseVal()->setValueAsString(value.impl());
+        rBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::fxAttr)
-        fx()->baseVal()->setValueAsString(value.impl());
+        fxBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::fyAttr)
-        fy()->baseVal()->setValueAsString(value.impl());
+        fyBaseValue()->setValueAsString(value.impl());
     else
         SVGGradientElement::parseMappedAttribute(attr);
 }
@@ -115,25 +85,25 @@ void SVGRadialGradientElement::buildGradient(KRenderingPaintServerGradient *_gra
 {
     rebuildStops(); // rebuild stops before possibly importing them from any referenced gradient.
 
-    bool bbox = (gradientUnits()->baseVal() == SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
+    bool bbox = (gradientUnitsBaseValue() == SVG_UNIT_TYPE_OBJECTBOUNDINGBOX);
     bool fxSet = hasAttribute(SVGNames::fxAttr);
     bool fySet = hasAttribute(SVGNames::fyAttr);
-    cx()->baseVal()->setBboxRelative(bbox);
-    cy()->baseVal()->setBboxRelative(bbox);
-    r()->baseVal()->setBboxRelative(bbox);
-    fx()->baseVal()->setBboxRelative(bbox);
-    fy()->baseVal()->setBboxRelative(bbox);
-    float _cx = cx()->baseVal()->value(), _cy = cy()->baseVal()->value();
-    float _r = r()->baseVal()->value();
-    float _fx = fxSet ? fx()->baseVal()->value() : _cx;
-    float _fy = fySet ? fy()->baseVal()->value() : _cy;
+    cxBaseValue()->setBboxRelative(bbox);
+    cyBaseValue()->setBboxRelative(bbox);
+    rBaseValue()->setBboxRelative(bbox);
+    fxBaseValue()->setBboxRelative(bbox);
+    fyBaseValue()->setBboxRelative(bbox);
+    float _cx = cxBaseValue()->value(), _cy = cyBaseValue()->value();
+    float _r = rBaseValue()->value();
+    float _fx = fxSet ? fxBaseValue()->value() : _cx;
+    float _fy = fySet ? fyBaseValue()->value() : _cy;
 
     KRenderingPaintServerRadialGradient *grad = static_cast<KRenderingPaintServerRadialGradient *>(_grad);
     AffineTransform mat;
-    if(gradientTransform()->baseVal()->numberOfItems() > 0)
-        mat = gradientTransform()->baseVal()->consolidate()->matrix()->matrix();
+    if(gradientTransformBaseValue()->numberOfItems() > 0)
+        mat = gradientTransformBaseValue()->consolidate()->matrix()->matrix();
 
-    DeprecatedString ref = String(href()->baseVal()).deprecatedString();
+    DeprecatedString ref = String(hrefBaseValue()).deprecatedString();
     KRenderingPaintServer *pserver = getPaintServerById(document(), ref.mid(1));
 
     if(pserver && (pserver->type() == PS_RADIAL_GRADIENT || pserver->type() == PS_LINEAR_GRADIENT))
@@ -191,9 +161,9 @@ void SVGRadialGradientElement::buildGradient(KRenderingPaintServerGradient *_gra
     }
     else
     {
-        if(spreadMethod()->baseVal() == SVG_SPREADMETHOD_REFLECT)
+        if(spreadMethodBaseValue() == SVG_SPREADMETHOD_REFLECT)
             grad->setGradientSpreadMethod(SPREADMETHOD_REFLECT);
-        else if(spreadMethod()->baseVal() == SVG_SPREADMETHOD_REPEAT)
+        else if(spreadMethodBaseValue() == SVG_SPREADMETHOD_REPEAT)
             grad->setGradientSpreadMethod(SPREADMETHOD_REPEAT);
         else
             grad->setGradientSpreadMethod(SPREADMETHOD_PAD);
index ec0e646d356016c4d087e367db0246acb506607e..6ae1cf2cad118cb6749a8b20aa1335e3e2d92bf6 100644 (file)
@@ -28,7 +28,7 @@
 
 namespace WebCore
 {
-    class SVGAnimatedLength;
+    class SVGLength;
     class SVGRadialGradientElement : public SVGGradientElement
     {
     public:
@@ -36,24 +36,21 @@ namespace WebCore
         virtual ~SVGRadialGradientElement();
 
         // 'SVGRadialGradientElement' functions
-        SVGAnimatedLength *cx() const;
-        SVGAnimatedLength *cy() const;
-        SVGAnimatedLength *fx() const;
-        SVGAnimatedLength *fy() const;
-        SVGAnimatedLength *r() const;
-
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
     protected:
         virtual void buildGradient(KRenderingPaintServerGradient *grad) const;
         virtual KCPaintServerType gradientType() const { return PS_RADIAL_GRADIENT; }
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedLength> m_cx;
-        mutable RefPtr<SVGAnimatedLength> m_cy;
-        mutable RefPtr<SVGAnimatedLength> m_r;
-        mutable RefPtr<SVGAnimatedLength> m_fx;
-        mutable RefPtr<SVGAnimatedLength> m_fy;
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Cx, cx)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Cy, cy)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, R, r)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Fx, fx)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Fy, fy)
     };
 
 } // namespace WebCore
index 823a356d74f1a55c7e99461cf2d513f20d4e46c6..3f67b3f6b1d6f91388f1e1bde9d5d55c14a2fc66 100644 (file)
@@ -27,7 +27,7 @@
 #include "SVGNames.h"
 #include "SVGHelper.h"
 #include "SVGRectElement.h"
-#include "SVGAnimatedLength.h"
+#include "SVGLength.h"
 
 #include "KCanvasRenderingStyle.h"
 #include <kcanvas/device/KRenderingDevice.h>
 namespace WebCore {
 
 SVGRectElement::SVGRectElement(const QualifiedName& tagName, Document *doc)
-: SVGStyledTransformableElement(tagName, doc), SVGTests(), SVGLangSpace(), SVGExternalResourcesRequired()
+    : SVGStyledTransformableElement(tagName, doc)
+    , SVGTests()
+    , SVGLangSpace()
+    , SVGExternalResourcesRequired()
+    , m_x(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_y(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_width(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_height(new SVGLength(this, LM_HEIGHT, viewportElement()))
+    , m_rx(new SVGLength(this, LM_WIDTH, viewportElement()))
+    , m_ry(new SVGLength(this, LM_HEIGHT, viewportElement()))
 {
 }
 
@@ -45,51 +54,28 @@ SVGRectElement::~SVGRectElement()
 {
 }
 
-SVGAnimatedLength *SVGRectElement::x() const
-{
-    return lazy_create<SVGAnimatedLength>(m_x, this, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength *SVGRectElement::y() const
-{
-    return lazy_create<SVGAnimatedLength>(m_y, this, LM_HEIGHT, viewportElement());
-}
-
-SVGAnimatedLength *SVGRectElement::width() const
-{
-    return lazy_create<SVGAnimatedLength>(m_width, this, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength *SVGRectElement::height() const
-{
-    return lazy_create<SVGAnimatedLength>(m_height, this, LM_HEIGHT, viewportElement());
-}
-
-SVGAnimatedLength *SVGRectElement::rx() const
-{
-    return lazy_create<SVGAnimatedLength>(m_rx, this, LM_WIDTH, viewportElement());
-}
-
-SVGAnimatedLength *SVGRectElement::ry() const
-{
-    return lazy_create<SVGAnimatedLength>(m_ry, this, LM_HEIGHT, viewportElement());
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGRectElement, SVGLength*, Length, length, X, x, SVGNames::xAttr.localName(), m_x.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGRectElement, SVGLength*, Length, length, Y, y, SVGNames::yAttr.localName(), m_y.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGRectElement, SVGLength*, Length, length, Width, width, SVGNames::widthAttr.localName(), m_width.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGRectElement, SVGLength*, Length, length, Height, height, SVGNames::heightAttr.localName(), m_height.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGRectElement, SVGLength*, Length, length, Rx, rx, SVGNames::rxAttr.localName(), m_rx.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGRectElement, SVGLength*, Length, length, Ry, ry, SVGNames::ryAttr.localName(), m_ry.get())
 
 void SVGRectElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const AtomicString& value = attr->value();
     if (attr->name() == SVGNames::xAttr)
-        x()->baseVal()->setValueAsString(value.impl());
+        xBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::yAttr)
-        y()->baseVal()->setValueAsString(value.impl());
+        yBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::rxAttr)
-        rx()->baseVal()->setValueAsString(value.impl());
+        rxBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::ryAttr)
-        ry()->baseVal()->setValueAsString(value.impl());
+        ryBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::widthAttr)
-        width()->baseVal()->setValueAsString(value.impl());
+        widthBaseValue()->setValueAsString(value.impl());
     else if (attr->name() == SVGNames::heightAttr)
-        height()->baseVal()->setValueAsString(value.impl());
+        heightBaseValue()->setValueAsString(value.impl());
     else
     {
         if(SVGTests::parseMappedAttribute(attr)) return;
@@ -101,15 +87,15 @@ void SVGRectElement::parseMappedAttribute(MappedAttribute *attr)
 
 Path SVGRectElement::toPathData() const
 {
-    float _x = x()->baseVal()->value(), _y = y()->baseVal()->value();
-    float _width = width()->baseVal()->value(), _height = height()->baseVal()->value();
+    float _x = xBaseValue()->value(), _y = yBaseValue()->value();
+    float _width = widthBaseValue()->value(), _height = heightBaseValue()->value();
 
     bool hasRx = hasAttribute(String("rx").impl());
     bool hasRy = hasAttribute(String("ry").impl());
     if(hasRx || hasRy)
     {
-        float _rx = hasRx ? rx()->baseVal()->value() : ry()->baseVal()->value();
-        float _ry = hasRy ? ry()->baseVal()->value() : rx()->baseVal()->value();
+        float _rx = hasRx ? rxBaseValue()->value() : ryBaseValue()->value();
+        float _ry = hasRy ? ryBaseValue()->value() : rxBaseValue()->value();
         return Path::createRoundedRectangle(FloatRect(_x, _y, _width, _height), FloatSize(_rx, _ry));
     }
 
@@ -119,12 +105,12 @@ Path SVGRectElement::toPathData() const
 const SVGStyledElement *SVGRectElement::pushAttributeContext(const SVGStyledElement *context)
 {
     // All attribute's contexts are equal (so just take the one from 'x').
-    const SVGStyledElement *restore = x()->baseVal()->context();
+    const SVGStyledElement *restore = xBaseValue()->context();
 
-    x()->baseVal()->setContext(context);
-    y()->baseVal()->setContext(context);
-    width()->baseVal()->setContext(context);
-    height()->baseVal()->setContext(context);
+    xBaseValue()->setContext(context);
+    yBaseValue()->setContext(context);
+    widthBaseValue()->setContext(context);
+    heightBaseValue()->setContext(context);
     
     SVGStyledElement::pushAttributeContext(context);
     return restore;
index 76da60864d6fd2ac5735b577022700dc6ffaafd3..1385934f317dce9cdb7e7c224294b545f416f2e7 100644 (file)
@@ -31,7 +31,7 @@
 
 namespace WebCore
 {
-    class SVGAnimatedLength;
+    class SVGLength;
     class SVGRectElement : public SVGStyledTransformableElement,
                                public SVGTests,
                                public SVGLangSpace,
@@ -44,15 +44,6 @@ namespace WebCore
         virtual bool isValid() const { return SVGTests::isValid(); }
 
         // 'SVGRectElement' functions
-        SVGAnimatedLength *x() const;
-        SVGAnimatedLength *y() const;
-
-        SVGAnimatedLength *width() const;
-        SVGAnimatedLength *height() const;
-
-        SVGAnimatedLength *rx() const;
-        SVGAnimatedLength *ry() const;    
-
         virtual void parseMappedAttribute(MappedAttribute *attr);
 
         virtual bool rendererIsNeeded(RenderStyle *style) { return StyledElement::rendererIsNeeded(style); }
@@ -60,13 +51,16 @@ namespace WebCore
 
         virtual const SVGStyledElement *pushAttributeContext(const SVGStyledElement *context);
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
-        mutable RefPtr<SVGAnimatedLength> m_x;
-        mutable RefPtr<SVGAnimatedLength> m_y;
-        mutable RefPtr<SVGAnimatedLength> m_width;
-        mutable RefPtr<SVGAnimatedLength> m_height;
-        mutable RefPtr<SVGAnimatedLength> m_rx;
-        mutable RefPtr<SVGAnimatedLength> m_ry;
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, X, x)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Y, y)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Width, width)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Height, height)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Rx, rx)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Ry, ry)
     };
 
 } // namespace WebCore
index 5ea94b271cb7d239f607befeb93693f3cd9e8fed..c1fbe6a06e98662164cdc7432d7d8fdcf48326ab 100644 (file)
@@ -32,9 +32,9 @@
 #include "KCanvasRenderingStyle.h"
 #include "KSVGTimeScheduler.h"
 #include "SVGAngle.h"
-#include "SVGAnimatedLength.h"
-#include "SVGAnimatedPreserveAspectRatio.h"
-#include "SVGAnimatedRect.h"
+#include "SVGLength.h"
+#include "SVGPreserveAspectRatio.h"
+#include "SVGRect.h"
 #include "SVGDocumentExtensions.h"
 #include "SVGMatrix.h"
 #include "SVGNumber.h"
@@ -60,48 +60,27 @@ SVGSVGElement::SVGSVGElement(const QualifiedName& tagName, Document *doc)
     , m_useCurrentView(false)
     , m_timeScheduler(new TimeScheduler(doc))
 {
-}
+    const SVGElement* viewport = ownerDocument()->documentElement() == this ? this : viewportElement();
+    const SVGStyledElement* context = reinterpret_cast<const SVGStyledElement*>(ownerDocument()->documentElement() == this ? 0 : this);
 
-SVGSVGElement::~SVGSVGElement()
-{
-    delete m_timeScheduler;
-}
+    m_x = new SVGLength(context, LM_WIDTH, viewport);
+    m_y = new SVGLength(context, LM_HEIGHT, viewport);
+    m_width = new SVGLength(context, LM_WIDTH, viewport);
+    m_height = new SVGLength(context, LM_HEIGHT, viewport);
 
-SVGAnimatedLength *SVGSVGElement::x() const
-{
-    const SVGElement *viewport = ownerDocument()->documentElement() == this ? this : viewportElement();
-    return lazy_create<SVGAnimatedLength>(m_x, (SVGStyledElement *)0, LM_WIDTH, viewport);
-}
-
-SVGAnimatedLength *SVGSVGElement::y() const
-{
-    const SVGElement *viewport = ownerDocument()->documentElement() == this ? this : viewportElement();
-    return lazy_create<SVGAnimatedLength>(m_y, (SVGStyledElement *)0, LM_HEIGHT, viewport);
+    m_width->setValueAsString("100%");
+    m_height->setValueAsString("100%");
 }
 
-SVGAnimatedLength *SVGSVGElement::width() const
+SVGSVGElement::~SVGSVGElement()
 {
-    if (!m_width) {
-        String temp("100%");
-        const SVGElement *viewport = ownerDocument()->documentElement() == this ? this : viewportElement();
-        lazy_create<SVGAnimatedLength>(m_width, (SVGStyledElement *)ownerDocument()->documentElement() == this ? 0 : this, LM_WIDTH, viewport);
-        m_width->baseVal()->setValueAsString(temp.impl());
-    }
-
-    return m_width.get();
+    delete m_timeScheduler;
 }
 
-SVGAnimatedLength *SVGSVGElement::height() const
-{
-    if (!m_height) {
-        String temp("100%");
-        const SVGElement *viewport = ownerDocument()->documentElement() == this ? this : viewportElement();
-        lazy_create<SVGAnimatedLength>(m_height, (SVGStyledElement *)ownerDocument()->documentElement() == this ? 0 : this, LM_HEIGHT, viewport);
-        m_height->baseVal()->setValueAsString(temp.impl());
-    }
-
-    return m_height.get();
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGSVGElement, SVGLength*, Length, length, X, x, SVGNames::xAttr.localName(), m_x.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGSVGElement, SVGLength*, Length, length, Y, y, SVGNames::yAttr.localName(), m_y.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGSVGElement, SVGLength*, Length, length, Width, width, SVGNames::widthAttr.localName(), m_width.get())
+ANIMATED_PROPERTY_DEFINITIONS(SVGSVGElement, SVGLength*, Length, length, Height, height, SVGNames::heightAttr.localName(), m_height.get())
 
 AtomicString SVGSVGElement::contentScriptType() const
 {
@@ -125,10 +104,10 @@ void SVGSVGElement::setContentStyleType(const AtomicString& type)
 
 FloatRect SVGSVGElement::viewport() const
 {
-    double _x = x()->baseVal()->value();
-    double _y = y()->baseVal()->value();
-    double w = width()->baseVal()->value();
-    double h = height()->baseVal()->value();
+    double _x = xBaseValue()->value();
+    double _y = yBaseValue()->value();
+    double w = widthBaseValue()->value();
+    double h = heightBaseValue()->value();
     RefPtr<SVGMatrix> viewBox = viewBoxToViewTransform(w, h);
     viewBox->matrix().map(_x, _y, &_x, &_y);
     viewBox->matrix().map(w, h, &w, &h);
@@ -235,14 +214,14 @@ void SVGSVGElement::parseMappedAttribute(MappedAttribute *attr)
             addSVGWindowEventListner(zoomEvent, attr);
     }
     if (attr->name() == SVGNames::xAttr) {
-        x()->baseVal()->setValueAsString(value.impl());
+        xBaseValue()->setValueAsString(value.impl());
     } else if (attr->name() == SVGNames::yAttr) {
-        y()->baseVal()->setValueAsString(value.impl());
+        yBaseValue()->setValueAsString(value.impl());
     } else if (attr->name() == SVGNames::widthAttr) {
-        width()->baseVal()->setValueAsString(value.impl());
+        widthBaseValue()->setValueAsString(value.impl());
         addCSSProperty(attr, CSS_PROP_WIDTH, value);
     } else if (attr->name() == SVGNames::heightAttr) {
-        height()->baseVal()->setValueAsString(value.impl());
+        heightBaseValue()->setValueAsString(value.impl());
         addCSSProperty(attr, CSS_PROP_HEIGHT, value);
     } else {
         if (SVGTests::parseMappedAttribute(attr))
@@ -253,7 +232,7 @@ void SVGSVGElement::parseMappedAttribute(MappedAttribute *attr)
             return;
         if (SVGFitToViewBox::parseMappedAttribute(attr)) {
             if (renderer())
-                static_cast<RenderSVGContainer*>(renderer())->setViewBox(FloatRect(viewBox()->baseVal()->x(), viewBox()->baseVal()->y(), viewBox()->baseVal()->width(), viewBox()->baseVal()->height()));
+                static_cast<RenderSVGContainer*>(renderer())->setViewBox(FloatRect(viewBoxBaseValue()->x(), viewBoxBaseValue()->y(), viewBoxBaseValue()->width(), viewBoxBaseValue()->height()));
         }
         if (SVGZoomAndPan::parseMappedAttribute(attr))
             return;
@@ -363,11 +342,11 @@ SVGMatrix *SVGSVGElement::getCTM() const
     SVGMatrix *mat = createSVGMatrix();
     if(mat)
     {
-        mat->translate(x()->baseVal()->value(), y()->baseVal()->value());
+        mat->translate(xBaseValue()->value(), yBaseValue()->value());
 
         if(attributes()->getNamedItem(SVGNames::viewBoxAttr))
         {
-            RefPtr<SVGMatrix> viewBox = viewBoxToViewTransform(width()->baseVal()->value(), height()->baseVal()->value());
+            RefPtr<SVGMatrix> viewBox = viewBoxToViewTransform(widthBaseValue()->value(), heightBaseValue()->value());
             mat->multiply(viewBox.get());
         }
     }
@@ -380,11 +359,11 @@ SVGMatrix *SVGSVGElement::getScreenCTM() const
     SVGMatrix *mat = SVGStyledLocatableElement::getScreenCTM();
     if(mat)
     {
-        mat->translate(x()->baseVal()->value(), y()->baseVal()->value());
+        mat->translate(xBaseValue()->value(), yBaseValue()->value());
 
         if(attributes()->getNamedItem(SVGNames::viewBoxAttr))
         {
-            RefPtr<SVGMatrix> viewBox = viewBoxToViewTransform(width()->baseVal()->value(), height()->baseVal()->value());
+            RefPtr<SVGMatrix> viewBox = viewBoxToViewTransform(widthBaseValue()->value(), heightBaseValue()->value());
             mat->multiply(viewBox.get());
         }
     }
@@ -397,15 +376,15 @@ RenderObject* SVGSVGElement::createRenderer(RenderArena* arena, RenderStyle*)
     RenderSVGContainer *rootContainer = new (arena) RenderSVGContainer(this);
 
     // FIXME: all this setup should be done after attributesChanged, not here.
-    float _x = x()->baseVal()->value();
-    float _y = y()->baseVal()->value();
-    float _width = width()->baseVal()->value();
-    float _height = height()->baseVal()->value();
+    float _x = xBaseValue()->value();
+    float _y = yBaseValue()->value();
+    float _width = widthBaseValue()->value();
+    float _height = heightBaseValue()->value();
 
     rootContainer->setViewport(FloatRect(_x, _y, _width, _height));
-    rootContainer->setViewBox(FloatRect(viewBox()->baseVal()->x(), viewBox()->baseVal()->y(), viewBox()->baseVal()->width(), viewBox()->baseVal()->height()));
-    rootContainer->setAlign(KCAlign(preserveAspectRatio()->baseVal()->align() - 1));
-    rootContainer->setSlice(preserveAspectRatio()->baseVal()->meetOrSlice() == SVG_MEETORSLICE_SLICE);
+    rootContainer->setViewBox(FloatRect(viewBoxBaseValue()->x(), viewBoxBaseValue()->y(), viewBoxBaseValue()->width(), viewBoxBaseValue()->height()));
+    rootContainer->setAlign(KCAlign(preserveAspectRatioBaseValue()->align() - 1));
+    rootContainer->setSlice(preserveAspectRatioBaseValue()->meetOrSlice() == SVG_MEETORSLICE_SLICE);
     
     return rootContainer;
 }
index f19055d4f0747e853ed6b4572e0e38008d254d45..b7c990bf70c1fdbcd5f839789b8a7db1503ece1e 100644 (file)
@@ -38,7 +38,7 @@ namespace WebCore
     class SVGLength;
     class SVGMatrix;
     class SVGTransform;
-    class SVGAnimatedLength;
+    class SVGLength;
     class TimeScheduler;
     class SVGSVGElement : public SVGStyledLocatableElement,
                               public SVGTests,
@@ -56,11 +56,6 @@ namespace WebCore
         virtual bool isValid() const { return SVGTests::isValid(); }
 
         // 'SVGSVGElement' functions
-        SVGAnimatedLength* x() const;
-        SVGAnimatedLength* y() const;
-        SVGAnimatedLength* width() const;
-        SVGAnimatedLength* height() const;
-
         AtomicString contentScriptType() const;
         void setContentScriptType(const AtomicString& type);
 
@@ -125,14 +120,16 @@ namespace WebCore
         // 'virtual SVGZoomAndPan functions
         virtual void setZoomAndPan(unsigned short zoomAndPan);
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
         void addSVGWindowEventListner(const AtomicString& eventType, const Attribute* attr);   
 
-        mutable RefPtr<SVGAnimatedLength> m_x;
-        mutable RefPtr<SVGAnimatedLength> m_y;
-        mutable RefPtr<SVGAnimatedLength> m_width;
-        mutable RefPtr<SVGAnimatedLength> m_height;
-
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, X, x)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Y, y)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Width, width)
+        ANIMATED_PROPERTY_DECLARATIONS(SVGLength*, RefPtr<SVGLength>, Height, height)
         bool m_useCurrentView;
         TimeScheduler* m_timeScheduler;
     };
index d6e308ecc3f49e9be99ed0b0b48c290750cc5cd8..e59ea5647825f08bfa14d438ef659df21d4794d5 100644 (file)
@@ -47,6 +47,9 @@ namespace WebCore
 
         static void executeScript(Document *document, StringImpl *jsCode);
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
         String m_type;
     };
index b0c24204d2bd8493cb79692cf513c73fdc03d5c3..e95411e3b338895916d433ec10aeb1abbaf0dbe1 100644 (file)
@@ -36,6 +36,9 @@ namespace WebCore
 
         virtual void handleTimerEvent(double timePercentage);
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
         DeprecatedString m_savedTo;
     };
index c4bd3c45a12b5f43175a14070e43b00653313b21..94a3dc550affcaa979eae98898c43091c580b895 100644 (file)
 #include "SVGHelper.h"
 #include "SVGRenderStyle.h"
 #include "SVGStopElement.h"
-#include "SVGAnimatedNumber.h"
 
 using namespace WebCore;
 
-SVGStopElement::SVGStopElement(const QualifiedName& tagName, Document *doc) : SVGStyledElement(tagName, doc)
+SVGStopElement::SVGStopElement(const QualifiedName& tagName, Document *doc)
+    : SVGStyledElement(tagName, doc)
+    , m_offset(0.0)
 {
 }
 
@@ -43,19 +44,16 @@ SVGStopElement::~SVGStopElement()
 {
 }
 
-SVGAnimatedNumber *SVGStopElement::offset() const
-{
-    return lazy_create<SVGAnimatedNumber>(m_offset, this);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGStopElement, double, Number, number, Offset, offset, SVGNames::offsetAttr.localName(), m_offset)
 
 void SVGStopElement::parseMappedAttribute(MappedAttribute *attr)
 {
     const String& value = attr->value();
     if (attr->name() == SVGNames::offsetAttr) {
         if(value.endsWith("%"))
-            offset()->setBaseVal(value.deprecatedString().left(value.length() - 1).toDouble() / 100.);
+            setOffsetBaseValue(value.deprecatedString().left(value.length() - 1).toDouble() / 100.);
         else
-            offset()->setBaseVal(value.deprecatedString().toDouble());
+            setOffsetBaseValue(value.deprecatedString().toDouble());
     } else
         SVGStyledElement::parseMappedAttribute(attr);
 
index 5cc1f953034adca4490ff39ff3dfe38bfc33e399..938d0d3e721d01c813c992d040c47d6b8f5859be 100644 (file)
@@ -28,7 +28,6 @@
 
 namespace WebCore
 {
-    class SVGAnimatedNumber;
     class SVGStopElement : public SVGStyledElement
     {
     public:
@@ -38,11 +37,9 @@ namespace WebCore
         virtual bool isGradientStop() const { return true; }
 
         // 'SVGStoplement' functions
-        SVGAnimatedNumber *offset() const;
-
         virtual void parseMappedAttribute(MappedAttribute *attr);
     private:
-        mutable RefPtr<SVGAnimatedNumber> m_offset;
+        ANIMATED_PROPERTY_DECLARATIONS(double, double, Offset, offset)
     };
 
 } // namespace WebCore
index 6f80c97521458810cc3d28e90877ef62c54854e5..88df41b20d5038546941ae5f41a11ec10dbd7a99 100644 (file)
@@ -31,7 +31,6 @@ namespace WebCore {
     class String;
     class CSSValue;
     class CSSStyleDeclaration;
-    class SVGAnimatedString;
 
     class SVGStylable {
     public:
@@ -39,8 +38,6 @@ namespace WebCore {
         virtual ~SVGStylable();
 
         // 'SVGStylable' functions
-        virtual SVGAnimatedString* className() const = 0;
-
         virtual CSSStyleDeclaration* style() = 0;
         virtual CSSValue* getPresentationAttribute(StringImpl* name) = 0;
     };
index 87ce88d4522104801d2637e3d63213209ae15940..4300bf7ddfe45bfe22a6e93fa6f3114dac477efe 100644 (file)
 #include "SVGStyledElement.h"
 
 #include "Attr.h"
+#include "HTMLNames.h"
 #include "Document.h"
 #include "KCanvasRenderingStyle.h"
 #include "KRenderingDevice.h"
 #include "PlatformString.h"
 #include "RenderView.h"
 #include "RenderPath.h"
-#include "SVGAnimatedString.h"
 #include "SVGElement.h"
 #include "SVGHelper.h"
 #include "SVGMatrix.h"
@@ -60,10 +60,7 @@ SVGStyledElement::~SVGStyledElement()
 {
 }
 
-SVGAnimatedString* SVGStyledElement::className() const
-{
-    return lazy_create(m_className, (SVGStyledElement*)0); // TODO: use notification context?
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGStyledElement, String, String, string, ClassName, className, HTMLNames::classAttr.localName(), m_className)
 
 RenderObject* SVGStyledElement::createRenderer(RenderArena* arena, RenderStyle* style)
 {
index 84e6bcff982c4b3718e45f744255aec3e66a17e2..e1de2a5ba65b661e2da4930e708472b9fe5a0e4c 100644 (file)
@@ -47,8 +47,6 @@ namespace WebCore {
         virtual bool isStyled() const { return true; }
 
         // 'SVGStylable' functions
-        virtual SVGAnimatedString* className() const;
-
         // These need to be implemented.
         virtual bool rendererIsNeeded(RenderStyle*) { return false; }
         virtual Path toPathData() const { return Path(); }
@@ -72,8 +70,7 @@ namespace WebCore {
 
     private:
         mutable RefPtr<CSSStyleDeclaration> m_pa;
-        mutable RefPtr<SVGAnimatedString> m_className;
-
+        ANIMATED_PROPERTY_DECLARATIONS(String, String, ClassName, className)
         // Optimized updating logic
         bool m_updateVectorial : 1;
     };
index d03362e5f2a783ed2c7399d2d532615632d99686..0b113e9ac3a907b5f1eb9a83ad8d038cc8ba103a 100644 (file)
 #include "SVGDocument.h"
 #include "SVGStyledTransformableElement.h"
 #include "SVGStyledElement.h"
-#include "SVGAnimatedTransformList.h"
+#include "SVGTransformList.h"
 
 using namespace WebCore;
 
 SVGStyledTransformableElement::SVGStyledTransformableElement(const QualifiedName& tagName, Document *doc)
-: SVGStyledLocatableElement(tagName, doc), SVGTransformable()
+    : SVGStyledLocatableElement(tagName, doc)
+    , SVGTransformable()
+    , m_transform(new SVGTransformList(this))
 {
 }
 
@@ -47,10 +49,7 @@ SVGStyledTransformableElement::~SVGStyledTransformableElement()
 {
 }
 
-SVGAnimatedTransformList *SVGStyledTransformableElement::transform() const
-{
-    return lazy_create<SVGAnimatedTransformList>(m_transform, this);
-}
+ANIMATED_PROPERTY_DEFINITIONS(SVGStyledTransformableElement, SVGTransformList*, TransformList, transformList, Transform, transform, SVGNames::transformAttr.localName(), m_transform.get())
 
 SVGMatrix *SVGStyledTransformableElement::localMatrix() const
 {
@@ -93,7 +92,7 @@ void SVGStyledTransformableElement::updateLocalTransform(SVGTransformList *local
 void SVGStyledTransformableElement::parseMappedAttribute(MappedAttribute *attr)
 {
     if (attr->name() == SVGNames::transformAttr) {
-        SVGTransformList *localTransforms = transform()->baseVal();
+        SVGTransformList *localTransforms = transformBaseValue();
         localTransforms->clear();
         
         SVGTransformable::parseTransformAttribute(localTransforms, attr->value());
index 3daa5183f58a9fba158b969cc4a514bff0c44d56..13a8193e0ea58b7ac980c286754eb4a144ff1323 100644 (file)
@@ -33,7 +33,7 @@ namespace WebCore {
     class Attribute;
     class Node;
     class StringImpl;
-    class SVGAnimatedTransformList;
+    class SVGTransformList;
     class SVGMatrix;
     class SVGTransformList;
 
@@ -45,7 +45,6 @@ namespace WebCore {
         virtual bool isStyledTransformable() const { return true; }
 
         // 'SVGTransformable' functions
-        virtual SVGAnimatedTransformList *transform() const;
         virtual SVGMatrix *localMatrix() const;
 
         // Derived from: 'SVGLocatable'
@@ -65,7 +64,7 @@ namespace WebCore {
 
     protected:
         mutable RefPtr<SVGMatrix> m_localMatrix;
-        mutable RefPtr<SVGAnimatedTransformList> m_transform;
+        ANIMATED_PROPERTY_DECLARATIONS(SVGTransformList*, RefPtr<SVGTransformList>, Transform, transform)
     };
 
 } // namespace WebCore
index ac21e5f6e02e96e46d71bae18cf9590e13f07ac6..f56dbec47cdc9bb7ec3506b42aaa2469f82e91f6 100644 (file)
@@ -31,7 +31,7 @@
 #include "SVGHelper.h"
 #include "SVGTests.h"
 #include "SVGSwitchElement.h"
-#include "SVGAnimatedLength.h"
+#include "SVGLength.h"
 
 namespace WebCore {
 
index 45604b4ac44bbde22b64a8bd064e9d510d22e4d6..018e9820f5c7927cd9a38ea4bb59bb5013950485 100644 (file)
@@ -47,6 +47,9 @@ namespace WebCore
 
         virtual RenderObject *createRenderer(RenderArena *arena, RenderStyle *style);
 
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
+
     private:
         mutable bool m_insideRenderSection;
     };
index c8d25cfb62464c834c442b7812430329194fc9da..295c0357389768488376ffd90e8be8712fa58e68 100644 (file)
@@ -42,6 +42,9 @@ namespace WebCore
 
         virtual void parseMappedAttribute(MappedAttribute *attr);
         virtual bool shouldAttachChild(Element *) const { return false; }
+    
+    protected:
+        virtual const SVGElement* contextElement() const { return this; }
     };
 
 } // namespace WebCore
index 2f47c85ff6688f865b8e1e714b77efd95415e222..761417d299bc668100000789884a967a58048eed 100644 (file)
@@ -26,7 +26,6 @@
 #include "SVGTRefElement.h"
 #include "SVGNames.h"
 #include "XLinkNames.h"
-#include "SVGAnimatedString.h"
 #include "SVGDocument.h"
 #include "RenderInline.h"
 
@@ -43,7 +42,7 @@ SVGTRefElement::~SVGTRefElement()
 
 void SVGTRefElement::updateReferencedText()
 {
-    String targetId = SVGURIReference::getTarget(String(href()->baseVal()).deprecatedString());
+    String targetId = SVGURIReference::getTarget(String(hrefBaseValue()).deprecatedString());
     Element *targetElement = ownerDocument()->getElementById(targetId.impl());
     SVGElement *target = svg_dynamic_cast(targetElement);
     if (target) {
index cf52ceb6973b4016954a1e526ade1b6a69c2ec9e..03c949cc02408067ef1438b89879017e8604fc9d 100644 (file)
@@ -42,6 +42,9 @@ namespace WebCore
         virtual RenderObject *createRenderer(RenderArena *arena, RenderStyle *style);
         bool childShouldCreateRenderer(Node *child) const;
 
+    protected:
+       &nbs