diff --git a/REUSE.toml b/REUSE.toml index ec706f0bf..fa5eb17be 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -42,6 +42,7 @@ path = [ "src/images/themes_icon.png", "src/images/update_icon.png", "src/images/youtube.png", + "src/images/website.png", "src/shadps4.qrc", "src/shadps4.rc", ] diff --git a/src/images/website.png b/src/images/website.png new file mode 100644 index 000000000..9584f6b82 Binary files /dev/null and b/src/images/website.png differ diff --git a/src/qt_gui/about_dialog.cpp b/src/qt_gui/about_dialog.cpp index a1044627e..90fb14236 100644 --- a/src/qt_gui/about_dialog.cpp +++ b/src/qt_gui/about_dialog.cpp @@ -7,23 +7,26 @@ #include #include #include +#include #include "about_dialog.h" +#include "main_window_themes.h" #include "ui_about_dialog.h" AboutDialog::AboutDialog(QWidget* parent) : QDialog(parent), ui(new Ui::AboutDialog) { ui->setupUi(this); - preloadImages(); ui->image_1->setAttribute(Qt::WA_Hover, true); ui->image_2->setAttribute(Qt::WA_Hover, true); ui->image_3->setAttribute(Qt::WA_Hover, true); ui->image_4->setAttribute(Qt::WA_Hover, true); + ui->image_5->setAttribute(Qt::WA_Hover, true); ui->image_1->installEventFilter(this); ui->image_2->installEventFilter(this); ui->image_3->installEventFilter(this); ui->image_4->installEventFilter(this); + ui->image_5->installEventFilter(this); } AboutDialog::~AboutDialog() { @@ -35,10 +38,10 @@ void AboutDialog::preloadImages() { originalImages[1] = ui->image_2->pixmap().copy(); originalImages[2] = ui->image_3->pixmap().copy(); originalImages[3] = ui->image_4->pixmap().copy(); + originalImages[4] = ui->image_5->pixmap().copy(); - for (int i = 0; i < 4; ++i) { + for (int i = 0; i < 5; ++i) { QImage image = originalImages[i].toImage(); - for (int y = 0; y < image.height(); ++y) { for (int x = 0; x < image.width(); ++x) { QColor color = image.pixelColor(x, y); @@ -50,89 +53,142 @@ void AboutDialog::preloadImages() { } invertedImages[i] = QPixmap::fromImage(image); } + updateImagesForCurrentTheme(); +} + +void AboutDialog::updateImagesForCurrentTheme() { + Theme currentTheme = static_cast(Config::getMainWindowTheme()); + bool isDarkTheme = (currentTheme == Theme::Dark || currentTheme == Theme::Green || + currentTheme == Theme::Blue || currentTheme == Theme::Violet); + if (isDarkTheme) { + ui->image_1->setPixmap(invertedImages[0]); + ui->image_2->setPixmap(invertedImages[1]); + ui->image_3->setPixmap(invertedImages[2]); + ui->image_4->setPixmap(invertedImages[3]); + ui->image_5->setPixmap(invertedImages[4]); + } else { + ui->image_1->setPixmap(originalImages[0]); + ui->image_2->setPixmap(originalImages[1]); + ui->image_3->setPixmap(originalImages[2]); + ui->image_4->setPixmap(originalImages[3]); + ui->image_5->setPixmap(originalImages[4]); + } } bool AboutDialog::eventFilter(QObject* obj, QEvent* event) { if (event->type() == QEvent::Enter) { if (obj == ui->image_1) { - ui->image_1->setPixmap(invertedImages[0]); - QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect; - shadow->setBlurRadius(5); - shadow->setXOffset(2); - shadow->setYOffset(2); - shadow->setColor(Qt::gray); - ui->image_1->setGraphicsEffect(shadow); + if (isDarkTheme()) { + ui->image_1->setPixmap(originalImages[0]); + } else { + ui->image_1->setPixmap(invertedImages[0]); + } + applyHoverEffect(ui->image_1); } else if (obj == ui->image_2) { - ui->image_2->setPixmap(invertedImages[1]); - QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect; - shadow->setBlurRadius(5); - shadow->setXOffset(2); - shadow->setYOffset(2); - shadow->setColor(Qt::gray); - ui->image_2->setGraphicsEffect(shadow); + if (isDarkTheme()) { + ui->image_2->setPixmap(originalImages[1]); + } else { + ui->image_2->setPixmap(invertedImages[1]); + } + applyHoverEffect(ui->image_2); } else if (obj == ui->image_3) { - ui->image_3->setPixmap(invertedImages[2]); - QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect; - shadow->setBlurRadius(5); - shadow->setXOffset(2); - shadow->setYOffset(2); - shadow->setColor(Qt::gray); - ui->image_3->setGraphicsEffect(shadow); + if (isDarkTheme()) { + ui->image_3->setPixmap(originalImages[2]); + } else { + ui->image_3->setPixmap(invertedImages[2]); + } + applyHoverEffect(ui->image_3); } else if (obj == ui->image_4) { - ui->image_4->setPixmap(invertedImages[3]); - QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect; - shadow->setBlurRadius(5); - shadow->setXOffset(2); - shadow->setYOffset(2); - shadow->setColor(Qt::gray); - ui->image_4->setGraphicsEffect(shadow); + if (isDarkTheme()) { + ui->image_4->setPixmap(originalImages[3]); + } else { + ui->image_4->setPixmap(invertedImages[3]); + } + applyHoverEffect(ui->image_4); + } else if (obj == ui->image_5) { + if (isDarkTheme()) { + ui->image_5->setPixmap(originalImages[4]); + } else { + ui->image_5->setPixmap(invertedImages[4]); + } + applyHoverEffect(ui->image_5); } } else if (event->type() == QEvent::Leave) { if (obj == ui->image_1) { - ui->image_1->setPixmap(originalImages[0]); - QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect; - shadow->setBlurRadius(0); - shadow->setXOffset(0); - shadow->setYOffset(0); - shadow->setColor(Qt::gray); - ui->image_1->setGraphicsEffect(shadow); + if (isDarkTheme()) { + ui->image_1->setPixmap(invertedImages[0]); + } else { + ui->image_1->setPixmap(originalImages[0]); + } + removeHoverEffect(ui->image_1); } else if (obj == ui->image_2) { - ui->image_2->setPixmap(originalImages[1]); - QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect; - shadow->setBlurRadius(0); - shadow->setXOffset(0); - shadow->setYOffset(0); - shadow->setColor(Qt::gray); - ui->image_2->setGraphicsEffect(shadow); + if (isDarkTheme()) { + ui->image_2->setPixmap(invertedImages[1]); + } else { + ui->image_2->setPixmap(originalImages[1]); + } + removeHoverEffect(ui->image_2); } else if (obj == ui->image_3) { - ui->image_3->setPixmap(originalImages[2]); - QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect; - shadow->setBlurRadius(0); - shadow->setXOffset(0); - shadow->setYOffset(0); - shadow->setColor(Qt::gray); - ui->image_3->setGraphicsEffect(shadow); + if (isDarkTheme()) { + ui->image_3->setPixmap(invertedImages[2]); + } else { + ui->image_3->setPixmap(originalImages[2]); + } + removeHoverEffect(ui->image_3); } else if (obj == ui->image_4) { - ui->image_4->setPixmap(originalImages[3]); - QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect; - shadow->setBlurRadius(0); - shadow->setXOffset(0); - shadow->setYOffset(0); - shadow->setColor(Qt::gray); - ui->image_4->setGraphicsEffect(shadow); + if (isDarkTheme()) { + ui->image_4->setPixmap(invertedImages[3]); + } else { + ui->image_4->setPixmap(originalImages[3]); + } + removeHoverEffect(ui->image_4); + } else if (obj == ui->image_5) { + if (isDarkTheme()) { + ui->image_5->setPixmap(invertedImages[4]); + } else { + ui->image_5->setPixmap(originalImages[4]); + } + removeHoverEffect(ui->image_5); } - } else if (event->type() == QEvent::MouseButtonPress) { if (obj == ui->image_1) { QDesktopServices::openUrl(QUrl("https://github.com/shadps4-emu/shadPS4")); } else if (obj == ui->image_2) { QDesktopServices::openUrl(QUrl("https://discord.gg/bFJxfftGW6")); } else if (obj == ui->image_3) { - QDesktopServices::openUrl(QUrl("https://ko-fi.com/shadps4")); - } else if (obj == ui->image_4) { QDesktopServices::openUrl(QUrl("https://www.youtube.com/@shadPS4/videos")); + } else if (obj == ui->image_4) { + QDesktopServices::openUrl(QUrl("https://ko-fi.com/shadps4")); + } else if (obj == ui->image_5) { + QDesktopServices::openUrl(QUrl("https://shadps4.net")); } return true; } return QDialog::eventFilter(obj, event); } + +void AboutDialog::applyHoverEffect(QLabel* label) { + QColor shadowColor = isDarkTheme() ? QColor(0, 0, 0) : QColor(169, 169, 169); + QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect; + shadow->setBlurRadius(5); + shadow->setXOffset(2); + shadow->setYOffset(2); + shadow->setColor(shadowColor); + label->setGraphicsEffect(shadow); +} + +void AboutDialog::removeHoverEffect(QLabel* label) { + QColor shadowColor = isDarkTheme() ? QColor(50, 50, 50) : QColor(169, 169, 169); + QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect; + shadow->setBlurRadius(3); + shadow->setXOffset(0); + shadow->setYOffset(0); + shadow->setColor(shadowColor); + label->setGraphicsEffect(shadow); +} + +bool AboutDialog::isDarkTheme() const { + Theme currentTheme = static_cast(Config::getMainWindowTheme()); + return currentTheme == Theme::Dark || currentTheme == Theme::Green || + currentTheme == Theme::Blue || currentTheme == Theme::Violet; +} diff --git a/src/qt_gui/about_dialog.h b/src/qt_gui/about_dialog.h index 994b95887..42e8d557a 100644 --- a/src/qt_gui/about_dialog.h +++ b/src/qt_gui/about_dialog.h @@ -25,6 +25,12 @@ private: Ui::AboutDialog* ui; void preloadImages(); - QPixmap originalImages[4]; - QPixmap invertedImages[4]; -}; \ No newline at end of file + void updateImagesForCurrentTheme(); + void applyHoverEffect(QLabel* label); + void removeHoverEffect(QLabel* label); + + bool isDarkTheme() const; + + QPixmap originalImages[5]; + QPixmap invertedImages[5]; +}; diff --git a/src/qt_gui/about_dialog.ui b/src/qt_gui/about_dialog.ui index 36ce773bd..19840e452 100644 --- a/src/qt_gui/about_dialog.ui +++ b/src/qt_gui/about_dialog.ui @@ -171,7 +171,7 @@ - :/images/ko-fi.png + :/images/youtube.png true @@ -196,12 +196,37 @@ - :/images/youtube.png + :/images/ko-fi.png true + + + + 670 + 210 + 80 + 80 + + + + ArrowCursor + + + QFrame::NoFrame + + + + + + :/images/website.png + + + true + + diff --git a/src/shadps4.qrc b/src/shadps4.qrc index 7e26a2c4f..7798e4ed6 100644 --- a/src/shadps4.qrc +++ b/src/shadps4.qrc @@ -29,5 +29,6 @@ images/discord.png images/ko-fi.png images/youtube.png + images/website.png