|
|
@ -5,6 +5,7 @@ |
|
|
#include <unordered_map>
|
|
|
#include <unordered_map>
|
|
|
#include <QBuffer>
|
|
|
#include <QBuffer>
|
|
|
#include <QByteArray>
|
|
|
#include <QByteArray>
|
|
|
|
|
|
#include <QGraphicsOpacityEffect>
|
|
|
#include <QHBoxLayout>
|
|
|
#include <QHBoxLayout>
|
|
|
#include <QIODevice>
|
|
|
#include <QIODevice>
|
|
|
#include <QImage>
|
|
|
#include <QImage>
|
|
|
@ -13,6 +14,7 @@ |
|
|
#include <QPalette>
|
|
|
#include <QPalette>
|
|
|
#include <QPixmap>
|
|
|
#include <QPixmap>
|
|
|
#include <QProgressBar>
|
|
|
#include <QProgressBar>
|
|
|
|
|
|
#include <QPropertyAnimation>
|
|
|
#include <QStyleOption>
|
|
|
#include <QStyleOption>
|
|
|
#include <QTime>
|
|
|
#include <QTime>
|
|
|
#include <QtConcurrent/QtConcurrentRun>
|
|
|
#include <QtConcurrent/QtConcurrentRun>
|
|
|
@ -71,6 +73,25 @@ LoadingScreen::LoadingScreen(QWidget* parent) |
|
|
ui->setupUi(this); |
|
|
ui->setupUi(this); |
|
|
setMinimumSize(1280, 720); |
|
|
setMinimumSize(1280, 720); |
|
|
|
|
|
|
|
|
|
|
|
// Create a fade out effect to hide this loading screen widget.
|
|
|
|
|
|
// When fading opacity, it will fade to the parent widgets background color, which is why we
|
|
|
|
|
|
// create an internal widget named fade_widget that we use the effect on, while keeping the
|
|
|
|
|
|
// loading screen widget's background color black. This way we can create a fade to black effect
|
|
|
|
|
|
opacity_effect = new QGraphicsOpacityEffect(this); |
|
|
|
|
|
opacity_effect->setOpacity(1); |
|
|
|
|
|
ui->fade_parent->setGraphicsEffect(opacity_effect); |
|
|
|
|
|
fadeout_animation = std::make_unique<QPropertyAnimation>(opacity_effect, "opacity"); |
|
|
|
|
|
fadeout_animation->setDuration(500); |
|
|
|
|
|
fadeout_animation->setStartValue(1); |
|
|
|
|
|
fadeout_animation->setEndValue(0); |
|
|
|
|
|
fadeout_animation->setEasingCurve(QEasingCurve::OutBack); |
|
|
|
|
|
|
|
|
|
|
|
// After the fade completes, hide the widget and reset the opacity
|
|
|
|
|
|
connect(fadeout_animation.get(), &QPropertyAnimation::finished, [this] { |
|
|
|
|
|
hide(); |
|
|
|
|
|
opacity_effect->setOpacity(1); |
|
|
|
|
|
emit Hidden(); |
|
|
|
|
|
}); |
|
|
connect(this, &LoadingScreen::LoadProgress, this, &LoadingScreen::OnLoadProgress, |
|
|
connect(this, &LoadingScreen::LoadProgress, this, &LoadingScreen::OnLoadProgress, |
|
|
Qt::QueuedConnection); |
|
|
Qt::QueuedConnection); |
|
|
qRegisterMetaType<VideoCore::LoadCallbackStage>(); |
|
|
qRegisterMetaType<VideoCore::LoadCallbackStage>(); |
|
|
@ -115,9 +136,14 @@ void LoadingScreen::Prepare(Loader::AppLoader& loader) { |
|
|
ui->logo->setPixmap(map); |
|
|
ui->logo->setPixmap(map); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
slow_shader_compile_start = false; |
|
|
OnLoadProgress(VideoCore::LoadCallbackStage::Prepare, 0, 0); |
|
|
OnLoadProgress(VideoCore::LoadCallbackStage::Prepare, 0, 0); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void LoadingScreen::OnLoadComplete() { |
|
|
|
|
|
fadeout_animation->start(QPropertyAnimation::KeepWhenStopped); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
void LoadingScreen::OnLoadProgress(VideoCore::LoadCallbackStage stage, std::size_t value, |
|
|
void LoadingScreen::OnLoadProgress(VideoCore::LoadCallbackStage stage, std::size_t value, |
|
|
std::size_t total) { |
|
|
std::size_t total) { |
|
|
using namespace std::chrono; |
|
|
using namespace std::chrono; |
|
|
@ -125,6 +151,7 @@ void LoadingScreen::OnLoadProgress(VideoCore::LoadCallbackStage stage, std::size |
|
|
// reset the timer if the stage changes
|
|
|
// reset the timer if the stage changes
|
|
|
if (stage != previous_stage) { |
|
|
if (stage != previous_stage) { |
|
|
ui->progress_bar->setStyleSheet(progressbar_style[stage]); |
|
|
ui->progress_bar->setStyleSheet(progressbar_style[stage]); |
|
|
|
|
|
// Hide the progress bar during the prepare stage
|
|
|
if (stage == VideoCore::LoadCallbackStage::Prepare) { |
|
|
if (stage == VideoCore::LoadCallbackStage::Prepare) { |
|
|
ui->progress_bar->hide(); |
|
|
ui->progress_bar->hide(); |
|
|
} else { |
|
|
} else { |
|
|
|