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 }