From 90cdbe442ba144f58a379dc7dd59e236fce5f589 Mon Sep 17 00:00:00 2001 From: Hannah von Reth Date: Tue, 3 Mar 2020 11:12:55 +0100 Subject: [PATCH] [Gui] Apply createColorAwareIcon on more icons --- changelog/unreleased/7043 | 6 ++++++ src/gui/activitylistmodel.cpp | 3 ++- src/gui/guiutility.cpp | 16 ++++++++++++++++ src/gui/guiutility.h | 3 +++ src/gui/notificationwidget.cpp | 7 ++++--- src/gui/settingsdialog.cpp | 18 +++--------------- src/gui/settingsdialog.h | 1 - src/gui/sharelinkwidget.cpp | 2 +- src/gui/shareusergroupwidget.cpp | 4 ++-- src/gui/shareusergroupwidget.ui | 6 +++--- src/gui/sslbutton.cpp | 5 +++-- src/gui/wizard/owncloudadvancedsetuppage.cpp | 3 ++- src/gui/wizard/owncloudsetuppage.cpp | 5 +++-- src/gui/wizard/owncloudwizardresultpage.cpp | 3 ++- 14 files changed, 50 insertions(+), 32 deletions(-) create mode 100644 changelog/unreleased/7043 diff --git a/changelog/unreleased/7043 b/changelog/unreleased/7043 new file mode 100644 index 0000000000..8105bc2fe6 --- /dev/null +++ b/changelog/unreleased/7043 @@ -0,0 +1,6 @@ +Bugfix: Fix serveral wrong colored icons in dark mode + +We fixed multiple issues where monocrome icons where not converted to match the +current theme. + +https://github.com/owncloud/client/issues/7043 diff --git a/src/gui/activitylistmodel.cpp b/src/gui/activitylistmodel.cpp index 906cebe2a3..7f010d679a 100644 --- a/src/gui/activitylistmodel.cpp +++ b/src/gui/activitylistmodel.cpp @@ -25,6 +25,7 @@ #include "folderman.h" #include "accessmanager.h" #include "activityitemdelegate.h" +#include "guiutility.h" #include "activitydata.h" #include "activitylistmodel.h" @@ -68,7 +69,7 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const return QVariant(); // FIXME once the action can be quantified, display on Icon break; case ActivityItemDelegate::UserIconRole: - return QIcon(QLatin1String(":/client/resources/account.png")); + return Utility::createColorAwareIcon(QLatin1String(":/client/resources/account.png")); break; case Qt::ToolTipRole: return tr("%1 %2 on %3").arg(a._subject, Utility::timeAgoInWords(a._dateTime), a._accName); diff --git a/src/gui/guiutility.cpp b/src/gui/guiutility.cpp index 8f4755190f..28621f756c 100644 --- a/src/gui/guiutility.cpp +++ b/src/gui/guiutility.cpp @@ -21,6 +21,8 @@ #include #include +#include "theme.h" + #include "common/asserts.h" using namespace OCC; @@ -95,3 +97,17 @@ QString Utility::vfsFreeSpaceActionText() { return QCoreApplication::translate("utility", "Free up local space"); } + +QPixmap Utility::createColorAwareIcon(const QString &name, const QPalette &palette) +{ + const QColor bg(palette.base().color()); + QImage img(Theme::hidpiFileName(name)); + if (img.isGrayscale()) { + // account for different sensitivity of the human eye to certain colors + double treshold = 1.0 - (0.299 * bg.red() + 0.587 * bg.green() + 0.114 * bg.blue()) / 255.0; + if (treshold > 0.5) { + img.invertPixels(QImage::InvertRgb); + } + } + return QPixmap::fromImage(img); +} diff --git a/src/gui/guiutility.h b/src/gui/guiutility.h index 6e2c5f1635..8ffd57baa4 100644 --- a/src/gui/guiutility.h +++ b/src/gui/guiutility.h @@ -49,6 +49,9 @@ namespace Utility { /** Translated text for "free up local space" (and unpinning the item) */ QString vfsFreeSpaceActionText(); + /** Create bw icon with matching contrast for the current theme */ + QPixmap createColorAwareIcon(const QString &name, const QPalette &palette = QPalette()); + } // namespace Utility } // namespace OCC diff --git a/src/gui/notificationwidget.cpp b/src/gui/notificationwidget.cpp index d2132856bb..b70a57b6a7 100644 --- a/src/gui/notificationwidget.cpp +++ b/src/gui/notificationwidget.cpp @@ -16,6 +16,7 @@ #include "QProgressIndicator.h" #include "common/utility.h" #include "common/asserts.h" +#include "guiutility.h" #include @@ -56,9 +57,9 @@ void NotificationWidget::setActivity(const Activity &activity) _ui._messageLabel->setText(activity._message); - _ui._notifIcon->setPixmap(QPixmap(":/client/resources/bell.png")); - _ui._notifIcon->setMinimumWidth(64); - _ui._notifIcon->setMinimumHeight(64); + const auto icon = Utility::createColorAwareIcon(":/client/resources/bell.png").scaled(64, 64, Qt::KeepAspectRatio); + _ui._notifIcon->setPixmap(icon); + _ui._notifIcon->setFixedSize(icon.size()); _ui._notifIcon->show(); QString tText = tr("Created at %1").arg(Utility::timeAgoInWords(activity._dateTime)); diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index a954207e8a..d81758e37d 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -18,6 +18,7 @@ #include "folderman.h" #include "theme.h" #include "generalsettings.h" +#include "guiutility.h" #include "networksettings.h" #include "accountsettings.h" #include "configfile.h" @@ -349,7 +350,7 @@ void SettingsDialog::customizeStyle() _toolBar->setStyleSheet(TOOLBAR_CSS().arg(background, dark, highlightColor, highlightTextColor)); Q_FOREACH (QAction *a, _actionGroup->actions()) { - QIcon icon = createColorAwareIcon(a->property("iconPath").toString()); + QIcon icon = Utility::createColorAwareIcon(a->property("iconPath").toString(), palette()); a->setIcon(icon); QToolButton *btn = qobject_cast(_toolBar->widgetForAction(a)); if (btn) { @@ -358,19 +359,6 @@ void SettingsDialog::customizeStyle() } } -QIcon SettingsDialog::createColorAwareIcon(const QString &name) -{ - QColor bg(palette().base().color()); - QImage img(name); - // account for different sensitivity of the human eye to certain colors - double treshold = 1.0 - (0.299 * bg.red() + 0.587 * bg.green() + 0.114 * bg.blue()) / 255.0; - if (treshold > 0.5) { - img.invertPixels(QImage::InvertRgb); - } - - return QIcon(QPixmap::fromImage(img)); -} - class ToolButtonAction : public QWidgetAction { public: @@ -413,7 +401,7 @@ QAction *SettingsDialog::createActionWithIcon(const QIcon &icon, const QString & QAction *SettingsDialog::createColorAwareAction(const QString &iconPath, const QString &text) { // all buttons must have the same size in order to keep a good layout - QIcon coloredIcon = createColorAwareIcon(iconPath); + QIcon coloredIcon = Utility::createColorAwareIcon(iconPath, palette()); return createActionWithIcon(coloredIcon, text, iconPath); } diff --git a/src/gui/settingsdialog.h b/src/gui/settingsdialog.h index 37ff29da8c..d88c5ca03c 100644 --- a/src/gui/settingsdialog.h +++ b/src/gui/settingsdialog.h @@ -75,7 +75,6 @@ private slots: private: void customizeStyle(); - QIcon createColorAwareIcon(const QString &name); QAction *createColorAwareAction(const QString &iconName, const QString &fileName); QAction *createActionWithIcon(const QIcon &icon, const QString &text, const QString &iconPath = QString()); diff --git a/src/gui/sharelinkwidget.cpp b/src/gui/sharelinkwidget.cpp index 75b6b2a111..84ccd800ec 100644 --- a/src/gui/sharelinkwidget.cpp +++ b/src/gui/sharelinkwidget.cpp @@ -228,7 +228,7 @@ void ShareLinkWidget::slotSharesFetched(const QList> &shar connect(table, &QTableWidget::itemSelectionChanged, this, &ShareLinkWidget::slotShareSelectionChanged); auto deleteIcon = QIcon::fromTheme(QLatin1String("user-trash"), - QIcon(QLatin1String(":/client/resources/delete.png"))); + Utility::createColorAwareIcon(QLatin1String(":/client/resources/delete.png"))); foreach (auto share, shares) { if (share->getShareType() != Share::TypeLink) { diff --git a/src/gui/shareusergroupwidget.cpp b/src/gui/shareusergroupwidget.cpp index ba695d4b4c..5d2b5cbbe5 100644 --- a/src/gui/shareusergroupwidget.cpp +++ b/src/gui/shareusergroupwidget.cpp @@ -381,7 +381,7 @@ ShareUserLine::ShareUserLine(QSharedPointer share, _ui->permissionToolButton->setMenu(menu); _ui->permissionToolButton->setPopupMode(QToolButton::InstantPopup); - QIcon icon(QLatin1String(":/client/resources/more.svg")); + QIcon icon = Utility::createColorAwareIcon(QLatin1String(":/client/resources/more.svg")); _ui->permissionToolButton->setIcon(icon); // If there's only a single entry in the detailed permission menu, hide it @@ -417,7 +417,7 @@ ShareUserLine::ShareUserLine(QSharedPointer share, connect(share.data(), &Share::shareDeleted, this, &ShareUserLine::slotShareDeleted); _ui->deleteShareButton->setIcon(QIcon::fromTheme(QLatin1String("user-trash"), - QIcon(QLatin1String(":/client/resources/delete.png")))); + Utility::createColorAwareIcon(QLatin1String(":/client/resources/delete.png")))); if (!share->account()->capabilities().shareResharing()) { _ui->permissionShare->hide(); diff --git a/src/gui/shareusergroupwidget.ui b/src/gui/shareusergroupwidget.ui index 028d897ce2..3344486f7d 100644 --- a/src/gui/shareusergroupwidget.ui +++ b/src/gui/shareusergroupwidget.ui @@ -94,8 +94,8 @@ 0 0 - 377 - 169 + 371 + 148 @@ -105,7 +105,7 @@ - <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline">by giving them a private link</span></a>.</p></body></html> true diff --git a/src/gui/sslbutton.cpp b/src/gui/sslbutton.cpp index dda14fcf71..7022224c2d 100644 --- a/src/gui/sslbutton.cpp +++ b/src/gui/sslbutton.cpp @@ -16,6 +16,7 @@ #include "account.h" #include "accountstate.h" #include "theme.h" +#include "guiutility.h" #include #include @@ -169,11 +170,11 @@ void SslButton::updateAccountState(AccountState *accountState) AccountPtr account = _accountState->account(); if (account->url().scheme() == QLatin1String("https")) { - setIcon(QIcon(QLatin1String(":/client/resources/lock-https.png"))); + setIcon(Utility::createColorAwareIcon(QLatin1String(":/client/resources/lock-https.png"))); QSslCipher cipher = account->_sessionCipher; setToolTip(tr("This connection is encrypted using %1 bit %2.\n").arg(cipher.usedBits()).arg(cipher.name())); } else { - setIcon(QIcon(QLatin1String(":/client/resources/lock-http.png"))); + setIcon(Utility::createColorAwareIcon(QLatin1String(":/client/resources/lock-http.png"))); setToolTip(tr("This connection is NOT secure as it is not encrypted.\n")); } } diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp index 9bb6545d33..8497bc9df5 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -31,6 +31,7 @@ #include #include "creds/abstractcredentials.h" #include "networkjobs.h" +#include "guiutility.h" namespace OCC { @@ -68,7 +69,7 @@ OwncloudAdvancedSetupPage::OwncloudAdvancedSetupPage() _ui.lServerIcon->setText(QString()); _ui.lServerIcon->setPixmap(appIcon.pixmap(48)); _ui.lLocalIcon->setText(QString()); - _ui.lLocalIcon->setPixmap(QPixmap(Theme::hidpiFileName(":/client/resources/folder-sync.png"))); + _ui.lLocalIcon->setPixmap(Utility::createColorAwareIcon(":/client/resources/folder-sync.png")); if (theme->wizardHideExternalStorageConfirmationCheckbox()) { _ui.confCheckBoxExternal->hide(); diff --git a/src/gui/wizard/owncloudsetuppage.cpp b/src/gui/wizard/owncloudsetuppage.cpp index 3f438b824b..651e7aec5d 100644 --- a/src/gui/wizard/owncloudsetuppage.cpp +++ b/src/gui/wizard/owncloudsetuppage.cpp @@ -26,6 +26,7 @@ #include "QProgressIndicator.h" +#include "guiutility.h" #include "wizard/owncloudwizardcommon.h" #include "wizard/owncloudsetuppage.h" #include "wizard/owncloudconnectionmethoddialog.h" @@ -127,11 +128,11 @@ void OwncloudSetupPage::slotUrlChanged(const QString &url) } if (!url.startsWith(QLatin1String("https://"))) { - _ui.urlLabel->setPixmap(QPixmap(Theme::hidpiFileName(":/client/resources/lock-http.png"))); + _ui.urlLabel->setPixmap(Utility::createColorAwareIcon(":/client/resources/lock-http.png")); _ui.urlLabel->setToolTip(tr("This url is NOT secure as it is not encrypted.\n" "It is not advisable to use it.")); } else { - _ui.urlLabel->setPixmap(QPixmap(Theme::hidpiFileName(":/client/resources/lock-https.png"))); + _ui.urlLabel->setPixmap(Utility::createColorAwareIcon(":/client/resources/lock-https.png")); _ui.urlLabel->setToolTip(tr("This url is secure. You can use it.")); } } diff --git a/src/gui/wizard/owncloudwizardresultpage.cpp b/src/gui/wizard/owncloudwizardresultpage.cpp index 6d884e3966..41ce5220e7 100644 --- a/src/gui/wizard/owncloudwizardresultpage.cpp +++ b/src/gui/wizard/owncloudwizardresultpage.cpp @@ -17,6 +17,7 @@ #include #include +#include "guiutility.h" #include "wizard/owncloudwizardresultpage.h" #include "wizard/owncloudwizardcommon.h" #include "theme.h" @@ -38,7 +39,7 @@ OwncloudWizardResultPage::OwncloudWizardResultPage() setSubTitle(QLatin1String(" ")); _ui.pbOpenLocal->setText(tr("Open Local Folder")); - _ui.pbOpenLocal->setIcon(QIcon(QLatin1String(":/client/resources/folder-sync.png"))); + _ui.pbOpenLocal->setIcon(Utility::createColorAwareIcon(QLatin1String(":/client/resources/folder-sync.png"))); _ui.pbOpenLocal->setIconSize(QSize(48, 48)); _ui.pbOpenLocal->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); connect(_ui.pbOpenLocal, &QAbstractButton::clicked, this, &OwncloudWizardResultPage::slotOpenLocal);