pimplify Tabs component

This commit is contained in:
laserpants 2016-05-30 11:25:02 +03:00
parent 83ff691c6a
commit f422cd2106
7 changed files with 38 additions and 15 deletions

View File

@ -68,7 +68,7 @@ FlatButton::~FlatButton()
{
}
void FlatButton::setRippleStyle(RippleStyle style)
void FlatButton::setRippleStyle(Material::RippleStyle style)
{
Q_D(FlatButton);
@ -187,13 +187,13 @@ void FlatButton::mousePressEvent(QMouseEvent *event)
{
Q_D(FlatButton);
if (FlatButton::NoRipple == d->rippleStyle) {
if (Material::NoRipple == d->rippleStyle) {
return;
}
QColor color = palette().color(QPalette::Active, QPalette::ButtonText);
Ripple *ripple = new Ripple(FlatButton::CenteredRipple == d->rippleStyle
Ripple *ripple = new Ripple(Material::CenteredRipple == d->rippleStyle
? rect().center() : event->pos());
ripple->setRadiusEndValue(100);

View File

@ -14,19 +14,13 @@ class FlatButton : public QPushButton
Q_PROPERTY(qreal cornerRadius WRITE setCornerRadius READ cornerRadius)
public:
enum RippleStyle {
CenteredRipple,
PositionedRipple,
NoRipple
};
explicit FlatButton(QWidget *parent = 0);
explicit FlatButton(const QString &text, QWidget *parent = 0);
~FlatButton();
virtual void setRole(Material::Role role);
void setRippleStyle(RippleStyle style);
void setRippleStyle(Material::RippleStyle style);
void setCornerRadius(qreal radius);
qreal cornerRadius() const;

View File

@ -18,7 +18,7 @@ public:
FlatButtonPrivate(FlatButton *q)
: q_ptr(q),
role(Material::Default),
rippleStyle(FlatButton::PositionedRipple),
rippleStyle(Material::PositionedRipple),
cornerRadius(3)
{}
@ -29,7 +29,7 @@ public:
RippleOverlay *ripple;
FlatButtonDelegate *delegate;
Material::Role role;
FlatButton::RippleStyle rippleStyle;
Material::RippleStyle rippleStyle;
qreal cornerRadius;
};

View File

@ -4,6 +4,8 @@
#include <QPropertyAnimation>
#include "tabs_p.h"
#include "tabs_internal.h"
#include "lib/ripple.h"
#include "lib/style.h"
TabsPrivate::TabsPrivate(Tabs *q)
: q_ptr(q),
@ -21,6 +23,7 @@ void TabsPrivate::init()
q->setLayout(tabLayout);
tabLayout->setSpacing(0);
tabLayout->setMargin(0);
tabLayout->setContentsMargins(0, 0, 0, 2);
}
Tabs::Tabs(QWidget *parent)
@ -40,6 +43,8 @@ void Tabs::addTab(const QString &text)
Tab *tab = new Tab(text);
tab->setCornerRadius(0);
tab->setRippleStyle(Material::CenteredRipple);
tab->setRole(Material::Primary);
d->tabLayout->addWidget(tab);
if (-1 == d->tab) {
@ -50,6 +55,20 @@ void Tabs::addTab(const QString &text)
connect(tab, SIGNAL(clicked()), this, SLOT(switchTab()));
}
void Tabs::setRippleStyle(Material::RippleStyle style)
{
Q_D(Tabs);
Tab *tab;
for (int i = 0; i < d->tabLayout->count(); ++i) {
QLayoutItem *item = d->tabLayout->itemAt(i);
if ((tab = static_cast<Tab *>(item->widget()))) {
tab->setRippleStyle(style);
}
}
}
const QLayout *Tabs::tabLayout() const
{
Q_D(const Tabs);
@ -69,7 +88,8 @@ void Tabs::paintEvent(QPaintEvent *event)
Q_D(Tabs);
QPainter painter(this);
painter.fillRect(d->delegate->inkBarGeometry(), Qt::black);
painter.fillRect(d->delegate->inkBarGeometry(),
Style::instance().themeColor("accent1"));
QWidget::paintEvent(event);
}

View File

@ -2,6 +2,7 @@
#define TABS_H
#include <QWidget>
#include "lib/theme.h"
class TabsPrivate;
@ -15,6 +16,8 @@ public:
void addTab(const QString &text);
void setRippleStyle(Material::RippleStyle style);
const QLayout *tabLayout() const;
int currentIndex() const;

View File

@ -43,11 +43,11 @@ void TabsDelegate::updateInkBar()
const QRect &r = item->geometry();
const qreal s = 1-_tween;
if (QAbstractAnimation::Running != _animation->state()) {
_inkBarGeometry = QRect(r.left(), r.bottom()-1, r.width(), 2);
_inkBarGeometry = QRect(r.left(), r.bottom()+1, r.width(), 2);
} else {
const qreal left = _previousGeometry.left()*s + r.left()*_tween;
const qreal width = _previousGeometry.width()*s + r.width()*_tween;
_inkBarGeometry = QRect(left, r.bottom()-1, width, 2);
_inkBarGeometry = QRect(left, r.bottom()+1, width, 2);
}
tabs->update();
}

View File

@ -8,6 +8,12 @@
namespace Material
{
enum RippleStyle {
CenteredRipple,
PositionedRipple,
NoRipple
};
enum Role {
Default,
Primary,