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

0001 /*
0002  *  SPDX-FileCopyrightText: 2010 Lukáš Tvrdý <lukast.dev@gmail.com>
0003  *  SPDX-FileCopyrightText: 2011 Geoffry Song <goffrie@gmail.com>
0004  *  SPDX-FileCopyrightText: 2022 L. E. Segovia <amy@amyspark.me>
0005  *
0006  *  SPDX-License-Identifier: GPL-2.0-or-later
0007  */
0008 
0009 #ifndef _KIS_GAUSS_MASK_GENERATOR_H_
0010 #define _KIS_GAUSS_MASK_GENERATOR_H_
0011 
0012 #include "kritaimage_export.h"
0013 
0014 #include "kis_base_mask_generator.h"
0015 #include <QScopedPointer>
0016 
0017 template<typename V>
0018 struct FastRowProcessor;
0019 
0020 /**
0021  * This mask generator uses a Gaussian-blurred circle
0022  */
0023 class KRITAIMAGE_EXPORT KisGaussCircleMaskGenerator : public KisMaskGenerator
0024 {
0025 public:
0026     KisGaussCircleMaskGenerator(qreal diameter, qreal ratio, qreal fh, qreal fv, int spikes, bool antialiasEdges);
0027     KisGaussCircleMaskGenerator(const KisGaussCircleMaskGenerator &rhs);
0028     ~KisGaussCircleMaskGenerator() override;
0029     KisMaskGenerator* clone() const override;
0030 
0031     quint8 valueAt(qreal x, qreal y) const override;
0032 
0033     void setScale(qreal scaleX, qreal scaleY) override;
0034 
0035     bool shouldVectorize() const override;
0036     KisBrushMaskApplicatorBase* applicator() override;
0037 
0038     void resetMaskApplicator(bool forceScalar);
0039 
0040 private:
0041 
0042     qreal norme(qreal a, qreal b) const {
0043         return a*a + b*b;
0044     }
0045 
0046 private:
0047     struct Private;
0048     const QScopedPointer<Private> d;
0049 
0050     friend struct FastRowProcessor<KisGaussCircleMaskGenerator>;
0051 };
0052 
0053 #endif