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