diff --git a/libs/libkis/Document.h b/libs/libkis/Document.h --- a/libs/libkis/Document.h +++ b/libs/libkis/Document.h @@ -274,8 +274,29 @@ void setWidth(int value); /** + * @return the left edge of the canvas in pixels. + */ + int xOffset() const; + + /** + * @brief setXOffset sets the left edge of the canvas to @param x. + */ + void setXOffset(int x); + + /** + * @return the top edge of the canvas in pixels. + */ + int yOffset() const; + + /** + * @brief setYOffset sets the top edge of the canvas to @param y. + */ + void setYOffset(int y); + + /** * @return xRes the horizontal resolution of the image in pixels per pt (there are 72 pts to an inch) */ + double xRes() const; /** @@ -355,12 +376,14 @@ void flatten(); /** - * @brief resizeImage resizes the canvas to the given width and height. + * @brief resizeImage resizes the canvas to the given left edge, top edge, width and height. * Note: This doesn't scale, use scale image for that. + * @param x the new left edge + * @param y the new top edge * @param w the new width * @param h the new height */ - void resizeImage(int w, int h); + void resizeImage(int x, int y, int w, int h); /** * @brief scaleImage diff --git a/libs/libkis/Document.cpp b/libs/libkis/Document.cpp --- a/libs/libkis/Document.cpp +++ b/libs/libkis/Document.cpp @@ -208,6 +208,7 @@ d->document->documentInfo()->load(doc); } + QString Document::fileName() const { if (!d->document) return QString::null; @@ -233,7 +234,10 @@ { if (!d->document) return; if (!d->document->image()) return; - resizeImage(d->document->image()->width(), value); + resizeImage(d->document->image()->bounds().x(), + d->document->image()->bounds().y(), + d->document->image()->width(), + value); } @@ -311,9 +315,51 @@ { if (!d->document) return; if (!d->document->image()) return; - resizeImage(value, d->document->image()->height()); + resizeImage(d->document->image()->bounds().x(), + d->document->image()->bounds().y(), + value, + d->document->image()->height()); +} + + +int Document::xOffset() const +{ + if (!d->document) return 0; + KisImageSP image = d->document->image(); + if (!image) return 0; + return image->bounds().x(); +} + +void Document::setXOffset(int x) +{ + if (!d->document) return; + if (!d->document->image()) return; + resizeImage(x, + d->document->image()->bounds().y(), + d->document->image()->width(), + d->document->image()->height()); +} + + +int Document::yOffset() const +{ + if (!d->document) return 0; + KisImageSP image = d->document->image(); + if (!image) return 0; + return image->bounds().y(); +} + +void Document::setYOffset(int y) +{ + if (!d->document) return; + if (!d->document->image()) return; + resizeImage(d->document->image()->bounds().x(), + y, + d->document->image()->width(), + d->document->image()->height()); } + double Document::xRes() const { if (!d->document) return 0.0; @@ -396,14 +442,17 @@ d->document->image()->flatten(); } -void Document::resizeImage(int w, int h) +void Document::resizeImage(int x, int y, int w, int h) { if (!d->document) return; KisImageSP image = d->document->image(); if (!image) return; - QRect rc = image->bounds(); + QRect rc; + rc.setX(x); + rc.setY(y); rc.setWidth(w); rc.setHeight(h); + image->resizeImage(rc); } diff --git a/plugins/extensions/pykrita/plugin/plugins/canvassize/canvassize.py b/plugins/extensions/pykrita/plugin/plugins/canvassize/canvassize.py --- a/plugins/extensions/pykrita/plugin/plugins/canvassize/canvassize.py +++ b/plugins/extensions/pykrita/plugin/plugins/canvassize/canvassize.py @@ -8,7 +8,7 @@ super(CanvasSizeExtension, self).__init__(parent) def setup(self): - action = krita.Krita.instance().createAction("Canvas Size") + action = krita.Krita.instance().createAction("canvas_size", "Canvas Size") action.setToolTip("Plugin to change canvas size to selected documents") action.triggered.connect(self.initialize) diff --git a/plugins/extensions/pykrita/plugin/plugins/canvassize/uicanvassize.py b/plugins/extensions/pykrita/plugin/plugins/canvassize/uicanvassize.py --- a/plugins/extensions/pykrita/plugin/plugins/canvassize/uicanvassize.py +++ b/plugins/extensions/pykrita/plugin/plugins/canvassize/uicanvassize.py @@ -2,7 +2,8 @@ from PyQt5.QtCore import Qt from PyQt5.QtWidgets import (QFormLayout, QListWidget,QAbstractItemView, QDialogButtonBox, QVBoxLayout, QFrame, - QPushButton, QAbstractScrollArea) + QPushButton, QAbstractScrollArea, QSpinBox, + QHBoxLayout, QMessageBox) import krita @@ -13,8 +14,13 @@ self.mainLayout = QVBoxLayout(self.mainDialog) self.formLayout = QFormLayout() self.documentLayout = QVBoxLayout() + self.offsetLayout = QHBoxLayout() self.refreshButton = QPushButton("Refresh") self.widgetDocuments = QListWidget() + self.widthSpinBox = QSpinBox() + self.heightSpinBox = QSpinBox() + self.xOffsetSpinBox = QSpinBox() + self.yOffsetSpinBox = QSpinBox() self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) self.kritaInstance = krita.Krita.instance() @@ -31,10 +37,21 @@ def initialize(self): self.loadDocuments() + self.widthSpinBox.setRange(1, 10000) + self.heightSpinBox.setRange(1, 10000) + self.xOffsetSpinBox.setRange(-10000, 10000) + self.yOffsetSpinBox.setRange(-10000, 10000) + self.documentLayout.addWidget(self.widgetDocuments) self.documentLayout.addWidget(self.refreshButton) + self.offsetLayout.addWidget(self.xOffsetSpinBox) + self.offsetLayout.addWidget(self.yOffsetSpinBox) + self.formLayout.addRow('Documents', self.documentLayout) + self.formLayout.addRow('Width', self.widthSpinBox) + self.formLayout.addRow('Height', self.heightSpinBox) + self.formLayout.addRow('Offset', self.offsetLayout) self.line = QFrame() self.line.setFrameShape(QFrame.HLine) @@ -62,4 +79,20 @@ self.loadDocuments() def confirmButton(self): - pass + selectedPaths = [item.text() for item in self.widgetDocuments.selectedItems()] + selectedDocuments = [document for document in self.documentsList for path in selectedPaths if path==document.fileName()] + + self.msgBox = QMessageBox(self.mainDialog) + if selectedDocuments: + self._resizeAllDocuments(selectedDocuments) + self.msgBox.setText("The selected documents has been resized.") + else: + self.msgBox.setText("Select at least one document.") + self.msgBox.exec_() + + def _resizeAllDocuments(self, documents): + for document in documents: + document.resizeImage(self.xOffsetSpinBox.value(), + self.yOffsetSpinBox.value(), + self.widthSpinBox.value(), + self.heightSpinBox.value()) diff --git a/plugins/extensions/pykrita/plugin/plugins/colorspace/colorspace.py b/plugins/extensions/pykrita/plugin/plugins/colorspace/colorspace.py --- a/plugins/extensions/pykrita/plugin/plugins/colorspace/colorspace.py +++ b/plugins/extensions/pykrita/plugin/plugins/colorspace/colorspace.py @@ -8,7 +8,7 @@ super(ColorSpaceExtension, self).__init__(parent) def setup(self): - action = krita.Krita.instance().createAction("Color Space") + action = krita.Krita.instance().createAction("color_space", "Color Space") action.setToolTip("Plugin to change color space to selected documents") action.triggered.connect(self.initialize) diff --git a/plugins/extensions/pykrita/plugin/plugins/filtermanager/filtermanager.py b/plugins/extensions/pykrita/plugin/plugins/filtermanager/filtermanager.py --- a/plugins/extensions/pykrita/plugin/plugins/filtermanager/filtermanager.py +++ b/plugins/extensions/pykrita/plugin/plugins/filtermanager/filtermanager.py @@ -8,7 +8,7 @@ super(FilterManagerExtension, self).__init__(parent) def setup(self): - action = krita.Krita.instance().createAction("Filter Manager") + action = krita.Krita.instance().createAction("filter_manager", "Filter Manager") action.setToolTip("Plugin to filters management") action.triggered.connect(self.initialize) diff --git a/plugins/extensions/pykrita/sip/krita/Document.sip b/plugins/extensions/pykrita/sip/krita/Document.sip --- a/plugins/extensions/pykrita/sip/krita/Document.sip +++ b/plugins/extensions/pykrita/sip/krita/Document.sip @@ -36,6 +36,10 @@ void setSelection(Selection* value); int width() const; void setWidth(int value); + int xOffset() const; + void setXOffset(int x); + int yOffset() const; + void setYOffset(int y); double xRes() const; void setXRes(double xRes) const; double yRes() const; @@ -45,7 +49,7 @@ void crop(int x, int y, int w, int h); bool exportImage(const QString &filename, const InfoObject & exportConfiguration); void flatten(); - void resizeImage(int w, int h); + void resizeImage(int x, int y, int w, int h); void scaleImage(int w, int h, int xres, int yres, QString strategy); void rotateImage(double radians); void shearImage(double angleX, double angleY);