File indexing completed on 2024-06-16 04:16:40

0001 /*
0002  * KDE. Krita Project.
0003  *
0004  * SPDX-FileCopyrightText: 2020 Deif Lou <ginoba@gmail.com>
0005  *
0006  * SPDX-License-Identifier: GPL-2.0-or-later
0007  */
0008 
0009 #ifndef KIS_HALFTONE_FILTER_CONFIGURATION_H
0010 #define KIS_HALFTONE_FILTER_CONFIGURATION_H
0011 
0012 #include <QHash>
0013 #include <QString>
0014 #include <QStringList>
0015 
0016 #include <kis_filter_configuration.h>
0017 #include <KoColor.h>
0018 #include <KoColorSpaceRegistry.h>
0019 #include <generator/kis_generator_registry.h>
0020 
0021 class KisHalftoneFilterConfiguration;
0022 typedef KisPinnedSharedPtr<KisHalftoneFilterConfiguration> KisHalftoneFilterConfigurationSP;
0023 
0024 class KisHalftoneFilterConfiguration : public KisFilterConfiguration
0025 {
0026 public:
0027     KisHalftoneFilterConfiguration(const QString & name, qint32 version, KisResourcesInterfaceSP resourcesInterface);
0028     KisHalftoneFilterConfiguration(const KisHalftoneFilterConfiguration &rhs);
0029 
0030     ~KisHalftoneFilterConfiguration() override;
0031 
0032     KisFilterConfigurationSP clone() const override;
0033 
0034     void setResourcesInterface(KisResourcesInterfaceSP resourcesInterface) override;
0035     QList<KoResourceLoadResult> linkedResources(KisResourcesInterfaceSP globalResourcesInterface) const override;
0036     QList<KoResourceLoadResult> embeddedResources(KisResourcesInterfaceSP globalResourcesInterface) const override;
0037 
0038     static constexpr const char *HalftoneMode_Intensity = "intensity";
0039     static constexpr const char *HalftoneMode_IndependentChannels = "independent_channels";
0040     static constexpr const char *HalftoneMode_Alpha = "alpha";
0041 
0042     // default properties
0043     inline static QString defaultMode() { return HalftoneMode_Intensity; }
0044 
0045     inline static QString defaultGeneratorId()
0046     {
0047         static QString defaultGeneratorId;
0048         if (defaultGeneratorId.isNull()) {
0049             QStringList generatorIds = KisGeneratorRegistry::instance()->keys();
0050             if (generatorIds.size() == 0) {
0051                 defaultGeneratorId = "";
0052             } else {
0053                 generatorIds.sort();
0054                 if (generatorIds.indexOf("screentone") == -1) {
0055                     defaultGeneratorId = generatorIds.at(0);
0056                 } else {
0057                     defaultGeneratorId = "screentone";
0058                 }
0059             }
0060         }
0061         return defaultGeneratorId;
0062     }
0063 
0064     static constexpr qreal defaultHardness() { return 80.0; }
0065 
0066     static constexpr bool defaultInvert() { return false; }
0067 
0068     inline static const KoColor& defaultForegroundColor()
0069     {
0070         static const KoColor c(Qt::black, KoColorSpaceRegistry::instance()->rgb8());
0071         return c;
0072     }
0073 
0074     inline static const KoColor& defaultBackgroundColor()
0075     {
0076         static const KoColor c(Qt::white, KoColorSpaceRegistry::instance()->rgb8());
0077         return c;
0078     }
0079 
0080     static constexpr int defaultForegroundOpacity() { return 100; }
0081 
0082     static constexpr int defaultBackgroundOpacity() { return 100; }
0083 
0084     QString colorModelId() const;
0085     QString mode() const;
0086     QString generatorId(const QString &prefix) const;
0087     KisFilterConfigurationSP generatorConfiguration(const QString &prefix) const;
0088     qreal hardness(const QString &prefix) const;
0089     bool invert(const QString &prefix) const;
0090     KoColor foregroundColor(const QString &prefix) const;
0091     int foregroundOpacity(const QString &prefix) const;
0092     KoColor backgroundColor(const QString &prefix) const;
0093     int backgroundOpacity(const QString &prefix) const;
0094 
0095     void setColorModelId(const QString &newColorModelId);
0096     void setMode(const QString &newMode);
0097     void setGeneratorId(const QString &prefix, const QString &id);
0098     void setGeneratorConfiguration(const QString &prefix, KisFilterConfigurationSP config);
0099     void setHardness(const QString &prefix, qreal newHardness);
0100     void setInvert(const QString &prefix, bool newInvert);
0101     void setForegroundColor(const QString &prefix, const KoColor &newForegroundColor);
0102     void setForegroundOpacity(const QString &prefix, int newOpacity);
0103     void setBackgroundColor(const QString &prefix, const KoColor &newBackgroundColor);
0104     void setBackgroundOpacity(const QString &prefix, int newBackgroundOpacity);
0105 
0106     void setProperty(const QString &name, const QVariant &value) override;
0107 
0108 private:
0109     mutable QHash<QString, KisFilterConfigurationSP> m_generatorConfigurationsCache;
0110 };
0111 
0112 #endif