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

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 "cropimageoperation.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 class CropJob : public ThreadedDocumentJob
0039 {
0040 public:
0041     CropJob(const QRect &rect)
0042         : mRect(rect)
0043     {
0044     }
0045 
0046     void threadedStart() override
0047     {
0048         if (!checkDocumentEditor()) {
0049             return;
0050         }
0051         const QImage src = document()->image();
0052         const QImage dst = src.copy(mRect);
0053         document()->editor()->setImage(dst);
0054         setError(NoError);
0055     }
0056 
0057 private:
0058     QRect mRect;
0059 };
0060 
0061 struct CropImageOperationPrivate {
0062     QRect mRect;
0063     QImage mOriginalImage;
0064 };
0065 
0066 CropImageOperation::CropImageOperation(const QRect &rect)
0067     : d(new CropImageOperationPrivate)
0068 {
0069     d->mRect = rect;
0070     setText(i18n("Crop"));
0071 }
0072 
0073 CropImageOperation::~CropImageOperation()
0074 {
0075     delete d;
0076 }
0077 
0078 void CropImageOperation::redo()
0079 {
0080     d->mOriginalImage = document()->image();
0081     redoAsDocumentJob(new CropJob(d->mRect));
0082 }
0083 
0084 void CropImageOperation::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
0095 
0096 #include "moc_cropimageoperation.cpp"