Krita Source Code Documentation
Loading...
Searching...
No Matches
KisCurveCircleMaskGenerator Struct Reference

#include <kis_curve_circle_mask_generator.h>

+ Inheritance diagram for KisCurveCircleMaskGenerator:

Public Member Functions

KisBrushMaskApplicatorBaseapplicator () const override
 
KisMaskGeneratorclone () const override
 
 KisCurveCircleMaskGenerator (const KisCurveCircleMaskGenerator &rhs)
 
 KisCurveCircleMaskGenerator (qreal radius, qreal ratio, qreal fh, qreal fv, int spikes, const KisCubicCurve &curve, bool antialiasEdges)
 
 Private (bool enableAntialiasing)
 
 Private (const Private &rhs)
 
void setMaskScalarApplicator ()
 
void setScale (qreal scaleX, qreal scaleY) override
 
void setSoftness (qreal softness) override
 
bool shouldVectorize () const override
 
void toXML (QDomDocument &, QDomElement &) const override
 
quint8 value (qreal dist) const
 
quint8 valueAt (qreal x, qreal y) const override
 
 ~KisCurveCircleMaskGenerator () override
 
- Public Member Functions inherited from KisMaskGenerator
bool antialiasEdges () const
 
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 bool shouldSupersample () const
 
virtual bool shouldSupersample6x6 () const
 
qreal softness () const
 
int spikes () const
 
Type type () const
 
qreal verticalFade () const
 
qreal width () const
 
virtual ~KisMaskGenerator ()
 
- Public Member Functions inherited from KisMaskGenerator::Private
 Private ()
 
 Private (const Private &rhs)
 

Static Public Member Functions

static void transformCurveForSoftness (qreal softness, const QList< KisCubicCurvePoint > &points, int curveResolution, QVector< qreal > &result)
 
- Static Public Member Functions inherited from KisMaskGenerator
static KisMaskGeneratorfromXML (const QDomElement &)
 
static QList< KoIDmaskGeneratorIds ()
 

Public Attributes

QScopedPointer< KisBrushMaskApplicatorBaseapplicator
 
QVector< qreal > curveData
 
QList< KisCubicCurvePointcurvePoints
 
qreal curveResolution {0.0}
 
bool dirty {false}
 
KisAntialiasingFadeMaker1D< PrivatefadeMaker
 
qreal xcoef {0.0}
 
qreal ycoef {0.0}
 
- Public Attributes inherited from KisMaskGenerator::Private
bool antialiasEdges
 
qreal cachedSpikesAngle
 
qreal cs
 
QString curveString
 
qreal diameter
 
bool empty
 
qreal fh
 
qreal fv
 
qreal ratio
 
qreal scaleX
 
qreal scaleY
 
qreal softness
 
int spikes
 
qreal ss
 
Type type
 

Private Member Functions

qreal norme (qreal a, qreal b) const
 

Private Attributes

const QScopedPointer< Privated
 

Friends

struct FastRowProcessor< KisCurveCircleMaskGenerator >
 

Additional Inherited Members

- Public Types inherited from KisMaskGenerator
enum  Type { CIRCLE , RECTANGLE }
 
- Protected Member Functions inherited from KisMaskGenerator
qreal effectiveSrcHeight () const
 
qreal effectiveSrcWidth () const
 

Detailed Description

This mask generator use softness/hardness defined by user curve It used to be soft brush paintop.

Definition at line 32 of file kis_curve_circle_mask_generator.h.

Constructor & Destructor Documentation

◆ KisCurveCircleMaskGenerator() [1/2]

KisCurveCircleMaskGenerator::KisCurveCircleMaskGenerator ( qreal radius,
qreal ratio,
qreal fh,
qreal fv,
int spikes,
const KisCubicCurve & curve,
bool antialiasEdges )

Definition at line 22 of file kis_curve_circle_mask_generator.cpp.

24{
25 // here we set resolution for the maximum size of the brush!
26 d->curveResolution = qRound(qMax(width(), height()) * OVERSAMPLING);
27 d->curveData = curve.floatTransfer(d->curveResolution + 2);
28 d->curvePoints = curve.curvePoints();
29 setCurveString(curve.toString());
30 d->dirty = false;
31
32 setScale(1.0, 1.0);
33
35}
auto createOptimizedClass(Args &&...param)
const QScopedPointer< Private > d
void setScale(qreal scaleX, qreal scaleY) override
void setCurveString(const QString &curveString)
KisMaskGenerator(qreal radius, qreal ratio, qreal fh, qreal fv, int spikes, bool antialiasEdges, Type type, const KoID &id=DefaultId)
const KoID SoftId("soft", ki18n("Soft"))
generate brush mask from former softbrush paintop, where softness is based on curve
static const int OVERSAMPLING
QString toString() const
const QVector< qreal > floatTransfer(int size=256) const
const QList< KisCubicCurvePoint > & curvePoints() const

