Krita Source Code Documentation
Loading...
Searching...
No Matches
offsetimage.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2013 Lukáš Tvrdý <lukast.dev@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#include "offsetimage.h"
8
9#include <cmath>
10
11#include <klocalizedstring.h>
12#include <kis_debug.h>
13#include <kpluginfactory.h>
14#include <kis_icon.h>
15#include <kis_image.h>
16#include <kis_types.h>
17#include <KisViewManager.h>
18#include <kis_image_manager.h>
19#include <kis_node_manager.h>
21#include <kis_group_layer.h>
24#include <kis_action.h>
25#include <kis_selection.h>
26
27#include "dlg_offsetimage.h"
29
30K_PLUGIN_FACTORY_WITH_JSON(OffsetImageFactory, "kritaoffsetimage.json", registerPlugin<OffsetImage>();)
31
32OffsetImage::OffsetImage(QObject *parent, const QVariantList &)
33 : KisActionPlugin(parent)
34{
35 KisAction *action = createAction("offsetimage");
36 connect(action, SIGNAL(triggered()), this, SLOT(slotOffsetImage()));
37
38 action = createAction("offsetlayer");
39 connect(action, SIGNAL(triggered()), this, SLOT(slotOffsetLayer()));
40}
41
42
46
47
49{
50 KisImageSP image = viewManager()->image().toStrongRef();
51 if (image) {
52
53 DlgOffsetImage * dlgOffsetImage = new DlgOffsetImage(viewManager()->mainWindowAsQWidget(), "OffsetImage", offsetWrapRect().size());
54 Q_CHECK_PTR(dlgOffsetImage);
55
56 KUndo2MagicString actionName = kundo2_i18n("Offset Image");
57 dlgOffsetImage->setCaption(i18nc("@title:window", "Offset Image"));
58
59 if (dlgOffsetImage->exec() == QDialog::Accepted) {
60 QPoint offsetPoint = QPoint(dlgOffsetImage->offsetX(), dlgOffsetImage->offsetY());
61 offsetImpl(actionName, image->root(), offsetPoint);
62 }
63 delete dlgOffsetImage;
64 }
65 else
66 {
67 dbgKrita << "KisImage not available";
68 }
69}
70
71
73{
74 KisImageSP image = viewManager()->image().toStrongRef();
75 if (image) {
76
77 DlgOffsetImage * dlgOffsetImage = new DlgOffsetImage(viewManager()->mainWindowAsQWidget(), "OffsetLayer", offsetWrapRect().size());
78 Q_CHECK_PTR(dlgOffsetImage);
79
80 KisNodeList nodes = viewManager()->nodeManager()->selectedNodes();
81 dlgOffsetImage->setCaption(i18ncp("@title:window", "Offset Layer", "Offset %1 Layers", nodes.size()));
82
83 if (dlgOffsetImage->exec() == QDialog::Accepted) {
84 QPoint offsetPoint = QPoint(dlgOffsetImage->offsetX(), dlgOffsetImage->offsetY());
85 KUndo2MagicString actionName = kundo2_i18np("Offset Layer", "Offset %1 Layers", nodes.size());
86 offsetImpl(actionName, nodes, offsetPoint);
87 }
88 delete dlgOffsetImage;
89 }
90 else
91 {
92 dbgKrita << "KisImage not available";
93 }
94}
95
96void OffsetImage::offsetImpl(const KUndo2MagicString& actionName, KisNodeSP node, const QPoint& offsetPoint)
97{
98 offsetImpl(actionName, KisNodeList{node}, offsetPoint);
99}
100void OffsetImage::offsetImpl(const KUndo2MagicString& actionName, KisNodeList nodes, const QPoint& offsetPoint)
101{
102 KisImageSignalVector emitSignals;
103
104 KisProcessingApplicator applicator(viewManager()->image(), nodes,
106 emitSignals, actionName);
107
108 QRect rc = offsetWrapRect();
109 KisProcessingVisitorSP visitor = new KisOffsetProcessingVisitor(offsetPoint, rc);
110 applicator.applyVisitor(visitor, KisStrokeJobData::CONCURRENT);
111 applicator.end();
112}
113
114
115
117{
118 QRect offsetWrapRect;
119 if (viewManager()->selection())
120 {
121 offsetWrapRect = viewManager()->selection()->selectedExactRect();
122 }
123 else
124 {
125 KisImageSP image = viewManager()->image().toStrongRef();
126 if (image) {
127 offsetWrapRect = image->bounds();
128 }
129 }
130 return offsetWrapRect;
131}
132
133
134
135#include "offsetimage.moc"
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
int offsetX() const
int offsetY() const
QPointer< KisViewManager > viewManager() const
QRect bounds() const override
void applyVisitor(KisProcessingVisitorSP visitor, KisStrokeJobData::Sequentiality sequentiality=KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::Exclusivity exclusivity=KisStrokeJobData::NORMAL)
virtual void setCaption(const QString &caption)
Definition KoDialog.cpp:498
QRect offsetWrapRect()
OffsetImage(QObject *parent, const QVariantList &)
void slotOffsetLayer()
~OffsetImage() override
void offsetImpl(const KUndo2MagicString &actionName, KisNodeSP node, const QPoint &offsetPoint)
void slotOffsetImage()
K_PLUGIN_FACTORY_WITH_JSON(KritaASCCDLFactory, "kritaasccdl.json", registerPlugin< KritaASCCDL >();) KritaASCCDL
#define dbgKrita
Definition kis_debug.h:45
KUndo2MagicString kundo2_i18n(const char *text)
KUndo2MagicString kundo2_i18np(const char *sing, const char *plur, const A1 &a1)