Krita Source Code Documentation
Loading...
Searching...
No Matches
ImageSize Class Reference

#include <imagesize.h>

+ Inheritance diagram for ImageSize:

Public Member Functions

 ImageSize (QObject *parent)
 
 ~ImageSize () override
 
- Public Member Functions inherited from KisActionPlugin
 KisActionPlugin (QObject *parent=0)
 
 ~KisActionPlugin () override
 

Private Slots

void slotCanvasSize ()
 
void slotImageSize ()
 
void slotLayerSize ()
 
void slotScaleAllLayers ()
 
void slotSelectionScale ()
 

Private Member Functions

void scaleLayerImpl (KisNodeSP rootNode)
 
void scaleLayersImpl (KisNodeList nodes)
 

Additional Inherited Members

- Protected Member Functions inherited from KisActionPlugin
void addAction (const QString &name, KisAction *action)
 
void addOperation (KisOperation *operation)
 
void addUIFactory (KisOperationUIFactory *factory)
 
KisActioncreateAction (const QString &name)
 
QPointer< KisViewManagerviewManager () const
 

Detailed Description

Definition at line 16 of file imagesize.h.

Constructor & Destructor Documentation

◆ ImageSize()

ImageSize::ImageSize ( QObject * parent)

Definition at line 34 of file imagesize.cc.

35 : KisActionPlugin(parent)
36{
37
38 KisAction *action = createAction("imagesize");
39 connect(action, SIGNAL(triggered()), this, SLOT(slotImageSize()));
40
41 action = createAction("canvassize");
42 connect(action, SIGNAL(triggered()), this, SLOT(slotCanvasSize()));
43
44 action = createAction("layersize");
45 connect(action, SIGNAL(triggered()), this, SLOT(slotLayerSize()));
46
47 action = createAction("scaleAllLayers");
48 connect(action, SIGNAL(triggered()), this, SLOT(slotScaleAllLayers()));
49
50 action = createAction("selectionscale");
51 connect(action, SIGNAL(triggered()), this, SLOT(slotSelectionScale()));
52}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void slotLayerSize()
Definition imagesize.cc:141
void slotSelectionScale()
Definition imagesize.cc:154
void slotCanvasSize()
Definition imagesize.cc:78
void slotScaleAllLayers()
Definition imagesize.cc:146
void slotImageSize()
Definition imagesize.cc:58
KisAction * createAction(const QString &name)
KisActionPlugin(QObject *parent=0)

References connect(), KisActionPlugin::createAction(), slotCanvasSize(), slotImageSize(), slotLayerSize(), slotScaleAllLayers(), and slotSelectionScale().

◆ ~ImageSize()

ImageSize::~ImageSize ( )
override

Definition at line 54 of file imagesize.cc.

55{
56}

Member Function Documentation

◆ scaleLayerImpl()

void ImageSize::scaleLayerImpl ( KisNodeSP rootNode)
private

Definition at line 99 of file imagesize.cc.

100{
101 scaleLayersImpl(KisNodeList{rootNode});
102}
void scaleLayersImpl(KisNodeList nodes)
Definition imagesize.cc:103

References scaleLayersImpl().

◆ scaleLayersImpl()

void ImageSize::scaleLayersImpl ( KisNodeList nodes)
private

Definition at line 103 of file imagesize.cc.

104{
105 KisImageWSP image = viewManager()->image();
106 if (!image) return;
107
108 if(!viewManager()->blockUntilOperationsFinished(image)) return;
109
110 QRect bounds;
111 KisSelectionSP selection = viewManager()->selection();
112
113 if (selection) {
114 bounds = selection->selectedExactRect();
115 }
116 else {
117 Q_FOREACH(KisNodeSP node, nodes) {
118 KisPaintDeviceSP dev = node->projection();
120 bounds = bounds.united(dev->exactBounds());
121 }
122 }
123
124 DlgLayerSize * dlgLayerSize = new DlgLayerSize(viewManager()->mainWindowAsQWidget(), "LayerSize", bounds.width(), bounds.height(), image->yRes());
125 Q_CHECK_PTR(dlgLayerSize);
126 dlgLayerSize->setCaption(i18np("Resize Layer", "Resize %1 Layers", nodes.size()));
127
128 if (dlgLayerSize->exec() == QDialog::Accepted) {
129 const QSize desiredSize(dlgLayerSize->desiredWidth(), dlgLayerSize->desiredHeight());
130
131 viewManager()->image()->scaleNodes(nodes,
132 QRectF(bounds).center(),
133 qreal(desiredSize.width()) / bounds.width(),
134 qreal(desiredSize.height()) / bounds.height(),
135 dlgLayerSize->filterType(),
136 selection);
137 }
138 delete dlgLayerSize;
139}
qint32 desiredHeight()
KisFilterStrategy * filterType()
qint32 desiredWidth()
QPointer< KisViewManager > viewManager() const
double yRes() const
QRect exactBounds() const
virtual void setCaption(const QString &caption)
Definition KoDialog.cpp:498
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
#define bounds(x, a, b)
virtual KisPaintDeviceSP projection() const =0
QRect selectedExactRect() const
Slow, but exact way of determining the rectangle that encloses the selection.

References bounds, DlgLayerSize::desiredHeight(), DlgLayerSize::desiredWidth(), KisPaintDevice::exactBounds(), DlgLayerSize::filterType(), KIS_SAFE_ASSERT_RECOVER_RETURN, KisBaseNode::projection(), KisSelection::selectedExactRect(), KoDialog::setCaption(), KisActionPlugin::viewManager(), and KisImage::yRes().

◆ slotCanvasSize

void ImageSize::slotCanvasSize ( )
privateslot

Definition at line 78 of file imagesize.cc.