References createOptimizedClass(), KisCubicCurve::curvePoints(), d, KisCubicCurve::floatTransfer(), KisMaskGenerator::height(), OVERSAMPLING, KisMaskGenerator::setCurveString(), setScale(), KisCubicCurve::toString(), and KisMaskGenerator::width().

◆ KisCurveCircleMaskGenerator() [2/2]

KisCurveCircleMaskGenerator::KisCurveCircleMaskGenerator ( const KisCurveCircleMaskGenerator & rhs)

Definition at line 37 of file kis_curve_circle_mask_generator.cpp.

38 : KisMaskGenerator(rhs),
39 d(new Private(*rhs.d))
40{
42}

References createOptimizedClass(), and d.

◆ ~KisCurveCircleMaskGenerator()

KisCurveCircleMaskGenerator::~KisCurveCircleMaskGenerator ( )
override

Definition at line 44 of file kis_curve_circle_mask_generator.cpp.

45{
46}

Member Function Documentation

◆ applicator()

KisBrushMaskApplicatorBase * KisCurveCircleMaskGenerator::applicator ( ) const
overridevirtual

Implements KisMaskGenerator.

◆ clone()

KisMaskGenerator * KisCurveCircleMaskGenerator::clone ( ) const
overridevirtual

Implements KisMaskGenerator.

Definition at line 48 of file kis_curve_circle_mask_generator.cpp.

49{
50 return new KisCurveCircleMaskGenerator(*this);
51}
KisCurveCircleMaskGenerator(qreal radius, qreal ratio, qreal fh, qreal fv, int spikes, const KisCubicCurve &curve, bool antialiasEdges)

References KisCurveCircleMaskGenerator().

◆ norme()

qreal KisCurveCircleMaskGenerator::norme ( qreal a,
qreal b ) const
inlineprivate

Definition at line 57 of file kis_curve_circle_mask_generator.h.

57 {
58 return a*a + b*b;
59 }

◆ Private() [1/2]

KisCurveCircleMaskGenerator::Private ( bool enableAntialiasing)
inline

Definition at line 16 of file kis_curve_circle_mask_generator_p.h.

17 : fadeMaker(*this, enableAntialiasing)
18 {
19 }
KisAntialiasingFadeMaker1D< Private > fadeMaker

◆ Private() [2/2]

◆ setMaskScalarApplicator()

void KisCurveCircleMaskGenerator::setMaskScalarApplicator ( )

Definition at line 149 of file kis_curve_circle_mask_generator.cpp.

150{
151 d->applicator.reset(
153 this));
154}
auto createScalarClass(Args &&...params)

References createScalarClass(), and KisMaskGenerator::d.

◆ setScale()

void KisCurveCircleMaskGenerator::setScale ( qreal scaleX,
qreal scaleY )
overridevirtual

◆ setSoftness()

void KisCurveCircleMaskGenerator::setSoftness ( qreal softness)
overridevirtual

Reimplemented from KisMaskGenerator.

Definition at line 113 of file kis_curve_circle_mask_generator.cpp.

114{
115 // performance
116 if (!d->dirty && softness == 1.0) return;
117
118 d->dirty = true;
120 KisCurveCircleMaskGenerator::transformCurveForSoftness(softness,d->curvePoints, d->curveResolution+2, d->curveData);
121 d->dirty = false;
122}
static void transformCurveForSoftness(qreal softness, const QList< KisCubicCurvePoint > &points, int curveResolution, QVector< qreal > &result)
virtual void setSoftness(qreal softness)

References KisMaskGenerator::d, KisMaskGenerator::setSoftness(), KisMaskGenerator::softness(), and transformCurveForSoftness().

◆ shouldVectorize()

bool KisCurveCircleMaskGenerator::shouldVectorize ( ) const
overridevirtual

Reimplemented from KisMaskGenerator.

Definition at line 66 of file kis_curve_circle_mask_generator.cpp.

67{
68 return !shouldSupersample() && spikes() == 2;
69}
virtual bool shouldSupersample() const

References KisMaskGenerator::shouldSupersample(), and KisMaskGenerator::Private::spikes.

◆ toXML()

void KisCurveCircleMaskGenerator::toXML ( QDomDocument & doc,
QDomElement & e ) const
overridevirtual

