diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/svg/SVGAngle.h')
-rw-r--r-- | chromium/third_party/WebKit/Source/core/svg/SVGAngle.h | 84 |
1 files changed, 70 insertions, 14 deletions
diff --git a/chromium/third_party/WebKit/Source/core/svg/SVGAngle.h b/chromium/third_party/WebKit/Source/core/svg/SVGAngle.h index 860d3f0f522..4f63310bc4c 100644 --- a/chromium/third_party/WebKit/Source/core/svg/SVGAngle.h +++ b/chromium/third_party/WebKit/Source/core/svg/SVGAngle.h @@ -22,25 +22,62 @@ #ifndef SVGAngle_h #define SVGAngle_h -#include "core/svg/properties/SVGPropertyTraits.h" +#include "core/svg/SVGEnumeration.h" namespace WebCore { -class ExceptionState; +class SVGAngle; +class SVGAngleTearOff; -class SVGAngle { - WTF_MAKE_FAST_ALLOCATED; +enum SVGMarkerOrientType { + SVGMarkerOrientUnknown = 0, + SVGMarkerOrientAuto, + SVGMarkerOrientAngle +}; +template<> const SVGEnumerationStringEntries& getStaticStringEntries<SVGMarkerOrientType>(); + +class SVGMarkerOrientEnumeration : public SVGEnumeration<SVGMarkerOrientType> { public: - SVGAngle(); + static PassRefPtr<SVGMarkerOrientEnumeration> create(SVGAngle* angle) + { + return adoptRef(new SVGMarkerOrientEnumeration(angle)); + } + + virtual ~SVGMarkerOrientEnumeration(); + + virtual void add(PassRefPtrWillBeRawPtr<SVGPropertyBase>, SVGElement*) OVERRIDE; + virtual void calculateAnimatedValue(SVGAnimationElement*, float, unsigned, PassRefPtr<SVGPropertyBase>, PassRefPtr<SVGPropertyBase>, PassRefPtr<SVGPropertyBase>, SVGElement*) OVERRIDE; + virtual float calculateDistance(PassRefPtr<SVGPropertyBase>, SVGElement*) OVERRIDE; + +private: + SVGMarkerOrientEnumeration(SVGAngle*); + + virtual void notifyChange() OVERRIDE; + + // FIXME: oilpan: This is kept as raw-ptr to avoid reference cycles. Should be Member in oilpan. + SVGAngle* m_angle; +}; + +class SVGAngle : public SVGPropertyBase { +public: + typedef SVGAngleTearOff TearOffType; enum SVGAngleType { SVG_ANGLETYPE_UNKNOWN = 0, SVG_ANGLETYPE_UNSPECIFIED = 1, SVG_ANGLETYPE_DEG = 2, SVG_ANGLETYPE_RAD = 3, - SVG_ANGLETYPE_GRAD = 4 + SVG_ANGLETYPE_GRAD = 4, + SVG_ANGLETYPE_TURN = 5 }; + static PassRefPtr<SVGAngle> create() + { + return adoptRef(new SVGAngle()); + } + + virtual ~SVGAngle(); + SVGAngleType unitType() const { return m_unitType; } void setValue(float); @@ -49,22 +86,41 @@ public: void setValueInSpecifiedUnits(float valueInSpecifiedUnits) { m_valueInSpecifiedUnits = valueInSpecifiedUnits; } float valueInSpecifiedUnits() const { return m_valueInSpecifiedUnits; } + void newValueSpecifiedUnits(SVGAngleType unitType, float valueInSpecifiedUnits); + void convertToSpecifiedUnits(SVGAngleType unitType, ExceptionState&); + + SVGEnumeration<SVGMarkerOrientType>* orientType() { return m_orientType.get(); } + void orientTypeChanged(); + + // SVGPropertyBase: + + PassRefPtr<SVGAngle> clone() const; + virtual PassRefPtr<SVGPropertyBase> cloneForAnimation(const String&) const OVERRIDE; + + virtual String valueAsString() const OVERRIDE; void setValueAsString(const String&, ExceptionState&); - String valueAsString() const; - void newValueSpecifiedUnits(unsigned short unitType, float valueInSpecifiedUnits, ExceptionState&); - void convertToSpecifiedUnits(unsigned short unitType, ExceptionState&); + virtual void add(PassRefPtrWillBeRawPtr<SVGPropertyBase>, SVGElement*) OVERRIDE; + virtual void calculateAnimatedValue(SVGAnimationElement*, float percentage, unsigned repeatCount, PassRefPtr<SVGPropertyBase> from, PassRefPtr<SVGPropertyBase> to, PassRefPtr<SVGPropertyBase> toAtEndOfDurationValue, SVGElement* contextElement) OVERRIDE; + virtual float calculateDistance(PassRefPtr<SVGPropertyBase> to, SVGElement* contextElement) OVERRIDE; + + static AnimatedPropertyType classType() { return AnimatedAngle; } private: + SVGAngle(); + SVGAngle(SVGAngleType, float, SVGMarkerOrientType); + SVGAngleType m_unitType; float m_valueInSpecifiedUnits; + RefPtr<SVGMarkerOrientEnumeration> m_orientType; }; -template<> -struct SVGPropertyTraits<SVGAngle> { - static SVGAngle initialValue() { return SVGAngle(); } - static String toString(const SVGAngle& type) { return type.valueAsString(); } -}; +inline PassRefPtr<SVGAngle> toSVGAngle(PassRefPtr<SVGPropertyBase> passBase) +{ + RefPtr<SVGPropertyBase> base = passBase; + ASSERT(base->type() == SVGAngle::classType()); + return static_pointer_cast<SVGAngle>(base.release()); +} } // namespace WebCore |