File indexing completed on 2024-05-12 15:56:38
0001 /* This file is part of the KDE project 0002 0003 SPDX-FileCopyrightText: 2006 Thorsten Zachmann <zachmann@kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include <QRectF> 0009 #include <QPointer> 0010 #include <QDebug> 0011 0012 #include "KoCanvasBase.h" 0013 #include "KoCanvasResourceProvider.h" 0014 #include "KoShapeController.h" 0015 #include "KoCanvasController.h" 0016 #include "KoViewConverter.h" 0017 #include "KoSnapGuide.h" 0018 #include "KoShapeManager.h" 0019 #include "KoToolProxy.h" 0020 #include "KoSelection.h" 0021 #include "KoSelectedShapesProxy.h" 0022 0023 class Q_DECL_HIDDEN KoCanvasBase::Private 0024 { 0025 public: 0026 Private() 0027 : shapeController(0), 0028 resourceManager(0), 0029 isResourceManagerShared(false), 0030 controller(0), 0031 snapGuide(0) 0032 { 0033 } 0034 0035 ~Private() { 0036 delete shapeController; 0037 if (!isResourceManagerShared) { 0038 delete resourceManager; 0039 } 0040 delete snapGuide; 0041 } 0042 QPointer<KoShapeController> shapeController; 0043 QPointer<KoCanvasResourceProvider> resourceManager; 0044 bool isResourceManagerShared; 0045 KoCanvasController *controller; 0046 KoSnapGuide *snapGuide; 0047 }; 0048 0049 KoCanvasBase::KoCanvasBase(KoShapeControllerBase *shapeController, KoCanvasResourceProvider *sharedResourceManager) 0050 : d(new Private()) 0051 { 0052 d->resourceManager = sharedResourceManager ? 0053 sharedResourceManager : new KoCanvasResourceProvider(); 0054 d->isResourceManagerShared = sharedResourceManager; 0055 0056 d->shapeController = new KoShapeController(this, shapeController); 0057 d->snapGuide = new KoSnapGuide(this); 0058 } 0059 0060 KoCanvasBase::~KoCanvasBase() 0061 { 0062 d->shapeController->reset(); 0063 delete d; 0064 } 0065 0066 QPointF KoCanvasBase::viewToDocument(const QPointF &viewPoint) const 0067 { 0068 return viewConverter()->viewToDocument(viewPoint - documentOrigin()); 0069 } 0070 0071 KoShapeController *KoCanvasBase::shapeController() const 0072 { 0073 if (d->shapeController) 0074 return d->shapeController; 0075 else 0076 return 0; 0077 } 0078 0079 void KoCanvasBase::disconnectCanvasObserver(QObject *object) 0080 { 0081 if (shapeManager()) shapeManager()->selection()->disconnect(object); 0082 if (resourceManager()) resourceManager()->disconnect(object); 0083 if (shapeManager()) shapeManager()->disconnect(object); 0084 if (toolProxy()) toolProxy()->disconnect(object); 0085 if (selectedShapesProxy()) selectedShapesProxy()->disconnect(object); 0086 } 0087 0088 0089 KoCanvasResourceProvider *KoCanvasBase::resourceManager() const 0090 { 0091 return d->resourceManager; 0092 } 0093 0094 void KoCanvasBase::ensureVisible(const QRectF &rect) 0095 { 0096 if (d->controller && d->controller->canvas()) 0097 d->controller->ensureVisible( 0098 d->controller->canvas()->viewConverter()->documentToView(rect)); 0099 } 0100 0101 void KoCanvasBase::setCanvasController(KoCanvasController *controller) 0102 { 0103 d->controller = controller; 0104 } 0105 0106 KoCanvasController *KoCanvasBase::canvasController() const 0107 { 0108 return d->controller; 0109 } 0110 0111 void KoCanvasBase::clipToDocument(const KoShape *, QPointF &) const 0112 { 0113 } 0114 0115 KoSnapGuide * KoCanvasBase::snapGuide() const 0116 { 0117 return d->snapGuide; 0118 }