diff --git a/src/img/auto-hide-1.5x.png b/src/img/auto-hide-1.5x.png new file mode 100644 index 00000000..0a7829b1 Binary files /dev/null and b/src/img/auto-hide-1.5x.png differ diff --git a/src/img/auto-hide-2x.png b/src/img/auto-hide-2x.png new file mode 100644 index 00000000..7d48a471 Binary files /dev/null and b/src/img/auto-hide-2x.png differ diff --git a/src/img/unauto-hide-1.5x.png b/src/img/unauto-hide-1.5x.png new file mode 100644 index 00000000..5d20d687 Binary files /dev/null and b/src/img/unauto-hide-1.5x.png differ diff --git a/src/img/unauto-hide-2x.png b/src/img/unauto-hide-2x.png new file mode 100644 index 00000000..d7442dc8 Binary files /dev/null and b/src/img/unauto-hide-2x.png differ diff --git a/src/img/unauto-hide.png b/src/img/unauto-hide.png index 5b7fe2dc..5e59909b 100644 Binary files a/src/img/unauto-hide.png and b/src/img/unauto-hide.png differ diff --git a/src/private/widgets/TitleBarWidget.cpp b/src/private/widgets/TitleBarWidget.cpp index 846d5a9b..912a9fab 100644 --- a/src/private/widgets/TitleBarWidget.cpp +++ b/src/private/widgets/TitleBarWidget.cpp @@ -166,12 +166,34 @@ void TitleBarWidget::updateMinimizeButton() m_minimizeButton->setVisible(supportsMinimizeButton()); } +QIcon TitleBarWidget::iconForButton(const QString &iconName) const +{ + const bool isFractional = (1.0 * devicePixelRatio() != devicePixelRatioF()); + QIcon icon(QStringLiteral(":/img/%1.png").arg(iconName)); + + if (isFractional) { + // We don't support 1.5x yet. + // Linux is the only one affected as Windows and macOS use integral factors. + // Problem with Linux is that rendering is off due to a rounding bug only fixed in 5.15.2 + // Will enable for fractional later. + return icon; + } + + // Not using Qt's sugar syntax, which doesn't support 1.5x anyway when we need it. + // Simply add the high-res files and Qt will pick them when needed + icon.addFile(QStringLiteral(":/img/%1-2x.png").arg(iconName)); + qDebug() << QStringLiteral(":/img/%1-2x.png").arg(iconName); + + return icon; +} + void TitleBarWidget::updateAutoHideButton() { if (Config::self().flags() & Config::Flag_AutoHideSupport) { if (const Frame *f = frame()) { if (f->isInMainWindow()) { - m_autoHideButton->setIcon(QIcon(QStringLiteral(":/img/auto-hide.png"))); + QIcon icon(QStringLiteral(":/img/auto-hide.png")); + m_autoHideButton->setIcon(iconForButton(QStringLiteral("auto-hide"))); m_autoHideButton->setToolTip(tr("Auto-hide")); } else if (f->isOverlayed()) { m_autoHideButton->setIcon(QIcon(QStringLiteral(":/img/unauto-hide.png"))); diff --git a/src/private/widgets/TitleBarWidget_p.h b/src/private/widgets/TitleBarWidget_p.h index 95dd0ade..86c8aadc 100644 --- a/src/private/widgets/TitleBarWidget_p.h +++ b/src/private/widgets/TitleBarWidget_p.h @@ -60,6 +60,8 @@ protected: bool isFloatButtonVisible() const override; bool isFloatButtonEnabled() const override; + QIcon iconForButton(const QString &iconName) const; + private: void init(); int buttonAreaWidth() const; diff --git a/src/resources.qrc b/src/resources.qrc index af81449e..c26839a7 100644 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -1,7 +1,11 @@ img/auto-hide.png + img/auto-hide-1.5x.png + img/auto-hide-2x.png img/unauto-hide.png + img/unauto-hide-1.5x.png + img/unauto-hide-2x.png img/classic_indicators/center_active.png img/classic_indicators/center.png img/classic_indicators/inner_bottom_active.png