[krita/krita/4.3] plugins/paintops: Disable "Color" and "Lightness" brush tip modes in engines not supporting them

Dmitry Kazakov null at kde.org
Wed Apr 15 11:59:47 BST 2020


Git commit aab7812020e9c5a8dcad36f3837299380411d1cb by Dmitry Kazakov.
Committed on 15/04/2020 at 10:59.
Pushed by dkazakov into branch 'krita/4.3'.

Disable "Color" and "Lightness" brush tip modes in engines not supporting them

These modes are supported only by "Pixel" and "Tangent-Normal" brushes.
It would be nice to implement that for "ColorSmudge" paintop.

WARNING: some old preset might have had "Color" mode for colorsmudge.
It was a bug in previous versions of Krita. This switch changed the brush
tip a little bit. Now this mode is not supported, all old presets will
automatically switch into Mask mode (there are no such preset in the
default pack of presets).

CC:kimageshop at kde.org

M  +4    -0    plugins/paintops/colorsmudge/kis_colorsmudgeop_settings_widget.cpp
M  +1    -0    plugins/paintops/defaultpaintops/brush/kis_brushop_settings_widget.cpp
M  +5    -0    plugins/paintops/libpaintop/kis_brush_based_paintop_options_widget.cpp
M  +1    -0    plugins/paintops/libpaintop/kis_brush_based_paintop_options_widget.h
M  +18   -2    plugins/paintops/libpaintop/kis_brush_chooser.cpp
M  +5    -0    plugins/paintops/libpaintop/kis_brush_chooser.h
M  +5    -0    plugins/paintops/libpaintop/kis_brush_option_widget.cpp
M  +1    -0    plugins/paintops/libpaintop/kis_brush_option_widget.h
M  +10   -0    plugins/paintops/libpaintop/kis_brush_selection_widget.cpp
M  +4    -0    plugins/paintops/libpaintop/kis_brush_selection_widget.h
M  +1    -0    plugins/paintops/tangentnormal/kis_tangent_normal_paintop_settings_widget.cpp

https://invent.kde.org/kde/krita/commit/aab7812020e9c5a8dcad36f3837299380411d1cb

diff --git a/plugins/paintops/colorsmudge/kis_colorsmudgeop_settings_widget.cpp b/plugins/paintops/colorsmudge/kis_colorsmudgeop_settings_widget.cpp
index d3994a7054..0f0db9abcd 100644
--- a/plugins/paintops/colorsmudge/kis_colorsmudgeop_settings_widget.cpp
+++ b/plugins/paintops/colorsmudge/kis_colorsmudgeop_settings_widget.cpp
@@ -49,6 +49,10 @@ KisColorSmudgeOpSettingsWidget::KisColorSmudgeOpSettingsWidget(QWidget* parent):
     setObjectName("brush option widget");
     setPrecisionEnabled(true);
 
+    // ColorSmudge paintoip doesn't support colorful
+    // HSL brushes yet. Though it would be nice feature to have.
+    setHSLBrushTipEnabled(false);
+
     addPaintOpOption(new KisCompositeOpOption(true), i18n("Blending Mode"));
     addPaintOpOption(new KisCurveOptionWidget(new KisPressureOpacityOption(), i18n("Transparent"), i18n("Opaque")), i18n("Opacity"));
     addPaintOpOption(new KisCurveOptionWidget(new KisPressureSizeOption(), i18n("0%"), i18n("100%")), i18n("Size"));
diff --git a/plugins/paintops/defaultpaintops/brush/kis_brushop_settings_widget.cpp b/plugins/paintops/defaultpaintops/brush/kis_brushop_settings_widget.cpp
index b0d7b31147..856877f0ae 100644
--- a/plugins/paintops/defaultpaintops/brush/kis_brushop_settings_widget.cpp
+++ b/plugins/paintops/defaultpaintops/brush/kis_brushop_settings_widget.cpp
@@ -54,6 +54,7 @@ KisBrushOpSettingsWidget::KisBrushOpSettingsWidget(QWidget* parent)
 {
     setObjectName("brush option widget");
     setPrecisionEnabled(true);
+    setHSLBrushTipEnabled(true);
 
     // Brush tip options
     addPaintOpOption(new KisCompositeOpOption(true), i18n("Blending Mode"));
diff --git a/plugins/paintops/libpaintop/kis_brush_based_paintop_options_widget.cpp b/plugins/paintops/libpaintop/kis_brush_based_paintop_options_widget.cpp
index 2131213d20..acd1038d02 100644
--- a/plugins/paintops/libpaintop/kis_brush_based_paintop_options_widget.cpp
+++ b/plugins/paintops/libpaintop/kis_brush_based_paintop_options_widget.cpp
@@ -37,6 +37,11 @@ void KisBrushBasedPaintopOptionWidget::setPrecisionEnabled(bool value)
     m_brushOption->setPrecisionEnabled(value);
 }
 
