File indexing completed on 2024-06-23 04:27:54
0001 /* 0002 * SPDX-FileCopyrightText: 2020 Ashwin Dhakaita <ashwingpdhakaita@gmail.com> 0003 * SPDX-FileCopyrightText: 2021 L. E. Segovia <amy@amyspark.me> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 #include "MyPaintPaintOpSettingsWidget.h" 0008 0009 #include <klocalizedstring.h> 0010 0011 #include "MyPaintPaintOpSettings.h" 0012 #include <KisAirbrushOptionWidget.h> 0013 #include <KisPaintOpOptionWidgetUtils.h> 0014 0015 #include <MyPaintCurveOptionData.h> 0016 #include <MyPaintCurveOptionWidget.h> 0017 #include <MyPaintBasicOptionWidget.h> 0018 #include <MyPaintStandardOptionData.h> 0019 0020 #include <kis_paintop_lod_limitations.h> 0021 0022 namespace KisPaintOpOptionWidgetUtils { 0023 0024 template <typename Data> 0025 MyPaintCurveOptionWidget* createMyPaintCurveOptionWidget(Data data, const QString &yValueSuffix = "") 0026 { 0027 const qreal yLimit = qAbs(data.strengthMaxValue - data.strengthMinValue); 0028 return createOptionWidget<MyPaintCurveOptionWidget>(std::move(data), yLimit, yValueSuffix); 0029 } 0030 0031 template <typename Data> 0032 MyPaintCurveOptionWidget* createMyPaintCurveOptionWidgetWithLodLimitations(Data data, const QString &yValueSuffix = "") 0033 { 0034 const qreal yLimit = qAbs(data.strengthMaxValue - data.strengthMinValue); 0035 return createOptionWidgetWithLodLimitations<MyPaintCurveOptionWidget>(std::move(data), yLimit, yValueSuffix); 0036 } 0037 0038 } // namespace KisPaintOpOptionWidgetUtils 0039 0040 0041 KisMyPaintOpSettingsWidget:: KisMyPaintOpSettingsWidget(QWidget* parent) 0042 : KisPaintOpSettingsWidget(parent) 0043 { 0044 /// TODO: move category into the widget itself, remove this 0045 /// overridden enum 0046 0047 namespace kpowu = KisPaintOpOptionWidgetUtils; 0048 0049 m_radiusWidget = 0050 kpowu::createMyPaintCurveOptionWidget(MyPaintRadiusLogarithmicData()); 0051 MyPaintCurveOptionWidget *hardnessWidget = 0052 kpowu::createMyPaintCurveOptionWidget(MyPaintHardnessData()); 0053 MyPaintCurveOptionWidget *opacityWidget = 0054 kpowu::createMyPaintCurveOptionWidget(MyPaintOpacityData()); 0055 0056 KisPaintOpSettingsWidget::addPaintOpOption( 0057 kpowu::createOptionWidget<MyPaintBasicOptionWidget>(MyPaintBasicOptionData(), 0058 m_radiusWidget->strengthValueDenorm(), 0059 hardnessWidget->strengthValueDenorm(), 0060 opacityWidget->strengthValueDenorm())); 0061 0062 addPaintOpOption(m_radiusWidget, 0063 BASIC); 0064 addPaintOpOption(kpowu::createMyPaintCurveOptionWidgetWithLodLimitations(MyPaintRadiusByRandomData()), 0065 BASIC); 0066 addPaintOpOption(hardnessWidget, 0067 BASIC); 0068 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintAntiAliasingData()), 0069 BASIC); 0070 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintEllipticalDabAngleData(), "°"), 0071 BASIC); 0072 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintEllipticalDabRatioData()), 0073 BASIC); 0074 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintDirectionFilterData()), 0075 BASIC); 0076 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintSnapToPixelsData()), 0077 BASIC); 0078 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintPressureGainData()), 0079 BASIC); 0080 0081 addPaintOpOption(kpowu::createOptionWidget<KisAirbrushOptionWidget>(), 0082 AIRBRUSH); 0083 0084 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintChangeColorHData()), 0085 COLOR); 0086 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintChangeColorLData()), 0087 COLOR); 0088 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintChangeColorVData()), 0089 COLOR); 0090 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintChangeColorHSLSData()), 0091 COLOR); 0092 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintChangeColorHSVSData()), 0093 COLOR); 0094 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintColorizeData()), 0095 COLOR); 0096 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintPosterizeData()), 0097 COLOR); 0098 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintPosterizationLevelsData()), 0099 COLOR); 0100 0101 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintFineSpeedGammaData()), 0102 SPEED); 0103 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintGrossSpeedGammaData()), 0104 SPEED); 0105 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintFineSpeedSlownessData()), 0106 SPEED); 0107 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintGrossSpeedSlownessData()), 0108 SPEED); 0109 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintOffsetBySpeedData()), 0110 SPEED); 0111 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintOffsetBySpeedFilterData()), 0112 SPEED); 0113 addPaintOpOption(kpowu::createMyPaintCurveOptionWidgetWithLodLimitations(MyPaintOffsetByRandomData()), 0114 SPEED); 0115 0116 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintDabsPerBasicRadiusData()), 0117 DABS); 0118 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintDabsPerActualRadiusData()), 0119 DABS); 0120 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintDabsPerSecondData()), 0121 DABS); 0122 0123 addPaintOpOption(opacityWidget, 0124 OPACITY); 0125 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintOpaqueLinearizeData()), 0126 OPACITY); 0127 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintOpaqueMultiplyData()), 0128 OPACITY); 0129 0130 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintSlowTrackingPerDabData()), 0131 TRACKING); 0132 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintSlowTrackingData()), 0133 TRACKING); 0134 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintTrackingNoiseData()), 0135 TRACKING); 0136 0137 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintSmudgeData()), 0138 SMUDGE); 0139 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintSmudgeLengthData()), 0140 SMUDGE); 0141 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintSmudgeLengthMultiplierData()), 0142 SMUDGE); 0143 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintSmudgeRadiusLogData()), 0144 SMUDGE); 0145 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintSmudgeTransparencyData()), 0146 SMUDGE); 0147 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintSmudgeBucketData()), 0148 SMUDGE); 0149 0150 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintStrokeDurationLogData()), 0151 STROKE); 0152 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintStrokeHoldtimeData()), 0153 STROKE); 0154 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintStrokeThresholdData()), 0155 STROKE); 0156 0157 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintCustomInputData()), 0158 CUSTOM); 0159 addPaintOpOption(kpowu::createMyPaintCurveOptionWidget(MyPaintCustomInputSlownessData()), 0160 CUSTOM); 0161 } 0162 0163 KisMyPaintOpSettingsWidget::~ KisMyPaintOpSettingsWidget() 0164 { 0165 } 0166 0167 KisPropertiesConfigurationSP KisMyPaintOpSettingsWidget::configuration() const 0168 { 0169 KisMyPaintOpSettings* config = new KisMyPaintOpSettings(resourcesInterface()); 0170 config->setProperty("paintop", "mypaintbrush"); // XXX: make this a const id string 0171 writeConfiguration(config); 0172 return config; 0173 } 0174 0175 lager::reader<qreal> KisMyPaintOpSettingsWidget::effectiveBrushSize() const 0176 { 0177 return m_radiusWidget->strengthValueDenorm().map([] (qreal value) { return 2 * exp(value); }); 0178 } 0179 0180 void KisMyPaintOpSettingsWidget::addPaintOpOption(KisPaintOpOption *option, MyPaintPaintopCategory id) 0181 { 0182 QString category; 0183 0184 switch (id) { 0185 case BASIC: 0186 category = i18nc("Option Category", "Basic"); 0187 break; 0188 case AIRBRUSH: 0189 category = i18n("Airbrush"); 0190 break; 0191 case COLOR: 0192 category = i18nc("Option Category", "Color"); 0193 break; 0194 case SPEED: 0195 category = i18nc("Option Category", "Speed"); 0196 break; 0197 case DABS: 0198 category = i18nc("Option Category", "Dabs"); 0199 break; 0200 case OPACITY: 0201 category = i18nc("Option Category", "Opacity"); 0202 break; 0203 case TRACKING: 0204 category = i18nc("Option Category", "Tracking"); 0205 break; 0206 case SMUDGE: 0207 category = i18nc("Option Category", "Smudge"); 0208 break; 0209 case STROKE: 0210 category = i18nc("Option Category", "Stroke"); 0211 break; 0212 case CUSTOM: 0213 category = i18nc("Option Category", "Custom"); 0214 break; 0215 } 0216 0217 return KisPaintOpSettingsWidget::addPaintOpOption(option, category); 0218 }