SVGGeometryElement.h [plain text]
#pragma once
#include "Path.h"
#include "SVGGraphicsElement.h"
#include "SVGNames.h"
namespace WebCore {
struct DOMPointInit;
class SVGPoint;
class SVGGeometryElement : public SVGGraphicsElement {
WTF_MAKE_ISO_ALLOCATED(SVGGeometryElement);
public:
virtual float getTotalLength() const;
virtual ExceptionOr<Ref<SVGPoint>> getPointAtLength(float distance) const;
bool isPointInFill(DOMPointInit&&);
bool isPointInStroke(DOMPointInit&&);
using PropertyRegistry = SVGPropertyOwnerRegistry<SVGGeometryElement, SVGGraphicsElement>;
float pathLength() const { return m_pathLength->currentValue(); }
SVGAnimatedNumber& pathLengthAnimated() { return m_pathLength; }
protected:
SVGGeometryElement(const QualifiedName&, Document&);
void parseAttribute(const QualifiedName&, const AtomString&) override;
void svgAttributeChanged(const QualifiedName&) override;
private:
bool isSVGGeometryElement() const override { return true; }
Ref<SVGAnimatedNumber> m_pathLength { SVGAnimatedNumber::create(this) };
};
}
SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::SVGGeometryElement)
static bool isType(const WebCore::SVGElement& element) { return element.isSVGGeometryElement(); }
static bool isType(const WebCore::Node& node) { return is<WebCore::SVGElement>(node) && isType(downcast<WebCore::SVGElement>(node)); }
SPECIALIZE_TYPE_TRAITS_END()