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 }