File indexing completed on 2024-04-28 15:39:06

0001 // SPDX-FileCopyrightText: 2020 Tobias Leupold <tl at stonemx dot de>
0002 //
0003 // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 
0005 // Local includes
0006 #include "ImagePreview.h"
0007 #include "SharedObjects.h"
0008 
0009 // Qt includes
0010 #include <QTimer>
0011 #include <QModelIndex>
0012 
0013 ImagePreview::ImagePreview(QWidget *parent) : QLabel(parent)
0014 {
0015     setAlignment(Qt::AlignCenter);
0016     setMinimumSize(128, 128);
0017     setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
0018 
0019     m_smoothTimer = new QTimer(this);
0020     m_smoothTimer->setSingleShot(true);
0021     connect(m_smoothTimer, &QTimer::timeout, this, &ImagePreview::setScaledPreview);
0022 }
0023 
0024 void ImagePreview::setImage(const QModelIndex &index)
0025 {
0026     m_currentImage = index.isValid() ? index.data(KGeoTag::PreviewRole).value<QImage>() : QImage();
0027     setScaledPreview();
0028 }
0029 
0030 void ImagePreview::resizeEvent(QResizeEvent *event)
0031 {
0032     // This happen when no image is set yet
0033     if (m_currentImage.isNull()) {
0034         return;
0035     }
0036 
0037     // During resizing, we use a quickly scaled image
0038     const QImage scaledImage = m_currentImage.scaled(size(), Qt::KeepAspectRatio);
0039     setPixmap(QPixmap::fromImage(scaledImage));
0040 
0041     // (Re)start the timer that sets a smoothly scaled version of the image
0042     m_smoothTimer->start(200);
0043 
0044     QLabel::resizeEvent(event);
0045 }
0046 
0047 void ImagePreview::setScaledPreview()
0048 {
0049     if (m_currentImage.isNull()) {
0050         setPixmap(QPixmap());
0051         return;
0052     }
0053 
0054     const QImage scaledImage = m_currentImage.scaled(size(), Qt::KeepAspectRatio,
0055                                                      Qt::SmoothTransformation);
0056     setPixmap(QPixmap::fromImage(scaledImage));
0057 }