79{
80 KisImageWSP image = viewManager()->image();
81 if (!image) return;
82
83 if(!viewManager()->blockUntilOperationsFinished(image)) return;
84
85 DlgCanvasSize * dlgCanvasSize = new DlgCanvasSize(viewManager()->mainWindowAsQWidget(), image->width(), image->height(), image->yRes());
86 Q_CHECK_PTR(dlgCanvasSize);
87
88 if (dlgCanvasSize->exec() == QDialog::Accepted) {
89 qint32 width = dlgCanvasSize->width();
90 qint32 height = dlgCanvasSize->height();
91 qint32 xOffset = dlgCanvasSize->xOffset();
92 qint32 yOffset = dlgCanvasSize->yOffset();
93
94 viewManager()->imageManager()->resizeCurrentImage(width, height, xOffset, yOffset);
95 }
96 delete dlgCanvasSize;
97}
qint32 width() const
qint32 height() const

References DlgCanvasSize::height(), KisImage::height(), KisActionPlugin::viewManager(), DlgCanvasSize::width(), KisImage::width(), DlgCanvasSize::xOffset(), DlgCanvasSize::yOffset(), and KisImage::yRes().

◆ slotImageSize

void ImageSize::slotImageSize ( )
privateslot

Definition at line 58 of file imagesize.cc.

59{
60 KisImageSP image = viewManager()->image().toStrongRef();
61 if (!image) return;
62
63 if (!viewManager()->blockUntilOperationsFinished(image)) return;
64
65 DlgImageSize * dlgImageSize = new DlgImageSize(viewManager()->mainWindowAsQWidget(), image->width(), image->height(), image->yRes());
66 Q_CHECK_PTR(dlgImageSize);
67 dlgImageSize->setObjectName("ImageSize");
68
69 if (dlgImageSize->exec() == QDialog::Accepted) {
70 const QSize desiredSize(dlgImageSize->desiredWidth(), dlgImageSize->desiredHeight());
71 double res = dlgImageSize->desiredResolution();
72 viewManager()->imageManager()->scaleCurrentImage(desiredSize, res, res, dlgImageSize->filterType());
73 }
74
75 delete dlgImageSize;
76}
KisFilterStrategy * filterType()
qint32 desiredWidth()
double desiredResolution()
qint32 desiredHeight()

References DlgImageSize::desiredHeight(), DlgImageSize::desiredResolution(), DlgImageSize::desiredWidth(), DlgImageSize::filterType(), KisImage::height(), KisActionPlugin::viewManager(), KisImage::width(), and KisImage::yRes().

◆ slotLayerSize

void ImageSize::slotLayerSize ( )
privateslot

Definition at line 141 of file imagesize.cc.

142{
143 scaleLayersImpl(viewManager()->nodeManager()->selectedNodes());
144}

References scaleLayersImpl(), and KisActionPlugin::viewManager().

◆ slotScaleAllLayers

void ImageSize::slotScaleAllLayers ( )
privateslot

Definition at line 146 of file imagesize.cc.

147{
148 KisImageWSP image = viewManager()->image();
149 if (!image) return;
150
151 scaleLayerImpl(image->root());
152}
void scaleLayerImpl(KisNodeSP rootNode)
Definition imagesize.cc:99

References KisNodeFacade::root, scaleLayerImpl(), and KisActionPlugin::viewManager().

◆ slotSelectionScale

void ImageSize::slotSelectionScale ( )
privateslot

Definition at line 154 of file imagesize.cc.

155{
156 KisImageSP image = viewManager()->image();
157 if (!image) return;
158
159 if(!viewManager()->blockUntilOperationsFinished(image)) return;
160
161 KisLayerSP layer = viewManager()->activeLayer();
162
163 KIS_ASSERT_RECOVER_RETURN(image && layer);
164
165 KisSelectionMaskSP selectionMask = layer->selectionMask();
166 if (!selectionMask) {
167 selectionMask = image->rootLayer()->selectionMask();
168 }
169
170 KIS_ASSERT_RECOVER_RETURN(selectionMask);
171
172 QRect rc = selectionMask->selection()->selectedExactRect();
173 DlgLayerSize * dlgSize = new DlgLayerSize(viewManager()->mainWindowAsQWidget(), "SelectionScale", rc.width(), rc.height(), image->yRes());
174 dlgSize->setCaption(i18n("Scale Selection"));
175
176 if (dlgSize->exec() == QDialog::Accepted) {
177 qint32 w = dlgSize->desiredWidth();
178 qint32 h = dlgSize->desiredHeight();
179
180 image->scaleNode(selectionMask,
181 QRectF(rc).center(),
182 qreal(w) / rc.width(),
183 qreal(h) / rc.height(),
184 dlgSize->filterType(), 0);
185 }
186 delete dlgSize;
187}
void scaleNode(KisNodeSP node, const QPointF &center, qreal scaleX, qreal scaleY, KisFilterStrategy *filterStrategy, KisSelectionSP selection)
start asynchronous operation on scaling a subtree of nodes starting at node
KisGroupLayerSP rootLayer() const
#define KIS_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:75
virtual KisSelectionMaskSP selectionMask() const
Definition kis_layer.cc:498
KisSelectionSP selection
Definition kis_mask.cc:44

References DlgLayerSize::desiredHeight(), DlgLayerSize::desiredWidth(), DlgLayerSize::filterType(), KIS_ASSERT_RECOVER_RETURN, KisImage::rootLayer(), KisImage::scaleNode(), KisSelection::selectedExactRect(), KisMask::selection, KisLayer::selectionMask(), KoDialog::setCaption(), KisActionPlugin::viewManager(), and KisImage::yRes().


The documentation for this class was generated from the following files: