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

0001 /*
0002  *  SPDX-FileCopyrightText: 2011 Silvio Heinrich <plassy@web.de>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "kis_colorsmudgeop_settings_widget.h"
0008 #include "kis_brush_based_paintop_settings.h"
0009 #include "kis_brush_option_widget.h"
0010 
0011 #include <kis_properties_configuration.h>
0012 #include <kis_paintop_settings_widget.h>
0013 #include "kis_colorsmudgeop_settings.h"
0014 #include "kis_signals_blocker.h"
0015 #include <KisAirbrushOptionWidget.h>
0016 #include <KisPaintOpOptionWidgetUtils.h>
0017 #include <KisTextureOptionWidget.h>
0018 #include <KisStandardOptionData.h>
0019 #include <KisCompositeOpOptionWidget.h>
0020 #include <KisSpacingOptionWidget.h>
0021 #include <KisSizeOptionWidget.h>
0022 #include <KisMirrorOptionWidget.h>
0023 #include <KisScatterOptionWidget.h>
0024 #include <KisSmudgeLengthOptionWidget.h>
0025 #include <KisPaintThicknessOptionWidget.h>
0026 #include <KisSmudgeOverlayModeOptionWidget.h>
0027 #include <KisBrushPropertiesModel.h>
0028 #include <KisColorSmudgeStandardOptionData.h>
0029 #include <KisSmudgeRadiusOptionData.h>
0030 #include <KisZug.h>
0031 
0032 
0033 struct KisColorSmudgeOpSettingsWidget::Private
0034 {
0035     Private(lager::reader<KisBrushModel::BrushData> brushData,
0036             KisResourcesInterfaceSP resourcesInterface)
0037         : brushPropertiesModel(brushData, resourcesInterface)
0038     {
0039     }
0040 
0041     KisBrushPropertiesModel brushPropertiesModel;
0042 };
0043 
0044 KisColorSmudgeOpSettingsWidget::KisColorSmudgeOpSettingsWidget(QWidget* parent, KisResourcesInterfaceSP resourcesInterface, KoCanvasResourcesInterfaceSP canvasResourcesInterface)
0045     : KisBrushBasedPaintopOptionWidget(KisBrushOptionWidgetFlag::SupportsPrecision |
0046                                        KisBrushOptionWidgetFlag::SupportsHSLBrushMode,
0047                                        parent)
0048     , m_d(new Private(brushOptionWidget()->bakedBrushData(), resourcesInterface))
0049 {
0050     Q_UNUSED(canvasResourcesInterface)
0051     namespace kpowu = KisPaintOpOptionWidgetUtils;
0052 
0053     setObjectName("brush option widget");
0054 
0055     addPaintOpOption(kpowu::createOptionWidget<KisCompositeOpOptionWidget>());
0056     addPaintOpOption(kpowu::createOpacityOptionWidget());
0057     addPaintOpOption(kpowu::createOptionWidget<KisSizeOptionWidget>());
0058     addPaintOpOption(kpowu::createRatioOptionWidget());
0059     addPaintOpOption(kpowu::createOptionWidget<KisSpacingOptionWidget>());
0060     addPaintOpOption(kpowu::createOptionWidget<KisMirrorOptionWidget>());
0061 
0062 
0063     KisSmudgeLengthOptionWidget *smudgeLengthWidget =
0064         kpowu::createOptionWidget<KisSmudgeLengthOptionWidget>
0065             (KisSmudgeLengthOptionData(),
0066              m_d->brushPropertiesModel.isBrushPierced,
0067              m_d->brushPropertiesModel.brushApplication
0068                  .xform(kiszug::map_greater<int>(ALPHAMASK)));
0069 
0070     addPaintOpOption(smudgeLengthWidget);
0071 
0072     lager::reader<std::tuple<qreal, qreal>> rangeReader =
0073         smudgeLengthWidget->useNewEngine()
0074             .map([] (bool useNewEngine) {
0075                 return std::make_tuple(0.0,
0076                                        useNewEngine ? 1.0 : 3.0);
0077             });
0078 
0079     KisCurveOptionWidget *smudgeRadiusWidget =
0080         kpowu::createCurveOptionWidget(KisSmudgeRadiusOptionData(),
0081                                       KisPaintOpOption::GENERAL,
0082                                       lager::make_constant(true),
0083                                       rangeReader);
0084 
0085     addPaintOpOption(smudgeRadiusWidget);
0086 
0087     addPaintOpOption(kpowu::createCurveOptionWidget(KisColorRateOptionData(), KisPaintOpOption::GENERAL));
0088 
0089     addPaintOpOption(kpowu::createOptionWidget<KisPaintThicknessOptionWidget>(KisPaintThicknessOptionData(), brushOptionWidget()->lightnessModeEnabled()));
0090 
0091     addPaintOpOption(kpowu::createRotationOptionWidget());
0092     addPaintOpOption(kpowu::createOptionWidget<KisScatterOptionWidget>());
0093 
0094     addPaintOpOption(kpowu::createOptionWidget<KisSmudgeOverlayModeOptionWidget>(
0095                          KisSmudgeOverlayModeOptionData(),
0096                          brushOptionWidget()->
0097                              lightnessModeEnabled()
0098                              .map(std::logical_not{})));
0099 
0100     addPaintOpOption(kpowu::createCurveOptionWidget(KisGradientOptionData(), KisPaintOpOption::GENERAL));
0101 
0102     addPaintOpOption(kpowu::createHueOptionWidget());
0103     addPaintOpOption(kpowu::createSaturationOptionWidget());
0104     addPaintOpOption(kpowu::createValueOptionWidget());
0105 
0106     addPaintOpOption(kpowu::createOptionWidget<KisAirbrushOptionWidget>());
0107     addPaintOpOption(kpowu::createRateOptionWidget());
0108 
0109     addPaintOpOption(kpowu::createOptionWidget<KisTextureOptionWidget>(KisTextureOptionData(), resourcesInterface));
0110     addPaintOpOption(kpowu::createCurveOptionWidget(KisStrengthOptionData(), KisPaintOpOption::COLOR, i18n("Weak"), i18n("Strong")));
0111 }
0112 
0113 KisColorSmudgeOpSettingsWidget::~KisColorSmudgeOpSettingsWidget() { }
0114 
0115 KisPropertiesConfigurationSP KisColorSmudgeOpSettingsWidget::configuration() const
0116 {
0117     KisColorSmudgeOpSettingsSP config = new KisColorSmudgeOpSettings(resourcesInterface());
0118     config->setProperty("paintop", "colorsmudge");
0119     writeConfiguration(config);
0120     return config;
0121 }