File indexing completed on 2024-06-23 04:26:58

0001 /*
0002  * KDE. Krita Project.
0003  *
0004  * SPDX-FileCopyrightText: 2021 Deif Lou <ginoba@gmail.com>
0005  *
0006  * SPDX-License-Identifier: GPL-2.0-or-later
0007  */
0008 
0009 #ifndef KIS_LEVELS_FILTER_CONFIGURATION_H
0010 #define KIS_LEVELS_FILTER_CONFIGURATION_H
0011 
0012 #include <filter/kis_color_transformation_configuration.h>
0013 #include <kis_paint_device.h>
0014 #include <KisLevelsCurve.h>
0015 
0016 class KisLevelsFilterConfiguration : public KisColorTransformationConfiguration
0017 {
0018 public:
0019     KisLevelsFilterConfiguration(int channelCount, qint32 version, KisResourcesInterfaceSP resourcesInterface);
0020     KisLevelsFilterConfiguration(int channelCount, KisResourcesInterfaceSP resourcesInterface);
0021     KisLevelsFilterConfiguration(const KisLevelsFilterConfiguration &rhs);
0022 
0023     KisFilterConfigurationSP clone() const override;
0024 
0025     static inline QString defaultName() { return "levels"; }
0026     static constexpr qint32 defaultVersion() { return 2; }
0027     static inline KisLevelsCurve defaultLevelsCurve() { return KisLevelsCurve(); }
0028     static constexpr bool defaultUseLightnessMode() { return true; }
0029     static constexpr bool defaultShowLogarithmicHistogram() { return false; }
0030 
0031     using KisFilterConfiguration::fromXML;
0032     using KisFilterConfiguration::toXML;
0033     using KisFilterConfiguration::fromLegacyXML;
0034     
0035     void fromLegacyXML(const QDomElement& root) override;
0036     void fromXML(const QDomElement& e) override;
0037     void toXML(QDomDocument& doc, QDomElement& root) const override;
0038 
0039     void setProperty(const QString &name, const QVariant &value) override;
0040 
0041     const QVector<KisLevelsCurve> levelsCurves() const;
0042     const KisLevelsCurve lightnessLevelsCurve() const;
0043     void setLevelsCurves(const QVector<KisLevelsCurve> &newLevelsCurves);
0044     void setLightnessLevelsCurve(const KisLevelsCurve &newLightnessLevelsCurve);
0045     const QVector<QVector<quint16>>& transfers() const;
0046     const QVector<quint16>& lightnessTransfer() const;
0047 
0048     bool useLightnessMode() const;
0049     bool showLogarithmicHistogram() const;
0050     void setUseLightnessMode(bool newUseLightnessMode);
0051     void setShowLogarithmicHistogram(bool newShowLogarithmicHistogram);
0052 
0053     bool isCompatible(const KisPaintDeviceSP) const override;
0054 
0055     void setDefaults();
0056 
0057 private:
0058     QVector<QVector<quint16>> m_transfers;
0059     QVector<quint16> m_lightnessTransfer;
0060 
0061     int channelCount() const;
0062     void setChannelCount(int newChannelCount);
0063 
0064     void setLightessLevelsCurveFromLegacyValues();
0065     void setLegacyValuesFromLightnessLevelsCurve();
0066 
0067     void updateTransfers();
0068     void updateLightnessTransfer();
0069 };
0070 
0071 #endif