+void KisBrushBasedPaintopOptionWidget::setHSLBrushTipEnabled(bool value)
+{
+    m_brushOption->setHSLBrusTipEnabled(value);
+}
+
 KisBrushSP KisBrushBasedPaintopOptionWidget::brush()
 {
     return m_brushOption->brush();
diff --git a/plugins/paintops/libpaintop/kis_brush_based_paintop_options_widget.h b/plugins/paintops/libpaintop/kis_brush_based_paintop_options_widget.h
index 42a161c91c..2e3b6f10fd 100644
--- a/plugins/paintops/libpaintop/kis_brush_based_paintop_options_widget.h
+++ b/plugins/paintops/libpaintop/kis_brush_based_paintop_options_widget.h
@@ -33,6 +33,7 @@ public:
     ~KisBrushBasedPaintopOptionWidget() override;
 
     void setPrecisionEnabled(bool value);
+    void setHSLBrushTipEnabled(bool value);
 
     KisBrushSP brush();
 
diff --git a/plugins/paintops/libpaintop/kis_brush_chooser.cpp b/plugins/paintops/libpaintop/kis_brush_chooser.cpp
index 75048aa0ca..f730fa75a4 100644
--- a/plugins/paintops/libpaintop/kis_brush_chooser.cpp
+++ b/plugins/paintops/libpaintop/kis_brush_chooser.cpp
@@ -418,7 +418,8 @@ void KisPredefinedBrushChooser::updateBrushTip(KoResource * resource, bool isCha
 void KisPredefinedBrushChooser::slotUpdateBrushModeButtonsState()
 {
     KisColorfulBrush *colorfulBrush = dynamic_cast<KisColorfulBrush*>(m_brush.data());
-    const bool modeSwitchEnabled = colorfulBrush && colorfulBrush->hasColor();
+    const bool modeSwitchEnabled =
+        m_hslBrushTipEnabled && colorfulBrush && colorfulBrush->hasColor();
 
     if (modeSwitchEnabled) {
         if (colorfulBrush->useColorAsMask() && colorfulBrush->preserveLightness()) {
@@ -461,7 +462,12 @@ void KisPredefinedBrushChooser::slotUpdateBrushModeButtonsState()
         intAdjustmentMidPoint->setToolTip("");
         intBrightnessAdjustment->setToolTip("");
         intContrastAdjustment->setToolTip("");
-        grpBrushMode->setToolTip("The selected brush tip does not have color channels. The brush will work in \"Mask\" mode.");
+
+        if (m_hslBrushTipEnabled) {
+            grpBrushMode->setToolTip("The selected brush tip does not have color channels. The brush will work in \"Mask\" mode.");
+        } else {
+            grpBrushMode->setToolTip("The selected brush engine does not support \"Color\" or \"Lightness\" modes. The brush will work in \"Mask\" mode.");
+        }
     }
 
 
@@ -557,6 +563,16 @@ void KisPredefinedBrushChooser::setImage(KisImageWSP image)
     m_image = image;
 }
 
+void KisPredefinedBrushChooser::setHSLBrusTipEnabled(bool value)
+{
+    m_hslBrushTipEnabled = value;
+}
+
+bool KisPredefinedBrushChooser::hslBrushTipEnabled() const
+{
+    return m_hslBrushTipEnabled;
+}
+
 void KisPredefinedBrushChooser::slotImportNewBrushResource() {
     m_itemChooser->slotButtonClicked(KoResourceItemChooser::Button_Import);
 }
diff --git a/plugins/paintops/libpaintop/kis_brush_chooser.h b/plugins/paintops/libpaintop/kis_brush_chooser.h
index d7a3273cc6..de3aa294d2 100644
--- a/plugins/paintops/libpaintop/kis_brush_chooser.h
+++ b/plugins/paintops/libpaintop/kis_brush_chooser.h
@@ -57,6 +57,9 @@ public:
     void setBrushSize(qreal xPixels, qreal yPixels);
     void setImage(KisImageWSP image);
 
+    void setHSLBrusTipEnabled(bool value);
+    bool hslBrushTipEnabled() const;
+
 private Q_SLOTS:
 
     void slotResetBrush();
@@ -88,6 +91,8 @@ private:
     KisImageWSP m_image;
     KisCustomBrushWidget* m_stampBrushWidget;
     KisClipboardBrushWidget* m_clipboardBrushWidget;
+
+    bool m_hslBrushTipEnabled = false;
 };
 
 #endif // KIS_PREDEFINED_BRUSH_CHOOSER_H_
diff --git a/plugins/paintops/libpaintop/kis_brush_option_widget.cpp b/plugins/paintops/libpaintop/kis_brush_option_widget.cpp
index 770f822b4d..9f8c3d4277 100644
--- a/plugins/paintops/libpaintop/kis_brush_option_widget.cpp
+++ b/plugins/paintops/libpaintop/kis_brush_option_widget.cpp
@@ -74,6 +74,11 @@ void KisBrushOptionWidget::setPrecisionEnabled(bool value)
     m_brushSelectionWidget->setPrecisionEnabled(value);
 }
 
+void KisBrushOptionWidget::setHSLBrusTipEnabled(bool value)
+{
+    m_brushSelectionWidget->setHSLBrusTipEnabled(value);
+}
+
 void KisBrushOptionWidget::writeOptionSetting(KisPropertiesConfigurationSP settings) const
 {
     m_brushSelectionWidget->writeOptionSetting(settings);
diff --git a/plugins/paintops/libpaintop/kis_brush_option_widget.h b/plugins/paintops/libpaintop/kis_brush_option_widget.h
index 41b9e9667f..c645d388a9 100644
--- a/plugins/paintops/libpaintop/kis_brush_option_widget.h
+++ b/plugins/paintops/libpaintop/kis_brush_option_widget.h
@@ -51,6 +51,7 @@ public:
     void setImage(KisImageWSP image) override;
 
     void setPrecisionEnabled(bool value);
+    void setHSLBrusTipEnabled(bool value);
 
     void writeOptionSetting(KisPropertiesConfigurationSP setting) const override;
     void readOptionSetting(const KisPropertiesConfigurationSP setting) override;
diff --git a/plugins/paintops/libpaintop/kis_brush_selection_widget.cpp b/plugins/paintops/libpaintop/kis_brush_selection_widget.cpp
index 7716bf3314..18b367b77b 100644
--- a/plugins/paintops/libpaintop/kis_brush_selection_widget.cpp
+++ b/plugins/paintops/libpaintop/kis_brush_selection_widget.cpp
@@ -273,6 +273,16 @@ void KisBrushSelectionWidget::hideOptions(const QStringList &options)
     }
 }
 
+void KisBrushSelectionWidget::setHSLBrusTipEnabled(bool value)
+{
+    m_predefinedBrushWidget->setHSLBrusTipEnabled(value);
+}
+
+bool KisBrushSelectionWidget::hslBrushTipEnabled() const
+{
+    return m_predefinedBrushWidget->hslBrushTipEnabled();
+}
+
 void KisBrushSelectionWidget::setCurrentWidget(QWidget* widget)
 {
     if (widget == m_currentBrushWidget) return;
diff --git a/plugins/paintops/libpaintop/kis_brush_selection_widget.h b/plugins/paintops/libpaintop/kis_brush_selection_widget.h
index 81a7c395de..ce02905fac 100644
--- a/plugins/paintops/libpaintop/kis_brush_selection_widget.h
+++ b/plugins/paintops/libpaintop/kis_brush_selection_widget.h
@@ -73,6 +73,10 @@ public:
 
     void hideOptions(const QStringList &options);
 
+    void setHSLBrusTipEnabled(bool value);
+    bool hslBrushTipEnabled() const;
+
+
 Q_SIGNALS:
 
     void sigBrushChanged();
diff --git a/plugins/paintops/tangentnormal/kis_tangent_normal_paintop_settings_widget.cpp b/plugins/paintops/tangentnormal/kis_tangent_normal_paintop_settings_widget.cpp
index dd181346ed..8c085f3db7 100644
--- a/plugins/paintops/tangentnormal/kis_tangent_normal_paintop_settings_widget.cpp
+++ b/plugins/paintops/tangentnormal/kis_tangent_normal_paintop_settings_widget.cpp
@@ -47,6 +47,7 @@ KisTangentNormalPaintOpSettingsWidget::KisTangentNormalPaintOpSettingsWidget(QWi
 {
     setObjectName("brush option widget");
     setPrecisionEnabled(true);
+    setHSLBrushTipEnabled(true);
 
     addPaintOpOption(new KisCompositeOpOption(true), i18n("Blending Mode"));
     addPaintOpOption(new KisCurveOptionWidget(new KisPressureOpacityOption(), i18n("Transparent"), i18n("Opaque")), i18n("Opacity"));


More information about the kimageshop mailing list