File indexing completed on 2024-05-19 04:24:47

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 void KoCanvasResourceProvider::setHandleRadius(int handleSize)
0135 {
0136     // do not allow arbitrary small handles
0137     if (handleSize < 5)
0138         handleSize = 5;
0139     setResource(KoCanvasResource::HandleRadius, QVariant(handleSize));
0140 }
0141 
0142 int KoCanvasResourceProvider::handleRadius() const
0143 {
0144     if (hasResource(KoCanvasResource::HandleRadius))
0145         return intResource(KoCanvasResource::HandleRadius);
0146     return 5; // default value (and is used just about everywhere)
0147 }
0148 
0149 void KoCanvasResourceProvider::setDecorationThickness(int decorationThickness)
0150 {
0151     if (decorationThickness < 1)
0152         decorationThickness = 1;
0153     setResource(KoCanvasResource::DecorationThickness, QVariant(decorationThickness));
0154 }
0155 
0156 int KoCanvasResourceProvider::decorationThickness() const
0157 {
0158     if (hasResource(KoCanvasResource::DecorationThickness))
0159         return intResource(KoCanvasResource::DecorationThickness);
0160     return 1;
0161 }
0162 
0163 bool KoCanvasResourceProvider::boolResource(int key) const
0164 {
0165     return d->manager.boolResource(key);
0166 }
0167 
0168 int KoCanvasResourceProvider::intResource(int key) const
0169 {
0170     return d->manager.intResource(key);
0171 }
0172 
0173 QString KoCanvasResourceProvider::stringResource(int key) const
0174 {
0175     return d->manager.stringResource(key);
0176 }
0177 
0178 QSizeF KoCanvasResourceProvider::sizeResource(int key) const
0179 {
0180     return d->manager.sizeResource(key);
0181 }
0182 
0183 bool KoCanvasResourceProvider::hasResource(int key) const
0184 {
0185     return d->manager.hasResource(key);
0186 }
0187 
0188 void KoCanvasResourceProvider::clearResource(int key)
0189 {
0190     d->manager.clearResource(key);
0191 }
0192 
0193 void KoCanvasResourceProvider::addDerivedResourceConverter(KoDerivedResourceConverterSP converter)
0194 {
0195     d->manager.addDerivedResourceConverter(converter);
0196 }
0197 
0198 bool KoCanvasResourceProvider::hasDerivedResourceConverter(int key)
0199 {
0200     return d->manager.hasDerivedResourceConverter(key);
0201 }
0202 
0203 void KoCanvasResourceProvider::removeDerivedResourceConverter(int key)
0204 {
0205     d->manager.removeDerivedResourceConverter(key);
0206 }
0207 
0208 void KoCanvasResourceProvider::addResourceUpdateMediator(KoResourceUpdateMediatorSP mediator)
0209 {
0210     d->manager.addResourceUpdateMediator(mediator);
0211 }
0212 
0213 bool KoCanvasResourceProvider::hasResourceUpdateMediator(int key)
0214 {
0215     return d->manager.hasResourceUpdateMediator(key);
0216 }
0217 
0218 void KoCanvasResourceProvider::removeResourceUpdateMediator(int key)
0219 {
0220     d->manager.removeResourceUpdateMediator(key);
0221 }
0222 
0223 void KoCanvasResourceProvider::addActiveCanvasResourceDependency(KoActiveCanvasResourceDependencySP dep)
0224 {
0225     d->manager.addActiveCanvasResourceDependency(dep);
0226 }
0227 
0228 bool KoCanvasResourceProvider::hasActiveCanvasResourceDependency(int sourceKey, int targetKey) const
0229 {
0230     return d->manager.hasActiveCanvasResourceDependency(sourceKey, targetKey);
0231 }
0232 
0233 void KoCanvasResourceProvider::removeActiveCanvasResourceDependency(int sourceKey, int targetKey)
0234 {
0235     d->manager.removeActiveCanvasResourceDependency(sourceKey, targetKey);
0236 }
0237 
0238 KoCanvasResourcesInterfaceSP KoCanvasResourceProvider::canvasResourcesInterface() const
0239 {
0240     return d->interfaceWrapper;
0241 }