Changeset View
Changeset View
Standalone View
Standalone View
libs/image/kis_curve_rect_mask_generator.cpp
Context not available. | |||||
20 | 20 | | |||
---|---|---|---|---|---|
21 | #include <cmath> | 21 | #include <cmath> | ||
22 | 22 | | |||
23 | #include <config-vc.h> | ||||
24 | #ifdef HAVE_VC | ||||
25 | #if defined(__clang__) | ||||
26 | #pragma GCC diagnostic ignored "-Wundef" | ||||
27 | #pragma GCC diagnostic ignored "-Wlocal-type-template-args" | ||||
28 | #endif | ||||
29 | #if defined _MSC_VER | ||||
30 | // Lets shut up the "possible loss of data" and "forcing value to bool 'true' or 'false' | ||||
31 | #pragma warning ( push ) | ||||
32 | #pragma warning ( disable : 4244 ) | ||||
33 | #pragma warning ( disable : 4800 ) | ||||
34 | #endif | ||||
35 | #include <Vc/Vc> | ||||
36 | #include <Vc/IO> | ||||
37 | #if defined _MSC_VER | ||||
38 | #pragma warning ( pop ) | ||||
39 | #endif | ||||
40 | #endif | ||||
41 | | ||||
23 | #include <QDomDocument> | 42 | #include <QDomDocument> | ||
24 | #include <QVector> | 43 | #include <QVector> | ||
25 | #include <QPointF> | 44 | #include <QPointF> | ||
26 | 45 | | |||
27 | #include <kis_fast_math.h> | 46 | #include <kis_fast_math.h> | ||
28 | #include "kis_curve_rect_mask_generator.h" | | |||
29 | #include "kis_cubic_curve.h" | | |||
30 | #include "kis_antialiasing_fade_maker.h" | 47 | #include "kis_antialiasing_fade_maker.h" | ||
48 | #include "kis_brush_mask_applicator_factories.h" | ||||
49 | #include "kis_brush_mask_applicator_base.h" | ||||
31 | 50 | | |||
51 | #include "kis_curve_rect_mask_generator.h" | ||||
52 | #include "kis_curve_rect_mask_generator_p.h" | ||||
53 | #include "kis_cubic_curve.h" | ||||
32 | 54 | | |||
33 | struct Q_DECL_HIDDEN KisCurveRectangleMaskGenerator::Private | | |||
34 | { | | |||
35 | Private(bool enableAntialiasing) | | |||
36 | : fadeMaker(*this, enableAntialiasing) | | |||
37 | { | | |||
38 | } | | |||
39 | | ||||
40 | Private(const Private &rhs) | | |||
41 | : xcoeff(rhs.xcoeff), | | |||
42 | ycoeff(rhs.ycoeff), | | |||
43 | curveResolution(rhs.curveResolution), | | |||
44 | curveData(rhs.curveData), | | |||
45 | curvePoints(rhs.curvePoints), | | |||
46 | dirty(rhs.dirty), | | |||
47 | fadeMaker(rhs.fadeMaker, *this) | | |||
48 | { | | |||
49 | } | | |||
50 | | ||||
51 | qreal xcoeff, ycoeff; | | |||
52 | qreal curveResolution; | | |||
53 | QVector<qreal> curveData; | | |||
54 | QList<QPointF> curvePoints; | | |||
55 | bool dirty; | | |||
56 | | ||||
57 | KisAntialiasingFadeMaker2D<Private> fadeMaker; | | |||
58 | | ||||
59 | quint8 value(qreal xr, qreal yr) const; | | |||
60 | }; | | |||
61 | 55 | | |||
62 | KisCurveRectangleMaskGenerator::KisCurveRectangleMaskGenerator(qreal diameter, qreal ratio, qreal fh, qreal fv, int spikes, const KisCubicCurve &curve, bool antialiasEdges) | 56 | KisCurveRectangleMaskGenerator::KisCurveRectangleMaskGenerator(qreal diameter, qreal ratio, qreal fh, qreal fv, int spikes, const KisCubicCurve &curve, bool antialiasEdges) | ||
63 | : KisMaskGenerator(diameter, ratio, fh, fv, spikes, antialiasEdges, RECTANGLE, SoftId), d(new Private(antialiasEdges)) | 57 | : KisMaskGenerator(diameter, ratio, fh, fv, spikes, antialiasEdges, RECTANGLE, SoftId), d(new Private(antialiasEdges)) | ||
Context not available. | |||||
69 | d->dirty = false; | 63 | d->dirty = false; | ||
70 | 64 | | |||
71 | setScale(1.0, 1.0); | 65 | setScale(1.0, 1.0); | ||
66 | | ||||
67 | d->applicator.reset(createOptimizedClass<MaskApplicatorFactory<KisCurveRectangleMaskGenerator, KisBrushMaskVectorApplicator> >(this)); | ||||
72 | } | 68 | } | ||
73 | 69 | | |||
74 | KisCurveRectangleMaskGenerator::KisCurveRectangleMaskGenerator(const KisCurveRectangleMaskGenerator &rhs) | 70 | KisCurveRectangleMaskGenerator::KisCurveRectangleMaskGenerator(const KisCurveRectangleMaskGenerator &rhs) | ||
75 | : KisMaskGenerator(rhs), | 71 | : KisMaskGenerator(rhs), | ||
76 | d(new Private(*rhs.d)) | 72 | d(new Private(*rhs.d)) | ||
77 | { | 73 | { | ||
74 | d->applicator.reset(createOptimizedClass<MaskApplicatorFactory<KisCurveRectangleMaskGenerator, KisBrushMaskVectorApplicator> >(this)); | ||||
78 | } | 75 | } | ||
79 | 76 | | |||
80 | KisMaskGenerator* KisCurveRectangleMaskGenerator::clone() const | 77 | KisMaskGenerator* KisCurveRectangleMaskGenerator::clone() const | ||
Context not available. | |||||
97 | 94 | | |||
98 | KisCurveRectangleMaskGenerator::~KisCurveRectangleMaskGenerator() | 95 | KisCurveRectangleMaskGenerator::~KisCurveRectangleMaskGenerator() | ||
99 | { | 96 | { | ||
100 | delete d; | | |||
101 | } | 97 | } | ||
102 | 98 | | |||
103 | quint8 KisCurveRectangleMaskGenerator::Private::value(qreal xr, qreal yr) const | 99 | quint8 KisCurveRectangleMaskGenerator::Private::value(qreal xr, qreal yr) const | ||
Context not available. | |||||
148 | d->dirty = false; | 144 | d->dirty = false; | ||
149 | } | 145 | } | ||
150 | 146 | | |||
147 | bool KisCurveRectangleMaskGenerator::shouldVectorize() const | ||||
148 | { | ||||
149 | return !shouldSupersample() && spikes() == 2; | ||||
150 | } | ||||
151 | | ||||
152 | KisBrushMaskApplicatorBase* KisCurveRectangleMaskGenerator::applicator() | ||||
153 | { | ||||
154 | return d->applicator.data(); | ||||
155 | } | ||||
156 | | ||||
157 | void KisCurveRectangleMaskGenerator::resetMaskApplicator(bool forceScalar) | ||||
158 | { | ||||
159 | d->applicator.reset(createOptimizedClass<MaskApplicatorFactory<KisCurveRectangleMaskGenerator, KisBrushMaskVectorApplicator> >(this,forceScalar)); | ||||
160 | } | ||||
161 | | ||||
Context not available. |