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); 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);

View File

@ -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;

View File

@ -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;
}; };

View File

@ -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);
} }

View File

@ -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;

View File

@ -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();
} }

View File

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