File indexing completed on 2024-05-12 04:19:47

0001 // vim: set tabstop=4 shiftwidth=4 expandtab:
0002 /*
0003 Gwenview: an image viewer
0004 Copyright 2007 Aurélien Gâteau <agateau@kde.org>
0005 
0006 This program is free software; you can redistribute it and/or
0007 modify it under the terms of the GNU General Public License
0008 as published by the Free Software Foundation; either version 2
0009 of the License, or (at your option) any later version.
0010 
0011 This program is distributed in the hope that it will be useful,
0012 but WITHOUT ANY WARRANTY; without even the implied warranty of
0013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0014 GNU General Public License for more details.
0015 
0016 You should have received a copy of the GNU General Public License
0017 along with this program; if not, write to the Free Software
0018 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
0019 
0020 */
0021 // Self
0022 #include "resizeimageoperation.h"
0023 
0024 // Qt
0025 #include <QImage>
0026 
0027 // KF
0028 #include <KLocalizedString>
0029 
0030 // Local
0031 #include "document/abstractdocumenteditor.h"
0032 #include "document/document.h"
0033 #include "document/documentjob.h"
0034 #include "gwenview_lib_debug.h"
0035 
0036 namespace Gwenview
0037 {
0038 struct ResizeImageOperationPrivate {
0039     QSize mSize;
0040     QImage mOriginalImage;
0041 };
0042 
0043 class ResizeJob : public ThreadedDocumentJob
0044 {
0045 public:
0046     ResizeJob(const QSize &size)
0047         : mSize(size)
0048     {
0049     }
0050 
0051     void threadedStart() override
0052     {
0053         if (!checkDocumentEditor()) {
0054             return;
0055         }
0056         QImage image = document()->image();
0057         image = image.scaled(mSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
0058         document()->editor()->setImage(image);
0059         setError(NoError);
0060     }
0061 
0062 private:
0063     QSize mSize;
0064 };
0065 
0066 ResizeImageOperation::ResizeImageOperation(const QSize &size)
0067     : d(new ResizeImageOperationPrivate)
0068 {
0069     d->mSize = size;
0070     setText(i18nc("(qtundo-format)", "Resize"));
0071 }
0072 
0073 ResizeImageOperation::~ResizeImageOperation()
0074 {
0075     delete d;
0076 }
0077 
0078 void ResizeImageOperation::redo()
0079 {
0080     d->mOriginalImage = document()->image();
0081     redoAsDocumentJob(new ResizeJob(d->mSize));
0082 }
0083 
0084 void ResizeImageOperation::undo()
0085 {
0086     if (!document()->editor()) {
0087         qCWarning(GWENVIEW_LIB_LOG) << "!document->editor()";
0088         return;
0089     }
0090     document()->editor()->setImage(d->mOriginalImage);
0091     finish(true);
0092 }
0093 
0094 } // namespace