1 /* $BEGIN_LICENSE 2 3 This file is part of Minitube. 4 Copyright 2009, Flavio Tordini <flavio.tordini@gmail.com> 5 6 Minitube is free software: you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 Minitube is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with Minitube. If not, see <http://www.gnu.org/licenses/>. 18 19 $END_LICENSE */ 20 21 #ifndef ICONUTILS_H 22 #define ICONUTILS_H 23 24 #include <QtWidgets> 25 26 class IconUtils { 27 public: 28 static void setSizes(const QVector<int> &value); 29 30 static QIcon fromTheme(const QString &name); 31 static QIcon fromResources(const char *name, const QColor &background); 32 setWidgetIcon(T * obj,const char * name)33 template <class T> static void setWidgetIcon(T *obj, const char *name) { 34 auto setObjIcon = [obj, name] { 35 obj->setIcon(icon(name, obj->palette().color(obj->backgroundRole()))); 36 }; 37 obj->connect(qApp, &QGuiApplication::paletteChanged, obj, setObjIcon); 38 setObjIcon(); 39 } setIcon(T * obj,const char * name)40 template <class T> static void setIcon(T *obj, const char *name) { 41 auto setObjIcon = [obj, name] { obj->setIcon(icon(name)); }; 42 setObjIcon(); 43 obj->connect(qApp, &QGuiApplication::paletteChanged, obj, setObjIcon); 44 } 45 static QIcon icon(const char *name, 46 const QColor &background = qApp->palette().window().color()); 47 static QIcon icon(const QVector<const char *> &names, 48 const QColor &background = qApp->palette().window().color()); 49 50 static QIcon tintedIcon(const char *name, const QColor &color, const QVector<QSize> &sizes); 51 static QIcon tintedIcon(const char *name, const QColor &color, const QSize &size); 52 static void tint(QPixmap &pixmap, 53 const QColor &color, 54 QPainter::CompositionMode mode = QPainter::CompositionMode_SourceIn); 55 56 // HiDPI stuff 57 static QPixmap pixmap(const char *name, const qreal pixelRatio); 58 static QPixmap pixmap(const QString &filename, const qreal pixelRatio); 59 static QPixmap 60 iconPixmap(const char *name, int size, const QColor &background, const qreal pixelRatio); 61 62 private: IconUtils()63 IconUtils() {} 64 static QImage grayscaled(const QImage &image); 65 static QImage tinted(const QImage &image, 66 const QColor &color, 67 QPainter::CompositionMode mode = QPainter::CompositionMode_Screen); 68 }; 69 70 #endif // ICONUTILS_H 71