File indexing completed on 2024-05-26 04:33:04

0001 /*
0002  * This file is part of Krita
0003  *
0004  * SPDX-FileCopyrightText: 2004 Cyrille Berger <cberger@cberger.net>
0005  *
0006  *  SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #ifndef _KIS_PERCHANNEL_FILTER_H_
0010 #define _KIS_PERCHANNEL_FILTER_H_
0011 
0012 #include <QPair>
0013 #include <QList>
0014 
0015 #include <filter/kis_color_transformation_filter.h>
0016 #include <filter/kis_color_transformation_configuration.h>
0017 #include <kis_config_widget.h>
0018 #include <kis_paint_device.h>
0019 
0020 #include "virtual_channel_info.h"
0021 
0022 #include "kis_multichannel_filter_base.h"
0023 #include <KisCurveWidgetControlsManager.h>
0024 
0025 
0026 class KisPerChannelFilterConfiguration
0027         : public KisMultiChannelFilterConfiguration
0028 {
0029 public:
0030     KisPerChannelFilterConfiguration(int channelCount, KisResourcesInterfaceSP resourcesInterface);
0031     KisPerChannelFilterConfiguration(const KisPerChannelFilterConfiguration &rhs);
0032     ~KisPerChannelFilterConfiguration() override;
0033 
0034     KisFilterConfigurationSP clone() const override;
0035 
0036     KisCubicCurve getDefaultCurve() override;
0037 };
0038 
0039 
0040 /**
0041  * This class is a filter to adjust channels independently
0042  */
0043 class KisPerChannelFilter : public KisMultiChannelFilter
0044 {
0045 public:
0046     KisPerChannelFilter();
0047 
0048     KisConfigWidget * createConfigurationWidget(QWidget* parent, const KisPaintDeviceSP dev, bool useForMasks) const override;
0049     KisFilterConfigurationSP factoryConfiguration(KisResourcesInterfaceSP resourcesInterface) const override;
0050 
0051     KoColorTransformation* createTransformation(const KoColorSpace* cs, const KisFilterConfigurationSP config) const override;
0052 
0053     static inline KoID id() {
0054         return KoID("perchannel", i18n("Color Adjustment"));
0055     }
0056 };
0057 
0058 class KisPerChannelConfigWidget : public KisMultiChannelConfigWidget
0059 {
0060     Q_OBJECT
0061 
0062 public:
0063     KisPerChannelConfigWidget(QWidget * parent, KisPaintDeviceSP dev, Qt::WindowFlags f = Qt::WindowFlags());
0064     ~KisPerChannelConfigWidget() override;
0065 
0066     KisPropertiesConfigurationSP configuration() const override;
0067 
0068 protected:
0069     void updateChannelControls() override;
0070 
0071     virtual KisPropertiesConfigurationSP getDefaultConfiguration() override;
0072 
0073 private:
0074     QScopedPointer<KisCurveWidgetControlsManagerInt> m_curveControlsManager;
0075 };
0076 
0077 #endif