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);
|
Q_D(FlatButton);
|
||||||
|
|
||||||
|
@ -187,13 +187,13 @@ void FlatButton::mousePressEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
Q_D(FlatButton);
|
Q_D(FlatButton);
|
||||||
|
|
||||||
if (FlatButton::NoRipple == d->rippleStyle) {
|
if (Material::NoRipple == d->rippleStyle) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QColor color = palette().color(QPalette::Active, QPalette::ButtonText);
|
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());
|
? rect().center() : event->pos());
|
||||||
|
|
||||||
ripple->setRadiusEndValue(100);
|
ripple->setRadiusEndValue(100);
|
||||||
|
|
|
@ -14,19 +14,13 @@ class FlatButton : public QPushButton
|
||||||
Q_PROPERTY(qreal cornerRadius WRITE setCornerRadius READ cornerRadius)
|
Q_PROPERTY(qreal cornerRadius WRITE setCornerRadius READ cornerRadius)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum RippleStyle {
|
|
||||||
CenteredRipple,
|
|
||||||
PositionedRipple,
|
|
||||||
NoRipple
|
|
||||||
};
|
|
||||||
|
|
||||||
explicit FlatButton(QWidget *parent = 0);
|
explicit FlatButton(QWidget *parent = 0);
|
||||||
explicit FlatButton(const QString &text, QWidget *parent = 0);
|
explicit FlatButton(const QString &text, QWidget *parent = 0);
|
||||||
~FlatButton();
|
~FlatButton();
|
||||||
|
|
||||||
virtual void setRole(Material::Role role);
|
virtual void setRole(Material::Role role);
|
||||||
|
|
||||||
void setRippleStyle(RippleStyle style);
|
void setRippleStyle(Material::RippleStyle style);
|
||||||
|
|
||||||
void setCornerRadius(qreal radius);
|
void setCornerRadius(qreal radius);
|
||||||
qreal cornerRadius() const;
|
qreal cornerRadius() const;
|
||||||
|
|
|
@ -18,7 +18,7 @@ public:
|
||||||
FlatButtonPrivate(FlatButton *q)
|
FlatButtonPrivate(FlatButton *q)
|
||||||
: q_ptr(q),
|
: q_ptr(q),
|
||||||
role(Material::Default),
|
role(Material::Default),
|
||||||
rippleStyle(FlatButton::PositionedRipple),
|
rippleStyle(Material::PositionedRipple),
|
||||||
cornerRadius(3)
|
cornerRadius(3)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ public:
|
||||||
RippleOverlay *ripple;
|
RippleOverlay *ripple;
|
||||||
FlatButtonDelegate *delegate;
|
FlatButtonDelegate *delegate;
|
||||||
Material::Role role;
|
Material::Role role;
|
||||||
FlatButton::RippleStyle rippleStyle;
|
Material::RippleStyle rippleStyle;
|
||||||
qreal cornerRadius;
|
qreal cornerRadius;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
#include <QPropertyAnimation>
|
#include <QPropertyAnimation>
|
||||||
#include "tabs_p.h"
|
#include "tabs_p.h"
|
||||||
#include "tabs_internal.h"
|
#include "tabs_internal.h"
|
||||||
|
#include "lib/ripple.h"
|
||||||
|
#include "lib/style.h"
|
||||||
|
|
||||||
TabsPrivate::TabsPrivate(Tabs *q)
|
TabsPrivate::TabsPrivate(Tabs *q)
|
||||||
: q_ptr(q),
|
: q_ptr(q),
|
||||||
|
@ -21,6 +23,7 @@ void TabsPrivate::init()
|
||||||
q->setLayout(tabLayout);
|
q->setLayout(tabLayout);
|
||||||
tabLayout->setSpacing(0);
|
tabLayout->setSpacing(0);
|
||||||
tabLayout->setMargin(0);
|
tabLayout->setMargin(0);
|
||||||
|
tabLayout->setContentsMargins(0, 0, 0, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
Tabs::Tabs(QWidget *parent)
|
Tabs::Tabs(QWidget *parent)
|
||||||
|
@ -40,6 +43,8 @@ void Tabs::addTab(const QString &text)
|
||||||
|
|
||||||
Tab *tab = new Tab(text);
|
Tab *tab = new Tab(text);
|
||||||
tab->setCornerRadius(0);
|
tab->setCornerRadius(0);
|
||||||
|
tab->setRippleStyle(Material::CenteredRipple);
|
||||||
|
tab->setRole(Material::Primary);
|
||||||
d->tabLayout->addWidget(tab);
|
d->tabLayout->addWidget(tab);
|
||||||
|
|
||||||
if (-1 == d->tab) {
|
if (-1 == d->tab) {
|
||||||
|
@ -50,6 +55,20 @@ void Tabs::addTab(const QString &text)
|
||||||
connect(tab, SIGNAL(clicked()), this, SLOT(switchTab()));
|
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
|
const QLayout *Tabs::tabLayout() const
|
||||||
{
|
{
|
||||||
Q_D(const Tabs);
|
Q_D(const Tabs);
|
||||||
|
@ -69,7 +88,8 @@ void Tabs::paintEvent(QPaintEvent *event)
|
||||||
Q_D(Tabs);
|
Q_D(Tabs);
|
||||||
|
|
||||||
QPainter painter(this);
|
QPainter painter(this);
|
||||||
painter.fillRect(d->delegate->inkBarGeometry(), Qt::black);
|
painter.fillRect(d->delegate->inkBarGeometry(),
|
||||||
|
Style::instance().themeColor("accent1"));
|
||||||
|
|
||||||
QWidget::paintEvent(event);
|
QWidget::paintEvent(event);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define TABS_H
|
#define TABS_H
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
#include "lib/theme.h"
|
||||||
|
|
||||||
class TabsPrivate;
|
class TabsPrivate;
|
||||||
|
|
||||||
|
@ -15,6 +16,8 @@ public:
|
||||||
|
|
||||||
void addTab(const QString &text);
|
void addTab(const QString &text);
|
||||||
|
|
||||||
|
void setRippleStyle(Material::RippleStyle style);
|
||||||
|
|
||||||
const QLayout *tabLayout() const;
|
const QLayout *tabLayout() const;
|
||||||
int currentIndex() const;
|
int currentIndex() const;
|
||||||
|
|
||||||
|
|
|
@ -43,11 +43,11 @@ void TabsDelegate::updateInkBar()
|
||||||
const QRect &r = item->geometry();
|
const QRect &r = item->geometry();
|
||||||
const qreal s = 1-_tween;
|
const qreal s = 1-_tween;
|
||||||
if (QAbstractAnimation::Running != _animation->state()) {
|
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 {
|
} else {
|
||||||
const qreal left = _previousGeometry.left()*s + r.left()*_tween;
|
const qreal left = _previousGeometry.left()*s + r.left()*_tween;
|
||||||
const qreal width = _previousGeometry.width()*s + r.width()*_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();
|
tabs->update();
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,12 @@
|
||||||
|
|
||||||
namespace Material
|
namespace Material
|
||||||
{
|
{
|
||||||
|
enum RippleStyle {
|
||||||
|
CenteredRipple,
|
||||||
|
PositionedRipple,
|
||||||
|
NoRipple
|
||||||
|
};
|
||||||
|
|
||||||
enum Role {
|
enum Role {
|
||||||
Default,
|
Default,
|
||||||
Primary,
|
Primary,
|
||||||
|
|
Loading…
Reference in New Issue