File indexing completed on 2024-05-12 16:02:10

0001 /*  This file is part of the KDE project
0002 
0003     SPDX-FileCopyrightText: 1999 Matthias Elter <elter@kde.org>
0004     SPDX-FileCopyrightText: 2003 Patrick Julien <freak@codepimps.org>
0005     SPDX-FileCopyrightText: 2005 Sven Langkamp <sven.langkamp@gmail.com>
0006     SPDX-FileCopyrightText: 2011 Srikanth Tiyyagura <srikanth.tulasiram@gmail.com>
0007 
0008     SPDX-License-Identifier: LGPL-2.1-or-later
0009  */
0010 
0011 #include "KoResourceServerProvider.h"
0012 
0013 #include <QApplication>
0014 #include <QFileInfo>
0015 #include <QStringList>
0016 #include <QDir>
0017 #include <QStandardPaths>
0018 #include <QGlobalStatic>
0019 
0020 #include <resources/KoSegmentGradient.h>
0021 #include <resources/KoStopGradient.h>
0022 #include "KoColorSpaceRegistry.h"
0023 #include "KoResourcePaths.h"
0024 #include "klocalizedstring.h"
0025 #include <iostream>
0026 
0027 using namespace std;
0028 
0029 class GradientResourceServer : public KoResourceServer<KoAbstractGradient>
0030 {
0031 public:
0032 
0033     GradientResourceServer(const QString& type)
0034         : KoResourceServer<KoAbstractGradient>(type)
0035     {
0036         insertSpecialGradients();
0037     }
0038 
0039     void insertSpecialGradients()
0040     {
0041         const KoColorSpace* cs = KoColorSpaceRegistry::instance()->rgb8();
0042         QList<KoGradientStop> stops;
0043 
0044         KoStopGradientSP gradient(new KoStopGradient());
0045         gradient->setType(QGradient::LinearGradient);
0046         gradient->setName(i18n("1. Foreground to Transparent"));
0047         gradient->setFilename("Foreground to Transparent.svg");
0048         stops << KoGradientStop(0.0, KoColor(Qt::black, cs), FOREGROUNDSTOP);
0049         stops << KoGradientStop(1.0, KoColor(QColor(0, 0, 0, 0), cs), COLORSTOP);
0050 
0051         gradient->setStops(stops);
0052         gradient->setValid(true);
0053         gradient->setPermanent(true);
0054         addResource(gradient, false);
0055         m_foregroundToTransparent = gradient;
0056 
0057         gradient.reset(new KoStopGradient());
0058         gradient->setType(QGradient::LinearGradient);
0059         gradient->setName(i18n("0. Foreground to Background"));
0060         gradient->setFilename("Foreground to Background.svg");
0061 
0062         stops.clear();
0063         stops << KoGradientStop(0.0, KoColor(Qt::black, cs), FOREGROUNDSTOP);
0064         stops << KoGradientStop(1.0, KoColor(Qt::white, cs), BACKGROUNDSTOP);
0065 
0066         gradient->setStops(stops);
0067         gradient->setValid(true);
0068         gradient->setPermanent(true);
0069         addResource(gradient, false);
0070 
0071         m_foregroundToBackground = gradient;
0072     }
0073 
0074 private:
0075 
0076     friend class KoResourceBundle;
0077 
0078     KoAbstractGradientSP createResource( const QString & filename ) {
0079 
0080         QString fileExtension;
0081         int index = filename.lastIndexOf('.');
0082 
0083         if (index != -1)
0084             fileExtension = filename.mid(index).toLower();
0085 
0086         KoAbstractGradientSP grad;
0087 
0088         if(fileExtension == ".svg") {
0089             grad.reset(new KoStopGradient(filename));
0090         }
0091         else if(fileExtension == ".ggr" ) {
0092             grad.reset(new KoSegmentGradient(filename));
0093         }
0094 
0095         return grad;
0096     }
0097 
0098     KoAbstractGradientSP m_foregroundToTransparent;
0099     KoAbstractGradientSP m_foregroundToBackground;
0100 };
0101 
0102 struct Q_DECL_HIDDEN KoResourceServerProvider::Private
0103 {
0104     KoResourceServer<KoPattern> *patternServer;
0105     KoResourceServer<KoAbstractGradient> *gradientServer;
0106     KoResourceServer<KoColorSet> *paletteServer;
0107     KoResourceServer<KoSvgSymbolCollectionResource> *svgSymbolCollectionServer;
0108     KoResourceServer<KoGamutMask> *gamutMaskServer;
0109 #if defined HAVE_SEEXPR
0110     KoResourceServer<KisSeExprScript>* seExprScriptServer;
0111 #endif
0112 };
0113 
0114 KoResourceServerProvider::KoResourceServerProvider() : d(new Private)
0115 {
0116     d->patternServer = new KoResourceServer<KoPattern>(ResourceType::Patterns);
0117     d->gradientServer = new GradientResourceServer(ResourceType::Gradients);
0118     d->paletteServer = new KoResourceServer<KoColorSet>(ResourceType::Palettes);
0119     d->svgSymbolCollectionServer = new KoResourceServer<KoSvgSymbolCollectionResource>(ResourceType::Symbols);
0120     d->gamutMaskServer = new KoResourceServer<KoGamutMask>(ResourceType::GamutMasks);
0121 #if defined HAVE_SEEXPR
0122     d->seExprScriptServer = new KoResourceServer<KisSeExprScript>(ResourceType::SeExprScripts);
0123 #endif
0124 }
0125 
0126 KoResourceServerProvider::~KoResourceServerProvider()
0127 {
0128     delete d->patternServer;
0129     delete d->gradientServer;
0130     delete d->paletteServer;
0131     delete d->svgSymbolCollectionServer;
0132     delete d->gamutMaskServer;
0133 #if defined HAVE_SEEXPR
0134     delete d->seExprScriptServer;
0135 #endif    
0136 
0137     delete d;
0138 }
0139 
0140 Q_GLOBAL_STATIC(KoResourceServerProvider, s_instance)
0141 
0142 KoResourceServerProvider *KoResourceServerProvider::instance()
0143 {
0144     return s_instance;
0145 }
0146 
0147 KoResourceServer<KoPattern> *KoResourceServerProvider::patternServer()
0148 {
0149     return KoResourceServerProvider::instance()->d->patternServer;
0150 }
0151 
0152 KoResourceServer<KoAbstractGradient> *KoResourceServerProvider::gradientServer()
0153 {
0154     return KoResourceServerProvider::instance()->d->gradientServer;
0155 }
0156 
0157 KoResourceServer<KoColorSet> *KoResourceServerProvider::paletteServer()
0158 {
0159     return KoResourceServerProvider::instance()->d->paletteServer;
0160 }
0161 
0162 KoResourceServer<KoSvgSymbolCollectionResource> *KoResourceServerProvider::svgSymbolCollectionServer()
0163 {
0164     return KoResourceServerProvider::instance()->d->svgSymbolCollectionServer;
0165 }
0166 
0167 KoResourceServer<KoGamutMask> *KoResourceServerProvider::gamutMaskServer()
0168 {
0169     return KoResourceServerProvider::instance()->d->gamutMaskServer;
0170 }
0171 
0172 #if defined HAVE_SEEXPR
0173 KoResourceServer<KisSeExprScript> *KoResourceServerProvider::seExprScriptServer()
0174 {
0175     return KoResourceServerProvider::instance()->d->seExprScriptServer;
0176 }
0177 #endif