#ifndef KSVG_SVGLengthImpl_H
#define KSVG_SVGLengthImpl_H
#if SVG_SUPPORT
#include "PlatformString.h"
#include <ksvg2/svg/SVGHelper.h>
class RenderPath;
namespace WebCore
{
class SVGElement;
class SVGStyledElement;
class SVGLength : public Shared<SVGLength>
{
public:
SVGLength(const SVGStyledElement* context, LengthMode mode = LM_UNKNOWN, const SVGElement* viewport = 0);
virtual ~SVGLength();
enum SVGLengthType {
SVG_LENGTHTYPE_UNKNOWN = 0,
SVG_LENGTHTYPE_NUMBER = 1,
SVG_LENGTHTYPE_PERCENTAGE = 2,
SVG_LENGTHTYPE_EMS = 3,
SVG_LENGTHTYPE_EXS = 4,
SVG_LENGTHTYPE_PX = 5,
SVG_LENGTHTYPE_CM = 6,
SVG_LENGTHTYPE_MM = 7,
SVG_LENGTHTYPE_IN = 8,
SVG_LENGTHTYPE_PT = 9,
SVG_LENGTHTYPE_PC = 10
};
unsigned short unitType() const;
float value() const;
void setValue(float value);
float valueInSpecifiedUnits() const;
void setValueInSpecifiedUnits(float valueInSpecifiedUnits);
String valueAsString() const;
void setValueAsString(const String&);
void newValueSpecifiedUnits(unsigned short unitType, float valueInSpecifiedUnits);
void convertToSpecifiedUnits(unsigned short unitType);
bool bboxRelative() const;
void setBboxRelative(bool);
const SVGStyledElement* context() const;
void setContext(const SVGStyledElement *context);
private:
bool updateValueInSpecifiedUnits(bool notify = true);
void updateValue(bool notify = true);
double dpi() const;
float m_value;
float m_valueInSpecifiedUnits;
unsigned m_mode : 2; bool m_bboxRelative : 1;
unsigned m_unitType : 4;
bool m_requiresLayout : 1;
const SVGStyledElement *m_context;
const SVGElement *m_viewportElement;
};
};
#endif // SVG_SUPPORT
#endif