SVGPathSegListValues.h [plain text]
#pragma once
#include "SVGListProperty.h"
#include "SVGPathSeg.h"
#include "SVGPropertyTraits.h"
#include <wtf/Vector.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
class SVGElement;
class SVGPathSegList;
template<typename T>
class SVGPropertyTearOff;
class SVGPathSegListValues : public Vector<RefPtr<SVGPathSeg>> {
public:
using Base = Vector<RefPtr<SVGPathSeg>>;
explicit SVGPathSegListValues(SVGPathSegRole role)
: m_role(role)
{
}
SVGPathSegListValues(const SVGPathSegListValues&) = default;
SVGPathSegListValues(SVGPathSegListValues&&) = default;
SVGPathSegListValues& operator=(const SVGPathSegListValues& other)
{
clearContextAndRoles();
return static_cast<SVGPathSegListValues&>(Base::operator=(other));
}
SVGPathSegListValues& operator=(SVGPathSegListValues&& other)
{
clearContextAndRoles();
return static_cast<SVGPathSegListValues&>(Base::operator=(WTFMove(other)));
}
void clear()
{
clearContextAndRoles();
Base::clear();
}
String valueAsString() const;
void commitChange(SVGElement& contextElement, ListModification);
void clearItemContextAndRole(unsigned index);
private:
void clearContextAndRoles();
SVGPathSegRole m_role;
};
template<> struct SVGPropertyTraits<SVGPathSegListValues> {
static SVGPathSegListValues initialValue() { return SVGPathSegListValues(PathSegUndefinedRole); }
static String toString(const SVGPathSegListValues& list) { return list.valueAsString(); }
using ListItemType = RefPtr<SVGPathSeg>;
using ListItemTearOff = SVGPropertyTearOff<RefPtr<SVGPathSeg>>;
using ListPropertyTearOff = SVGPathSegList;
};
}