diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt index 9b0a2703205..f77117dc563 100644 --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -327,6 +327,36 @@ qt_internal_add_resource(Widgets "qstyle1" ${qstyle1_resource_files} ) +set(qstyle_resource_fusion_files + "styles/images/fusion_closedock-10.png" + "styles/images/fusion_closedock-16.png" + "styles/images/fusion_closedock-20.png" + "styles/images/fusion_closedock-32.png" + "styles/images/fusion_closedock-48.png" + "styles/images/fusion_closedock-64.png" + "styles/images/fusion_normalizedockup_10.png" + "styles/images/fusion_normalizedockup-16.png" + "styles/images/fusion_normalizedockup_20.png" + "styles/images/fusion_normalizedockup-32.png" + "styles/images/fusion_normalizedockup_48.png" + "styles/images/fusion_normalizedockup_64.png" + "styles/images/fusion_titlebar-min-10.png" + "styles/images/fusion_titlebar-min-16.png" + "styles/images/fusion_titlebar-min-20.png" + "styles/images/fusion_titlebar-min-32.png" + "styles/images/fusion_titlebar-min-48.png" + "styles/images/fusion_titlebar-min-64.png" +) + +qt_internal_add_resource(Widgets "qstyle_fusion" + PREFIX + "/qt-project.org/styles/fusionstyle" + BASE + "styles" + FILES + ${qstyle_resource_fusion_files} +) + if(QT_FEATURE_reduce_relocations AND UNIX AND GCC) target_link_options(Widgets PRIVATE "LINKER:--dynamic-list=${CMAKE_CURRENT_LIST_DIR}/QtWidgets.dynlist") diff --git a/src/widgets/styles/images/fusion_closedock-10.png b/src/widgets/styles/images/fusion_closedock-10.png new file mode 100644 index 00000000000..c364f0a8b20 Binary files /dev/null and b/src/widgets/styles/images/fusion_closedock-10.png differ diff --git a/src/widgets/styles/images/fusion_closedock-16.png b/src/widgets/styles/images/fusion_closedock-16.png new file mode 100644 index 00000000000..e3906770a1c Binary files /dev/null and b/src/widgets/styles/images/fusion_closedock-16.png differ diff --git a/src/widgets/styles/images/fusion_closedock-20.png b/src/widgets/styles/images/fusion_closedock-20.png new file mode 100644 index 00000000000..867acbe4a3e Binary files /dev/null and b/src/widgets/styles/images/fusion_closedock-20.png differ diff --git a/src/widgets/styles/images/fusion_closedock-32.png b/src/widgets/styles/images/fusion_closedock-32.png new file mode 100644 index 00000000000..6bfa5606f48 Binary files /dev/null and b/src/widgets/styles/images/fusion_closedock-32.png differ diff --git a/src/widgets/styles/images/fusion_closedock-48.png b/src/widgets/styles/images/fusion_closedock-48.png new file mode 100644 index 00000000000..d0215be922f Binary files /dev/null and b/src/widgets/styles/images/fusion_closedock-48.png differ diff --git a/src/widgets/styles/images/fusion_closedock-64.png b/src/widgets/styles/images/fusion_closedock-64.png new file mode 100644 index 00000000000..43ab9561f13 Binary files /dev/null and b/src/widgets/styles/images/fusion_closedock-64.png differ diff --git a/src/widgets/styles/images/fusion_closedock.svg b/src/widgets/styles/images/fusion_closedock.svg new file mode 100644 index 00000000000..627c6e35df2 --- /dev/null +++ b/src/widgets/styles/images/fusion_closedock.svg @@ -0,0 +1,93 @@ + +image/svg+xml + + + + + + + + + + + diff --git a/src/widgets/styles/images/fusion_normalizedockup-16.png b/src/widgets/styles/images/fusion_normalizedockup-16.png new file mode 100644 index 00000000000..61547479522 Binary files /dev/null and b/src/widgets/styles/images/fusion_normalizedockup-16.png differ diff --git a/src/widgets/styles/images/fusion_normalizedockup-32.png b/src/widgets/styles/images/fusion_normalizedockup-32.png new file mode 100644 index 00000000000..d9d81af3ebf Binary files /dev/null and b/src/widgets/styles/images/fusion_normalizedockup-32.png differ diff --git a/src/widgets/styles/images/fusion_normalizedockup.svg b/src/widgets/styles/images/fusion_normalizedockup.svg new file mode 100644 index 00000000000..c422036842c --- /dev/null +++ b/src/widgets/styles/images/fusion_normalizedockup.svg @@ -0,0 +1,84 @@ + +image/svg+xml + + + + + + + + + + + diff --git a/src/widgets/styles/images/fusion_normalizedockup_10.png b/src/widgets/styles/images/fusion_normalizedockup_10.png new file mode 100644 index 00000000000..02c453563c3 Binary files /dev/null and b/src/widgets/styles/images/fusion_normalizedockup_10.png differ diff --git a/src/widgets/styles/images/fusion_normalizedockup_20.png b/src/widgets/styles/images/fusion_normalizedockup_20.png new file mode 100644 index 00000000000..c3042b04d65 Binary files /dev/null and b/src/widgets/styles/images/fusion_normalizedockup_20.png differ diff --git a/src/widgets/styles/images/fusion_normalizedockup_48.png b/src/widgets/styles/images/fusion_normalizedockup_48.png new file mode 100644 index 00000000000..d22f4140638 Binary files /dev/null and b/src/widgets/styles/images/fusion_normalizedockup_48.png differ diff --git a/src/widgets/styles/images/fusion_normalizedockup_64.png b/src/widgets/styles/images/fusion_normalizedockup_64.png new file mode 100644 index 00000000000..e9bd907f90b Binary files /dev/null and b/src/widgets/styles/images/fusion_normalizedockup_64.png differ diff --git a/src/widgets/styles/images/fusion_titlebar-min-10.png b/src/widgets/styles/images/fusion_titlebar-min-10.png new file mode 100644 index 00000000000..c0e13fb3eb0 Binary files /dev/null and b/src/widgets/styles/images/fusion_titlebar-min-10.png differ diff --git a/src/widgets/styles/images/fusion_titlebar-min-16.png b/src/widgets/styles/images/fusion_titlebar-min-16.png new file mode 100644 index 00000000000..7030dfd3d42 Binary files /dev/null and b/src/widgets/styles/images/fusion_titlebar-min-16.png differ diff --git a/src/widgets/styles/images/fusion_titlebar-min-20.png b/src/widgets/styles/images/fusion_titlebar-min-20.png new file mode 100644 index 00000000000..0f7cfa3a1e8 Binary files /dev/null and b/src/widgets/styles/images/fusion_titlebar-min-20.png differ diff --git a/src/widgets/styles/images/fusion_titlebar-min-32.png b/src/widgets/styles/images/fusion_titlebar-min-32.png new file mode 100644 index 00000000000..e7764ca294f Binary files /dev/null and b/src/widgets/styles/images/fusion_titlebar-min-32.png differ diff --git a/src/widgets/styles/images/fusion_titlebar-min-48.png b/src/widgets/styles/images/fusion_titlebar-min-48.png new file mode 100644 index 00000000000..0d4d1f8ca41 Binary files /dev/null and b/src/widgets/styles/images/fusion_titlebar-min-48.png differ diff --git a/src/widgets/styles/images/fusion_titlebar-min-64.png b/src/widgets/styles/images/fusion_titlebar-min-64.png new file mode 100644 index 00000000000..84923f04ca9 Binary files /dev/null and b/src/widgets/styles/images/fusion_titlebar-min-64.png differ diff --git a/src/widgets/styles/images/fusion_titlebar-min.svg b/src/widgets/styles/images/fusion_titlebar-min.svg new file mode 100644 index 00000000000..353df2874f7 --- /dev/null +++ b/src/widgets/styles/images/fusion_titlebar-min.svg @@ -0,0 +1,75 @@ + +image/svg+xml + + + + + + + + + + + diff --git a/src/widgets/styles/qfusionstyle.cpp b/src/widgets/styles/qfusionstyle.cpp index a569529afbd..7e88541cb26 100644 --- a/src/widgets/styles/qfusionstyle.cpp +++ b/src/widgets/styles/qfusionstyle.cpp @@ -3632,12 +3632,50 @@ QRect QFusionStyle::subElementRect(SubElement sr, const QStyleOption *opt, const return r; } +/*! + \reimp +*/ +QIcon QFusionStyle::iconFromTheme(StandardPixmap standardIcon) const +{ + QIcon icon; +#if QT_CONFIG(imageformat_png) + auto addIconFiles = [](QStringView prefix, QIcon &icon) + { + const auto fullPrefix = QStringLiteral(":/qt-project.org/styles/fusionstyle/images/") + prefix; + static constexpr auto dockTitleIconSizes = {10, 16, 20, 32, 48, 64}; + for (int size : dockTitleIconSizes) + icon.addFile(fullPrefix + QString::number(size) + QStringLiteral(".png"), + QSize(size, size)); + }; + switch (standardIcon) { + case SP_TitleBarNormalButton: + addIconFiles(u"fusion_normalizedockup-", icon); + break; + case SP_TitleBarMinButton: + addIconFiles(u"fusion_titlebar-min-", icon); + break; + case SP_TitleBarCloseButton: + case SP_DockWidgetCloseButton: + addIconFiles(u"fusion_closedock-", icon); + break; + default: + break; + } +#else // imageformat_png + Q_UNUSED(standardIcon); +#endif // imageformat_png + return icon; +} + /*! \reimp */ QIcon QFusionStyle::standardIcon(StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const { + const auto icon = iconFromTheme(standardIcon); + if (!icon.availableSizes().isEmpty()) + return icon; return QCommonStyle::standardIcon(standardIcon, option, widget); } @@ -3647,6 +3685,13 @@ QIcon QFusionStyle::standardIcon(StandardPixmap standardIcon, const QStyleOption QPixmap QFusionStyle::standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget) const { + auto getDevicePixelRatio = [](const QWidget *widget) + { + return widget ? widget->devicePixelRatio() : qApp->devicePixelRatio(); + }; + const auto icon = iconFromTheme(standardPixmap); + if (!icon.availableSizes().isEmpty()) + return icon.pixmap(QSize(16, 16), getDevicePixelRatio(widget)); return QCommonStyle::standardPixmap(standardPixmap, opt, widget); } diff --git a/src/widgets/styles/qfusionstyle_p.h b/src/widgets/styles/qfusionstyle_p.h index d2a2e16b12d..7dfeb34d7cb 100644 --- a/src/widgets/styles/qfusionstyle_p.h +++ b/src/widgets/styles/qfusionstyle_p.h @@ -54,6 +54,7 @@ public: int styleHint(StyleHint hint, const QStyleOption *option = nullptr, const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr) const override; QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const override; + QIcon iconFromTheme(StandardPixmap standardIcon) const; QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const override; QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt,