⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 svganimatedproperty.h

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 H
📖 第 1 页 / 共 2 页
字号:
/*    Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org>    This library is free software; you can redistribute it and/or    modify it under the terms of the GNU Library General Public    License as published by the Free Software Foundation; either    version 2 of the License, or (at your option) any later version.    This library is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU    Library General Public License for more details.    You should have received a copy of the GNU Library General Public License    along with this library; see the file COPYING.LIB.  If not, write to    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,    Boston, MA 02110-1301, USA.*/#ifndef SVGAnimatedProperty_h#define SVGAnimatedProperty_h#if ENABLE(SVG)#include "SVGAnimatedTemplate.h"#include "SVGDocumentExtensions.h"#include "SynchronizableTypeWrapper.h"namespace WebCore {    template<typename OwnerTypeArg, typename AnimatedTypeArg, const char* TagName, const char* PropertyName>    class SVGAnimatedProperty;    template<typename OwnerType, typename OwnerElement, typename AnimatedType, typename DecoratedType, const char* TagName, const char* PropertyName>    class SVGAnimatedPropertyTearOff : public SVGAnimatedTemplate<DecoratedType> {    public:        typedef SVGAnimatedPropertyTearOff<OwnerType, OwnerElement, AnimatedType, DecoratedType, TagName, PropertyName> Self;        typedef SVGAnimatedProperty<OwnerType, AnimatedType, TagName, PropertyName> Creator;        static PassRefPtr<Self> create(const Creator& creator, const OwnerElement* owner, const QualifiedName& attributeName)        {            return adoptRef(new Self(creator, owner, attributeName));        }        virtual DecoratedType baseVal() const;        virtual void setBaseVal(DecoratedType);        virtual DecoratedType animVal() const;        virtual void setAnimVal(DecoratedType);    private:        SVGAnimatedPropertyTearOff(const Creator&, const OwnerElement*, const QualifiedName& attributeName);        Creator& m_creator;        RefPtr<OwnerElement> m_ownerElement;    };    // Helper templates mapping owner types to owner elements (for SVG*Element OwnerType is equal to OwnerElement, for non-SVG*Element derived types, they're different)    template<typename OwnerType, bool isDerivedFromSVGElement>    struct GetOwnerElementForType;    template<typename OwnerType>    struct IsDerivedFromSVGElement;    // Helper template used for synchronizing SVG <-> XML properties    template<typename OwnerElement, typename DecoratedType>    void synchronizeProperty(const OwnerElement* ownerElement, const QualifiedName& attributeName, DecoratedType baseValue);    // Abstract base class    class SVGAnimatedPropertyBase : Noncopyable {    public:        virtual ~SVGAnimatedPropertyBase() { }        virtual void synchronize() const = 0;    };    template<typename OwnerTypeArg, typename AnimatedTypeArg, const char* TagName, const char* PropertyName>    class SVGAnimatedProperty : public SVGAnimatedPropertyBase {    public:        typedef OwnerTypeArg OwnerType;        typedef AnimatedTypeArg AnimatedType;        typedef typename SVGAnimatedTypeValue<AnimatedType>::StorableType StorableType;        typedef typename SVGAnimatedTypeValue<AnimatedType>::DecoratedType DecoratedType;        typedef GetOwnerElementForType<OwnerType, IsDerivedFromSVGElement<OwnerType>::value> OwnerElementForType;        typedef typename OwnerElementForType::OwnerElement OwnerElement;        typedef SVGAnimatedPropertyTearOff<OwnerType, OwnerElement, AnimatedType, DecoratedType, TagName, PropertyName> TearOff;        // attributeName & attributeIdentifier may differ. For SVGMarkerElement, there are two exposed SVG animatable        // properties: orientType & orientAngle, though only one DOM attribute "orient", handle these cases!        SVGAnimatedProperty(const OwnerType*, const QualifiedName& attributeName);        SVGAnimatedProperty(const OwnerType*, const QualifiedName& attributeName, const AtomicString& attributeIdentifier);        // "Forwarding constructors" for primitive type assignment with more than one argument        template<typename T1>        SVGAnimatedProperty(const OwnerType*, const QualifiedName& attributeName,                            const T1&);        template<typename T1>        SVGAnimatedProperty(const OwnerType*, const QualifiedName& attributeName, const AtomicString& attributeIdentifier,                            const T1&);        template<typename T1, typename T2>        SVGAnimatedProperty(const OwnerType*, const QualifiedName& attributeName,                            const T1&, const T2&);        template<typename T1, typename T2>        SVGAnimatedProperty(const OwnerType*, const QualifiedName& attributeName, const AtomicString& attributeIdentifier,                            const T1&, const T2&);        template<typename T1, typename T2, typename T3>        SVGAnimatedProperty(const OwnerType*, const QualifiedName& attributeName,                            const T1&, const T2&, const T3&);            template<typename T1, typename T2, typename T3>        SVGAnimatedProperty(const OwnerType*, const QualifiedName& attributeName, const AtomicString& attributeIdentifier,                            const T1&, const T2&, const T3&);        DecoratedType value() const;        void setValue(DecoratedType);        DecoratedType baseValue() const;        void setBaseValue(DecoratedType);        // Tear offs only used by bindings, never in internal code        PassRefPtr<TearOff> animatedTearOff() const;        virtual void synchronize() const;        void startAnimation() const;        void stopAnimation();    private:        const OwnerElement* ownerElement() const;    private:        // We're a member variable on stack, living in OwnerType, NO need to ref here.        const OwnerType* m_ownerType;        const QualifiedName& m_attributeName;        const AtomicString& m_attributeIdentifier;        mutable SynchronizableTypeWrapper<StorableType> m_value;    };    // SVGAnimatedPropertyTearOff implementation    template<typename OwnerType, typename OwnerElement, typename AnimatedType, typename DecoratedType, const char* TagName, const char* PropertyName>    SVGAnimatedPropertyTearOff<OwnerType, OwnerElement, AnimatedType, DecoratedType, TagName, PropertyName>::SVGAnimatedPropertyTearOff(const Creator& creator,                                                                                                                                        const OwnerElement* owner,                                                                                                                                        const QualifiedName& attributeName)        : SVGAnimatedTemplate<DecoratedType>(attributeName)        , m_creator(const_cast<Creator&>(creator))        , m_ownerElement(const_cast<OwnerElement*>(owner))    {        ASSERT(m_ownerElement);    }    template<typename OwnerType, typename OwnerElement, typename AnimatedType, typename DecoratedType, const char* TagName, const char* PropertyName>    DecoratedType SVGAnimatedPropertyTearOff<OwnerType, OwnerElement, AnimatedType, DecoratedType, TagName, PropertyName>::baseVal() const    {        return m_creator.baseValue();    }    template<typename OwnerType, typename OwnerElement, typename AnimatedType, typename DecoratedType, const char* TagName, const char* PropertyName>    void SVGAnimatedPropertyTearOff<OwnerType, OwnerElement, AnimatedType, DecoratedType, TagName, PropertyName>::setBaseVal(DecoratedType newBaseVal)    {        m_creator.setBaseValue(newBaseVal);    }    template<typename OwnerType, typename OwnerElement, typename AnimatedType, typename DecoratedType, const char* TagName, const char* PropertyName>    DecoratedType SVGAnimatedPropertyTearOff<OwnerType, OwnerElement, AnimatedType, DecoratedType, TagName, PropertyName>::animVal() const    {        return m_creator.value();    }    template<typename OwnerType, typename OwnerElement, typename AnimatedType, typename DecoratedType, const char* TagName, const char* PropertyName>    void SVGAnimatedPropertyTearOff<OwnerType, OwnerElement, AnimatedType, DecoratedType, TagName, PropertyName>::setAnimVal(DecoratedType newAnimVal)    {        m_creator.setValue(newAnimVal);    }    // SVGAnimatedProperty implementation    template<typename OwnerTypeArg, typename AnimatedTypeArg, const char* TagName, const char* PropertyName>    SVGAnimatedProperty<OwnerTypeArg, AnimatedTypeArg, TagName, PropertyName>::SVGAnimatedProperty(const OwnerType* owner,                                                                                                   const QualifiedName& attributeName)        : m_ownerType(owner)        , m_attributeName(attributeName)        , m_attributeIdentifier(attributeName.localName())        , m_value()    {        ASSERT(m_ownerType);    }    template<typename OwnerTypeArg, typename AnimatedTypeArg, const char* TagName, const char* PropertyName>    SVGAnimatedProperty<OwnerTypeArg, AnimatedTypeArg, TagName, PropertyName>::SVGAnimatedProperty(const OwnerType* owner,                                                                                                   const QualifiedName& attributeName,                                                                                                   const AtomicString& attributeIdentifier)        : m_ownerType(owner)        , m_attributeName(attributeName)        , m_attributeIdentifier(attributeIdentifier)        , m_value()    {        ASSERT(m_ownerType);    }    template<typename OwnerTypeArg, typename AnimatedTypeArg, const char* TagName, const char* PropertyName>    template<typename T1>    SVGAnimatedProperty<OwnerTypeArg, AnimatedTypeArg, TagName, PropertyName>::SVGAnimatedProperty(const OwnerType* owner,                                                                                                   const QualifiedName& attributeName,                                                                                                   const T1& arg1)        : m_ownerType(owner)        , m_attributeName(attributeName)        , m_attributeIdentifier(attributeName.localName())        , m_value(arg1)    {        ASSERT(m_ownerType);    }    template<typename OwnerTypeArg, typename AnimatedTypeArg, const char* TagName, const char* PropertyName>    template<typename T1>    SVGAnimatedProperty<OwnerTypeArg, AnimatedTypeArg, TagName, PropertyName>::SVGAnimatedProperty(const OwnerType* owner,                                                                                                   const QualifiedName& attributeName,                                                                                                   const AtomicString& attributeIdentifier,                                                                                                   const T1& arg1)        : m_ownerType(owner)        , m_attributeName(attributeName)        , m_attributeIdentifier(attributeIdentifier)        , m_value(arg1)    {        ASSERT(m_ownerType);    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -