Krita Source Code Documentation
Loading...
Searching...
No Matches
KisMaskGenerator Class Referenceabstract

#include <kis_base_mask_generator.h>

+ Inheritance diagram for KisMaskGenerator:

Classes

struct  Private
 

Public Types

enum  Type { CIRCLE , RECTANGLE }
 

Public Member Functions

bool antialiasEdges () const
 
virtual KisBrushMaskApplicatorBaseapplicator () const =0
 
virtual KisMaskGeneratorclone () const =0
 
QString curveString () const
 
qreal diameter () const
 
void fixRotation (qreal &xr, qreal &yr) const
 
qreal height () const
 
qreal horizontalFade () const
 
QString id () const
 
bool isEmpty () const
 
 KisMaskGenerator (const KisMaskGenerator &rhs)
 
 KisMaskGenerator (qreal radius, qreal ratio, qreal fh, qreal fv, int spikes, bool antialiasEdges, Type type, const KoID &id=DefaultId)
 
QString name () const
 
qreal ratio () const
 
void setCurveString (const QString &curveString)
 
void setDiameter (qreal value)
 
virtual void setScale (qreal scaleX, qreal scaleY)
 
virtual void setSoftness (qreal softness)
 
virtual bool shouldSupersample () const
 
virtual bool shouldSupersample6x6 () const
 
virtual bool shouldVectorize () const
 
qreal softness () const
 
int spikes () const
 
virtual void toXML (QDomDocument &, QDomElement &) const
 
Type type () const
 
virtual quint8 valueAt (qreal x, qreal y) const =0
 
qreal verticalFade () const
 
qreal width () const
 
virtual ~KisMaskGenerator ()
 

Static Public Member Functions

static KisMaskGeneratorfromXML (const QDomElement &)
 
static QList< KoIDmaskGeneratorIds ()
 

Protected Member Functions

qreal effectiveSrcHeight () const
 
qreal effectiveSrcWidth () const
 

Private Member Functions

void init ()
 

Private Attributes

const QScopedPointer< Privated
 
const KoIDm_id
 

Detailed Description

This is the base class for mask shapes You should subclass it if you want to create a new shape.

Definition at line 33 of file kis_base_mask_generator.h.

Member Enumeration Documentation

◆ Type

Enumerator
CIRCLE 
RECTANGLE 

Definition at line 36 of file kis_base_mask_generator.h.

Constructor & Destructor Documentation

◆ KisMaskGenerator() [1/2]

KisMaskGenerator::KisMaskGenerator ( qreal radius,
qreal ratio,
qreal fh,
qreal fv,
int spikes,
bool antialiasEdges,
Type type,
const KoID & id = DefaultId )

This function creates an auto brush shape with the following values:

Parameters
radiusradius
ratioaspect ratio
fhhorizontal fade
fvvertical fade
spikesnumber of spikes
antialiasEdgeswhether to antialias edges
typetype
idthe brush identifier

Definition at line 83 of file kis_base_mask_generator.cpp.

84 : d(new Private), m_id(id)
85{
86 d->diameter = diameter;
87 d->ratio = ratio;
88 d->fh = 0.5 * fh;
89 d->fv = 0.5 * fv;
90 d->softness = 1.0; // by default don't change fade/softness/hardness
91 d->spikes = spikes;
92 d->cachedSpikesAngle = M_PI / d->spikes;
93 d->type = type;
94 d->antialiasEdges = antialiasEdges;
95 d->scaleX = 1.0;
96 d->scaleY = 1.0;
97 init();
98}
const QScopedPointer< Private > d
#define M_PI
Definition kis_global.h:111

References antialiasEdges(), d, diameter(), init(), M_PI, ratio(), spikes(), and type().

◆ KisMaskGenerator() [2/2]

KisMaskGenerator::KisMaskGenerator ( const KisMaskGenerator & rhs)

Definition at line 104 of file kis_base_mask_generator.cpp.

105 : d(new Private(*rhs.d)),
106 m_id(rhs.m_id)
107{
108}

◆ ~KisMaskGenerator()

KisMaskGenerator::~KisMaskGenerator ( )
virtual

Definition at line 100 of file kis_base_mask_generator.cpp.

101{
102}

Member Function Documentation

◆ antialiasEdges()

bool KisMaskGenerator::antialiasEdges ( ) const

Definition at line 295 of file kis_base_mask_generator.cpp.

296{
297 return d->antialiasEdges;
298}

References d.

◆ applicator()

◆ clone()

◆ curveString()

QString KisMaskGenerator::curveString ( ) const

Definition at line 285 of file kis_base_mask_generator.cpp.

286{
287 return d->curveString;
288}

References d.

◆ diameter()

qreal KisMaskGenerator::diameter ( ) const

Definition at line 229 of file kis_base_mask_generator.cpp.

230{
231 return d->diameter;
232}

References d.

◆ effectiveSrcHeight()

qreal KisMaskGenerator::effectiveSrcHeight ( ) const
protected

This height is related to the source of the brush mask, so we don't take spikes into account, they will be generated from this data.

Definition at line 219 of file kis_base_mask_generator.cpp.

220{
226 return d->diameter * d->ratio * d->scaleY;
227}

References d.

◆ effectiveSrcWidth()

qreal KisMaskGenerator::effectiveSrcWidth ( ) const
protected

Definition at line 214 of file kis_base_mask_generator.cpp.

215{
216 return d->diameter * d->scaleX;
217}

References d.

◆ fixRotation()

void KisMaskGenerator::fixRotation ( qreal & xr,
qreal & yr ) const

Definition at line 306 of file kis_base_mask_generator.cpp.

307{
308 if (d->spikes > 2) {
309 double angle = (KisFastMath::atan2(yr, xr));
310
311 while (angle > d->cachedSpikesAngle){
312 double sx = xr;
313 double sy = yr;
314
315 xr = d->cs * sx - d->ss * sy;
316 yr = d->ss * sx + d->cs * sy;
317
318 angle -= 2 * d->cachedSpikesAngle;
319 }
320 }
321}
KRITAIMAGE_EXPORT qreal atan2(qreal y, qreal x)
atan2 replacement

References KisFastMath::atan2(), and d.

◆ fromXML()

KisMaskGenerator * KisMaskGenerator::fromXML ( const QDomElement & elt)
static

Unserialise a KisMaskGenerator

Definition at line 152 of file kis_base_mask_generator.cpp.

153{
154 double diameter = 1.0;
155 // backward compatibility -- it was mistakenly named radius for 2.2
156 if (elt.hasAttribute("radius")){
157 diameter = KisDomUtils::toDouble(elt.attribute("radius", "1.0"));
158 }
159 else /*if (elt.hasAttribute("diameter"))*/{
160 diameter = KisDomUtils::toDouble(elt.attribute("diameter", "1.0"));
161 }
162 double ratio = KisDomUtils::toDouble(elt.attribute("ratio", "1.0"));
163 double hfade = KisDomUtils::toDouble(elt.attribute("hfade", "0.0"));
164 double vfade = KisDomUtils::toDouble(elt.attribute("vfade", "0.0"));
165
166 int spikes = elt.attribute("spikes", "2").toInt();
167 QString typeShape = elt.attribute("type", "circle");
168 QString id = elt.attribute("id", DefaultId.id());
169 bool antialiasEdges = elt.attribute("antialiasEdges", "0").toInt();
170
171 if (id == DefaultId.id()) {
172 if (typeShape == "circle") {
173 return new KisCircleMaskGenerator(diameter, ratio, hfade, vfade, spikes, antialiasEdges);
174 } else {
175 return new KisRectangleMaskGenerator(diameter, ratio, hfade, vfade, spikes, antialiasEdges);
176 }
177 }
178
179 if (id == SoftId.id()) {
180 const KisCubicCurve curve(elt.attribute("softness_curve","0,0;1,1"));
181
182 if (typeShape == "circle") {
183 return new KisCurveCircleMaskGenerator(diameter, ratio, hfade, vfade, spikes, curve, antialiasEdges);
184 } else {
185 return new KisCurveRectangleMaskGenerator(diameter, ratio, hfade, vfade, spikes, curve, antialiasEdges);
186 }
187 }
188
189 if (id == GaussId.id()) {
190 if (typeShape == "circle") {
192 } else {
194 }
195 }
196
197 // if unknown
198 return new KisCircleMaskGenerator(diameter, ratio, hfade, vfade, spikes, true);
199}
QString id() const
Definition KoID.cpp:63
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)

References antialiasEdges(), DefaultId(), diameter(), GaussId(), KoID::id(), ratio(), SoftId(), spikes(), and KisDomUtils::toDouble().

◆ height()

qreal KisMaskGenerator::height ( ) const

Definition at line 206 of file kis_base_mask_generator.cpp.

207{
208 if (d->spikes == 2) {
209 return d->diameter * d->ratio;
210 }
211 return d->diameter;
212}

References d.

◆ horizontalFade()

qreal KisMaskGenerator::horizontalFade ( ) const

Definition at line 258 of file kis_base_mask_generator.cpp.

259{
260 return 2.0 * d->fh; // 'cause in init we divide it again
261}

References d.

◆ id()

QString KisMaskGenerator::id ( ) const
inline

Definition at line 99 of file kis_base_mask_generator.h.

99{ return m_id.id(); }

◆ init()

void KisMaskGenerator::init ( )
private

Definition at line 110 of file kis_base_mask_generator.cpp.

111{
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);
115}

References d, and M_PI.

◆ isEmpty()

bool KisMaskGenerator::isEmpty ( ) const

Definition at line 133 of file kis_base_mask_generator.cpp.

134{
135 return d->empty;
136}

References d.

◆ maskGeneratorIds()

QList< KoID > KisMaskGenerator::maskGeneratorIds ( )
static

Definition at line 278 of file kis_base_mask_generator.cpp.

279{
280 QList<KoID> ids;
281 ids << DefaultId << SoftId << GaussId;
282 return ids;
283}

