fix tricky regression noticed by Vyacheslav Tokarev on Google Reader.
[kdelibs.git] / khtml / svg / SVGAngle.h
blobee11d56c5c3025a23bfb33714fdff11a782231e3
1 /*
2 Copyright (C) 2004, 2005, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org>
3 2004, 2005, 2006 Rob Buis <buis@kde.org>
5 This file is part of the KDE project
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version.
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details.
17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 Boston, MA 02110-1301, USA.
23 #ifndef SVGAngle_h
24 #define SVGAngle_h
26 #if ENABLE(SVG)
27 //#include "PlatformString.h"
28 #include "wtf/RefCounted.h"
29 #include "SVGNames.h"
31 namespace WebCore {
33 class SVGStyledElement;
35 class SVGAngle : public RefCounted<SVGAngle> {
36 public:
37 SVGAngle();
38 virtual ~SVGAngle();
40 enum SVGAngleType {
41 SVG_ANGLETYPE_UNKNOWN = 0,
42 SVG_ANGLETYPE_UNSPECIFIED = 1,
43 SVG_ANGLETYPE_DEG = 2,
44 SVG_ANGLETYPE_RAD = 3,
45 SVG_ANGLETYPE_GRAD = 4
48 SVGAngleType unitType() const;
50 void setValue(float);
51 float value() const;
53 void setValueInSpecifiedUnits(float valueInSpecifiedUnits);
54 float valueInSpecifiedUnits() const;
56 void setValueAsString(const String&);
57 String valueAsString() const;
59 void newValueSpecifiedUnits(unsigned short unitType, float valueInSpecifiedUnits);
60 void convertToSpecifiedUnits(unsigned short unitType);
62 // Helpers
63 static double todeg(double rad);
64 static double torad(double deg);
66 // Returns the angle that divides the shortest arc between the two angles.
67 static double shortestArcBisector(double angle1, double angle2);
69 // Throughout SVG 1.1 'SVGAngle' is only used for 'SVGMarkerElement' (orient-angle)
70 const QualifiedName& associatedAttributeName() const { return SVGNames::orientAttr; }
72 private:
73 SVGAngleType m_unitType;
74 float m_value;
75 float m_valueInSpecifiedUnits;
76 mutable String m_valueAsString;
78 void calculate();
81 } // namespace WebCore
83 #endif // ENABLE(SVG)
84 #endif // SVGAngle_h