File indexing completed on 2024-05-12 15:58:14

0001 /*
0002  *  SPDX-FileCopyrightText: 2010 Lukáš Tvrdý <lukast.dev@gmail.com>
0003  *  SPDX-FileCopyrightText: 2022 L. E. Segovia <amy@amyspark.me>
0004  *
0005  *  SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 
0008 #ifndef _KIS_CURVE_CIRCLE_MASK_GENERATOR_H_
0009 #define _KIS_CURVE_CIRCLE_MASK_GENERATOR_H_
0010 
0011 #include <QList>
0012 #include <QVector>
0013 #include <QScopedPointer>
0014 
0015 #include "kritaimage_export.h"
0016 #include "kis_base_mask_generator.h"
0017 
0018 class KisCubicCurve;
0019 class QDomElement;
0020 class QDomDocument;
0021 
0022 class QPointF;
0023 
0024 template<typename V>
0025 struct FastRowProcessor;
0026 
0027 /**
0028  * This mask generator use softness/hardness defined by user curve
0029  * It used to be soft brush paintop. 
0030  */
0031 class KRITAIMAGE_EXPORT KisCurveCircleMaskGenerator : public KisMaskGenerator
0032 {
0033 public:
0034 
0035     KisCurveCircleMaskGenerator(qreal radius, qreal ratio, qreal fh, qreal fv, int spikes,const KisCubicCurve& curve, bool antialiasEdges);
0036     KisCurveCircleMaskGenerator(const KisCurveCircleMaskGenerator &rhs);
0037     ~KisCurveCircleMaskGenerator() override;
0038     KisMaskGenerator* clone() const override;
0039 
0040     quint8 valueAt(qreal x, qreal y) const override;
0041 
0042     void setScale(qreal scaleX, qreal scaleY) override;
0043 
0044     void toXML(QDomDocument& , QDomElement&) const override;
0045     void setSoftness(qreal softness) override;
0046 
0047     bool shouldVectorize() const override;
0048     KisBrushMaskApplicatorBase* applicator() override;
0049 
0050     void resetMaskApplicator(bool forceScalar);
0051 
0052     static void transformCurveForSoftness(qreal softness,const QList<QPointF> &points, int curveResolution, QVector<qreal> &result);
0053 
0054 private:
0055 
0056     qreal norme(qreal a, qreal b) const {
0057         return a*a + b*b;
0058     }
0059 
0060 private:
0061     struct Private;
0062     const QScopedPointer<Private> d;
0063 
0064     friend struct FastRowProcessor<KisCurveCircleMaskGenerator>;
0065 };
0066 
0067 #endif