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

0001 /*
0002  *  SPDX-FileCopyrightText: 2008-2009 Cyrille Berger <cberger@cberger.net>
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_CIRCLE_MASK_GENERATOR_H_
0009 #define _KIS_CIRCLE_MASK_GENERATOR_H_
0010 
0011 #include "kritaimage_export.h"
0012 
0013 #include "kis_base_mask_generator.h"
0014 #include <QScopedPointer>
0015 
0016 template <typename V>
0017 struct FastRowProcessor;
0018 
0019 /**
0020  * Create, serialize and deserialize an elliptical 8-bit mask.
0021  */
0022 class KRITAIMAGE_EXPORT KisCircleMaskGenerator : public KisMaskGenerator
0023 {
0024 public:
0025     KisCircleMaskGenerator(qreal radius, qreal ratio, qreal fh, qreal fv, int spikes, bool antialiasEdges);
0026     KisCircleMaskGenerator(const KisCircleMaskGenerator &rhs);
0027     ~KisCircleMaskGenerator() override;
0028     KisMaskGenerator* clone() const override;
0029 
0030     quint8 valueAt(qreal x, qreal y) const override;
0031 
0032     bool shouldVectorize() const override;
0033 
0034     KisBrushMaskApplicatorBase* applicator() override;
0035 
0036     void setSoftness(qreal softness) override;
0037     void setScale(qreal scaleX, qreal scaleY) override;
0038 
0039     void resetMaskApplicator(bool forceScalar);
0040 
0041 private:
0042 
0043     qreal norme(qreal a, qreal b) const {
0044         return a*a + b * b;
0045     }
0046 
0047 private:
0048     struct Private;
0049     const QScopedPointer<Private> d;
0050 
0051     friend struct FastRowProcessor<KisCircleMaskGenerator>;
0052 };
0053 
0054 #endif