116 lines
2.6 KiB
C++
116 lines
2.6 KiB
C++
#include "qtmaterialmenuitem.h"
|
|
#include "qtmaterialmenuitem_p.h"
|
|
#include <QPainter>
|
|
#include "qtmaterialmenuitem_internal.h"
|
|
#include "lib/qtmaterialstyle.h"
|
|
|
|
/*!
|
|
* \class QtMaterialMenuItemPrivate
|
|
* \internal
|
|
*/
|
|
|
|
/*!
|
|
* \internal
|
|
*/
|
|
QtMaterialMenuItemPrivate::QtMaterialMenuItemPrivate(QtMaterialMenuItem *q)
|
|
: QtMaterialFlatButtonPrivate(q)
|
|
{
|
|
}
|
|
|
|
/*!
|
|
* \internal
|
|
*/
|
|
QtMaterialMenuItemPrivate::~QtMaterialMenuItemPrivate()
|
|
{
|
|
}
|
|
|
|
/*!
|
|
* \internal
|
|
*/
|
|
void QtMaterialMenuItemPrivate::init()
|
|
{
|
|
Q_Q(QtMaterialMenuItem);
|
|
|
|
highlighted = false;
|
|
|
|
QFont font(q->font());
|
|
font.setCapitalization(QFont::MixedCase);
|
|
font.setPointSize(11);
|
|
font.setStyleName("Regular");
|
|
q->setFont(font);
|
|
|
|
q->setOverlayStyle(Material::GrayOverlay);
|
|
q->setForegroundColor(QtMaterialStyle::instance().themeColor("text"));
|
|
q->setCornerRadius(0);
|
|
}
|
|
|
|
/*!
|
|
* \class QtMaterialMenuItem
|
|
*/
|
|
|
|
QtMaterialMenuItem::QtMaterialMenuItem(QWidget *parent)
|
|
: QtMaterialFlatButton(*new QtMaterialMenuItemPrivate(this), parent)
|
|
{
|
|
d_func()->init();
|
|
}
|
|
|
|
QtMaterialMenuItem::~QtMaterialMenuItem()
|
|
{
|
|
}
|
|
|
|
void QtMaterialMenuItem::setHighlighted(bool value)
|
|
{
|
|
Q_D(QtMaterialMenuItem);
|
|
|
|
d->highlighted = value;
|
|
}
|
|
|
|
bool QtMaterialMenuItem::isHighlighted() const
|
|
{
|
|
Q_D(const QtMaterialMenuItem);
|
|
|
|
return d->highlighted;
|
|
}
|
|
|
|
void QtMaterialMenuItem::paintForeground(QPainter *painter)
|
|
{
|
|
if (isEnabled()) {
|
|
painter->setPen(foregroundColor());
|
|
} else {
|
|
painter->setPen(disabledForegroundColor());
|
|
}
|
|
|
|
QRect r(rect());
|
|
|
|
if (icon().isNull()) {
|
|
painter->drawText(r.marginsRemoved(QMargins(14, 0, 14, 0)),
|
|
Qt::AlignVCenter | Qt::AlignLeft,
|
|
text());
|
|
return;
|
|
}
|
|
|
|
QSize textSize(fontMetrics().size(Qt::TextSingleLine, text()));
|
|
QSize base(size()-textSize);
|
|
|
|
const int iw = iconSize().width() + IconPadding;
|
|
|
|
QRect textGeometry(QPoint(14, base.height()/2), textSize);
|
|
QRect iconGeometry(QPoint(14, (height()-iconSize().height())/2), iconSize());
|
|
|
|
if (Material::LeftIcon == iconPlacement()) {
|
|
textGeometry.translate(iw, 0);
|
|
} else {
|
|
iconGeometry.translate(textSize.width() + IconPadding, 0);
|
|
}
|
|
|
|
painter->drawText(textGeometry,
|
|
Qt::AlignVCenter | Qt::AlignLeft,
|
|
text());
|
|
|
|
QPixmap pixmap = icon().pixmap(iconSize());
|
|
QPainter icon(&pixmap);
|
|
icon.setCompositionMode(QPainter::CompositionMode_SourceIn);
|
|
icon.fillRect(pixmap.rect(), painter->pen().color());
|
|
painter->drawPixmap(iconGeometry, pixmap);
|
|
}
|