#include "lib/qtmaterialcheckable_internal.h" #include #include #include #include "lib/qtmaterialcheckable.h" namespace md { /*! * \class QtMaterialCheckableIcon * \internal */ CheckableIcon::CheckableIcon(const QIcon &icon, Checkable *parent) : QWidget(parent), m_checkable(parent), m_color(Qt::black), m_icon(icon), m_iconSize(24), m_opacity(1.0) { Q_ASSERT(parent); setAttribute(Qt::WA_TransparentForMouseEvents); } CheckableIcon::~CheckableIcon() { } QSize CheckableIcon::sizeHint() const { return QSize(m_iconSize, m_iconSize); } void CheckableIcon::paintEvent(QPaintEvent *event) { Q_UNUSED(event) QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); painter.setOpacity(m_opacity); QPixmap pixmap = icon().pixmap(24, 24); if (!pixmap.isNull()) { const qreal p = static_cast((height())-m_iconSize)/2; const qreal z = m_iconSize/24; QTransform t; if (Checkable::LabelPositionLeft == m_checkable->labelPosition()) { t.translate(p+width()-42, p); } else { t.translate(p, p); } t.scale(z, z); painter.setTransform(t); QPainter icon(&pixmap); icon.setCompositionMode(QPainter::CompositionMode_SourceIn); icon.fillRect(pixmap.rect(), color()); painter.drawPixmap(0, 0, pixmap); } } }