19#include <QDomDocument>
92 d->cachedSpikesAngle =
M_PI /
d->spikes;
112 d->cs = cos(- 2 *
M_PI /
d->spikes);
113 d->ss = sin(- 2 *
M_PI /
d->spikes);
114 d->empty = (
d->ratio == 0.0 ||
d->diameter == 0.0);
142 e.setAttribute(
"diameter", QString::number(
d->diameter));
143 e.setAttribute(
"ratio", QString::number(
d->ratio));
145 e.setAttribute(
"vfade", QString::number(
verticalFade()));
146 e.setAttribute(
"spikes",
d->spikes);
147 e.setAttribute(
"type",
d->type ==
CIRCLE ?
"circle" :
"rect");
148 e.setAttribute(
"antialiasEdges",
d->antialiasEdges);
149 e.setAttribute(
"id",
id());
156 if (elt.hasAttribute(
"radius")){
166 int spikes = elt.attribute(
"spikes",
"2").toInt();
167 QString typeShape = elt.attribute(
"type",
"circle");
169 bool antialiasEdges = elt.attribute(
"antialiasEdges",
"0").toInt();
172 if (typeShape ==
"circle") {
180 const KisCubicCurve curve(elt.attribute(
"softness_curve",
"0,0;1,1"));
182 if (typeShape ==
"circle") {
190 if (typeShape ==
"circle") {
208 if (
d->spikes == 2) {
209 return d->diameter *
d->ratio;
216 return d->diameter *
d->scaleX;
226 return d->diameter *
d->ratio *
d->scaleY;
287 return d->curveString;
297 return d->antialiasEdges;
311 while (angle >
d->cachedSpikesAngle){
315 xr =
d->cs * sx -
d->ss * sy;
316 yr =
d->ss * sx +
d->cs * sy;
318 angle -= 2 *
d->cachedSpikesAngle;
float value(const T *src, size_t ch)
void setCurveString(const QString &curveString)
virtual void setSoftness(qreal softness)
virtual bool shouldSupersample() const
virtual bool shouldVectorize() const
void setDiameter(qreal value)
bool antialiasEdges() const
qreal verticalFade() const
virtual ~KisMaskGenerator()
virtual void toXML(QDomDocument &, QDomElement &) const
const QScopedPointer< Private > d
void fixRotation(qreal &xr, qreal &yr) const
KisMaskGenerator(qreal radius, qreal ratio, qreal fh, qreal fv, int spikes, bool antialiasEdges, Type type, const KoID &id=DefaultId)
qreal effectiveSrcHeight() const
virtual void setScale(qreal scaleX, qreal scaleY)
qreal horizontalFade() const
qreal effectiveSrcWidth() const
virtual bool shouldSupersample6x6() const
static KisMaskGenerator * fromXML(const QDomElement &)
static QList< KoID > maskGeneratorIds()
QString curveString() const
const KoID SoftId("soft", ki18n("Soft"))
generate brush mask from former softbrush paintop, where softness is based on curve
const KoID DefaultId("default", ki18n("Default"))
generate Krita default mask generator
const KoID GaussId("gauss", ki18n("Gaussian"))
generate brush mask with a Gaussian-blurred edge
double toDouble(const QString &str, bool *ok=nullptr)
KRITAIMAGE_EXPORT qreal atan2(qreal y, qreal x)
atan2 replacement
Private(const Private &rhs)