qt-material-widgets/components/materiallib/qtmaterialcheckable_interna...

62 lines
1.5 KiB
C++
Raw Normal View History

2022-07-05 09:40:09 +00:00
#include <lib/qtmaterialcheckable_internal.h>
#include <lib/qtmaterialcheckable.h>
2017-09-29 06:53:21 +00:00
#include <QIcon>
2022-07-05 07:49:55 +00:00
#include <QPainter>
2017-09-29 06:53:21 +00:00
#include <QTransform>
/*!
* \class QtMaterialCheckableIcon
* \internal
*/
QtMaterialCheckableIcon::QtMaterialCheckableIcon(const QIcon &icon, QtMaterialCheckable *parent)
2022-07-05 07:49:55 +00:00
: QWidget(parent)
, m_checkable(parent)
, m_color(Qt::black)
, m_icon(icon)
, m_iconSize(24)
, m_opacity(1.0)
2017-09-29 06:53:21 +00:00
{
Q_ASSERT(parent);
setAttribute(Qt::WA_TransparentForMouseEvents);
}
2022-07-05 07:49:55 +00:00
QtMaterialCheckableIcon::~QtMaterialCheckableIcon() {}
2017-09-29 06:53:21 +00:00
QSize QtMaterialCheckableIcon::sizeHint() const
{
return QSize(m_iconSize, m_iconSize);
}
void QtMaterialCheckableIcon::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setOpacity(m_opacity);
QPixmap pixmap = icon().pixmap(24, 24);
2022-07-05 07:49:55 +00:00
if (!pixmap.isNull()) {
const qreal p = static_cast<qreal>((height()) - m_iconSize) / 2;
const qreal z = m_iconSize / 24;
2017-09-29 06:53:21 +00:00
QTransform t;
if (QtMaterialCheckable::LabelPositionLeft == m_checkable->labelPosition()) {
2022-07-05 07:49:55 +00:00
t.translate(p + width() - 42, p);
2017-09-29 06:53:21 +00:00
} 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);
}
}