File indexing completed on 2025-02-23 04:08:59
0001 /* 0002 * This file is part of Krita 0003 * 0004 * SPDX-FileCopyrightText: 2006 Cyrille Berger <cberger@cberger.net> 0005 * 0006 * SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #include "kis_grid_manager.h" 0010 0011 #include <QAction> 0012 #include <ktoggleaction.h> 0013 #include <kactioncollection.h> 0014 #include <klocalizedstring.h> 0015 0016 #include <kis_icon.h> 0017 0018 #include "kis_canvas2.h" 0019 #include "kis_coordinates_converter.h" 0020 #include "kis_config.h" 0021 #include "kis_grid_decoration.h" 0022 #include "kis_image.h" 0023 #include "KisViewManager.h" 0024 #include "KisDocument.h" 0025 #include "KisView.h" 0026 #include "kis_grid_config.h" 0027 #include "kis_signals_blocker.h" 0028 #include <kis_signal_auto_connection.h> 0029 0030 struct KisGridManager::Private 0031 { 0032 KisAction *toggleGrid; 0033 KisAction* toggleSnapToGrid; 0034 0035 QPointer<KisView> imageView; 0036 KisGridDecoration* gridDecoration; 0037 0038 bool blockModifiedSignal; 0039 KisSignalAutoConnectionsStore connections; 0040 }; 0041 0042 KisGridManager::KisGridManager(KisViewManager * parent) 0043 : QObject(parent) 0044 , m_d(new Private) 0045 { 0046 0047 } 0048 0049 KisGridManager::~KisGridManager() 0050 { 0051 0052 } 0053 0054 void KisGridManager::setGridConfig(const KisGridConfig &config) 0055 { 0056 setGridConfigImpl(config, true); 0057 } 0058 0059 void KisGridManager::setGridConfigImpl(const KisGridConfig &config, bool /*emitModified*/) 0060 { 0061 if (!m_d->imageView) return; 0062 0063 config.saveStaticData(); 0064 m_d->imageView->document()->setGridConfig(config); 0065 0066 m_d->gridDecoration->setGridConfig(config); 0067 m_d->gridDecoration->setVisible(config.showGrid()); 0068 0069 m_d->toggleGrid->setChecked(config.showGrid()); 0070 m_d->toggleSnapToGrid->setChecked(config.snapToGrid()); 0071 } 0072 0073 void KisGridManager::setup(KisActionManager* actionManager) 0074 { 0075 m_d->toggleGrid = actionManager->createAction("view_grid"); 0076 connect(m_d->toggleGrid, SIGNAL(toggled(bool)), this, SLOT(slotChangeGridVisibilityTriggered(bool))); 0077 0078 m_d->toggleSnapToGrid = actionManager->createAction("view_snap_to_grid"); 0079 connect(m_d->toggleSnapToGrid, SIGNAL(toggled(bool)), this, SLOT(slotSnapToGridTriggered(bool))); 0080 } 0081 0082 void KisGridManager::updateGUI() 0083 { 0084 0085 } 0086 0087 void KisGridManager::setView(QPointer<KisView> imageView) 0088 { 0089 if (m_d->imageView) { 0090 m_d->connections.clear(); 0091 m_d->gridDecoration = 0; 0092 } 0093 0094 m_d->imageView = imageView; 0095 0096 if (imageView) { 0097 if (!imageView->document()) { 0098 return; 0099 } 0100 0101 m_d->gridDecoration = qobject_cast<KisGridDecoration*>(imageView->canvasBase()->decoration("grid").data()); 0102 if (!m_d->gridDecoration) { 0103 m_d->gridDecoration = new KisGridDecoration(imageView); 0104 imageView->canvasBase()->addDecoration(m_d->gridDecoration); 0105 } 0106 m_d->connections.addConnection(imageView->document(), SIGNAL(sigGridConfigChanged(KisGridConfig)), 0107 this, SIGNAL(sigRequestUpdateGridConfig(KisGridConfig))); 0108 0109 KisGridConfig config = imageView->document()->gridConfig(); 0110 setGridConfigImpl(config, false); 0111 0112 KisSignalsBlocker blocker(m_d->toggleGrid, m_d->toggleSnapToGrid); 0113 Q_UNUSED(blocker); 0114 m_d->toggleGrid->setChecked(config.showGrid()); 0115 m_d->toggleSnapToGrid->setChecked(config.snapToGrid()); 0116 } 0117 } 0118 0119 void KisGridManager::slotChangeGridVisibilityTriggered(bool value) 0120 { 0121 if (!m_d->imageView) return; 0122 0123 KisGridConfig config = m_d->imageView->document()->gridConfig(); 0124 config.setShowGrid(value); 0125 0126 setGridConfig(config); 0127 emit sigRequestUpdateGridConfig(config); 0128 } 0129 0130 void KisGridManager::slotSnapToGridTriggered(bool value) 0131 { 0132 if (!m_d->imageView) return; 0133 0134 KisGridConfig config = m_d->imageView->document()->gridConfig(); 0135 config.setSnapToGrid(value); 0136 0137 setGridConfig(config); 0138 emit sigRequestUpdateGridConfig(config); 0139 } 0140