From 69da26754003cb4695380738f5a837c9a93b5eaa Mon Sep 17 00:00:00 2001 From: James Rowe Date: Fri, 18 Jan 2019 10:02:27 -0700 Subject: [PATCH] Add a workaround if QMovie isn't available --- src/yuzu/loading_screen.cpp | 15 ++++++++++++++- src/yuzu/loading_screen.h | 6 ++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/yuzu/loading_screen.cpp b/src/yuzu/loading_screen.cpp index f2d3214f6f..0f3c4bb6cb 100644 --- a/src/yuzu/loading_screen.cpp +++ b/src/yuzu/loading_screen.cpp @@ -8,7 +8,6 @@ #include #include #include -#include #include #include #include @@ -20,6 +19,12 @@ #include "ui_loading_screen.h" #include "yuzu/loading_screen.h" +// Mingw seems to not have QMovie at all. If QMovie is missing then use a single frame instead of an +// showing the full animation +#if !YUZU_QT_MOVIE_MISSING +#include +#endif + LoadingScreen::LoadingScreen(QWidget* parent) : QWidget(parent), ui(std::make_unique()) { ui->setupUi(this); @@ -32,6 +37,11 @@ LoadingScreen::~LoadingScreen() = default; void LoadingScreen::Prepare(Loader::AppLoader& loader) { std::vector buffer; if (loader.ReadBanner(buffer) == Loader::ResultStatus::Success) { +#ifdef YUZU_QT_MOVIE_MISSING + QPixmap map; + map.loadFromData(buffer.data(), buffer.size()); + ui->banner->setPixmap(map); +#else backing_mem = std::make_unique(reinterpret_cast(buffer.data()), buffer.size()); backing_buf = std::make_unique(backing_mem.get()); @@ -39,6 +49,7 @@ void LoadingScreen::Prepare(Loader::AppLoader& loader) { animation = std::make_unique(backing_buf.get(), QByteArray("GIF")); animation->start(); ui->banner->setMovie(animation.get()); +#endif buffer.clear(); } if (loader.ReadLogo(buffer) == Loader::ResultStatus::Success) { @@ -65,7 +76,9 @@ void LoadingScreen::paintEvent(QPaintEvent* event) { } void LoadingScreen::Clear() { +#ifndef YUZU_QT_MOVIE_MISSING animation.reset(); backing_buf.reset(); backing_mem.reset(); +#endif } diff --git a/src/yuzu/loading_screen.h b/src/yuzu/loading_screen.h index ffcaa260df..2a6cf11421 100644 --- a/src/yuzu/loading_screen.h +++ b/src/yuzu/loading_screen.h @@ -7,6 +7,10 @@ #include #include +#if !QT_CONFIG(movie) +#define YUZU_QT_MOVIE_MISSING 1 +#endif + namespace Loader { class AppLoader; } @@ -42,9 +46,11 @@ public: void OnLoadProgress(std::size_t value, std::size_t total); private: +#ifndef YUZU_QT_MOVIE_MISSING std::unique_ptr animation; std::unique_ptr backing_buf; std::unique_ptr backing_mem; +#endif std::unique_ptr ui; std::size_t previous_total = 0; };