Reimplemented from KisMaskGenerator.

Definition at line 107 of file kis_curve_circle_mask_generator.cpp.

108{
110 e.setAttribute("softness_curve", curveString());
111}
virtual void toXML(QDomDocument &, QDomElement &) const

References KisMaskGenerator::curveString(), and KisMaskGenerator::toXML().

◆ transformCurveForSoftness()

void KisCurveCircleMaskGenerator::transformCurveForSoftness ( qreal softness,
const QList< KisCubicCurvePoint > & points,
int curveResolution,
QVector< qreal > & result )
static

Definition at line 124 of file kis_curve_circle_mask_generator.cpp.

125{
126 QList<KisCubicCurvePoint> newList = points;
127 newList.detach();
128
129 int size = newList.size();
130 if (size == 2){
131 // make place for new point in the centre
132 newList.append(newList.at(1));
133 newList[1].setPosition((newList.at(0).position() + newList.at(2).position()) * 0.5);
134 newList[1].setAsCorner(false);
135 // transform it
136 newList[1].setY(qBound<qreal>(0.0,newList.at(1).y() * softness,1.0));
137 }else{
138 // transform all points except first and last
139 for (int i = 1; i < size-1; i++){
140 newList[i].setY(qBound<qreal>(0.0,newList.at(i).y() * softness,1.0));
141 }
142 }
143
144 // compute the data
145 KisCubicCurve curve(newList);
146 result = curve.floatTransfer( curveResolution );
147}
int size(const Forest< T > &forest)
Definition KisForest.h:1232

References KisCubicCurve::floatTransfer(), and KisMaskGenerator::softness().

◆ value()

quint8 KisCurveCircleMaskGenerator::value ( qreal dist) const
inline

◆ valueAt()

quint8 KisCurveCircleMaskGenerator::valueAt ( qreal x,
qreal y ) const
overridevirtual
Returns
the alpha value at the position (x,y)

Implements KisMaskGenerator.

Definition at line 90 of file kis_curve_circle_mask_generator.cpp.

91{
92 if (isEmpty()) return 255;
93 qreal xr = x;
94 qreal yr = qAbs(y);
95 fixRotation(xr, yr);
96
97 qreal dist = norme(xr * d->xcoef, yr * d->ycoef);
98
99 quint8 value;
100 if (d->fadeMaker.needFade(dist, &value)) {
101 return value;
102 }
103
104 return d->value(dist);
105}
quint8 value(qreal dist) const
void fixRotation(qreal &xr, qreal &yr) const

References KisMaskGenerator::d, KisMaskGenerator::fixRotation(), KisMaskGenerator::isEmpty(), and value().

Friends And Related Symbol Documentation

◆ FastRowProcessor< KisCurveCircleMaskGenerator >

Definition at line 63 of file kis_curve_circle_mask_generator.h.

Member Data Documentation

◆ applicator

KisBrushMaskApplicatorBase * KisCurveCircleMaskGenerator::applicator

Definition at line 40 of file kis_curve_circle_mask_generator_p.h.

◆ curveData

QVector<qreal> KisCurveCircleMaskGenerator::curveData

Definition at line 35 of file kis_curve_circle_mask_generator_p.h.

◆ curvePoints

QList<KisCubicCurvePoint> KisCurveCircleMaskGenerator::curvePoints

Definition at line 36 of file kis_curve_circle_mask_generator_p.h.

◆ curveResolution

qreal KisCurveCircleMaskGenerator::curveResolution {0.0}

Definition at line 34 of file kis_curve_circle_mask_generator_p.h.

34{0.0};

◆ d

const QScopedPointer<Private> KisCurveCircleMaskGenerator::d
private

Definition at line 63 of file kis_curve_circle_mask_generator.h.

◆ dirty

bool KisCurveCircleMaskGenerator::dirty {false}

Definition at line 37 of file kis_curve_circle_mask_generator_p.h.

37{false};

◆ fadeMaker

KisAntialiasingFadeMaker1D<Private> KisCurveCircleMaskGenerator::fadeMaker

Definition at line 39 of file kis_curve_circle_mask_generator_p.h.

◆ xcoef

qreal KisCurveCircleMaskGenerator::xcoef {0.0}

Definition at line 32 of file kis_curve_circle_mask_generator_p.h.

32{0.0};

◆ ycoef

qreal KisCurveCircleMaskGenerator::ycoef {0.0}

Definition at line 33 of file kis_curve_circle_mask_generator_p.h.

33{0.0};

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