File indexing completed on 2024-05-12 15:56:39

0001 /*
0002    SPDX-FileCopyrightText: 2006 Boudewijn Rempt (boud@valdyas.org)
0003    SPDX-FileCopyrightText: 2007, 2010 Thomas Zander <zander@kde.org>
0004    SPDX-FileCopyrightText: 2008 Carlos Licea <carlos.licea@kdemail.net>
0005    SPDX-FileCopyrightText: 2011 Jan Hambrecht <jaham@gmx.net>
0006 
0007    SPDX-License-Identifier: LGPL-2.0-or-later
0008  */
0009 #include "KoCanvasResourceProvider.h"
0010 
0011 #include <QVariant>
0012 #include <FlakeDebug.h>
0013 
0014 #include "KoShape.h"
0015 #include "KoShapeStroke.h"
0016 #include "KoResourceManager_p.h"
0017 #include <KoColorSpaceRegistry.h>
0018 
0019 #include <KoCanvasResourcesInterface.h>
0020 
0021 struct Q_DECL_HIDDEN CanvasResourceProviderInterfaceWrapper : public KoCanvasResourcesInterface
0022 {
0023     CanvasResourceProviderInterfaceWrapper(KoCanvasResourceProvider *provider)
0024         : m_provider(provider)
0025     {
0026     }
0027 
0028     QVariant resource(int key) const override {
0029         return m_provider->resource(key);
0030     }
0031 
0032 private:
0033     KoCanvasResourceProvider *m_provider = 0;
0034 };
0035 
0036 
0037 class Q_DECL_HIDDEN KoCanvasResourceProvider::Private
0038 {
0039 public:
0040     Private(KoCanvasResourceProvider *q)
0041         : interfaceWrapper(new CanvasResourceProviderInterfaceWrapper(q))
0042     {
0043     }
0044 
0045     KoResourceManager manager;
0046     QSharedPointer<CanvasResourceProviderInterfaceWrapper> interfaceWrapper;
0047 };
0048 
0049 KoCanvasResourceProvider::KoCanvasResourceProvider(QObject *parent)
0050     : QObject(parent)
0051     , d(new Private(this))
0052 {
0053     const KoColorSpace* cs = KoColorSpaceRegistry::instance()->rgb8();
0054     setForegroundColor(KoColor(Qt::black, cs));
0055     setBackgroundColor(KoColor(Qt::white, cs));
0056 
0057     connect(&d->manager, &KoResourceManager::resourceChanged,
0058             this, &KoCanvasResourceProvider::canvasResourceChanged);
0059     connect(&d->manager, &KoResourceManager::resourceChangeAttempted,
0060             this, &KoCanvasResourceProvider::canvasResourceChangeAttempted);
0061 }
0062 
0063 KoCanvasResourceProvider::~KoCanvasResourceProvider()
0064 {
0065     delete d;
0066 }
0067 
0068 void KoCanvasResourceProvider::setResource(int key, const QVariant &value)
0069 {
0070     d->manager.setResource(key, value);
0071 }
0072 
0073 QVariant KoCanvasResourceProvider::resource(int key) const
0074 {
0075     return d->manager.resource(key);
0076 }
0077 
0078 void KoCanvasResourceProvider::setResource(int key, const KoColor &color)
0079 {
0080     QVariant v;
0081     v.setValue(color);
0082     setResource(key, v);
0083 }
0084 
0085 void KoCanvasResourceProvider::setResource(int key, KoShape *shape)
0086 {
0087     QVariant v;
0088     v.setValue(shape);
0089     setResource(key, v);
0090 }
0091 
0092 void KoCanvasResourceProvider::setResource(int key, const KoUnit &unit)
0093 {
0094     QVariant v;
0095     v.setValue(unit);
0096     setResource(key, v);
0097 }
0098 
0099 KoColor KoCanvasResourceProvider::koColorResource(int key) const
0100 {
0101     return d->manager.koColorResource(key);
0102 }
0103 
0104 void KoCanvasResourceProvider::setForegroundColor(const KoColor &color)
0105 {
0106     setResource(KoCanvasResource::ForegroundColor, color);
0107 }
0108 
0109 KoColor KoCanvasResourceProvider::foregroundColor() const
0110 {
0111     return koColorResource(KoCanvasResource::ForegroundColor);
0112 }
0113 
0114 void KoCanvasResourceProvider::setBackgroundColor(const KoColor &color)
0115 {
0116     setResource(KoCanvasResource::BackgroundColor, color);
0117 }
0118 
0119 KoColor KoCanvasResourceProvider::backgroundColor() const
0120 {
0121     return koColorResource(KoCanvasResource::BackgroundColor);
0122 }
0123 
0124 KoShape *KoCanvasResourceProvider::koShapeResource(int key) const
0125 {
0126     return d->manager.koShapeResource(key);
0127 }
0128 
0129 KoUnit KoCanvasResourceProvider::unitResource(int key) const
0130 {
0131     return resource(key).value<KoUnit>();
0132 }
0133 
0134 bool KoCanvasResourceProvider::boolResource(int key) const
0135 {
0136     return d->manager.boolResource(key);
0137 }
0138 
0139 int KoCanvasResourceProvider::intResource(int key) const
0140 {
0141     return d->manager.intResource(key);
0142 }
0143 
0144 QString KoCanvasResourceProvider::stringResource(int key) const
0145 {
0146     return d->manager.stringResource(key);
0147 }
0148 
0149 QSizeF KoCanvasResourceProvider::sizeResource(int key) const
0150 {
0151     return d->manager.sizeResource(key);
0152 }
0153 
0154 bool KoCanvasResourceProvider::hasResource(int key) const
0155 {
0156     return d->manager.hasResource(key);
0157 }
0158 
0159 void KoCanvasResourceProvider::clearResource(int key)
0160 {
0161     d->manager.clearResource(key);
0162 }
0163 
0164 void KoCanvasResourceProvider::addDerivedResourceConverter(KoDerivedResourceConverterSP converter)
0165 {
0166     d->manager.addDerivedResourceConverter(converter);
0167 }
0168 
0169 bool KoCanvasResourceProvider::hasDerivedResourceConverter(int key)
0170 {
0171     return d->manager.hasDerivedResourceConverter(key);
0172 }
0173 
0174 void KoCanvasResourceProvider::removeDerivedResourceConverter(int key)
0175 {
0176     d->manager.removeDerivedResourceConverter(key);
0177 }
0178 
0179 void KoCanvasResourceProvider::addResourceUpdateMediator(KoResourceUpdateMediatorSP mediator)
0180 {
0181     d->manager.addResourceUpdateMediator(mediator);
0182 }
0183 
0184 bool KoCanvasResourceProvider::hasResourceUpdateMediator(int key)
0185 {
0186     return d->manager.hasResourceUpdateMediator(key);
0187 }
0188 
0189 void KoCanvasResourceProvider::removeResourceUpdateMediator(int key)
0190 {
0191     d->manager.removeResourceUpdateMediator(key);
0192 }
0193 
0194 void KoCanvasResourceProvider::addActiveCanvasResourceDependency(KoActiveCanvasResourceDependencySP dep)
0195 {
0196     d->manager.addActiveCanvasResourceDependency(dep);
0197 }
0198 
0199 bool KoCanvasResourceProvider::hasActiveCanvasResourceDependency(int sourceKey, int targetKey) const
0200 {
0201     return d->manager.hasActiveCanvasResourceDependency(sourceKey, targetKey);
0202 }
0203 
0204 void KoCanvasResourceProvider::removeActiveCanvasResourceDependency(int sourceKey, int targetKey)
0205 {
0206     d->manager.removeActiveCanvasResourceDependency(sourceKey, targetKey);
0207 }
0208 
0209 KoCanvasResourcesInterfaceSP KoCanvasResourceProvider::canvasResourcesInterface() const
0210 {
0211     return d->interfaceWrapper;
0212 }