pimplify Tabs component
This commit is contained in:
parent
83ff691c6a
commit
f422cd2106
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -8,6 +8,12 @@
|
|||
|
||||
namespace Material
|
||||
{
|
||||
enum RippleStyle {
|
||||
CenteredRipple,
|
||||
PositionedRipple,
|
||||
NoRipple
|
||||
};
|
||||
|
||||
enum Role {
|
||||
Default,
|
||||
Primary,
|
||||
|
|
Loading…
Reference in New Issue