diff --git a/libs/image/kis_types.h b/libs/image/kis_types.h --- a/libs/image/kis_types.h +++ b/libs/image/kis_types.h @@ -298,6 +298,9 @@ typedef QSharedPointer KisLayerCompositionSP; typedef QWeakPointer KisLayerCompositionWSP; +class KisMirrorAxis; +typedef KisSharedPtr KisMirrorAxisSP; +typedef KisWeakSharedPtr KisMirrorAxisWSP; #include diff --git a/libs/ui/canvas/kis_mirror_axis.h b/libs/ui/canvas/kis_mirror_axis.h --- a/libs/ui/canvas/kis_mirror_axis.h +++ b/libs/ui/canvas/kis_mirror_axis.h @@ -20,6 +20,8 @@ #ifndef KISMIRRORAXIS_H #define KISMIRRORAXIS_H +#include + #include "kis_canvas_decoration.h" class KisView; @@ -53,7 +55,7 @@ private: class Private; - Private * const d; + const QScopedPointer d; private Q_SLOTS: void mirrorModeChanged(); diff --git a/libs/ui/canvas/kis_mirror_axis.cpp b/libs/ui/canvas/kis_mirror_axis.cpp --- a/libs/ui/canvas/kis_mirror_axis.cpp +++ b/libs/ui/canvas/kis_mirror_axis.cpp @@ -112,7 +112,6 @@ KisMirrorAxis::~KisMirrorAxis() { - delete d; } float KisMirrorAxis::handleSize() const @@ -124,7 +123,7 @@ { if(d->config.handleSize() != newSize) { d->config.setHandleSize(newSize); - d->horizontalIcon = KisIconUtils::loadIcon("symmetry-horyzontal").pixmap(d->config.handleSize(), QIcon::Normal, QIcon::On); + d->horizontalIcon = KisIconUtils::loadIcon("symmetry-horizontal").pixmap(d->config.handleSize(), QIcon::Normal, QIcon::On); d->verticalIcon = KisIconUtils::loadIcon("symmetry-vertical").pixmap(d->config.handleSize(), QIcon::Normal, QIcon::On); d->horizontalHandleIcon = KisIconUtils::loadIcon("transform-move").pixmap(d->config.handleSize(), QIcon::Normal, QIcon::On); d->verticalHandleIcon = KisIconUtils::loadIcon("transform-move").pixmap(d->config.handleSize(), QIcon::Normal, QIcon::On); diff --git a/libs/ui/kis_mirror_manager.h b/libs/ui/kis_mirror_manager.h --- a/libs/ui/kis_mirror_manager.h +++ b/libs/ui/kis_mirror_manager.h @@ -22,7 +22,7 @@ #include #include -#include +#include #include "KisView.h" @@ -40,21 +40,18 @@ ~KisMirrorManager() override; void setup(KActionCollection* collection); - void setView(QPointer imageView); private Q_SLOTS: void updateAction(); void slotDocumentConfigChanged(); void slotMirrorAxisConfigChanged(); private: - class Private; - const QScopedPointer d; - QPointer m_imageView; QAction *m_mirrorCanvas; void setDecorationConfig(); + KisMirrorAxisSP decoration() const; }; -#endif // KIS__MANAGER_H +#endif // KIS_MIRROR_MANAGER_H diff --git a/libs/ui/kis_mirror_manager.cpp b/libs/ui/kis_mirror_manager.cpp --- a/libs/ui/kis_mirror_manager.cpp +++ b/libs/ui/kis_mirror_manager.cpp @@ -33,19 +33,9 @@ #include #include #include - -class KisMirrorManager::Private -{ -public: - Private() - : mirrorAxisDecoration(nullptr) - {} - - KisMirrorAxis* mirrorAxisDecoration; -}; +#include KisMirrorManager::KisMirrorManager(KisViewManager* view) : QObject(view) - , d(new Private()) , m_imageView(0) { } @@ -72,26 +62,27 @@ m_mirrorCanvas->disconnect(); m_imageView->document()->disconnect(); - d->mirrorAxisDecoration->disconnect(); - d->mirrorAxisDecoration = nullptr; + KisMirrorAxisSP canvasDecoration = this->decoration(); + if (canvasDecoration) { + canvasDecoration->disconnect(); + } } m_imageView = imageView; if (m_imageView) { connect(m_mirrorCanvas, SIGNAL(toggled(bool)), dynamic_cast(m_imageView->canvasController()), SLOT(mirrorCanvas(bool))); connect(m_imageView->document(), SIGNAL(sigMirrorAxisConfigChanged()), this, SLOT(slotDocumentConfigChanged()), Qt::UniqueConnection); - KisMirrorAxis* decoration; - if (m_imageView->canvasBase() && m_imageView->canvasBase()->decoration("mirror_axis")) { - decoration = dynamic_cast(m_imageView->canvasBase()->decoration("mirror_axis").data()); - } else { - decoration = new KisMirrorAxis(m_imageView->viewManager()->canvasResourceProvider(), m_imageView); + KisMirrorAxisSP canvasDecoration = this->decoration(); + if (!canvasDecoration) { + KisMirrorAxis* decoration = new KisMirrorAxis(m_imageView->viewManager()->canvasResourceProvider(), m_imageView); connect(decoration, SIGNAL(sigConfigChanged()), this, SLOT(slotMirrorAxisConfigChanged()), Qt::UniqueConnection); m_imageView->canvasBase()->addDecoration(decoration); + } else { + connect(canvasDecoration.data(), SIGNAL(sigConfigChanged()), this, SLOT(slotMirrorAxisConfigChanged()), Qt::UniqueConnection); } - d->mirrorAxisDecoration = decoration; setDecorationConfig(); } @@ -119,14 +110,31 @@ { if (m_imageView && m_imageView->document()) { KisSignalsBlocker blocker(m_imageView->document()); - m_imageView->document()->setMirrorAxisConfig(d->mirrorAxisDecoration->mirrorAxisConfig()); + + KisMirrorAxisSP canvasDecoration = this->decoration(); + if (canvasDecoration) { + m_imageView->document()->setMirrorAxisConfig(canvasDecoration->mirrorAxisConfig()); + } + } +} + +KisMirrorAxisSP KisMirrorManager::decoration() const +{ + if (m_imageView) { + return qobject_cast(m_imageView->canvasBase()->decoration("mirror_axis").data()); + } else { + return 0; } } void KisMirrorManager::setDecorationConfig() { if (m_imageView && m_imageView->document()) { KisMirrorAxisConfig config = m_imageView->document()->mirrorAxisConfig(); - d->mirrorAxisDecoration->setMirrorAxisConfig(config); + + KisMirrorAxisSP canvasDecoration = this->decoration(); + if (canvasDecoration) { + canvasDecoration->setMirrorAxisConfig(config); + } } }