qt-material-widgets/components/flatbutton.cpp

118 lines
2.4 KiB
C++
Raw Normal View History

2016-03-18 11:14:06 +00:00
#include "flatbutton.h"
2016-05-14 09:10:30 +00:00
#include <QPainter>
2016-05-14 09:42:15 +00:00
#include <QMouseEvent>
2016-05-14 10:41:40 +00:00
#include <QStylePainter>
#include <QStyleOption>
2016-05-14 12:18:57 +00:00
#include <QApplication>
2016-05-14 10:41:40 +00:00
#include <QDebug>
2016-05-14 09:42:15 +00:00
#include "lib/rippleoverlay.h"
#include "lib/ripple.h"
2016-03-18 11:14:06 +00:00
2016-05-14 11:06:20 +00:00
#include "flatbutton_p.h"
2016-03-18 11:14:06 +00:00
FlatButton::FlatButton(QWidget *parent)
2016-05-14 09:42:15 +00:00
: QPushButton(parent),
2016-05-14 11:06:20 +00:00
d_ptr(new FlatButtonPrivate(this))
2016-03-18 11:14:06 +00:00
{
}
FlatButton::FlatButton(const QString &text, QWidget *parent)
2016-05-14 09:42:15 +00:00
: QPushButton(parent),
2016-05-14 11:06:20 +00:00
d_ptr(new FlatButtonPrivate(this))
2016-03-18 11:14:06 +00:00
{
setText(text);
2016-03-18 14:07:20 +00:00
}
2016-05-14 08:59:08 +00:00
FlatButton::~FlatButton()
{
}
2016-05-14 12:18:57 +00:00
void FlatButton::setRole(Material::Role role)
{
Q_D(FlatButton);
d->role = role;
2016-05-14 17:00:31 +00:00
switch (role)
{
case Material::Primary:
2016-05-14 17:13:32 +00:00
d->setTextColor("primary1");
d->delegate->assignProperties();
2016-05-14 17:00:31 +00:00
break;
case Material::Secondary:
2016-05-14 17:13:32 +00:00
d->setTextColor("accent1");
d->delegate->assignProperties();
2016-05-14 17:00:31 +00:00
break;
default:
2016-05-14 17:13:32 +00:00
d->setTextColor("text");
d->delegate->assignProperties();
2016-05-14 17:00:31 +00:00
break;
}
2016-05-14 12:18:57 +00:00
update();
}
2016-05-14 09:42:15 +00:00
void FlatButton::resizeEvent(QResizeEvent *event)
{
2016-05-14 11:06:20 +00:00
Q_D(FlatButton);
if (d->ripple) {
d->ripple->setGeometry(rect());
2016-05-14 09:42:15 +00:00
}
QPushButton::resizeEvent(event);
}
2016-05-14 09:10:30 +00:00
void FlatButton::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)
Q_D(FlatButton);
2016-05-15 09:17:07 +00:00
const qreal bgOpacity = d->delegate->backgroundOpacity();
if (isEnabled() && bgOpacity > 0)
2016-05-14 10:41:40 +00:00
{
QPainter painter(this);
QBrush brush;
brush.setStyle(Qt::SolidPattern);
2016-05-15 09:17:07 +00:00
brush.setColor(d->delegate->backgroundColor());
painter.setOpacity(bgOpacity);
painter.setBrush(brush);
painter.setPen(Qt::NoPen);
painter.drawRoundedRect(rect(), 3, 3);
2016-05-14 10:41:40 +00:00
}
QStylePainter painter(this);
QStyleOptionButton option;
initStyleOption(&option);
option.features |= QStyleOptionButton::Flat;
painter.drawControl(QStyle::CE_PushButtonLabel, option);
2016-05-14 10:41:40 +00:00
#ifdef DEBUG_LAYOUT
QPainter debug(this);
QPen pen;
pen.setColor(Qt::red);
pen.setWidth(2);
debug.setPen(pen);
debug.drawRect(rect());
#endif
2016-05-14 09:10:30 +00:00
}
2016-05-14 09:42:15 +00:00
void FlatButton::mousePressEvent(QMouseEvent *event)
{
2016-05-14 11:06:20 +00:00
Q_D(FlatButton);
QColor color = palette().color(QPalette::Active, QPalette::ButtonText);
2016-05-15 09:17:07 +00:00
Ripple *ripple = new Ripple(event->pos());
ripple->setRadiusEndValue(100);
ripple->setOpacityStartValue(0.4);
ripple->setColor(color);
2016-05-15 09:17:07 +00:00
d->ripple->addRipple(ripple);
2016-05-14 09:42:15 +00:00
QPushButton::mousePressEvent(event);
}