References DefaultId(), GaussId(), and SoftId().

◆ name()

QString KisMaskGenerator::name ( ) const
inline

Definition at line 100 of file kis_base_mask_generator.h.

100{ return m_id.name(); }
QString name() const
Definition KoID.cpp:68

◆ ratio()

qreal KisMaskGenerator::ratio ( ) const

Definition at line 241 of file kis_base_mask_generator.cpp.

242{
243 return d->ratio;
244}

References d.

◆ setCurveString()

void KisMaskGenerator::setCurveString ( const QString & curveString)

Definition at line 290 of file kis_base_mask_generator.cpp.

291{
292 d->curveString = curveString;
293}

References curveString(), and d.

◆ setDiameter()

void KisMaskGenerator::setDiameter ( qreal value)

Definition at line 234 of file kis_base_mask_generator.cpp.

235{
236 d->diameter = value;
237 init();
238 setScale(d->scaleX, d->scaleY);
239}
float value(const T *src, size_t ch)
virtual void setScale(qreal scaleX, qreal scaleY)

References d, init(), setScale(), and value().

◆ setScale()

void KisMaskGenerator::setScale ( qreal scaleX,
qreal scaleY )
virtual

Reimplemented in KisCircleMaskGenerator, KisCurveCircleMaskGenerator, KisCurveRectangleMaskGenerator, KisGaussCircleMaskGenerator, KisGaussRectangleMaskGenerator, and KisRectangleMaskGenerator.

Definition at line 300 of file kis_base_mask_generator.cpp.

301{
302 d->scaleX = scaleX;
303 d->scaleY = scaleY;
304}

References d.

◆ setSoftness()

void KisMaskGenerator::setSoftness ( qreal softness)
virtual

Reimplemented in KisCircleMaskGenerator, KisCurveCircleMaskGenerator, KisCurveRectangleMaskGenerator, and KisRectangleMaskGenerator.

Definition at line 252 of file kis_base_mask_generator.cpp.

253{
254 d->softness = softness;
255}

References d, and softness().

◆ shouldSupersample()

bool KisMaskGenerator::shouldSupersample ( ) const
virtual

Definition at line 117 of file kis_base_mask_generator.cpp.

118{
119 return antialiasEdges() && (effectiveSrcWidth() < 10 || effectiveSrcHeight() < 10);
120}

References antialiasEdges(), effectiveSrcHeight(), and effectiveSrcWidth().

◆ shouldSupersample6x6()

bool KisMaskGenerator::shouldSupersample6x6 ( ) const
virtual

Definition at line 122 of file kis_base_mask_generator.cpp.

123{
124 return effectiveSrcWidth() < 1 || effectiveSrcHeight() < 1;
125}

References effectiveSrcHeight(), and effectiveSrcWidth().

◆ shouldVectorize()

bool KisMaskGenerator::shouldVectorize ( ) const
virtual

◆ softness()

qreal KisMaskGenerator::softness ( ) const

Definition at line 246 of file kis_base_mask_generator.cpp.

247{
248 return d->softness;
249}

References d.

◆ spikes()

int KisMaskGenerator::spikes ( ) const

Definition at line 268 of file kis_base_mask_generator.cpp.

269{
270 return d->spikes;
271}

References d.

◆ toXML()

void KisMaskGenerator::toXML ( QDomDocument & doc,
QDomElement & e ) const
virtual

Reimplemented in KisCurveCircleMaskGenerator, and KisCurveRectangleMaskGenerator.

Definition at line 138 of file kis_base_mask_generator.cpp.

139{
140 Q_UNUSED(doc);
141 //e.setAttribute("radius", d->radius);
142 e.setAttribute("diameter", QString::number(d->diameter));
143 e.setAttribute("ratio", QString::number(d->ratio));
144 e.setAttribute("hfade", QString::number(horizontalFade()));
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());
150}

References CIRCLE, d, horizontalFade(), and verticalFade().

◆ type()

KisMaskGenerator::Type KisMaskGenerator::type ( ) const

Definition at line 273 of file kis_base_mask_generator.cpp.

274{
275 return d->type;
276}

References d.

◆ valueAt()

virtual quint8 KisMaskGenerator::valueAt ( qreal x,
qreal y ) const
pure virtual

◆ verticalFade()

qreal KisMaskGenerator::verticalFade ( ) const

Definition at line 263 of file kis_base_mask_generator.cpp.

264{
265 return 2.0 * d->fv; // 'cause in init we divide it again
266}

References d.

◆ width()

qreal KisMaskGenerator::width ( ) const

Definition at line 201 of file kis_base_mask_generator.cpp.

202{
203 return d->diameter;
204}

References d.

Member Data Documentation

◆ d

const QScopedPointer<Private> KisMaskGenerator::d
private

Definition at line 119 of file kis_base_mask_generator.h.

◆ m_id

const KoID& KisMaskGenerator::m_id
private

Definition at line 120 of file kis_base_mask_generator.h.


The documentation for this class was generated from the following files: