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