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"
|
2016-05-15 06:19:45 +00:00
|
|
|
#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-05-17 12:26:50 +00:00
|
|
|
void FlatButtonPrivate::init()
|
|
|
|
{
|
|
|
|
Q_Q(FlatButton);
|
|
|
|
|
|
|
|
ripple = new RippleOverlay(q);
|
|
|
|
delegate = new FlatButtonDelegate(q);
|
|
|
|
|
|
|
|
Style &style = Style::instance();
|
|
|
|
|
|
|
|
q->setStyle(&style);
|
|
|
|
q->setAttribute(Qt::WA_Hover);
|
|
|
|
q->setMouseTracking(true);
|
|
|
|
|
|
|
|
QFont font(q->font());
|
|
|
|
font.setCapitalization(QFont::AllUppercase);
|
|
|
|
font.setPointSizeF(10.5);
|
|
|
|
font.setStyleName("Medium");
|
|
|
|
q->setFont(font);
|
|
|
|
|
|
|
|
QPalette palette;
|
|
|
|
palette.setColor(QPalette::Disabled, QPalette::ButtonText,
|
|
|
|
style.themeColor("disabled"));
|
|
|
|
q->setPalette(palette);
|
|
|
|
}
|
|
|
|
|
|
|
|
void FlatButtonPrivate::setTextColor(const QString &themeColor)
|
|
|
|
{
|
|
|
|
Q_Q(FlatButton);
|
|
|
|
|
|
|
|
QPalette palette(q->palette());
|
|
|
|
Style &style = Style::instance();
|
|
|
|
|
|
|
|
palette.setColor(QPalette::Active, QPalette::ButtonText,
|
|
|
|
style.themeColor(themeColor));
|
|
|
|
|
|
|
|
q->setPalette(palette);
|
|
|
|
}
|
|
|
|
|
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
|
|
|
{
|
2016-05-17 12:26:50 +00:00
|
|
|
d_func()->init();
|
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
|
|
|
{
|
2016-05-17 12:26:50 +00:00
|
|
|
d_func()->init();
|
|
|
|
|
2016-03-18 11:14:06 +00:00
|
|
|
setText(text);
|
2016-03-18 14:07:20 +00:00
|
|
|
}
|
2016-03-18 20:42:22 +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");
|
2016-05-15 19:51:01 +00:00
|
|
|
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");
|
2016-05-15 19:51:01 +00:00
|
|
|
d->delegate->assignProperties();
|
2016-05-14 17:00:31 +00:00
|
|
|
break;
|
|
|
|
default:
|
2016-05-14 17:13:32 +00:00
|
|
|
d->setTextColor("text");
|
2016-05-15 19:51:01 +00:00
|
|
|
d->delegate->assignProperties();
|
2016-05-14 17:00:31 +00:00
|
|
|
break;
|
|
|
|
}
|
2016-05-14 12:18:57 +00:00
|
|
|
update();
|
|
|
|
}
|
|
|
|
|
2016-05-17 12:26:50 +00:00
|
|
|
FlatButton::FlatButton(FlatButtonPrivate &d, QWidget *parent)
|
|
|
|
: QPushButton(parent),
|
|
|
|
d_ptr(&d)
|
|
|
|
{
|
|
|
|
d_func()->init();
|
|
|
|
}
|
|
|
|
|
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)
|
|
|
|
|
2016-05-15 06:19:45 +00:00
|
|
|
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);
|
2016-05-15 18:41:19 +00:00
|
|
|
painter.setBrush(brush);
|
|
|
|
painter.setPen(Qt::NoPen);
|
|
|
|
painter.drawRoundedRect(rect(), 3, 3);
|
2016-05-14 10:41:40 +00:00
|
|
|
}
|
|
|
|
|
2016-05-15 19:51:01 +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);
|
|
|
|
|
2016-05-15 19:51:01 +00:00
|
|
|
QColor color = palette().color(QPalette::Active, QPalette::ButtonText);
|
2016-05-15 09:17:07 +00:00
|
|
|
|
2016-05-15 06:19:45 +00:00
|
|
|
Ripple *ripple = new Ripple(event->pos());
|
|
|
|
ripple->setRadiusEndValue(100);
|
2016-05-15 19:51:01 +00:00
|
|
|
ripple->setOpacityStartValue(0.4);
|
|
|
|
ripple->setColor(color);
|
2016-05-15 06:19:45 +00:00
|
|
|
|
2016-05-15 09:17:07 +00:00
|
|
|
d->ripple->addRipple(ripple);
|
2016-05-14 09:42:15 +00:00
|
|
|
|
|
|
|
QPushButton::mousePressEvent(event);
|
|
|
|
}
|
2016-05-17 12:26:50 +00:00
|
|
|
|