13#include <QDomDocument>
26#define M_SQRT_2 1.41421356237309504880
30#include <boost/math/special_functions/erf.hpp>
31#define erf(x) boost::math::erf(x)
69 d->alphafactor = 255.0 / (4.0 * erf(
d->halfWidth *
d->xfade) * erf(
d->halfHeight *
d->yfade));
71 if (std::isnan(
d->alphafactor))
d->alphafactor = 0.0f;
80inline quint8 KisGaussRectangleMaskGenerator::Private::value(qreal xr, qreal yr)
const
82 return (quint8) 255 - (quint8) (alphafactor * (erf((halfWidth + xr) * xfade) + erf((halfWidth - xr) * xfade))
83 * (erf((halfHeight + yr) * yfade) + erf((halfHeight - yr) * yfade)));
94 if (
d->fadeMaker.needFade(xr, yr, &
value)) {
98 return d->value(xr, yr);
108 return d->applicator.data();
float value(const T *src, size_t ch)
auto createOptimizedClass(Args &&...param)
auto createScalarClass(Args &&...params)
void setMaskScalarApplicator()
const QScopedPointer< Private > d
KisMaskGenerator * clone() const override
void setScale(qreal scaleX, qreal scaleY) override
~KisGaussRectangleMaskGenerator() override
quint8 valueAt(qreal x, qreal y) const override
QScopedPointer< KisBrushMaskApplicatorBase > applicator
KisGaussRectangleMaskGenerator(qreal diameter, qreal ratio, qreal fh, qreal fv, int spikes, bool antialiasEdges)
bool shouldVectorize() const override
virtual bool shouldSupersample() const
qreal verticalFade() const
const QScopedPointer< Private > d
void fixRotation(qreal &xr, qreal &yr) const
qreal effectiveSrcHeight() const
virtual void setScale(qreal scaleX, qreal scaleY)
qreal horizontalFade() const
qreal effectiveSrcWidth() const
const KoID GaussId("gauss", ki18n("Gaussian"))
generate brush mask with a Gaussian-blurred edge