Scale window icon manually when getting from icon theme
This commit is contained in:
parent
f528a240d9
commit
0cd8cc67c5
|
@ -119,7 +119,43 @@ QIcon CreateOfficialIcon(Main::Session *session) {
|
|||
QIcon CreateIcon(Main::Session *session) {
|
||||
auto result = CreateOfficialIcon(session);
|
||||
#if defined Q_OS_UNIX && !defined Q_OS_MAC
|
||||
return QIcon::fromTheme(Platform::GetIconName(), result);
|
||||
const auto iconFromTheme = QIcon::fromTheme(
|
||||
Platform::GetIconName(),
|
||||
result);
|
||||
|
||||
result = QIcon();
|
||||
|
||||
static const auto iconSizes = {
|
||||
16,
|
||||
22,
|
||||
32,
|
||||
48,
|
||||
64,
|
||||
128,
|
||||
256,
|
||||
};
|
||||
|
||||
// Qt's standard QIconLoaderEngine sets availableSizes
|
||||
// to XDG directories sizes, since svg icons are scalable,
|
||||
// they could be only in one XDG folder (like 48x48)
|
||||
// and Qt will set only a 48px icon to the window
|
||||
// even though the icon could be scaled to other sizes.
|
||||
// Thus, scale it manually to the most widespread sizes.
|
||||
for (const auto iconSize : iconSizes) {
|
||||
// We can't use QIcon::actualSize here
|
||||
// since it works incorrectly with svg icon themes
|
||||
const auto iconPixmap = iconFromTheme.pixmap(iconSize);
|
||||
|
||||
const auto iconPixmapSize = iconPixmap.size()
|
||||
/ iconPixmap.devicePixelRatio();
|
||||
|
||||
// Not a svg icon, don't scale it
|
||||
if (iconPixmapSize.width() != iconSize) {
|
||||
return iconFromTheme;
|
||||
}
|
||||
|
||||
result.addPixmap(iconPixmap);
|
||||
}
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue