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 }