File indexing completed on 2024-06-23 04:27:57
0001 /* 0002 * SPDX-FileCopyrightText: 2022 Agata Cacko <cacko.azh@gmail.com> 0003 * SPDX-FileCopyrightText: 2008-2010 Lukáš Tvrdý <lukast.dev@gmail.com> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 #ifndef KIS_SPRAYOP_OPTION_DATA_H 0008 #define KIS_SPRAYOP_OPTION_DATA_H 0009 0010 0011 #include "kis_types.h" 0012 #include <boost/operators.hpp> 0013 #include <kritapaintop_export.h> 0014 0015 #include <kis_cubic_curve.h> 0016 0017 #include "KisSprayRandomDistributions.h" 0018 0019 class KisPropertiesConfiguration; 0020 0021 0022 const QString SPRAY_DIAMETER = "Spray/diameter"; 0023 const QString SPRAY_ASPECT = "Spray/aspect"; 0024 const QString SPRAY_ROTATION = "Spray/rotation"; 0025 const QString SPRAY_SCALE = "Spray/scale"; 0026 const QString SPRAY_SPACING = "Spray/spacing"; 0027 const QString SPRAY_JITTER_MOVEMENT = "Spray/jitterMovement"; 0028 const QString SPRAY_JITTER_MOVE_AMOUNT = "Spray/jitterMoveAmount"; 0029 const QString SPRAY_USE_DENSITY = "Spray/useDensity"; 0030 const QString SPRAY_PARTICLE_COUNT = "Spray/particleCount"; 0031 const QString SPRAY_COVERAGE = "Spray/coverage"; 0032 const QString SPRAY_ANGULAR_DISTRIBUTION_TYPE = "Spray/angularDistributionType"; 0033 const QString SPRAY_ANGULAR_DISTRIBUTION_CURVE = "Spray/angularDistributionCurve"; 0034 const QString SPRAY_ANGULAR_DISTRIBUTION_CURVE_REPEAT = "Spray/angularDistributionCurveRepeat"; 0035 const QString SPRAY_RADIAL_DISTRIBUTION_TYPE = "Spray/radialDistributionType"; 0036 const QString SPRAY_RADIAL_DISTRIBUTION_STD_DEVIATION = "Spray/radialDistributionStdDeviation"; 0037 const QString SPRAY_RADIAL_DISTRIBUTION_CLUSTERING_AMOUNT = "Spray/radialDistributionClusteringAmount"; 0038 const QString SPRAY_RADIAL_DISTRIBUTION_CURVE = "Spray/radialDistributionCurve"; 0039 const QString SPRAY_RADIAL_DISTRIBUTION_CURVE_REPEAT = "Spray/radialDistributionCurveRepeat"; 0040 const QString SPRAY_RADIAL_DISTRIBUTION_CENTER_BIASED = "Spray/radialDistributionCenterBiased"; 0041 const QString SPRAY_GAUSS_DISTRIBUTION = "Spray/gaussianDistribution"; 0042 0043 0044 struct KisSprayOpOptionData : boost::equality_comparable<KisSprayOpOptionData> 0045 { 0046 enum ParticleDistribution 0047 { 0048 ParticleDistribution_Uniform, 0049 ParticleDistribution_Gaussian, 0050 ParticleDistribution_ClusterBased, 0051 ParticleDistribution_CurveBased 0052 }; 0053 0054 inline friend bool operator==(const KisSprayOpOptionData &lhs, const KisSprayOpOptionData &rhs) { 0055 return lhs.diameter == rhs.diameter // 10 entries 0056 && lhs.aspect == rhs.aspect 0057 && lhs.brushRotation == rhs.brushRotation 0058 && lhs.scale == rhs.scale 0059 && lhs.spacing == rhs.spacing 0060 && lhs.jitterMovement == rhs.jitterMovement 0061 && lhs.jitterAmount == rhs.jitterAmount 0062 && lhs.useDensity == rhs.useDensity 0063 && lhs.particleCount == rhs.particleCount 0064 && lhs.coverage == rhs.coverage 0065 // 9 entries 0066 && lhs.angularDistributionType == rhs.angularDistributionType 0067 && lhs.angularDistributionCurve == rhs.angularDistributionCurve 0068 && lhs.angularDistributionCurveRepeat == rhs.angularDistributionCurveRepeat 0069 && lhs.radialDistributionType == rhs.radialDistributionType 0070 && lhs.radialDistributionStdDeviation == rhs.radialDistributionStdDeviation 0071 && lhs.radialDistributionClusteringAmount == rhs.radialDistributionClusteringAmount 0072 && lhs.radialDistributionCurve == rhs.radialDistributionCurve 0073 && lhs.radialDistributionCurveRepeat == rhs.radialDistributionCurveRepeat 0074 && lhs.radialDistributionCenterBiased == rhs.radialDistributionCenterBiased; 0075 // 7 entries - but there is no need to compare functors 0076 0077 } 0078 0079 // sane defaults (for Coverity) 0080 // NOTE: if you add any new variable, make sure it's present in all places! including == function 0081 // 10 entries 0082 quint16 diameter {100}; 0083 qreal aspect {1.0}; 0084 qreal brushRotation {0.0}; 0085 qreal scale {1.0}; 0086 qreal spacing {0.5}; 0087 bool jitterMovement {false}; 0088 qreal jitterAmount {1.0}; 0089 bool useDensity {false}; 0090 quint16 particleCount {12}; 0091 qreal coverage {0.003}; 0092 0093 // 9 entries 0094 ParticleDistribution angularDistributionType {ParticleDistribution_Uniform}; 0095 QString angularDistributionCurve {DEFAULT_CURVE_STRING}; 0096 int angularDistributionCurveRepeat {1}; 0097 ParticleDistribution radialDistributionType {ParticleDistribution_Uniform}; 0098 qreal radialDistributionStdDeviation {0.5}; 0099 qreal radialDistributionClusteringAmount {0.0}; 0100 QString radialDistributionCurve {DEFAULT_CURVE_STRING}; 0101 int radialDistributionCurveRepeat {1}; 0102 bool radialDistributionCenterBiased {false}; 0103 0104 // functions 0105 bool read(const KisPropertiesConfiguration *setting); 0106 void write(KisPropertiesConfiguration *setting) const; 0107 }; 0108 0109 #endif // KIS_SPRAYOP_OPTION_DATA_H