File indexing completed on 2024-04-28 15:24:27
0001 /* 0002 Copyright (C) 2004, 2005, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> 0003 2004, 2005, 2006 Rob Buis <buis@kde.org> 0004 0005 This file is part of the KDE project 0006 0007 This library is free software; you can redistribute it and/or 0008 modify it under the terms of the GNU Library General Public 0009 License as published by the Free Software Foundation; either 0010 version 2 of the License, or (at your option) any later version. 0011 0012 This library is distributed in the hope that it will be useful, 0013 but WITHOUT ANY WARRANTY; without even the implied warranty of 0014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0015 Library General Public License for more details. 0016 0017 You should have received a copy of the GNU Library General Public License 0018 along with this library; see the file COPYING.LIB. If not, write to 0019 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 0020 Boston, MA 02110-1301, USA. 0021 */ 0022 0023 #ifndef SVGAngle_h 0024 #define SVGAngle_h 0025 0026 #if ENABLE(SVG) 0027 //#include "PlatformString.h" 0028 #include "wtf/RefCounted.h" 0029 #include "SVGNames.h" 0030 0031 namespace WebCore 0032 { 0033 0034 class SVGStyledElement; 0035 0036 class SVGAngle : public RefCounted<SVGAngle> 0037 { 0038 public: 0039 SVGAngle(); 0040 virtual ~SVGAngle(); 0041 0042 enum SVGAngleType { 0043 SVG_ANGLETYPE_UNKNOWN = 0, 0044 SVG_ANGLETYPE_UNSPECIFIED = 1, 0045 SVG_ANGLETYPE_DEG = 2, 0046 SVG_ANGLETYPE_RAD = 3, 0047 SVG_ANGLETYPE_GRAD = 4 0048 }; 0049 0050 SVGAngleType unitType() const; 0051 0052 void setValue(float); 0053 float value() const; 0054 0055 void setValueInSpecifiedUnits(float valueInSpecifiedUnits); 0056 float valueInSpecifiedUnits() const; 0057 0058 void setValueAsString(const String &); 0059 String valueAsString() const; 0060 0061 void newValueSpecifiedUnits(unsigned short unitType, float valueInSpecifiedUnits); 0062 void convertToSpecifiedUnits(unsigned short unitType); 0063 0064 // Helpers 0065 static double todeg(double rad); 0066 static double torad(double deg); 0067 0068 // Returns the angle that divides the shortest arc between the two angles. 0069 static double shortestArcBisector(double angle1, double angle2); 0070 0071 // Throughout SVG 1.1 'SVGAngle' is only used for 'SVGMarkerElement' (orient-angle) 0072 const QualifiedName &associatedAttributeName() const 0073 { 0074 return SVGNames::orientAttr; 0075 } 0076 0077 private: 0078 SVGAngleType m_unitType; 0079 float m_value; 0080 float m_valueInSpecifiedUnits; 0081 mutable String m_valueAsString; 0082 0083 void calculate(); 0084 }; 0085 0086 } // namespace WebCore 0087 0088 #endif // ENABLE(SVG) 0089 #endif // SVGAngle_h