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 }