Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_grid_manager.cpp
Go to the documentation of this file.
1/*
2 * This file is part of Krita
3 *
4 * SPDX-FileCopyrightText: 2006 Cyrille Berger <cberger@cberger.net>
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8
9#include "kis_grid_manager.h"
10
11#include <QAction>
12#include <ktoggleaction.h>
13#include <kactioncollection.h>
14#include <klocalizedstring.h>
15
16#include <kis_icon.h>
17
18#include "kis_canvas2.h"
20#include "kis_config.h"
21#include "kis_grid_decoration.h"
22#include "kis_image.h"
23#include "KisViewManager.h"
24#include "KisDocument.h"
25#include "KisView.h"
26#include "kis_grid_config.h"
27#include "kis_signals_blocker.h"
29
41
43 : QObject(parent)
44 , m_d(new Private)
45{
46
47}
48
53
55{
56 setGridConfigImpl(config, true);
57}
58
59void KisGridManager::setGridConfigImpl(const KisGridConfig &config, bool /*emitModified*/)
60{
61 if (!m_d->imageView) return;
62
63 config.saveStaticData();
64 m_d->imageView->document()->setGridConfig(config);
65
66 m_d->gridDecoration->setGridConfig(config);
67 m_d->gridDecoration->setVisible(config.showGrid());
68
69 m_d->toggleGrid->setChecked(config.showGrid());
70 m_d->toggleSnapToGrid->setChecked(config.snapToGrid());
71}
72
74{
75 m_d->toggleGrid = actionManager->createAction("view_grid");
76 connect(m_d->toggleGrid, SIGNAL(toggled(bool)), this, SLOT(slotChangeGridVisibilityTriggered(bool)));
77
78 m_d->toggleSnapToGrid = actionManager->createAction("view_snap_to_grid");
79 connect(m_d->toggleSnapToGrid, SIGNAL(toggled(bool)), this, SLOT(slotSnapToGridTriggered(bool)));
80}
81
83{
84
85}
86
88{
89 if (m_d->imageView) {
90 m_d->connections.clear();
91 m_d->gridDecoration = 0;
92 }
93
94 m_d->imageView = imageView;
95
96 if (imageView) {
97 if (!imageView->document()) {
98 return;
99 }
100
101 m_d->gridDecoration = qobject_cast<KisGridDecoration*>(imageView->canvasBase()->decoration("grid").data());
102 if (!m_d->gridDecoration) {
103 m_d->gridDecoration = new KisGridDecoration(imageView);
104 imageView->canvasBase()->addDecoration(m_d->gridDecoration);
105 }
106 m_d->connections.addConnection(imageView->document(), SIGNAL(sigGridConfigChanged(KisGridConfig)),
108
109 KisGridConfig config = imageView->document()->gridConfig();
110 setGridConfigImpl(config, false);
111
112 KisSignalsBlocker blocker(m_d->toggleGrid, m_d->toggleSnapToGrid);
113 Q_UNUSED(blocker);
114 m_d->toggleGrid->setChecked(config.showGrid());
115 m_d->toggleSnapToGrid->setChecked(config.snapToGrid());
116 }
117}
118
120{
121 if (!m_d->imageView) return;
122
123 KisGridConfig config = m_d->imageView->document()->gridConfig();
124 config.setShowGrid(value);
125
126 setGridConfig(config);
127 Q_EMIT sigRequestUpdateGridConfig(config);
128}
129
131{
132 if (!m_d->imageView) return;
133
134 KisGridConfig config = m_d->imageView->document()->gridConfig();
135 config.setSnapToGrid(value);
136
137 setGridConfig(config);
138 Q_EMIT sigRequestUpdateGridConfig(config);
139}
140
float value(const T *src, size_t ch)
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
A KisActionManager class keeps track of KisActions. These actions are always associated with the GUI....
KisAction * createAction(const QString &name)
void setSnapToGrid(bool value)
void saveStaticData() const
void setShowGrid(bool value)
bool snapToGrid() const
bool showGrid() const
void setGridConfigImpl(const KisGridConfig &config, bool emitModified)
void slotChangeGridVisibilityTriggered(bool value)
~KisGridManager() override
KisGridManager(KisViewManager *parent)
void sigRequestUpdateGridConfig(const KisGridConfig &config)
QScopedPointer< Private > m_d
void slotSnapToGridTriggered(bool value)
void setGridConfig(const KisGridConfig &config)
void setView(QPointer< KisView >imageView)
void setup(KisActionManager *actionManager)
QPointer< KisView > imageView
KisSignalAutoConnectionsStore connections
KisGridDecoration * gridDecoration