SVGGeometryElement.h [plain text]
#pragma once
#include "Path.h"
#include "SVGAnimatedNumber.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 Ref<SVGPoint> getPointAtLength(float distance) const;
bool isPointInFill(DOMPointInit&&);
bool isPointInStroke(DOMPointInit&&);
using AttributeOwnerProxy = SVGAttributeOwnerProxyImpl<SVGGeometryElement, SVGGraphicsElement>;
static auto& attributeRegistry() { return AttributeOwnerProxy::attributeRegistry(); }
auto pathLengthAnimated() { return m_pathLength.animatedProperty(attributeOwnerProxy()); }
protected:
SVGGeometryElement(const QualifiedName&, Document&);
void parseAttribute(const QualifiedName&, const AtomicString&) override;
void svgAttributeChanged(const QualifiedName&) override;
private:
bool isSVGGeometryElement() const override { return true; }
const SVGAttributeOwnerProxy& attributeOwnerProxy() const override { return m_attributeOwnerProxy; }
static void registerAttributes();
static bool isKnownAttribute(const QualifiedName& attributeName) { return AttributeOwnerProxy::isKnownAttribute(attributeName); }
AttributeOwnerProxy m_attributeOwnerProxy { *this };
SVGAnimatedNumberAttribute m_pathLength;
};
}
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()