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

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 KISSCREENTONEGENERATORCONFIGURATION_H
0010 #define KISSCREENTONEGENERATORCONFIGURATION_H
0011 
0012 #include <QString>
0013 #include <QStringList>
0014 #include <QScopedPointer>
0015 
0016 #include <KoColor.h>
0017 #include <KoColorSpaceRegistry.h>
0018 #include <kis_filter_configuration.h>
0019 
0020 class KisScreentoneGeneratorTemplate;
0021 
0022 enum KisScreentonePatternType
0023 {
0024     KisScreentonePatternType_Dots,
0025     KisScreentonePatternType_Lines
0026 };
0027 
0028 enum KisScreentoneShapeType
0029 {
0030     // Dots
0031     KisScreentoneShapeType_RoundDots,
0032     KisScreentoneShapeType_EllipseDotsLegacy,
0033     KisScreentoneShapeType_DiamondDots,
0034     KisScreentoneShapeType_SquareDots,
0035     KisScreentoneShapeType_EllipseDots,
0036     // Lines
0037     KisScreentoneShapeType_StraightLines = 0,
0038     KisScreentoneShapeType_SineWaveLines,
0039     KisScreentoneShapeType_TriangularWaveLines,
0040     KisScreentoneShapeType_SawtoothWaveLines,
0041     KisScreentoneShapeType_CurtainsLines
0042 };
0043 
0044 enum KisScreentoneInterpolationType
0045 {
0046     KisScreentoneInterpolationType_Linear,
0047     KisScreentoneInterpolationType_Sinusoidal
0048 };
0049 
0050 enum KisScreentoneEqualizationMode
0051 {
0052     KisScreentoneEqualizationMode_None,
0053     KisScreentoneEqualizationMode_FunctionBased,
0054     KisScreentoneEqualizationMode_TemplateBased
0055 };
0056 
0057 enum KisScreentoneSizeMode
0058 {
0059     KisScreentoneSizeMode_ResolutionBased,
0060     KisScreentoneSizeMode_PixelBased
0061 };
0062 
0063 enum KisScreentoneUnits
0064 {
0065     KisScreentoneUnits_Inches,
0066     KisScreentoneUnits_Centimeters
0067 };
0068 
0069 QStringList screentonePatternNames();
0070 QStringList screentoneShapeNames(int pattern);
0071 QStringList screentoneInterpolationNames(int pattern, int shape);
0072 
0073 class KisScreentoneGeneratorConfiguration;
0074 typedef KisPinnedSharedPtr<KisScreentoneGeneratorConfiguration> KisScreentoneGeneratorConfigurationSP;
0075 
0076 class KisScreentoneGeneratorConfiguration : public KisFilterConfiguration
0077 {
0078 public:
0079     KisScreentoneGeneratorConfiguration(qint32 version, KisResourcesInterfaceSP resourcesInterface);
0080     KisScreentoneGeneratorConfiguration(KisResourcesInterfaceSP resourcesInterface);
0081     KisScreentoneGeneratorConfiguration(const KisScreentoneGeneratorConfiguration &rhs);
0082     ~KisScreentoneGeneratorConfiguration();
0083 
0084     virtual KisFilterConfigurationSP clone() const override;
0085 
0086     static inline QString defaultName() { return "screentone"; }
0087     static constexpr qint32 defaultVersion() { return 2; }
0088 
0089     static constexpr int defaultPattern() { return KisScreentonePatternType_Dots; }
0090     static constexpr int defaultShape() { return KisScreentoneShapeType_RoundDots; }
0091     static constexpr int defaultInterpolation() { return KisScreentoneInterpolationType_Sinusoidal; }
0092     static constexpr int defaultEqualizationMode() { return KisScreentoneEqualizationMode_TemplateBased; }
0093 
0094     static inline const KoColor& defaultForegroundColor()
0095     {
0096         static const KoColor c(Qt::black, KoColorSpaceRegistry::instance()->rgb8());
0097         return c;
0098     }
0099     static inline const KoColor& defaultBackgroundColor()
0100     {
0101         static const KoColor c(Qt::white, KoColorSpaceRegistry::instance()->rgb8());
0102         return c;
0103     }
0104     static constexpr int defaultForegroundOpacity() { return 100; }
0105     static constexpr int defaultBackgroundOpacity() { return 100; }
0106     static constexpr bool defaultInvert() { return false; }
0107     static constexpr qreal defaultBrightness() { return 50.0; }
0108     static constexpr qreal defaultContrast() { return 95.0; }
0109 
0110     static constexpr int defaultSizeMode() { return KisScreentoneSizeMode_ResolutionBased; }
0111     static constexpr int defaultUnits() { return KisScreentoneUnits_Inches; }
0112     static constexpr qreal defaultResolution() { return 300.0; }
0113     static constexpr qreal defaultFrequencyX() { return 30.0; }
0114     static constexpr qreal defaultFrequencyY() { return 30.0; }
0115     static constexpr bool defaultConstrainFrequency() { return true; }
0116     static constexpr qreal defaultPositionX() { return 0.0; }
0117     static constexpr qreal defaultPositionY() { return 0.0; }
0118     static constexpr qreal defaultSizeX() { return 10.0; }
0119     static constexpr qreal defaultSizeY() { return 10.0; }
0120     static constexpr bool defaultConstrainSize() { return true; }
0121     static constexpr qreal defaultShearX() { return 0.0; }
0122     static constexpr qreal defaultShearY() { return 0.0; }
0123     static constexpr qreal defaultRotation() { return 45.0; }
0124     static constexpr bool defaultAlignToPixelGrid() { return true; }
0125     static constexpr int defaultAlignToPixelGridX() { return 1; }
0126     static constexpr int defaultAlignToPixelGridY() { return 1; }
0127 
0128     int pattern() const;
0129     int shape() const;
0130     int interpolation() const;
0131     int equalizationMode() const;
0132     
0133     KoColor foregroundColor() const;
0134     KoColor backgroundColor() const;
0135     int foregroundOpacity() const;
0136     int backgroundOpacity() const;
0137     bool invert() const;
0138     qreal brightness() const;
0139     qreal contrast() const;
0140 
0141     int sizeMode() const;
0142     int units() const;
0143     qreal resolution() const;
0144     qreal frequencyX() const;
0145     qreal frequencyY() const;
0146     bool constrainFrequency() const;
0147     qreal positionX() const;
0148     qreal positionY() const;
0149     qreal sizeX() const;
0150     qreal sizeY() const;
0151     bool constrainSize() const;
0152     qreal shearX() const;
0153     qreal shearY() const;
0154     qreal rotation() const;
0155     bool alignToPixelGrid() const;
0156     int alignToPixelGridX() const;
0157     int alignToPixelGridY() const;
0158     const KisScreentoneGeneratorTemplate& getTemplate() const;
0159 
0160     void setPattern(int newPattern);
0161     void setShape(int newShape);
0162     void setInterpolation(int newInterpolation);
0163     void setEqualizationMode(int newEqualizationMode);
0164     
0165     void setForegroundColor(const KoColor &newForegroundColor);
0166     void setBackgroundColor(const KoColor &newBackgroundColor);
0167     void setForegroundOpacity(int newForegroundOpacity);
0168     void setBackgroundOpacity(int newBackgroundOpacity);
0169     void setInvert(bool newInvert);
0170     void setBrightness(qreal newBrightness);
0171     void setContrast(qreal newContrast);
0172 
0173     void setSizeMode(int newSizeMode);
0174     void setUnits(int newUnits);
0175     void setResolution(qreal newResolution);
0176     void setFrequencyX(qreal newFrequencyX);
0177     void setFrequencyY(qreal newFrequencyY);
0178     void setConstrainFrequency(bool newConstrainFrequency);
0179     void setPositionX(qreal newPositionX);
0180     void setPositionY(qreal newPositionY);
0181     void setSizeX(qreal newSizeX);
0182     void setSizeY(qreal newSizeY);
0183     void setConstrainSize(bool newConstrainSize);
0184     void setShearX(qreal newShearX);
0185     void setShearY(qreal newShearY);
0186     void setRotation(qreal newRotation);
0187     void setAlignToPixelGrid(bool newAlignToPixelGrid);
0188     void setAlignToPixelGridX(int newAlignToPixelGridX);
0189     void setAlignToPixelGridY(int newAlignToPixelGridY);
0190 
0191     void setDefaults();
0192 
0193 private:
0194     class Private;
0195     QScopedPointer<Private> m_d;
0196 };
0197 
0198 #endif