summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Source/core/svg/SVGAngle.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/svg/SVGAngle.h')
-rw-r--r--chromium/third_party/WebKit/Source/core/svg/SVGAngle.h84
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