From 4bc4d6aa925fe00d87364ecc03a1dda08e41bbfc Mon Sep 17 00:00:00 2001 From: laserpants Date: Sat, 14 May 2016 14:06:20 +0300 Subject: [PATCH] make FlatButton pimpl --- components/flatbutton.cpp | 37 +++++++++++-------------------------- components/flatbutton.h | 8 ++++++-- components/flatbutton_p.h | 34 ++++++++++++++++++++++++++++++++++ components/slider_p.h | 14 ++++++-------- qt-material-widgets.pro | 3 ++- 5 files changed, 59 insertions(+), 37 deletions(-) create mode 100644 components/flatbutton_p.h diff --git a/components/flatbutton.cpp b/components/flatbutton.cpp index 5bad0d1..03413a4 100644 --- a/components/flatbutton.cpp +++ b/components/flatbutton.cpp @@ -7,36 +7,19 @@ #include "lib/style.h" #include "lib/rippleoverlay.h" +#include "flatbutton_p.h" + FlatButton::FlatButton(QWidget *parent) : QPushButton(parent), - _ripple(new RippleOverlay(this)) + d_ptr(new FlatButtonPrivate(this)) { - setStyle(&Style::instance()); - setAttribute(Qt::WA_Hover); - setMouseTracking(true); - - QFont f(font()); - f.setCapitalization(QFont::AllUppercase); - f.setPointSizeF(10.5); - f.setStyleName("Medium"); - setFont(f); } FlatButton::FlatButton(const QString &text, QWidget *parent) : QPushButton(parent), - _ripple(new RippleOverlay(this)) + d_ptr(new FlatButtonPrivate(this)) { setText(text); - - setStyle(&Style::instance()); - setAttribute(Qt::WA_Hover); - setMouseTracking(true); - - QFont f(font()); - f.setCapitalization(QFont::AllUppercase); - f.setPointSizeF(10.5); - f.setStyleName("Medium"); - setFont(f); } FlatButton::~FlatButton() @@ -45,8 +28,10 @@ FlatButton::~FlatButton() void FlatButton::resizeEvent(QResizeEvent *event) { - if (_ripple) { - _ripple->setGeometry(rect()); + Q_D(FlatButton); + + if (d->ripple) { + d->ripple->setGeometry(rect()); } QPushButton::resizeEvent(event); @@ -56,8 +41,6 @@ void FlatButton::paintEvent(QPaintEvent *event) { Q_UNUSED(event) - //painter.drawRect(rect().adjusted(0, 0, -1, -1)); - QStylePainter painter(this); QStyleOptionButton option; @@ -87,7 +70,9 @@ void FlatButton::paintEvent(QPaintEvent *event) void FlatButton::mousePressEvent(QMouseEvent *event) { - _ripple->addRipple(event->pos()); + Q_D(FlatButton); + + d->ripple->addRipple(event->pos()); QPushButton::mousePressEvent(event); } diff --git a/components/flatbutton.h b/components/flatbutton.h index 78346c0..b752f7f 100644 --- a/components/flatbutton.h +++ b/components/flatbutton.h @@ -2,8 +2,9 @@ #define FLATBUTTON_H #include +#include -class RippleOverlay; +class FlatButtonPrivate; class FlatButton : public QPushButton { @@ -21,8 +22,11 @@ protected: void enterEvent(QEvent *event) Q_DECL_OVERRIDE; void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; + const QScopedPointer d_ptr; + private: - RippleOverlay *const _ripple; + Q_DISABLE_COPY(FlatButton) + Q_DECLARE_PRIVATE(FlatButton) }; #endif // FLATBUTTON_H diff --git a/components/flatbutton_p.h b/components/flatbutton_p.h new file mode 100644 index 0000000..5e75222 --- /dev/null +++ b/components/flatbutton_p.h @@ -0,0 +1,34 @@ +#ifndef FLATBUTTON_P_H +#define FLATBUTTON_P_H + +#include "flatbutton.h" +#include "lib/rippleoverlay.h" + +class FlatButtonPrivate +{ + Q_DISABLE_COPY(FlatButtonPrivate) + Q_DECLARE_PUBLIC(FlatButton) + +public: + FlatButtonPrivate(FlatButton *parent); + + FlatButton *const q_ptr; + RippleOverlay *const ripple; +}; + +FlatButtonPrivate::FlatButtonPrivate(FlatButton *parent) + : q_ptr(parent), + ripple(new RippleOverlay(parent)) +{ + parent->setStyle(&Style::instance()); + parent->setAttribute(Qt::WA_Hover); + parent->setMouseTracking(true); + + QFont font(parent->font()); + font.setCapitalization(QFont::AllUppercase); + font.setPointSizeF(10.5); + font.setStyleName("Medium"); + parent->setFont(font); +} + +#endif // FLATBUTTON_P_H diff --git a/components/slider_p.h b/components/slider_p.h index efeb5f9..08ec62a 100644 --- a/components/slider_p.h +++ b/components/slider_p.h @@ -52,17 +52,15 @@ SliderPrivate::SliderPrivate(Slider *parent) oldValue(parent->value()), trackWidth(2) { - Q_Q(Slider); - - q->setMouseTracking(true); - q->setFocusPolicy(Qt::StrongFocus); - q->setPageStep(1); + parent->setMouseTracking(true); + parent->setFocusPolicy(Qt::StrongFocus); + parent->setPageStep(1); QSizePolicy sp(QSizePolicy::Expanding, QSizePolicy::Fixed); - if (q->orientation() == Qt::Vertical) + if (parent->orientation() == Qt::Vertical) sp.transpose(); - q->setSizePolicy(sp); - q->setAttribute(Qt::WA_WState_OwnSizePolicy, false); + parent->setSizePolicy(sp); + parent->setAttribute(Qt::WA_WState_OwnSizePolicy, false); machine->start(); diff --git a/qt-material-widgets.pro b/qt-material-widgets.pro index 0cca60d..1d78b7f 100644 --- a/qt-material-widgets.pro +++ b/qt-material-widgets.pro @@ -102,7 +102,8 @@ HEADERS += mainwindow.h \ components/searchfield.h \ lib/theme.h \ lib/theme_p.h \ - components/sliderinternal.h + components/sliderinternal.h \ + components/flatbutton_p.h RESOURCES += \ resources.qrc