49 lines
1.8 KiB
C
49 lines
1.8 KiB
C
|
|
#pragma once
|
||
|
|
|
||
|
|
#include <QColor>
|
||
|
|
#include <QIcon>
|
||
|
|
#include <QPainter>
|
||
|
|
#include <QPixmap>
|
||
|
|
|
||
|
|
namespace UiIcons {
|
||
|
|
|
||
|
|
inline QPixmap tintedPixmap(const QString &resourcePath, const QColor &color,
|
||
|
|
int size = 18)
|
||
|
|
{
|
||
|
|
const QPixmap source(resourcePath);
|
||
|
|
if (source.isNull())
|
||
|
|
return QPixmap();
|
||
|
|
|
||
|
|
const QPixmap scaled = source.scaled(size, size, Qt::KeepAspectRatio,
|
||
|
|
Qt::SmoothTransformation);
|
||
|
|
QPixmap result(size, size);
|
||
|
|
result.fill(Qt::transparent);
|
||
|
|
QPainter painter(&result);
|
||
|
|
painter.drawPixmap((size - scaled.width()) / 2,
|
||
|
|
(size - scaled.height()) / 2, scaled);
|
||
|
|
painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
|
||
|
|
painter.fillRect(result.rect(), color);
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
|
||
|
|
inline QIcon icon(const QString &resourcePath,
|
||
|
|
const QColor &normal = QColor(QStringLiteral("#46535f")),
|
||
|
|
const QColor &selected = QColor(QStringLiteral("#ffffff")),
|
||
|
|
const QColor &disabled = QColor(QStringLiteral("#9aa3ad")),
|
||
|
|
int size = 18)
|
||
|
|
{
|
||
|
|
QIcon result;
|
||
|
|
const QPixmap normalPixmap = tintedPixmap(resourcePath, normal, size);
|
||
|
|
const QPixmap selectedPixmap = tintedPixmap(resourcePath, selected, size);
|
||
|
|
const QPixmap disabledPixmap = tintedPixmap(resourcePath, disabled, size);
|
||
|
|
result.addPixmap(normalPixmap, QIcon::Normal, QIcon::Off);
|
||
|
|
result.addPixmap(selectedPixmap, QIcon::Active, QIcon::Off);
|
||
|
|
result.addPixmap(selectedPixmap, QIcon::Normal, QIcon::On);
|
||
|
|
result.addPixmap(selectedPixmap, QIcon::Active, QIcon::On);
|
||
|
|
result.addPixmap(disabledPixmap, QIcon::Disabled, QIcon::Off);
|
||
|
|
result.addPixmap(disabledPixmap, QIcon::Disabled, QIcon::On);
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
|
||
|
|
} // namespace UiIcons
|