File indexing completed on 2024-05-26 04:32:31

0001 /*
0002  *  SPDX-FileCopyrightText: 2009 Cyrille Berger <cberger@cberger.net>
0003  *  SPDX-FileCopyrightText: 2022 Bourumir Wyngs <bourumir.wyngs@gmail.com>
0004  *
0005  *  SPDX-License-Identifier: LGPL-2.0-or-later
0006  */
0007 
0008 #ifndef _DIGITALMIXER_DOCK_H_
0009 #define _DIGITALMIXER_DOCK_H_
0010 
0011 #include <QPointer>
0012 #include <QDockWidget>
0013 #include <QPushButton>
0014 
0015 #include <KoColor.h>
0016 #include <KoCanvasBase.h>
0017 
0018 #include <kis_workspace_resource.h>
0019 #include <kis_mainwindow_observer.h>
0020 #include <KisViewManager.h>
0021 #include <kis_canvas_resource_provider.h>
0022 
0023 class KoColorPopupAction;
0024 class KoColorSlider;
0025 class KoColorPatch;
0026 class KisColorButton;
0027 
0028 class DigitalMixerDock : public QDockWidget, public KisMainwindowObserver {
0029     Q_OBJECT
0030 public:
0031     DigitalMixerDock( );
0032     QString observerName() override { return "DigitalMixerDock"; }
0033     /// reimplemented from KoCanvasObserverBase
0034     void setCanvas(KoCanvasBase *canvas) override;
0035     void unsetCanvas() override { m_canvas = 0; setEnabled(false);}
0036 
0037 public: // KisMainWindowObserver
0038   void setViewManager(KisViewManager* kisview) override;
0039 
0040 public Q_SLOTS:
0041     void setCurrentColor(const KoColor& );
0042     void canvasResourceChanged(int, const QVariant&);
0043 
0044 private Q_SLOTS:
0045     void popupColorChanged(int i);
0046     void colorSliderChanged(int i);
0047     void targetColorChanged(int);
0048 
0049     void resetMixer();
0050     void saveToWorkspace(KisWorkspaceResourceSP workspace);
0051     void loadFromWorkspace(KisWorkspaceResourceSP workspace);
0052 
0053     void gradientStartColorChanged(int);
0054     void gradientColorSliderChanged(int);
0055     void gradientEndColorChanged(int);
0056     void gradientTargetColorChanged(int);
0057 
0058 private:
0059     QPointer<KoCanvasBase> m_canvas;
0060     KoColor m_currentColor;
0061     KoColorPatch* m_currentColorPatch;
0062 
0063     struct Mixer {
0064       KoColorPatch* targetColor;
0065       KoColorSlider* targetSlider;
0066       KisColorButton* actionColor;
0067     };
0068 
0069     struct GradientMixer {
0070         KoColorPatch* targetColor;
0071         KisColorButton* startColor;
0072         KoColorSlider* targetSlider;
0073         KisColorButton* endColor;
0074     };
0075 
0076     QList<Mixer> m_mixers;
0077     GradientMixer m_gradientMixer;
0078     bool m_tellCanvas;
0079 
0080     QPushButton *m_reset_button;
0081 };
0082 
0083 
0084 #endif