diff options
Diffstat (limited to 'libs/installer_fomod_plus/installer/ui/ScaleLabel.cpp')
| -rw-r--r-- | libs/installer_fomod_plus/installer/ui/ScaleLabel.cpp | 120 |
1 files changed, 0 insertions, 120 deletions
diff --git a/libs/installer_fomod_plus/installer/ui/ScaleLabel.cpp b/libs/installer_fomod_plus/installer/ui/ScaleLabel.cpp deleted file mode 100644 index 3a33640..0000000 --- a/libs/installer_fomod_plus/installer/ui/ScaleLabel.cpp +++ /dev/null @@ -1,120 +0,0 @@ -#include "ScaleLabel.h" -#include <QResizeEvent> -#include <iostream> - -// Taken from https://github.com/ModOrganizer2/modorganizer-installer_fomod/blob/master/src/scalelabel.h -static bool isResourceMovie(const QString& path) -{ - const auto formats = QMovie::supportedFormats(); - return std::ranges::any_of(formats, [&path](const QByteArray& format) { - return path.endsWith("." + QString::fromUtf8(format)); - }); -} - -void ScaleLabel::setScalableResource(const QString& path) -{ - if (const auto m = movie()) { - setMovie(nullptr); - delete m; - mOriginalMovieSize = QSize(); - } - if (!pixmap().isNull()) { - setPixmap(QPixmap()); - mUnscaledImage = QImage(); - } - - if (path.isEmpty()) { - return; - } - - if (isResourceMovie(path)) { - setScalableMovie(path); - } else { - setScalableImage(path); - } -} - -void ScaleLabel::setStatic(const bool isStatic) -{ - misStatic = isStatic; - - if (const auto m = movie()) { - if (isStatic) { - m->stop(); - } else { - m->start(); - } - } -} - -void ScaleLabel::setScalableMovie(const QString& path) -{ - const auto m = new QMovie(path); - if (!m->isValid()) { - qWarning(">%s< is an invalid movie. Reason: %s", qUtf8Printable(path), - m->lastErrorString().toStdString().c_str()); - delete m; - return; - } - - m->setParent(this); - setMovie(m); - m->start(); - m->stop(); - mOriginalMovieSize = m->currentImage().size(); - - m->setScaledSize(mOriginalMovieSize.scaled(size(), Qt::KeepAspectRatio)); - if (!misStatic) { - m->start(); - } - mHasResource = true; -} - -void ScaleLabel::setScalableImage(const QString& path) -{ - if (const QImage image(path); image.isNull()) { - qWarning(">%s< is a null image", qUtf8Printable(path)); - } else { - mUnscaledImage = image; - setPixmap(QPixmap::fromImage(image).scaled(size(), Qt::KeepAspectRatio, Qt::SmoothTransformation)); - mHasResource = true; - } -} - -void ScaleLabel::resizeEvent(QResizeEvent* event) -{ - if (const auto m = movie()) { - m->stop(); - m->setScaledSize(mOriginalMovieSize.scaled(event->size(), Qt::KeepAspectRatio)); - m->start(); - - // We can't just skip the start() above since that is what triggers the label to - // resize the movie The only way to resize the movie but keep it paused is to start - // and then re-stop it - if (misStatic) { - m->stop(); - } - } - if (const auto p = pixmap(); !p.isNull()) { - setPixmap( - QPixmap::fromImage(mUnscaledImage).scaled(event->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation)); - } -} - -void ScaleLabel::showEvent(QShowEvent* event) -{ - QLabel::showEvent(event); - - if (const auto m = movie()) { - m->stop(); - m->setScaledSize(mOriginalMovieSize.scaled(size(), Qt::KeepAspectRatio)); - m->start(); - - if (misStatic) { - m->stop(); - } - } - if (const auto p = pixmap(); !p.isNull()) { - setPixmap(QPixmap::fromImage(mUnscaledImage).scaled(size(), Qt::KeepAspectRatio, Qt::SmoothTransformation)); - } -}
\ No newline at end of file |
