File indexing completed on 2024-06-16 04:17:33

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 }