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

0001 /*
0002  * This file is part of the KDE project
0003  *
0004  * SPDX-FileCopyrightText: 2016 Spencer Brown <sbrown655@gmail.com>
0005  * SPDX-FileCopyrightText: 2020 Deif Lou <ginoba@gmail.com>
0006  * 
0007  *  SPDX-License-Identifier: GPL-2.0-or-later
0008  */
0009 
0010 #ifndef KIS_GRADIENT_MAP_FILTER_CONFIGURATION_H
0011 #define KIS_GRADIENT_MAP_FILTER_CONFIGURATION_H
0012 
0013 #include <kis_filter_configuration.h>
0014 #include <KisGradientConversion.h>
0015 #include <KisResourcesInterface.h>
0016 #include <KoColorSpaceRegistry.h>
0017 #include <KoAbstractGradient.h>
0018 #include <KoStopGradient.h>
0019 
0020 
0021 class KisGradientMapFilterConfiguration;
0022 typedef KisPinnedSharedPtr<KisGradientMapFilterConfiguration> KisGradientMapFilterConfigurationSP;
0023 
0024 class KisGradientMapFilterConfiguration : public KisFilterConfiguration
0025 {
0026 public:
0027     enum ColorMode
0028     {
0029         ColorMode_Blend,
0030         ColorMode_Nearest,
0031         ColorMode_Dither
0032     };
0033 
0034     KisGradientMapFilterConfiguration(KisResourcesInterfaceSP resourcesInterface);
0035     KisGradientMapFilterConfiguration(qint32 version, KisResourcesInterfaceSP resourcesInterface);
0036     KisGradientMapFilterConfiguration(const KisGradientMapFilterConfiguration &rhs);
0037     
0038     virtual KisFilterConfigurationSP clone() const override;
0039 
0040     QList<KoResourceLoadResult> linkedResources(KisResourcesInterfaceSP globalResourcesInterface) const override;
0041     QList<KoResourceLoadResult> embeddedResources(KisResourcesInterfaceSP globalResourcesInterface) const override;
0042     
0043     static inline QString defaultName()
0044     {
0045         return "gradientmap";
0046     }
0047     
0048     static constexpr qint32 defaultVersion()
0049     {
0050         return 2;
0051     }
0052 
0053     static inline KoAbstractGradientSP defaultGradient(KisResourcesInterfaceSP resourcesInterface)
0054     {
0055         KoAbstractGradientSP gradient;
0056         KoAbstractGradientSP resourceGradient = resourcesInterface->source<KoAbstractGradient>(ResourceType::Gradients).fallbackResource();
0057         if (resourceGradient) {
0058             gradient = resourceGradient->clone().dynamicCast<KoAbstractGradient>();
0059         } else {
0060             KoStopGradientSP stopGradient(new KoStopGradient);
0061             stopGradient->setStops(
0062                 QList<KoGradientStop>()
0063                 << KoGradientStop(0.0, KoColor(Qt::black, KoColorSpaceRegistry::instance()->rgb8(0)), FOREGROUNDSTOP)
0064                 << KoGradientStop(1.0, KoColor(Qt::white, KoColorSpaceRegistry::instance()->rgb8(0)), BACKGROUNDSTOP)
0065             );
0066             gradient = stopGradient.staticCast<KoAbstractGradient>();
0067         }
0068         if (gradient) {
0069             gradient->setName(i18nc("Default gradient name for the gradient generator", "Unnamed"));
0070             gradient->setValid(true);
0071         }
0072         return gradient;
0073     }
0074 
0075     static constexpr int defaultColorMode()
0076     {
0077         return ColorMode_Blend;
0078     }
0079 
0080     KoAbstractGradientSP gradient(KoAbstractGradientSP fallbackGradient = nullptr) const;
0081     int colorMode() const;
0082 
0083     void setGradient(KoAbstractGradientSP newGradient);
0084     void setColorMode(int newColorMode);
0085     void setDefaults();
0086 };
0087 
0088 #endif